aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Documentation/CodingGuidelines11
-rw-r--r--Documentation/Makefile10
-rw-r--r--Documentation/RelNotes/1.8.5.4.txt48
-rw-r--r--Documentation/RelNotes/1.8.5.5.txt37
-rw-r--r--Documentation/RelNotes/1.9.0.txt (renamed from Documentation/RelNotes/1.9.txt)97
-rw-r--r--Documentation/RelNotes/1.9.1.txt59
-rw-r--r--Documentation/RelNotes/2.0.0.txt218
-rw-r--r--Documentation/config.txt81
-rw-r--r--Documentation/git-add.txt34
-rw-r--r--Documentation/git-am.txt11
-rw-r--r--Documentation/git-archive.txt5
-rw-r--r--Documentation/git-blame.txt3
-rw-r--r--Documentation/git-checkout.txt4
-rw-r--r--Documentation/git-cherry-pick.txt7
-rw-r--r--Documentation/git-clone.txt13
-rw-r--r--Documentation/git-column.txt5
-rw-r--r--Documentation/git-commit-tree.txt5
-rw-r--r--Documentation/git-commit.txt4
-rw-r--r--Documentation/git-cvsimport.txt4
-rw-r--r--Documentation/git-diff.txt2
-rw-r--r--Documentation/git-filter-branch.txt4
-rw-r--r--Documentation/git-for-each-ref.txt8
-rw-r--r--Documentation/git-http-backend.txt8
-rw-r--r--Documentation/git-notes.txt10
-rw-r--r--Documentation/git-p4.txt6
-rw-r--r--Documentation/git-pack-objects.txt2
-rw-r--r--Documentation/git-pull.txt4
-rw-r--r--Documentation/git-push.txt10
-rw-r--r--Documentation/git-rebase.txt4
-rw-r--r--Documentation/git-remote-ext.txt5
-rw-r--r--Documentation/git-remote-fd.txt4
-rw-r--r--Documentation/git-remote.txt2
-rw-r--r--Documentation/git-repack.txt17
-rw-r--r--Documentation/git-reset.txt5
-rw-r--r--Documentation/git-rev-list.txt1
-rw-r--r--Documentation/git-revert.txt6
-rw-r--r--Documentation/git-stash.txt2
-rw-r--r--Documentation/git-submodule.txt55
-rw-r--r--Documentation/git-tag.txt11
-rw-r--r--Documentation/git-upload-archive.txt32
-rw-r--r--Documentation/git.txt15
-rw-r--r--Documentation/gitattributes.txt9
-rw-r--r--Documentation/gitcli.txt2
-rw-r--r--Documentation/gitcore-tutorial.txt2
-rw-r--r--Documentation/gitcvs-migration.txt2
-rw-r--r--Documentation/githooks.txt2
-rw-r--r--Documentation/gitignore.txt5
-rw-r--r--Documentation/gitk.txt16
-rw-r--r--Documentation/gitmodules.txt4
-rw-r--r--Documentation/gitremote-helpers.txt4
-rw-r--r--Documentation/gitrepository-layout.txt4
-rw-r--r--Documentation/gitweb.conf.txt4
-rw-r--r--Documentation/gitweb.txt2
-rw-r--r--Documentation/glossary-content.txt4
-rw-r--r--Documentation/howto/maintain-git.txt18
-rw-r--r--Documentation/merge-options.txt9
-rw-r--r--Documentation/merge-strategies.txt2
-rw-r--r--Documentation/rev-list-options.txt8
-rw-r--r--Documentation/revisions.txt2
-rw-r--r--Documentation/technical/api-hash.txt52
-rw-r--r--Documentation/technical/api-hashmap.txt235
-rw-r--r--Documentation/technical/bitmap-format.txt164
-rw-r--r--Documentation/technical/http-protocol.txt229
-rw-r--r--Documentation/technical/pack-protocol.txt3
-rw-r--r--Documentation/technical/protocol-capabilities.txt18
-rw-r--r--Documentation/user-manual.txt2
-rwxr-xr-xGIT-VERSION-GEN2
-rw-r--r--Makefile55
l---------RelNotes2
-rw-r--r--advice.c2
-rw-r--r--advice.h1
-rw-r--r--archive.c17
-rw-r--r--attr.c7
-rw-r--r--bisect.c2
-rw-r--r--block-sha1/sha1.c32
-rw-r--r--branch.c22
-rw-r--r--builtin/add.c183
-rw-r--r--builtin/apply.c14
-rw-r--r--builtin/blame.c99
-rw-r--r--builtin/branch.c2
-rw-r--r--builtin/check-attr.c3
-rw-r--r--builtin/checkout.c3
-rw-r--r--builtin/clean.c47
-rw-r--r--builtin/commit-tree.c12
-rw-r--r--builtin/commit.c17
-rw-r--r--builtin/config.c104
-rw-r--r--builtin/describe.c55
-rw-r--r--builtin/fetch.c2
-rw-r--r--builtin/for-each-ref.c2
-rw-r--r--builtin/fsck.c8
-rw-r--r--builtin/gc.c28
-rw-r--r--builtin/grep.c6
-rw-r--r--builtin/index-pack.c2
-rw-r--r--builtin/init-db.c9
-rw-r--r--builtin/ls-files.c9
-rw-r--r--builtin/ls-remote.c2
-rw-r--r--builtin/ls-tree.c2
-rw-r--r--builtin/merge.c5
-rw-r--r--builtin/mktree.c5
-rw-r--r--builtin/mv.c3
-rw-r--r--builtin/name-rev.c2
-rw-r--r--builtin/notes.c6
-rw-r--r--builtin/pack-objects.c489
-rw-r--r--builtin/prune-packed.c2
-rw-r--r--builtin/prune.c4
-rw-r--r--builtin/push.c35
-rw-r--r--builtin/receive-pack.c16
-rw-r--r--builtin/reflog.c2
-rw-r--r--builtin/repack.c82
-rw-r--r--builtin/replace.c4
-rw-r--r--builtin/reset.c47
-rw-r--r--builtin/rev-list.c39
-rw-r--r--builtin/rev-parse.c17
-rw-r--r--builtin/revert.c2
-rw-r--r--builtin/rm.c4
-rw-r--r--builtin/show-branch.c2
-rw-r--r--builtin/tag.c79
-rw-r--r--builtin/unpack-objects.c4
-rw-r--r--builtin/update-index.c42
-rw-r--r--bulk-checkin.c8
-rw-r--r--bundle.c8
-rw-r--r--cache-tree.c30
-rw-r--r--cache.h173
-rw-r--r--combine-diff.c116
-rw-r--r--commit.c46
-rw-r--r--commit.h2
-rw-r--r--compat/bswap.h112
-rw-r--r--compat/fnmatch/fnmatch.c494
-rw-r--r--compat/fnmatch/fnmatch.h84
-rw-r--r--compat/mingw.c17
-rw-r--r--compat/mingw.h3
-rw-r--r--config.c81
-rw-r--r--config.mak.uname10
-rw-r--r--configure.ac28
-rw-r--r--contrib/completion/git-completion.bash27
-rwxr-xr-xcontrib/contacts/git-contacts2
-rwxr-xr-xcontrib/git-resurrect.sh1
-rwxr-xr-xcontrib/remote-helpers/git-remote-bzr31
-rwxr-xr-xcontrib/remote-helpers/test-bzr.sh22
-rwxr-xr-xcontrib/remote-helpers/test-hg.sh4
-rwxr-xr-xcontrib/subtree/git-subtree.sh22
-rw-r--r--contrib/subtree/git-subtree.txt14
-rw-r--r--daemon.c30
-rw-r--r--date.c23
-rw-r--r--diff-lib.c10
-rw-r--r--diff-no-index.c8
-rw-r--r--diff.c105
-rw-r--r--diff.h3
-rw-r--r--diffcore-order.c53
-rw-r--r--diffcore-rename.c199
-rw-r--r--diffcore.h24
-rw-r--r--dir.c103
-rw-r--r--dir.h24
-rw-r--r--environment.c4
-rw-r--r--ewah/bitmap.c221
-rw-r--r--ewah/ewah_bitmap.c714
-rw-r--r--ewah/ewah_io.c204
-rw-r--r--ewah/ewah_rlw.c115
-rw-r--r--ewah/ewok.h233
-rw-r--r--ewah/ewok_rlw.h114
-rw-r--r--fast-import.c33
-rw-r--r--fetch-pack.c16
-rw-r--r--fsck.c12
-rwxr-xr-xgit-add--interactive.perl3
-rwxr-xr-xgit-am.sh26
-rwxr-xr-xgit-bisect.sh8
-rw-r--r--git-compat-util.h27
-rwxr-xr-xgit-difftool.perl18
-rwxr-xr-xgit-instaweb.sh1
-rwxr-xr-xgit-p4.py17
-rwxr-xr-xgit-pull.sh30
-rwxr-xr-xgit-quiltimport.sh1
-rw-r--r--git-rebase--am.sh8
-rw-r--r--git-rebase--interactive.sh39
-rw-r--r--git-rebase--merge.sh2
-rwxr-xr-xgit-rebase.sh62
-rwxr-xr-xgit-remote-testgit.sh18
-rwxr-xr-xgit-request-pull.sh1
-rwxr-xr-xgit-send-email.perl3
-rw-r--r--git-sh-setup.sh2
-rwxr-xr-xgit-stash.sh10
-rwxr-xr-xgit-submodule.sh91
-rw-r--r--git.c2
-rwxr-xr-xgitweb/gitweb.perl2
-rw-r--r--gitweb/static/gitweb.css5
-rw-r--r--grep.c9
-rw-r--r--hash.c110
-rw-r--r--hash.h50
-rw-r--r--hashmap.c228
-rw-r--r--hashmap.h71
-rw-r--r--help.c7
-rw-r--r--http.c26
-rw-r--r--http.h9
-rw-r--r--khash.h338
-rw-r--r--line-log.c26
-rw-r--r--list-objects.c20
-rw-r--r--log-tree.c2
-rw-r--r--match-trees.c11
-rw-r--r--merge-recursive.c6
-rw-r--r--name-hash.c163
-rw-r--r--notes-utils.c2
-rw-r--r--object.c29
-rw-r--r--object.h7
-rw-r--r--pack-bitmap-write.c552
-rw-r--r--pack-bitmap.c1073
-rw-r--r--pack-bitmap.h64
-rw-r--r--pack-objects.c111
-rw-r--r--pack-objects.h68
-rw-r--r--pack-revindex.c43
-rw-r--r--pack-revindex.h9
-rw-r--r--pack-write.c18
-rw-r--r--pack.h2
-rw-r--r--parse-options.c5
-rw-r--r--patch-ids.c5
-rw-r--r--path.c2
-rw-r--r--pathspec.c2
-rw-r--r--po/TEAMS10
-rw-r--r--po/bg.po10404
-rw-r--r--po/da.po3503
-rw-r--r--po/de.po1810
-rw-r--r--po/fr.po1823
-rw-r--r--po/git.pot1719
-rw-r--r--po/nl.po3493
-rw-r--r--po/sv.po1774
-rw-r--r--po/vi.po2482
-rw-r--r--po/zh_CN.po1856
-rw-r--r--preload-index.c3
-rw-r--r--pretty.c17
-rw-r--r--progress.c3
-rw-r--r--read-cache.c137
-rw-r--r--reflog-walk.c16
-rw-r--r--refs.c102
-rw-r--r--remote-curl.c5
-rw-r--r--remote-testsvn.c4
-rw-r--r--remote.c119
-rw-r--r--remote.h1
-rw-r--r--replace_object.c34
-rw-r--r--rerere.c4
-rw-r--r--resolve-undo.c9
-rw-r--r--revision.c49
-rw-r--r--revision.h2
-rw-r--r--sequencer.c11
-rw-r--r--sequencer.h2
-rw-r--r--setup.c118
-rw-r--r--sh-i18n--envsubst.c12
-rw-r--r--sha1_file.c154
-rw-r--r--sha1_name.c117
-rw-r--r--shallow.c69
-rw-r--r--strbuf.c18
-rw-r--r--strbuf.h18
-rw-r--r--streaming.c6
-rw-r--r--submodule.c25
-rw-r--r--t/lib-git-daemon.sh10
-rw-r--r--t/lib-git-p4.sh23
-rw-r--r--t/lib-httpd.sh24
-rwxr-xr-xt/perf/p0001-rev-list.sh12
-rwxr-xr-xt/perf/p5310-pack-bitmaps.sh57
-rwxr-xr-xt/t0003-attributes.sh62
-rwxr-xr-xt/t0008-ignores.sh31
-rwxr-xr-xt/t0011-hashmap.sh240
-rwxr-xr-xt/t0060-path-utils.sh21
-rwxr-xr-xt/t1020-subdirectory.sh2
-rwxr-xr-xt/t1300-repo-config.sh17
-rwxr-xr-xt/t1305-config-include.sh32
-rwxr-xr-xt/t1450-fsck.sh14
-rwxr-xr-xt/t1507-rev-parse-upstream.sh37
-rwxr-xr-xt/t1508-at-combinations.sh15
-rwxr-xr-xt/t1600-index.sh76
-rwxr-xr-xt/t2104-update-index-skip-worktree.sh2
-rwxr-xr-xt/t2200-add-update.sh9
-rwxr-xr-xt/t3004-ls-files-basic.sh17
-rwxr-xr-xt/t3030-merge-recursive.sh47
-rwxr-xr-xt/t3070-wildmatch.sh13
-rwxr-xr-xt/t3200-branch.sh10
-rwxr-xr-xt/t3301-notes.sh27
-rwxr-xr-xt/t4010-diff-pathspec.sh36
-rwxr-xr-xt/t4020-diff-external.sh30
-rw-r--r--t/t4034/ada/expect2
-rwxr-xr-xt/t4035-diff-quiet.sh6
-rwxr-xr-xt/t4056-diff-order.sh21
-rwxr-xr-xt/t4057-diff-combined-paths.sh106
-rwxr-xr-xt/t4212-log-corrupt.sh45
-rwxr-xr-xt/t5000-tar-tree.sh9
-rwxr-xr-xt/t5310-pack-bitmaps.sh139
-rwxr-xr-xt/t5400-send-pack.sh1
-rwxr-xr-xt/t5510-fetch.sh11
-rwxr-xr-xt/t5516-fetch-push.sh13
-rwxr-xr-xt/t5529-push-errors.sh48
-rwxr-xr-xt/t5537-fetch-shallow.sh13
-rwxr-xr-xt/t5538-push-shallow.sh1
-rwxr-xr-xt/t5539-fetch-http-shallow.sh82
-rwxr-xr-xt/t5540-http-push-webdav.sh (renamed from t/t5540-http-push.sh)1
-rwxr-xr-xt/t5541-http-push-smart.sh (renamed from t/t5541-http-push.sh)1
-rwxr-xr-xt/t5550-http-fetch-dumb.sh (renamed from t/t5550-http-fetch.sh)1
-rwxr-xr-xt/t5551-http-fetch-smart.sh (renamed from t/t5551-http-fetch.sh)1
-rwxr-xr-xt/t5561-http-backend.sh1
-rwxr-xr-xt/t5570-git-daemon.sh1
-rwxr-xr-xt/t5801-remote-helpers.sh13
-rwxr-xr-xt/t6000-rev-list-misc.sh17
-rwxr-xr-xt/t6131-pathspec-icase.sh6
-rwxr-xr-xt/t7004-tag.sh43
-rwxr-xr-xt/t7006-pager.sh2
-rwxr-xr-xt/t7060-wtstatus.sh14
-rwxr-xr-xt/t7101-reset-empty-subdirs.sh (renamed from t/t7101-reset.sh)0
-rwxr-xr-xt/t7102-reset.sh26
-rwxr-xr-xt/t7104-reset-hard.sh (renamed from t/t7104-reset.sh)0
-rwxr-xr-xt/t7300-clean.sh16
-rwxr-xr-xt/t7406-submodule-update.sh38
-rwxr-xr-xt/t7501-commit.sh37
-rwxr-xr-xt/t7510-signed-commit.sh25
-rwxr-xr-xt/t7512-status-help.sh12
-rwxr-xr-xt/t7601-merge-pull-config.sh21
-rwxr-xr-xt/t7700-repack.sh20
-rwxr-xr-xt/t7800-difftool.sh14
-rwxr-xr-xt/t7810-grep.sh70
-rwxr-xr-xt/t9001-send-email.sh2
-rwxr-xr-xt/t9802-git-p4-filetype.sh83
-rwxr-xr-xt/t9805-git-p4-skip-submit-edit.sh6
-rwxr-xr-xt/t9807-git-p4-submit.sh2
-rwxr-xr-xt/t9809-git-p4-client-view.sh16
-rwxr-xr-xt/t9812-git-p4-wildcards.sh50
-rwxr-xr-xt/t9813-git-p4-preserve-users.sh38
-rwxr-xr-xt/t9816-git-p4-locked.sh145
-rw-r--r--t/test-lib-functions.sh63
-rw-r--r--t/test-lib.sh6
-rw-r--r--test-hashmap.c255
-rw-r--r--test-wildmatch.c79
-rw-r--r--transport-helper.c30
-rw-r--r--transport.c8
-rw-r--r--tree-diff.c27
-rw-r--r--tree-walk.c6
-rw-r--r--tree-walk.h2
-rw-r--r--unpack-trees.c5
-rw-r--r--upload-pack.c22
-rw-r--r--userdiff.c4
-rw-r--r--utf8.c6
-rw-r--r--versioncmp.c93
-rw-r--r--ws.c7
-rw-r--r--wt-status.c123
340 files changed, 27146 insertions, 15943 deletions
diff --git a/.gitignore b/.gitignore
index b5f9defed..dc600f9b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -182,6 +182,7 @@
/test-dump-cache-tree
/test-scrap-cache-tree
/test-genrandom
+/test-hashmap
/test-index-version
/test-line-buffer
/test-match-trees
diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index ef67b53f7..ed432a80c 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -126,6 +126,17 @@ For C programs:
"char * string". This makes it easier to understand code
like "char *string, c;".
+ - Use whitespace around operators and keywords, but not inside
+ parentheses and not around functions. So:
+
+ while (condition)
+ func(bar + 1);
+
+ and not:
+
+ while( condition )
+ func (bar+1);
+
- We avoid using braces unnecessarily. I.e.
if (bla) {
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 36c58fc64..fc6b2cf9e 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -2,6 +2,9 @@
MAN1_TXT =
MAN5_TXT =
MAN7_TXT =
+TECH_DOCS =
+ARTICLES =
+SP_ARTICLES =
MAN1_TXT += $(filter-out \
$(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \
@@ -37,12 +40,12 @@ MAN_HTML = $(patsubst %.txt,%.html,$(MAN_TXT))
OBSOLETE_HTML = git-remote-helpers.html
DOC_HTML = $(MAN_HTML) $(OBSOLETE_HTML)
-ARTICLES = howto-index
+ARTICLES += howto-index
ARTICLES += everyday
ARTICLES += git-tools
ARTICLES += git-bisect-lk2009
# with their own formatting rules.
-SP_ARTICLES = user-manual
+SP_ARTICLES += user-manual
SP_ARTICLES += howto/new-command
SP_ARTICLES += howto/revert-branch-rebase
SP_ARTICLES += howto/using-merge-subtree
@@ -60,7 +63,8 @@ SP_ARTICLES += howto/maintain-git
API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technical/api-index.txt, $(wildcard technical/api-*.txt)))
SP_ARTICLES += $(API_DOCS)
-TECH_DOCS = technical/index-format
+TECH_DOCS += technical/http-protocol
+TECH_DOCS += technical/index-format
TECH_DOCS += technical/pack-format
TECH_DOCS += technical/pack-heuristics
TECH_DOCS += technical/pack-protocol
diff --git a/Documentation/RelNotes/1.8.5.4.txt b/Documentation/RelNotes/1.8.5.4.txt
new file mode 100644
index 000000000..d18c40389
--- /dev/null
+++ b/Documentation/RelNotes/1.8.5.4.txt
@@ -0,0 +1,48 @@
+Git v1.8.5.4 Release Notes
+==========================
+
+Fixes since v1.8.5.3
+--------------------
+
+ * "git fetch --depth=0" was a no-op, and was silently ignored.
+ Diagnose it as an error.
+
+ * Remote repository URL expressed in scp-style host:path notation are
+ parsed more carefully (e.g. "foo/bar:baz" is local, "[::1]:/~user" asks
+ to connect to user's home directory on host at address ::1.
+
+ * SSL-related options were not passed correctly to underlying socket
+ layer in "git send-email".
+
+ * "git commit -v" appends the patch to the log message before
+ editing, and then removes the patch when the editor returned
+ control. However, the patch was not stripped correctly when the
+ first modified path was a submodule.
+
+ * "git mv A B/", when B does not exist as a directory, should error
+ out, but it didn't.
+
+ * When we figure out how many file descriptors to allocate for
+ keeping packfiles open, a system with non-working getrlimit() could
+ cause us to die(), but because we make this call only to get a
+ rough estimate of how many is available and we do not even attempt
+ to use up all file descriptors available ourselves, it is nicer to
+ fall back to a reasonable low value rather than dying.
+
+ * "git log --decorate" did not handle a tag pointed by another tag
+ nicely.
+
+ * "git add -A" (no other arguments) in a totally empty working tree
+ used to emit an error.
+
+ * There is no reason to have a hardcoded upper limit of the number of
+ parents for an octopus merge, created via the graft mechanism, but
+ there was.
+
+ * The implementation of 'git stash $cmd "stash@{...}"' did not quote
+ the stash argument properly and left it split at IFS whitespace.
+
+ * The documentation to "git pull" hinted there is an "-m" option
+ because it incorrectly shared the documentation with "git merge".
+
+Also contains typofixes, documentation updates and trivial code clean-ups.
diff --git a/Documentation/RelNotes/1.8.5.5.txt b/Documentation/RelNotes/1.8.5.5.txt
new file mode 100644
index 000000000..9191ce948
--- /dev/null
+++ b/Documentation/RelNotes/1.8.5.5.txt
@@ -0,0 +1,37 @@
+Git v1.8.5.5 Release Notes
+==========================
+
+Fixes since v1.8.5.4
+--------------------
+
+ * The pathspec matching code, while comparing two trees (e.g. "git
+ diff A B -- path1 path2") was too aggressive and failed to match
+ some paths when multiple pathspecs were involved.
+
+ * "git repack --max-pack-size=8g" stopped being parsed correctly when
+ the command was reimplemented in C.
+
+ * A recent update to "git send-email" broke platforms where
+ /etc/ssl/certs/ directory exists but cannot be used as SSL_ca_path
+ (e.g. Fedora rawhide).
+
+ * A handful of bugs around interpreting $branch@{upstream} notation
+ and its lookalike, when $branch part has interesting characters,
+ e.g. "@", and ":", have been fixed.
+
+ * "git clone" would fail to clone from a repository that has a ref
+ directly under "refs/", e.g. "refs/stash", because different
+ validation paths do different things on such a refname. Loosen the
+ client side's validation to allow such a ref.
+
+ * "git log --left-right A...B" lost the "leftness" of commits
+ reachable from A when A is a tag as a side effect of a recent
+ bugfix. This is a regression in 1.8.4.x series.
+
+ * "git merge-base --octopus" used to leave cleaning up suboptimal
+ result to the caller, but now it does the clean-up itself.
+
+ * "git mv A B/", when B does not exist as a directory, should error
+ out, but it didn't.
+
+Also contains typofixes, documentation updates and trivial code clean-ups.
diff --git a/Documentation/RelNotes/1.9.txt b/Documentation/RelNotes/1.9.0.txt
index 7bcf371c5..752d79127 100644
--- a/Documentation/RelNotes/1.9.txt
+++ b/Documentation/RelNotes/1.9.0.txt
@@ -1,5 +1,5 @@
-Git v1.9 Release Notes
-======================
+Git v1.9.0 Release Notes
+========================
Backward compatibility notes
----------------------------
@@ -7,19 +7,19 @@ Backward compatibility notes
"git submodule foreach $cmd $args" used to treat "$cmd $args" the same
way "ssh" did, concatenating them into a single string and letting the
shell unquote. Careless users who forget to sufficiently quote $args
-gets their argument split at $IFS whitespaces by the shell, and got
+get their argument split at $IFS whitespaces by the shell, and got
unexpected results due to this. Starting from this release, the
command line is passed directly to the shell, if it has an argument.
Read-only support for experimental loose-object format, in which users
-could optionally choose to write in their loose objects for a short
-while between v1.4.3 to v1.5.3 era, has been dropped.
+could optionally choose to write their loose objects for a short
+while between v1.4.3 and v1.5.3 era, has been dropped.
-The meanings of "--tags" option to "git fetch" has changed; the
-command fetches tags _in addition to_ what are fetched by the same
+The meanings of the "--tags" option to "git fetch" has changed; the
+command fetches tags _in addition to_ what is fetched by the same
command line without the option.
-The way "git push $there $what" interprets $what part given on the
+The way "git push $there $what" interprets the $what part given on the
command line, when it does not have a colon that explicitly tells us
what ref at the $there repository is to be updated, has been enhanced.
@@ -27,8 +27,8 @@ A handful of ancient commands that have long been deprecated are
finally gone (repo-config, tar-tree, lost-found, and peek-remote).
-Backward compatibility notes (for Git 2.0)
-------------------------------------------
+Backward compatibility notes (for Git 2.0.0)
+--------------------------------------------
When "git push [$there]" does not say what to push, we have used the
traditional "matching" semantics so far (all your branches were sent
@@ -87,6 +87,8 @@ Foreign interfaces, subsystems and ports.
* The build procedure is aware of MirBSD now.
+ * Various "git p4", "git svn" and "gitk" updates.
+
UI, Workflows & Features
@@ -94,7 +96,7 @@ UI, Workflows & Features
primarily because the codepaths involved were not carefully vetted
and we did not bother supporting such usage. This release attempts
to allow object transfer out of a shallowly-cloned repository in a
- more controlled way (i.e. the receiver become a shallow repository
+ more controlled way (i.e. the receiver becomes a shallow repository
with a truncated history).
* Just like we give a reasonable default for "less" via the LESS
@@ -105,12 +107,12 @@ UI, Workflows & Features
hierarchies, whose variables are predominantly three-level, were
not completed by hitting a <TAB> in bash and zsh completions.
- * Fetching 'frotz' branch with "git fetch", while 'frotz/nitfol'
+ * Fetching a 'frotz' branch with "git fetch", while a 'frotz/nitfol'
remote-tracking branch from an earlier fetch was still there, would
error out, primarily because the command was not told that it is
allowed to lose any information on our side. "git fetch --prune"
- now can be used to remove 'frotz/nitfol' to make room to fetch and
- store 'frotz' remote-tracking branch.
+ now can be used to remove 'frotz/nitfol' to make room for fetching and
+ storing the 'frotz' remote-tracking branch.
* "diff.orderfile=<file>" configuration variable can be used to
pretend as if the "-O<file>" option were given from the command
@@ -215,6 +217,43 @@ Unless otherwise noted, all the fixes since v1.8.5 in the maintenance
track are contained in this release (see the maintenance releases' notes
for details).
+ * The pathspec matching code, while comparing two trees (e.g. "git
+ diff A B -- path1 path2") was too aggressive and failed to match
+ some paths when multiple pathspecs were involved.
+
+ * "git repack --max-pack-size=8g" stopped being parsed correctly when
+ the command was reimplemented in C.
+
+ * An earlier update in v1.8.4.x to "git rev-list --objects" with
+ negative ref had a performance regression.
+ (merge 200abe7 jk/mark-edges-uninteresting later to maint).
+
+ * A recent update to "git send-email" broke platforms where
+ /etc/ssl/certs/ directory exists but cannot be used as SSL_ca_path
+ (e.g. Fedora rawhide).
+
+ * A handful of bugs around interpreting $branch@{upstream} notation
+ and its lookalike, when $branch part has interesting characters,
+ e.g. "@", and ":", have been fixed.
+
+ * "git clone" would fail to clone from a repository that has a ref
+ directly under "refs/", e.g. "refs/stash", because different
+ validation paths do different things on such a refname. Loosen the
+ client side's validation to allow such a ref.
+
+ * "git log --left-right A...B" lost the "leftness" of commits
+ reachable from A when A is a tag as a side effect of a recent
+ bugfix. This is a regression in 1.8.4.x series.
+
+ * documentations to "git pull" hinted there is an "-m" option because
+ it incorrectly shared the documentation with "git merge".
+
+ * "git diff A B submod" and "git diff A B submod/" ought to have done
+ the same for a submodule "submod", but didn't.
+
+ * "git clone $origin foo\bar\baz" on Windows failed to create the
+ leading directories (i.e. a moral-equivalent of "mkdir -p").
+
* "submodule.*.update=checkout", when propagated from .gitmodules to
.git/config, turned into a "submodule.*.update=none", which did not
make much sense.
@@ -222,17 +261,14 @@ for details).
* The implementation of 'git stash $cmd "stash@{...}"' did not quote
the stash argument properly and left it split at IFS whitespace.
- (merge 2a07e43 ow/stash-with-ifs later to maint).
* The "--[no-]informative-errors" options to "git daemon" were parsed
a bit too loosely, allowing any other string after these option
names.
- (merge 82246b7 nd/daemon-informative-errors-typofix later to maint).
- * There is no reason to have a hardcoded upper limit of the number of
- parents for an octopus merge, created via the graft mechanism, but
+ * There is no reason to have a hardcoded upper limit for the number of
+ parents of an octopus merge, created via the graft mechanism, but
there was.
- (merge e228c17 js/lift-parent-count-limit later to maint).
* The basic test used to leave unnecessary trash directories in the
t/ directory.
@@ -240,30 +276,24 @@ for details).
* "git merge-base --octopus" used to leave cleaning up suboptimal
result to the caller, but now it does the clean-up itself.
- (merge 8f29299 bm/merge-base-octopus-dedup later to maint).
* A "gc" process running as a different user should be able to stop a
new "gc" process from starting, but it didn't.
- (merge ed7eda8 km/gc-eperm later to maint).
* An earlier "clean-up" introduced an unnecessary memory leak.
- (merge e1c1a32 jk/credential-plug-leak later to maint).
* "git add -A" (no other arguments) in a totally empty working tree
used to emit an error.
- (merge 64ed07c nd/add-empty-fix later to maint).
* "git log --decorate" did not handle a tag pointed by another tag
nicely.
- (merge 5e1361c bc/log-decoration later to maint).
* When we figure out how many file descriptors to allocate for
keeping packfiles open, a system with non-working getrlimit() could
cause us to die(), but because we make this call only to get a
- rough estimate of how many is available and we do not even attempt
- to use up all file descriptors available ourselves, it is nicer to
+ rough estimate of how many are available and we do not even attempt
+ to use up all available file descriptors ourselves, it is nicer to
fall back to a reasonable low value rather than dying.
- (merge 491a8de jh/rlimit-nofile-fallback later to maint).
* read_sha1_file(), that is the workhorse to read the contents given
an object name, honoured object replacements, but there was no
@@ -274,16 +304,13 @@ for details).
* "git cat-file --batch=", an admittedly useless command, did not
behave very well.
- (merge 6554dfa jk/cat-file-regression-fix later to maint).
* "git rev-parse <revs> -- <paths>" did not implement the usual
disambiguation rules the commands in the "git log" family used in
the same way.
- (merge 62f162f jk/rev-parse-double-dashes later to maint).
* "git mv A B/", when B does not exist as a directory, should error
out, but it didn't.
- (merge c57f628 mm/mv-file-to-no-such-dir-with-slash later to maint).
* A workaround to an old bug in glibc prior to glibc 2.17 has been
retired; this would remove a side effect of the workaround that
@@ -291,36 +318,28 @@ for details).
* SSL-related options were not passed correctly to underlying socket
layer in "git send-email".
- (merge 5508f3e tr/send-email-ssl later to maint).
* "git commit -v" appends the patch to the log message before
editing, and then removes the patch when the editor returned
control. However, the patch was not stripped correctly when the
first modified path was a submodule.
- (merge 1a72cfd jl/commit-v-strip-marker later to maint).
* "git fetch --depth=0" was a no-op, and was silently ignored.
Diagnose it as an error.
- (merge 5594bca nd/transport-positive-depth-only later to maint).
- * Remote repository URL expressed in scp-style host:path notation are
+ * Remote repository URLs expressed in scp-style host:path notation are
parsed more carefully (e.g. "foo/bar:baz" is local, "[::1]:/~user" asks
to connect to user's home directory on host at address ::1.
- (merge a2036d7 tb/clone-ssh-with-colon-for-port later to maint).
* "git diff -- ':(icase)makefile'" was unnecessarily rejected at the
command line parser.
- (merge 887c6c1 nd/magic-pathspec later to maint).
* "git cat-file --batch-check=ok" did not check the existence of
the named object.
- (merge 4ef8d1d sb/sha1-loose-object-info-check-existence later to maint).
* "git am --abort" sometimes complained about not being able to write
a tree with an 0{40} object in it.
- (merge 77b43ca jk/two-way-merge-corner-case-fix later to maint).
* Two processes creating loose objects at the same time could have
failed unnecessarily when the name of their new objects started
with the same byte value, due to a race condition.
- (merge b2476a6 jh/loose-object-dirs-creation-race later to maint).
diff --git a/Documentation/RelNotes/1.9.1.txt b/Documentation/RelNotes/1.9.1.txt
new file mode 100644
index 000000000..5b0602053
--- /dev/null
+++ b/Documentation/RelNotes/1.9.1.txt
@@ -0,0 +1,59 @@
+Git v1.9.1 Release Notes
+========================
+
+Fixes since v1.9.0
+------------------
+
+ * "git clean -d pathspec" did not use the given pathspec correctly
+ and ended up cleaning too much.
+
+ * "git difftool" misbehaved when the repository is bound to the
+ working tree with the ".git file" mechanism, where a textual file
+ ".git" tells us where it is.
+
+ * "git push" did not pay attention to branch.*.pushremote if it is
+ defined earlier than remote.pushdefault; the order of these two
+ variables in the configuration file should not matter, but it did
+ by mistake.
+
+ * Codepaths that parse timestamps in commit objects have been
+ tightened.
+
+ * "git diff --external-diff" incorrectly fed the submodule directory
+ in the working tree to the external diff driver when it knew it is
+ the same as one of the versions being compared.
+
+ * "git reset" needs to refresh the index when working in a working
+ tree (it can also be used to match the index to the HEAD in an
+ otherwise bare repository), but it failed to set up the working
+ tree properly, causing GIT_WORK_TREE to be ignored.
+
+ * "git check-attr" when working on a repository with a working tree
+ did not work well when the working tree was specified via the
+ --work-tree (and obviously with --git-dir) option.
+
+ * "merge-recursive" was broken in 1.7.7 era and stopped working in
+ an empty (temporary) working tree, when there are renames
+ involved. This has been corrected.
+
+ * "git rev-parse" was loose in rejecting command line arguments
+ that do not make sense, e.g. "--default" without the required
+ value for that option.
+
+ * include.path variable (or any variable that expects a path that
+ can use ~username expansion) in the configuration file is not a
+ boolean, but the code failed to check it.
+
+ * "git diff --quiet -- pathspec1 pathspec2" sometimes did not return
+ correct status value.
+
+ * Attempting to deepen a shallow repository by fetching over smart
+ HTTP transport failed in the protocol exchange, when no-done
+ extension was used. The fetching side waited for the list of
+ shallow boundary commits after the sending end stopped talking to
+ it.
+
+ * Allow "git cmd path/", when the 'path' is where a submodule is
+ bound to the top-level working tree, to match 'path', despite the
+ extra and unnecessary trailing slash (such a slash is often
+ given by command line completion).
diff --git a/Documentation/RelNotes/2.0.0.txt b/Documentation/RelNotes/2.0.0.txt
new file mode 100644
index 000000000..b0bf974af
--- /dev/null
+++ b/Documentation/RelNotes/2.0.0.txt
@@ -0,0 +1,218 @@
+Git v2.0 Release Notes
+======================
+
+Backward compatibility notes
+----------------------------
+
+When "git push [$there]" does not say what to push, we have used the
+traditional "matching" semantics so far (all your branches were sent
+to the remote as long as there already are branches of the same name
+over there). In Git 2.0, the default is now the "simple" semantics,
+which pushes:
+
+ - only the current branch to the branch with the same name, and only
+ when the current branch is set to integrate with that remote
+ branch, if you are pushing to the same remote as you fetch from; or
+
+ - only the current branch to the branch with the same name, if you
+ are pushing to a remote that is not where you usually fetch from.
+
+You can use the configuration variable "push.default" to change
+this. If you are an old-timer who wants to keep using the
+"matching" semantics, you can set the variable to "matching", for
+example. Read the documentation for other possibilities.
+
+When "git add -u" and "git add -A" are run inside a subdirectory
+without specifying which paths to add on the command line, they
+operate on the entire tree for consistency with "git commit -a" and
+other commands (these commands used to operate only on the current
+subdirectory). Say "git add -u ." or "git add -A ." if you want to
+limit the operation to the current directory.
+
+"git add <path>" is the same as "git add -A <path>" now, so that
+"git add dir/" will notice paths you removed from the directory and
+record the removal. In older versions of Git, "git add <path>" used
+to ignore removals. You can say "git add --ignore-removal <path>" to
+add only added or modified paths in <path>, if you really want to.
+
+The "-q" option to "git diff-files", which does *NOT* mean "quiet",
+has been removed (it told Git to ignore deletion, which you can do
+with "git diff-files --diff-filter=d").
+
+
+Updates since v1.9 series
+-------------------------
+
+Foreign interfaces, subsystems and ports.
+
+
+UI, Workflows & Features
+
+ * "git grep" learned to behave in a way similar to native grep when
+ "-h" (no header) and "-c" (count) options are given.
+
+ * transport-helper, fast-import and fast-export have been updated to
+ allow the ref mapping and ref deletion in a way similar to the
+ natively supported transports.
+
+ * The "simple" mode is the default for "git push".
+
+ * "git add -u" and "git add -A", when run without any pathspec, is a
+ tree-wide operation even when run inside a subdirectory of a
+ working tree.
+
+ * "git add <path> is the same as "git add -A <path>" now.
+
+ * "core.statinfo" configuration variable, which is a
+ never-advertised synonym to "core.checkstat", has been removed.
+
+ * The "-q" option to "git diff-files", which does *NOT* mean
+ "quiet", has been removed (it told Git to ignore deletion, which
+ you can do with "git diff-files --diff-filter=d").
+
+ * Server operators can loosen the "tips of refs only" restriction for
+ the remote archive service with the uploadarchive.allowUnreachable
+ configuration option.
+
+ * The progress indicators from various time-consuming commands have
+ been marked for i18n/l10n.
+
+ * "git notes -C <blob>" diagnoses an attempt to use an object that
+ is not a blob as an error.
+
+ * "git config" learned to read from the standard input when "-" is
+ given as the value to its "--file" parameter (attempting an
+ operation to update the configuration in the standard input of
+ course is rejected).
+
+ * Trailing whitespaces in .gitignore files, unless they are quoted
+ for fnmatch(3), e.g. "path\ ", are warned and ignored. Strictly
+ speaking, this is a backward incompatible change, but very unlikely
+ to bite any sane user and adjusting should be obvious and easy.
+
+ * Many commands that create commits, e.g. "pull", "rebase",
+ learned to take the --gpg-sign option on the command line.
+
+ * "git commit" can be told to always GPG sign the resulting commit
+ by setting "commit.gpgsign" configuration variable to true (the
+ command line option --no-gpg-sign should override it).
+
+ * "git pull" can be told to only accept fast-forward by setting the
+ new "pull.ff" configuration.
+
+ * "git reset" learned "-N" option, which does not reset the index
+ fully for paths the index knows about but the tree-ish the command
+ resets to does not (these paths are kept as intend-to-add entries).
+
+ * Newly cloned submodule repositories by "git submodule update",
+ when the "checkout" update mode is used, will be on a local
+ branch instead of on a detached HEAD, just like submodules added
+ with "git submodule add".
+
+
+Performance, Internal Implementation, etc.
+
+ * We started using wildmatch() in place of fnmatch(3) a few releases
+ ago; complete the process and stop using fnmatch(3).
+
+ * Uses of curl's "multi" interface and "easy" interface do not mix
+ well when we attempt to reuse outgoing connections. Teach the RPC
+ over http code, used in the smart HTTP transport, not to use the
+ "easy" interface.
+
+ * The bitmap-index feature from JGit has been ported, which should
+ significantly improve performance when serving objects form a
+ repository that uses it.
+
+ * The way "git log --cc" shows a combined diff against multiple
+ parents have been optimized.
+
+ * The prefixcmp() and suffixcmp() functions are gone. Use
+ starts_with() and ends_with(), and also consider if skip_prefix()
+ suits your needs better when using the former.
+
+
+Also contains various documentation updates and code clean-ups. Many
+of them came from flurry of activities as GSoC candidate microproject
+exercises.
+
+
+Fixes since v1.9 series
+-----------------------
+
+Unless otherwise noted, all the fixes since v1.9 in the maintenance
+track are contained in this release (see the maintenance releases'
+notes for details).
+
+ * "git clean -d pathspec" did not use the given pathspec correctly
+ and ended up cleaning too much.
+ (merge 1f2e108 jk/clean-d-pathspec later to maint).
+
+ * "git difftool" misbehaved when the repository is bound to the
+ working tree with the ".git file" mechanism, where a textual file
+ ".git" tells us where it is.
+ (merge fcfec8b da/difftool-git-files later to maint).
+
+ * "git push" did not pay attention to branch.*.pushremote if it is
+ defined earlier than remote.pushdefault; the order of these two
+ variables in the configuration file should not matter, but it did
+ by mistake.
+ (merge 98b406f jk/remote-pushremote-config-reading later to maint).
+
+ * Codepaths that parse timestamps in commit objects have been
+ tightened.
+ (merge 3f419d4 jk/commit-dates-parsing-fix later to maint).
+
+ * "git diff --external-diff" incorrectly fed the submodule directory
+ in the working tree to the external diff driver when it knew it is
+ the same as one of the versions being compared.
+ (merge aba4727 tr/diff-submodule-no-reuse-worktree later to maint).
+
+ * "git reset" needs to refresh the index when working in a working
+ tree (it can also be used to match the index to the HEAD in an
+ otherwise bare repository), but it failed to set up the working
+ tree properly, causing GIT_WORK_TREE to be ignored.
+ (merge b7756d4 nd/reset-setup-worktree later to maint).
+
+ * "git check-attr" when working on a repository with a working tree
+ did not work well when the working tree was specified via the
+ --work-tree (and obviously with --git-dir) option.
+ (merge cdbf623 jc/check-attr-honor-working-tree later to maint).
+
+ * "merge-recursive" was broken in 1.7.7 era and stopped working in
+ an empty (temporary) working tree, when there are renames
+ involved. This has been corrected.
+ (merge 6e2068a bk/refresh-missing-ok-in-merge-recursive later to maint.)
+
+ * "git rev-parse" was loose in rejecting command line arguments
+ that do not make sense, e.g. "--default" without the required
+ value for that option.
+ (merge a43219f ds/rev-parse-required-args later to maint.)
+
+ * include.path variable (or any variable that expects a path that
+ can use ~username expansion) in the configuration file is not a
+ boolean, but the code failed to check it.
+ (merge 67beb60 jk/config-path-include-fix later to maint.)
+
+ * Commands that take pathspecs on the command line misbehaved when
+ the pathspec is given as an absolute pathname (which is a
+ practice not particularly encouraged) that points at a symbolic
+ link in the working tree.
+ (merge later 655ee9e mw/symlinks to maint.)
+
+ * "git diff --quiet -- pathspec1 pathspec2" sometimes did not return
+ correct status value.
+ (merge f34b205 nd/diff-quiet-stat-dirty later to maint.)
+
+ * Attempting to deepen a shallow repository by fetching over smart
+ HTTP transport failed in the protocol exchange, when no-done
+ extension was used. The fetching side waited for the list of
+ shallow boundary commits after the sending end stopped talking to
+ it.
+ (merge 0232852 nd/http-fetch-shallow-fix later to maint.)
+
+ * Allow "git cmd path/", when the 'path' is where a submodule is
+ bound to the top-level working tree, to match 'path', despite the
+ extra and unnecessary trailing slash (such a slash is often
+ given by command line completion).
+ (merge 2e70c01 nd/submodule-pathspec-ending-with-slash later to maint.)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 5f4d7939e..73c8973aa 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -142,19 +142,13 @@ advice.*::
--
pushUpdateRejected::
Set this variable to 'false' if you want to disable
- 'pushNonFFCurrent', 'pushNonFFDefault',
+ 'pushNonFFCurrent',
'pushNonFFMatching', 'pushAlreadyExists',
'pushFetchFirst', and 'pushNeedsForce'
simultaneously.
pushNonFFCurrent::
Advice shown when linkgit:git-push[1] fails due to a
non-fast-forward update to the current branch.
- pushNonFFDefault::
- Advice to set 'push.default' to 'upstream' or 'current'
- when you ran linkgit:git-push[1] and pushed 'matching
- refs' by default (i.e. you did not provide an explicit
- refspec, and no 'push.default' configuration was set)
- and it resulted in a non-fast-forward error.
pushNonFFMatching::
Advice shown when you ran linkgit:git-push[1] and pushed
'matching refs' explicitly (i.e. you used ':', or
@@ -992,6 +986,14 @@ commit.cleanup::
have to remove the help lines that begin with `#` in the commit log
template yourself, if you do this).
+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::
A boolean to enable/disable inclusion of status information in the
commit message template when using an editor to prepare the commit
@@ -1167,6 +1169,10 @@ gc.autopacklimit::
--auto` consolidates them into one larger pack. The
default value is 50. Setting this to 0 disables it.
+gc.autodetach::
+ Make `git gc --auto` return immediately andrun in background
+ if the system supports it. Default is true.
+
gc.packrefs::
Running `git pack-refs` in a repository renders it
unclonable by Git versions prior to 1.5.1.2 over dumb
@@ -1601,6 +1607,10 @@ imap::
The configuration variables in the 'imap' section are described
in linkgit:git-imap-send[1].
+index.version::
+ Specify the version with which new index files should be
+ initialized. This does not affect existing repositories.
+
init.templatedir::
Specify the directory from which templates will be copied.
(See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
@@ -1633,7 +1643,7 @@ interactive.singlekey::
linkgit:git-add[1], linkgit:git-checkout[1], linkgit:git-commit[1],
linkgit:git-reset[1], and linkgit:git-stash[1]. Note that this
setting is silently ignored if portable keystroke input
- is not available.
+ is not available; requires the Perl module Term::ReadKey.
log.abbrevCommit::
If true, makes linkgit:git-log[1], linkgit:git-show[1], and
@@ -1862,6 +1872,31 @@ pack.packSizeLimit::
Common unit suffixes of 'k', 'm', or 'g' are
supported.
+pack.useBitmaps::
+ When true, git will use pack bitmaps (if available) when packing
+ to stdout (e.g., during the server side of a fetch). Defaults to
+ true. You should not generally need to turn this off unless
+ you are debugging pack bitmaps.
+
+pack.writebitmaps::
+ When true, git will write a bitmap index when packing all
+ objects to disk (e.g., when `git repack -a` is run). This
+ index can speed up the "counting objects" phase of subsequent
+ packs created for clones and fetches, at the cost of some disk
+ space and extra time spent on the initial repack. Defaults to
+ false.
+
+pack.writeBitmapHashCache::
+ When true, git will include a "hash cache" section in the bitmap
+ index (if one is written). This cache can be used to feed git's
+ delta heuristics, potentially leading to better deltas between
+ bitmapped and non-bitmapped objects (e.g., when serving a fetch
+ between an older, bitmapped pack and objects that have been
+ pushed since the last gc). The downside is that it consumes 4
+ bytes per object of disk space, and that JGit's bitmap
+ implementation does not understand it, causing it to complain if
+ Git and JGit are used on the same repository. Defaults to false.
+
pager.<cmd>::
If the value is boolean, turns on or off pagination of the
output of a particular Git subcommand when writing to a tty.
@@ -1881,6 +1916,16 @@ pretty.<name>::
Note that an alias with the same name as a built-in format
will be silently ignored.
+pull.ff::
+ By default, Git does not create an extra merge commit when merging
+ a commit that is a descendant of the current commit. Instead, the
+ tip of the current branch is fast-forwarded. When set to `false`,
+ this variable tells Git to create an extra merge commit in such
+ a case (equivalent to giving the `--no-ff` option from the command
+ line). When set to `only`, only such fast-forward merges are
+ allowed (equivalent to giving the `--ff-only` option from the
+ command line).
+
pull.rebase::
When true, rebase branches on top of the fetched branch, instead
of merging the default branch from the default remote when "git
@@ -1933,7 +1978,7 @@ When pushing to a remote that is different from the remote you normally
pull from, work as `current`. This is the safest option and is suited
for beginners.
+
-This mode will become the default in Git 2.0.
+This mode has become the default in Git 2.0.
* `matching` - push all branches having the same name on both ends.
This makes the repository you are pushing to remember the set of
@@ -1952,8 +1997,8 @@ suitable for pushing into a shared central repository, as other
people may add new branches there, or update the tip of existing
branches outside your control.
+
-This is currently the default, but Git 2.0 will change the default
-to `simple`.
+This used to be the default, but not since Git 2.0 (`simple` is the
+new default).
--
@@ -2111,6 +2156,13 @@ repack.usedeltabaseoffset::
"false" and repack. Access from old Git versions over the
native protocol are unaffected by this option.
+repack.packKeptObjects::
+ If set to true, makes `git repack` act as if
+ `--pack-kept-objects` was passed. See linkgit:git-repack[1] for
+ details. Defaults to `false` normally, but `true` if a bitmap
+ index is being written (either via `--write-bitmap-index` or
+ `pack.writeBitmaps`).
+
rerere.autoupdate::
When set to true, `git-rerere` updates the index with the
resulting contents after it cleanly resolves conflicts using
@@ -2291,6 +2343,13 @@ transfer.unpackLimit::
not set, the value of this variable is used instead.
The default value is 100.
+uploadarchive.allowUnreachable::
+ If true, allow clients to use `git archive --remote` to request
+ any tree, whether reachable from the ref tips or not. See the
+ discussion in the `SECURITY` section of
+ linkgit:git-upload-archive[1] for more details. Defaults to
+ `false`.
+
uploadpack.hiderefs::
String(s) `upload-pack` uses to decide which refs to omit
from its initial advertisement. Use more than one
diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 48754cbc6..895922e27 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -53,8 +53,14 @@ OPTIONS
Files to add content from. Fileglobs (e.g. `*.c`) can
be given to add all matching files. Also a
leading directory name (e.g. `dir` to add `dir/file1`
- and `dir/file2`) can be given to add all files in the
- directory, recursively.
+ and `dir/file2`) can be given to update the index to
+ match the current state of the directory as a whole (e.g.
+ specifying `dir` will record not just a file `dir/file1`
+ modified in the working tree, a file `dir/file2` added to
+ the working tree, but also a file `dir/file3` removed from
+ the working tree. Note that older versions of Git used
+ to ignore removed files; use `--no-all` option if you want
+ to add modified or new files but ignore removed ones.
-n::
--dry-run::
@@ -104,10 +110,10 @@ apply to the index. See EDITING PATCHES below.
<pathspec>. This removes as well as modifies index entries to
match the working tree, but adds no new files.
+
-If no <pathspec> is given, the current version of Git defaults to
-"."; in other words, update all tracked files in the current directory
-and its subdirectories. This default will change in a future version
-of Git, hence the form without <pathspec> should not be used.
+If no <pathspec> is given when `-u` option is used, all
+tracked files in the entire working tree are updated (old versions
+of Git used to limit the update to the current directory and its
+subdirectories).
-A::
--all::
@@ -117,10 +123,10 @@ of Git, hence the form without <pathspec> should not be used.
entry. This adds, modifies, and removes index entries to
match the working tree.
+
-If no <pathspec> is given, the current version of Git defaults to
-"."; in other words, update all files in the current directory
-and its subdirectories. This default will change in a future version
-of Git, hence the form without <pathspec> should not be used.
+If no <pathspec> is given when `-A` option is used, all
+files in the entire working tree are updated (old versions
+of Git used to limit the update to the current directory and its
+subdirectories).
--no-all::
--ignore-removal::
@@ -129,11 +135,9 @@ of Git, hence the form without <pathspec> should not be used.
files that have been removed from the working tree. This
option is a no-op when no <pathspec> is used.
+
-This option is primarily to help the current users of Git, whose
-"git add <pathspec>..." ignores removed files. In future versions
-of Git, "git add <pathspec>..." will be a synonym to "git add -A
-<pathspec>..." and "git add --ignore-removal <pathspec>..." will behave like
-today's "git add <pathspec>...", ignoring removed files.
+This option is primarily to help users who are used to older
+versions of Git, whose "git add <pathspec>..." was a synonym
+for "git add --no-all <pathspec>...", i.e. ignored removed files.
-N::
--intent-to-add::
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 54d8461d6..a2b97582f 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -14,7 +14,7 @@ SYNOPSIS
[--ignore-date] [--ignore-space-change | --ignore-whitespace]
[--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>]
[--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
- [--[no-]scissors]
+ [--[no-]scissors] [-S[<keyid>]]
[(<mbox> | <Maildir>)...]
'git am' (--continue | --skip | --abort)
@@ -119,6 +119,10 @@ default. You can use `--no-utf8` to override this.
Skip the current patch. This is only meaningful when
restarting an aborted patch.
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+ GPG-sign commits.
+
--continue::
-r::
--resolved::
@@ -189,6 +193,11 @@ commits, like running 'git am' on the wrong branch or an error in the
commits that is more easily fixed by changing the mailbox (e.g.
errors in the "From:" lines).
+HOOKS
+-----
+This command can run `applypatch-msg`, `pre-applypatch`,
+and `post-applypatch` hooks. See linkgit:githooks[5] for more
+information.
SEE ALSO
--------
diff --git a/Documentation/git-archive.txt b/Documentation/git-archive.txt
index b97aaab4e..cfa1e4ebe 100644
--- a/Documentation/git-archive.txt
+++ b/Documentation/git-archive.txt
@@ -65,7 +65,10 @@ OPTIONS
--remote=<repo>::
Instead of making a tar archive from the local repository,
- retrieve a tar archive from a remote repository.
+ retrieve a tar archive from a remote repository. Note that the
+ remote repository may place restrictions on which sha1
+ expressions may be allowed in `<tree-ish>`. See
+ linkgit:git-upload-archive[1] for details.
--exec=<git-upload-archive>::
Used with --remote to specify the path to the
diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt
index 8e70a6184..9f23a861c 100644
--- a/Documentation/git-blame.txt
+++ b/Documentation/git-blame.txt
@@ -35,7 +35,8 @@ Apart from supporting file annotation, Git also supports searching the
development history for when a code snippet occurred in a change. This makes it
possible to track when a code snippet was added to a file, moved or copied
between files, and eventually deleted or replaced. It works by searching for
-a text string in the diff. A small example:
+a text string in the diff. A small example of the pickaxe interface
+that searches for `blame_usage`:
-----------------------------------------------------------------------------
$ git log --pretty=oneline -S'blame_usage'
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index 91294f89c..33ad2adf5 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -232,8 +232,8 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
commit, your HEAD becomes "detached" and you are no longer on
any branch (see below for details).
+
-As a special case, the `"@{-N}"` syntax for the N-th last branch
-checks out the branch (instead of detaching). You may also specify
+As a special case, the `"@{-N}"` syntax for the N-th last branch/commit
+checks out branches (instead of detaching). You may also specify
`-` which is synonymous with `"@{-1}"`.
+
As a further special case, you may use `"A...B"` as a shortcut for the
diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.txt
index c205d2363..f1e6b2fd6 100644
--- a/Documentation/git-cherry-pick.txt
+++ b/Documentation/git-cherry-pick.txt
@@ -8,7 +8,8 @@ git-cherry-pick - Apply the changes introduced by some existing commits
SYNOPSIS
--------
[verse]
-'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] <commit>...
+'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
+ [-S[<keyid>]] <commit>...
'git cherry-pick' --continue
'git cherry-pick' --quit
'git cherry-pick' --abort
@@ -100,6 +101,10 @@ effect to your index in a row.
--signoff::
Add Signed-off-by line at the end of the commit message.
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+ GPG-sign commits.
+
--ff::
If the current HEAD is the same as the parent of the
cherry-pick'ed commit, then a fast forward to this commit will
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 49878570b..0363d0039 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -55,15 +55,12 @@ repository is specified as a URL, then this flag is ignored (and we
never use the local optimizations). Specifying `--no-local` will
override the default when `/path/to/repo` is given, using the regular
Git transport instead.
-+
-To force copying instead of hardlinking (which may be desirable if you
-are trying to make a back-up of your repository), but still avoid the
-usual "Git aware" transport mechanism, `--no-hardlinks` can be used.
--no-hardlinks::
- Optimize the cloning process from a repository on a
- local filesystem by copying files under `.git/objects`
- directory.
+ Force the cloning process from a repository on a local
+ filesystem to copy the files under the `.git/objects`
+ directory instead of using hardlinks. This may be desirable
+ if you are trying to make a back-up of your repository.
--shared::
-s::
@@ -208,7 +205,7 @@ objects from the source repository into a pack in the cloned repository.
--separate-git-dir=<git dir>::
Instead of placing the cloned repository where it is supposed
to be, place the cloned repository at the specified directory,
- then make a filesytem-agnostic Git symbolic link to there.
+ then make a filesystem-agnostic Git symbolic link to there.
The result is Git repository can be separated from working
tree.
diff --git a/Documentation/git-column.txt b/Documentation/git-column.txt
index 5d6f1cc46..03d18465d 100644
--- a/Documentation/git-column.txt
+++ b/Documentation/git-column.txt
@@ -43,11 +43,6 @@ OPTIONS
--padding=<N>::
The number of spaces between columns. One space by default.
-
-Author
-------
-Written by Nguyen Thai Ngoc Duy <pclouds@gmail.com>
-
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.txt
index cafdc9642..a469eab06 100644
--- a/Documentation/git-commit-tree.txt
+++ b/Documentation/git-commit-tree.txt
@@ -55,8 +55,13 @@ OPTIONS
from the standard input.
-S[<keyid>]::
+--gpg-sign[=<keyid>]::
GPG-sign commit.
+--no-gpg-sign::
+ Countermand `commit.gpgsign` configuration variable that is
+ set to force each and every commit to be signed.
+
Commit Information
------------------
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 1a7616c73..7c42e9cab 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -302,6 +302,10 @@ configuration variable documented in linkgit:git-config[1].
--gpg-sign[=<keyid>]::
GPG-sign commit.
+--no-gpg-sign::
+ Countermand `commit.gpgsign` configuration variable that is
+ set to force each and every commit to be signed.
+
\--::
Do not interpret any more arguments as options.
diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt
index 2df995396..260f39fd4 100644
--- a/Documentation/git-cvsimport.txt
+++ b/Documentation/git-cvsimport.txt
@@ -21,8 +21,8 @@ DESCRIPTION
*WARNING:* `git cvsimport` uses cvsps version 2, which is considered
deprecated; it does not work with cvsps version 3 and later. If you are
performing a one-shot import of a CVS repository consider using
-link:http://cvs2svn.tigris.org/cvs2git.html[cvs2git] or
-link:https://github.com/BartMassey/parsecvs[parsecvs].
+http://cvs2svn.tigris.org/cvs2git.html[cvs2git] or
+https://github.com/BartMassey/parsecvs[parsecvs].
Imports a CVS repository into Git. It will either create a new
repository, or incrementally import into an existing one.
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
index 33fbd8c56..56fb7e532 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.txt
@@ -44,7 +44,7 @@ two blob objects, or changes between two files on disk.
commit relative to the named <commit>. Typically you
would want comparison with the latest commit, so if you
do not give <commit>, it defaults to HEAD.
- If HEAD does not exist (e.g. unborned branches) and
+ If HEAD does not exist (e.g. unborn branches) and
<commit> is not given, it shows all staged changes.
--staged is a synonym of --cached.
diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
index 2eba62717..09535f2a0 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.txt
@@ -436,7 +436,7 @@ git-filter-branch allows you to make complex shell-scripted rewrites
of your Git history, but you probably don't need this flexibility if
you're simply _removing unwanted data_ like large files or passwords.
For those operations you may want to consider
-link:http://rtyley.github.io/bfg-repo-cleaner/[The BFG Repo-Cleaner],
+http://rtyley.github.io/bfg-repo-cleaner/[The BFG Repo-Cleaner],
a JVM-based alternative to git-filter-branch, typically at least
10-50x faster for those use-cases, and with quite different
characteristics:
@@ -455,7 +455,7 @@ characteristics:
_is_ possible to write filters that include their own parallellism,
in the scripts executed against each commit.
-* The link:http://rtyley.github.io/bfg-repo-cleaner/#examples[command options]
+* The http://rtyley.github.io/bfg-repo-cleaner/#examples[command options]
are much more restrictive than git-filter branch, and dedicated just
to the tasks of removing unwanted data- e.g:
`--strip-blobs-bigger-than 1M`.
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index d639abe17..42408752d 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -219,14 +219,6 @@ eval=`git for-each-ref --shell --format="$fmt" \
eval "$eval"
------------
-Author
-------
-Written by Junio C Hamano <gitster@pobox.com>.
-
-Documentation
--------------
-Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
-
SEE ALSO
--------
linkgit:git-show-ref[1]
diff --git a/Documentation/git-http-backend.txt b/Documentation/git-http-backend.txt
index e3bcdb50e..e8c13f60a 100644
--- a/Documentation/git-http-backend.txt
+++ b/Documentation/git-http-backend.txt
@@ -263,14 +263,6 @@ identifying information of the remote user who performed the push.
All CGI environment variables are available to each of the hooks
invoked by the 'git-receive-pack'.
-Author
-------
-Written by Shawn O. Pearce <spearce@spearce.org>.
-
-Documentation
---------------
-Documentation by Shawn O. Pearce <spearce@spearce.org>.
-
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git-notes.txt b/Documentation/git-notes.txt
index 46ef0466b..84bb0fecb 100644
--- a/Documentation/git-notes.txt
+++ b/Documentation/git-notes.txt
@@ -375,16 +375,6 @@ does not match any refs is silently ignored.
If not set in the environment, the list of notes to copy depends
on the `notes.rewrite.<command>` and `notes.rewriteRef` settings.
-
-Author
-------
-Written by Johannes Schindelin <johannes.schindelin@gmx.de> and
-Johan Herland <johan@herland.net>
-
-Documentation
--------------
-Documentation by Johannes Schindelin and Johan Herland
-
GIT
---
Part of the linkgit:git[7] suite
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
index 8cba16d67..6ab5f9497 100644
--- a/Documentation/git-p4.txt
+++ b/Documentation/git-p4.txt
@@ -168,7 +168,8 @@ All commands except clone accept these options.
--git-dir <dir>::
Set the 'GIT_DIR' environment variable. See linkgit:git[1].
---verbose, -v::
+-v::
+--verbose::
Provide more progress information.
Sync options
@@ -279,7 +280,8 @@ These options can be used to modify 'git p4 submit' behavior.
Export tags from Git as p4 labels. Tags found in Git are applied
to the perforce working directory.
---dry-run, -n::
+-n::
+--dry-run::
Show just what commits would be submitted to p4; do not change
state in Git or p4.
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt
index cdab9ed50..d2d8f4792 100644
--- a/Documentation/git-pack-objects.txt
+++ b/Documentation/git-pack-objects.txt
@@ -64,6 +64,8 @@ base-name::
the same way as 'git rev-list' with the `--objects` flag
uses its `commit` arguments to build the list of objects it
outputs. The objects on the resulting list are packed.
+ Besides revisions, `--not` or `--shallow <SHA-1>` lines are
+ also accepted.
--unpacked::
This implies `--revs`. When processing the list of
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index 6083aab87..200eb2226 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -99,10 +99,10 @@ must be given before the options meant for 'git fetch'.
Options related to merging
~~~~~~~~~~~~~~~~~~~~~~~~~~
-include::merge-options.txt[]
-
:git-pull: 1
+include::merge-options.txt[]
+
-r::
--rebase[=false|true|preserve]::
When true, rebase the current branch on top of the upstream
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index 2b7f4f939..14862fb20 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -83,8 +83,8 @@ the local side, the remote side is updated if a branch of the same name
already exists on the remote side.
--all::
- Instead of naming each ref to push, specifies that all
- refs under `refs/heads/` be pushed.
+ Push all branches (i.e. refs under `refs/heads/`); cannot be
+ used with other <refspec>.
--prune::
Remove remote branches that don't have a local counterpart. For example
@@ -442,8 +442,10 @@ Examples
configured for the current branch).
`git push origin`::
- Without additional configuration, works like
- `git push origin :`.
+ Without additional configuration, pushes the current branch to
+ the configured upstream (`remote.origin.merge` configuration
+ variable) if it has the same name as the current branch, and
+ errors out without pushing otherwise.
+
The default behavior of this command when no <refspec> is given can be
configured by setting the `push` option of the remote, or the `push.default`
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 2889be6bd..2a93c645b 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -281,6 +281,10 @@ which makes little sense.
specified, `-s recursive`. Note the reversal of 'ours' and
'theirs' as noted above for the `-m` option.
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+ GPG-sign commits.
+
-q::
--quiet::
Be quiet. Implies --no-stat.
diff --git a/Documentation/git-remote-ext.txt b/Documentation/git-remote-ext.txt
index 8cfc748ae..cd0bb77e4 100644
--- a/Documentation/git-remote-ext.txt
+++ b/Documentation/git-remote-ext.txt
@@ -116,11 +116,6 @@ begins with `ext::`. Examples:
determined by the helper using environment variables (see
above).
-Documentation
---------------
-Documentation by Ilari Liusvaara, Jonathan Nieder and the Git list
-<git@vger.kernel.org>
-
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git-remote-fd.txt b/Documentation/git-remote-fd.txt
index 933c2adaf..bcd37668e 100644
--- a/Documentation/git-remote-fd.txt
+++ b/Documentation/git-remote-fd.txt
@@ -50,10 +50,6 @@ EXAMPLES
`git push fd::7,8/bar master`::
Same as above.
-Documentation
---------------
-Documentation by Ilari Liusvaara and the Git list <git@vger.kernel.org>
-
GIT
---
Part of the linkgit:git[1] suite
diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index 2507c8bd9..cb103c8b6 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.txt
@@ -3,7 +3,7 @@ git-remote(1)
NAME
----
-git-remote - manage set of tracked repositories
+git-remote - Manage set of tracked repositories
SYNOPSIS
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt
index 509cf73e5..4786a780b 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.txt
@@ -9,7 +9,7 @@ git-repack - Pack unpacked objects in a repository
SYNOPSIS
--------
[verse]
-'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [--window=<n>] [--depth=<n>]
+'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [--window=<n>] [--depth=<n>]
DESCRIPTION
-----------
@@ -110,6 +110,21 @@ other objects in that pack they already have locally.
The default is unlimited, unless the config variable
`pack.packSizeLimit` is set.
+-b::
+--write-bitmap-index::
+ Write a reachability bitmap index as part of the repack. This
+ only makes sense when used with `-a` or `-A`, as the bitmaps
+ must be able to refer to all reachable objects. This option
+ overrides the setting of `pack.writebitmaps`.
+
+--pack-kept-objects::
+ Include objects in `.keep` files when repacking. Note that we
+ still do not delete `.keep` packs after `pack-objects` finishes.
+ This means that we may duplicate objects, but this makes the
+ option safe to use when there are concurrent pushes or fetches.
+ This option is generally only useful if you are writing bitmaps
+ with `-b` or `pack.writebitmaps`, as it ensures that the
+ bitmapped packfile has the necessary objects.
Configuration
-------------
diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt
index f445cb38f..a077ba0dd 100644
--- a/Documentation/git-reset.txt
+++ b/Documentation/git-reset.txt
@@ -10,7 +10,7 @@ SYNOPSIS
[verse]
'git reset' [-q] [<tree-ish>] [--] <paths>...
'git reset' (--patch | -p) [<tree-ish>] [--] [<paths>...]
-'git reset' [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>]
+'git reset' [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
DESCRIPTION
-----------
@@ -60,6 +60,9 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
Resets the index but not the working tree (i.e., the changed files
are preserved but not marked for commit) and reports what has not
been updated. This is the default action.
++
+If `-N` is specified, removed paths are marked as intent-to-add (see
+linkgit:git-add[1]).
--hard::
Resets the index and working tree. Any changes to tracked files in the
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index 045b37b82..7a1585def 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -55,6 +55,7 @@ SYNOPSIS
[ \--reverse ]
[ \--walk-reflogs ]
[ \--no-walk ] [ \--do-walk ]
+ [ \--use-bitmap-index ]
<commit>... [ \-- <paths>... ]
DESCRIPTION
diff --git a/Documentation/git-revert.txt b/Documentation/git-revert.txt
index 2de67a549..9eb83f01a 100644
--- a/Documentation/git-revert.txt
+++ b/Documentation/git-revert.txt
@@ -8,7 +8,7 @@ git-revert - Revert some existing commits
SYNOPSIS
--------
[verse]
-'git revert' [--[no-]edit] [-n] [-m parent-number] [-s] <commit>...
+'git revert' [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>...
'git revert' --continue
'git revert' --quit
'git revert' --abort
@@ -80,6 +80,10 @@ more details.
This is useful when reverting more than one commits'
effect to your index in a row.
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+ GPG-sign commits.
+
-s::
--signoff::
Add Signed-off-by line at the end of the commit message.
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index db7e80303..375213fe4 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -44,7 +44,7 @@ is also possible).
OPTIONS
-------
-save [-p|--patch] [--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]::
+save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]::
Save your local modifications to a new 'stash', and run `git reset
--hard` to revert them. The <message> part is optional and gives
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index bfef8a0c6..46c1eebb9 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -15,8 +15,8 @@ SYNOPSIS
'git submodule' [--quiet] init [--] [<path>...]
'git submodule' [--quiet] deinit [-f|--force] [--] <path>...
'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
- [-f|--force] [--rebase] [--reference <repository>] [--depth <depth>]
- [--merge] [--recursive] [--] [<path>...]
+ [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>]
+ [--depth <depth>] [--recursive] [--] [<path>...]
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
[commit] [--] [<path>...]
'git submodule' [--quiet] foreach [--recursive] <command>
@@ -155,13 +155,31 @@ it contains local modifications.
update::
Update the registered submodules, i.e. clone missing submodules and
- checkout the commit specified in the index of the containing repository.
- This will make the submodules HEAD be detached unless `--rebase` or
- `--merge` is specified or the key `submodule.$name.update` is set to
- `rebase`, `merge` or `none`. `none` can be overridden by specifying
- `--checkout`. Setting the key `submodule.$name.update` to `!command`
- will cause `command` to be run. `command` can be any arbitrary shell
- command that takes a single argument, namely the sha1 to update to.
+ checkout the commit specified in the index of the containing
+ repository. The update mode defaults to `checkout`, but can be
+ configured with the `submodule.<name>.update` setting or the
+ `--rebase`, `--merge`, or `--checkout` options.
++
+For updates that clone missing submodules, checkout-mode updates will
+create submodules with detached HEADs; all other modes will create
+submodules with a local branch named after `submodule.<path>.branch`.
++
+For updates that do not clone missing submodules, the submodule's HEAD
+is only touched when the remote reference does not match the
+submodule's HEAD (for none-mode updates, the submodule is never
+touched). The remote reference is usually the gitlinked commit from
+the superproject's tree, but with `--remote` it is the upstream
+subproject's `submodule.<name>.branch`. This remote reference is
+integrated with the submodule's HEAD using the specified update mode.
+For checkout-mode updates, that will result in a detached HEAD. For
+rebase- and merge-mode updates, the commit referenced by the
+submodule's HEAD may change, but the symbolic reference will remain
+unchanged (i.e. checked-out branches will still be checked-out
+branches, and detached HEADs will still be detached HEADs). If none
+of the builtin modes fit your needs, set `submodule.<name>.update` to
+`!command` to configure a custom integration command. `command` can
+be any arbitrary shell command that takes a single argument, namely
+the sha1 to update to.
+
If the submodule is not yet initialized, and you just want to use the
setting as stored in .gitmodules, you can automatically initialize the
@@ -281,12 +299,31 @@ In order to ensure a current tracking branch state, `update --remote`
fetches the submodule's remote repository before calculating the
SHA-1. If you don't want to fetch, you should use `submodule update
--remote --no-fetch`.
++
+Use this option to integrate changes from the upstream subproject with
+your submodule's current HEAD. Alternatively, you can run `git pull`
+from the submodule, which is equivalent except for the remote branch
+name: `update --remote` uses the default upstream repository and
+`submodule.<name>.branch`, while `git pull` uses the submodule's
+`branch.<name>.merge`. Prefer `submodule.<name>.branch` if you want
+to distribute the default upstream branch with the superproject and
+`branch.<name>.merge` if you want a more native feel while working in
+the submodule itself.
-N::
--no-fetch::
This option is only valid for the update command.
Don't fetch new objects from the remote site.
+--checkout::
+ This option is only valid for the update command.
+ Checkout the commit recorded in the superproject on a detached HEAD
+ in the submodule. This is the default behavior, the main use of
+ this option is to override `submodule.$name.update` when set to
+ `merge`, `rebase` or `none`.
+ If the key `submodule.$name.update` is either not explicitly set or
+ set to `checkout`, this option is implicit.
+
--merge::
This option is only valid for the update command.
Merge the commit recorded in the superproject into the current branch
diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt
index c418c44d4..b424a1bc4 100644
--- a/Documentation/git-tag.txt
+++ b/Documentation/git-tag.txt
@@ -95,6 +95,12 @@ OPTIONS
using fnmatch(3)). Multiple patterns may be given; if any of
them matches, the tag is shown.
+--sort=<type>::
+ Sort in a specific order. Supported type is "refname"
+ (lexicographic order), "version:refname" or "v:refname" (tag
+ names are treated as versions). Prepend "-" to reverse sort
+ order.
+
--column[=<options>]::
--no-column::
Display tag listing in columns. See configuration variable
@@ -103,8 +109,9 @@ OPTIONS
+
This option is only applicable when listing tags without annotation lines.
---contains <commit>::
- Only list tags which contain the specified commit.
+--contains [<commit>]::
+ Only list tags which contain the specified commit (HEAD if not
+ specified).
--points-at <object>::
Only list tags of the given object.
diff --git a/Documentation/git-upload-archive.txt b/Documentation/git-upload-archive.txt
index d09bbb52b..cbef61ba8 100644
--- a/Documentation/git-upload-archive.txt
+++ b/Documentation/git-upload-archive.txt
@@ -20,6 +20,38 @@ This command is usually not invoked directly by the end user. The UI
for the protocol is on the 'git archive' side, and the program pair
is meant to be used to get an archive from a remote repository.
+SECURITY
+--------
+
+In order to protect the privacy of objects that have been removed from
+history but may not yet have been pruned, `git-upload-archive` avoids
+serving archives for commits and trees that are not reachable from the
+repository's refs. However, because calculating object reachability is
+computationally expensive, `git-upload-archive` implements a stricter
+but easier-to-check set of rules:
+
+ 1. Clients may request a commit or tree that is pointed to directly by
+ a ref. E.g., `git archive --remote=origin v1.0`.
+
+ 2. Clients may request a sub-tree within a commit or tree using the
+ `ref:path` syntax. E.g., `git archive --remote=origin v1.0:Documentation`.
+
+ 3. Clients may _not_ use other sha1 expressions, even if the end
+ result is reachable. E.g., neither a relative commit like `master^`
+ nor a literal sha1 like `abcd1234` is allowed, even if the result
+ is reachable from the refs.
+
+Note that rule 3 disallows many cases that do not have any privacy
+implications. These rules are subject to change in future versions of
+git, and the server accessed by `git archive --remote` may or may not
+follow these exact rules.
+
+If the config option `uploadArchive.allowUnreachable` is true, these
+rules are ignored, and clients may use arbitrary sha1 expressions.
+This is useful if you do not care about the privacy of unreachable
+objects, or if your object database is already publicly available for
+access via non-smart-http.
+
OPTIONS
-------
<directory>::
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 274d816b4..e5f8ed094 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -43,9 +43,17 @@ unreleased) version of Git, that is available from 'master'
branch of the `git.git` repository.
Documentation for older releases are available here:
-* link:v1.8.5.3/git.html[documentation for release 1.8.5.3]
+* link:v1.9.1/git.html[documentation for release 1.9.1]
* release notes for
+ link:RelNotes/1.9.1.txt[1.9.1],
+ link:RelNotes/1.9.0.txt[1.9.0].
+
+* link:v1.8.5.5/git.html[documentation for release 1.8.5.5]
+
+* release notes for
+ link:RelNotes/1.8.5.5.txt[1.8.5.5],
+ link:RelNotes/1.8.5.4.txt[1.8.5.4],
link:RelNotes/1.8.5.3.txt[1.8.5.3],
link:RelNotes/1.8.5.2.txt[1.8.5.2],
link:RelNotes/1.8.5.1.txt[1.8.5.1],
@@ -713,6 +721,11 @@ Git so take care if using Cogito etc.
index file. If not specified, the default of `$GIT_DIR/index`
is used.
+'GIT_INDEX_VERSION'::
+ This environment variable allows the specification of an index
+ version for new repositories. It won't affect existing index
+ files. By default index file version [23] is used.
+
'GIT_OBJECT_DIRECTORY'::
If the object storage directory is specified via this
environment variable then the sha1 directories are created
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index b322a2666..643c1ba92 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -930,9 +930,12 @@ state.
DEFINING MACRO ATTRIBUTES
-------------------------
-Custom macro attributes can be defined only in the `.gitattributes`
-file at the toplevel (i.e. not in any subdirectory). The built-in
-macro attribute "binary" is equivalent to:
+Custom macro attributes can be defined only in top-level gitattributes
+files (`$GIT_DIR/info/attributes`, the `.gitattributes` file at the
+top level of the working tree, or the global or system-wide
+gitattributes files), not in `.gitattributes` files in working tree
+subdirectories. The built-in macro attribute "binary" is equivalent
+to:
------------
[attr]binary -diff -merge -text
diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.txt
index 3f33ca550..1c3e109cb 100644
--- a/Documentation/gitcli.txt
+++ b/Documentation/gitcli.txt
@@ -28,7 +28,7 @@ arguments. Here are the rules:
they can be disambiguated by placing `--` between them.
E.g. `git diff -- HEAD` is, "I have a file called HEAD in my work
tree. Please show changes between the version I staged in the index
- and what I have in the work tree for that file". not "show difference
+ and what I have in the work tree for that file", not "show difference
between the HEAD commit and the work tree as a whole". You can say
`git diff HEAD --` to ask for the latter.
diff --git a/Documentation/gitcore-tutorial.txt b/Documentation/gitcore-tutorial.txt
index 058a35298..d2d7c213d 100644
--- a/Documentation/gitcore-tutorial.txt
+++ b/Documentation/gitcore-tutorial.txt
@@ -1443,7 +1443,7 @@ Although Git is a truly distributed system, it is often
convenient to organize your project with an informal hierarchy
of developers. Linux kernel development is run this way. There
is a nice illustration (page 17, "Merges to Mainline") in
-link:http://www.xenotime.net/linux/mentor/linux-mentoring-2006.pdf[Randy Dunlap's presentation].
+http://www.xenotime.net/linux/mentor/linux-mentoring-2006.pdf[Randy Dunlap's presentation].
It should be stressed that this hierarchy is purely *informal*.
There is nothing fundamental in Git that enforces the "chain of
diff --git a/Documentation/gitcvs-migration.txt b/Documentation/gitcvs-migration.txt
index 5ea94cbce..5f4e89005 100644
--- a/Documentation/gitcvs-migration.txt
+++ b/Documentation/gitcvs-migration.txt
@@ -117,7 +117,7 @@ Importing a CVS archive
-----------------------
First, install version 2.1 or higher of cvsps from
-link:http://www.cobite.com/cvsps/[http://www.cobite.com/cvsps/] and make
+http://www.cobite.com/cvsps/[http://www.cobite.com/cvsps/] and make
sure it is in your path. Then cd to a checked out CVS working directory
of the project you are interested in and run linkgit:git-cvsimport[1]:
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index d48bf4d6f..d954bf6ba 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -251,7 +251,7 @@ three parameters:
- the name of the ref being updated,
- the old object name stored in the ref,
- - and the new objectname to be stored in the ref.
+ - and the new object name to be stored in the ref.
A zero exit from the update hook allows the ref to be updated.
Exiting with a non-zero status prevents 'git-receive-pack'
diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.txt
index 205e80ef8..8734c1566 100644
--- a/Documentation/gitignore.txt
+++ b/Documentation/gitignore.txt
@@ -7,7 +7,7 @@ gitignore - Specifies intentionally untracked files to ignore
SYNOPSIS
--------
-$GIT_DIR/info/exclude, .gitignore
+$HOME/.config/git/ignore, $GIT_DIR/info/exclude, .gitignore
DESCRIPTION
-----------
@@ -77,6 +77,9 @@ PATTERN FORMAT
Put a backslash ("`\`") in front of the first hash for patterns
that begin with a hash.
+ - Trailing spaces are ignored unless they are quoted with backlash
+ ("`\`").
+
- An optional prefix "`!`" which negates the pattern; any
matching file excluded by a previous pattern will become
included again. It is not possible to re-include a file if a parent
diff --git a/Documentation/gitk.txt b/Documentation/gitk.txt
index d44e14c13..1e9e38ae4 100644
--- a/Documentation/gitk.txt
+++ b/Documentation/gitk.txt
@@ -98,6 +98,22 @@ linkgit:git-rev-list[1] for a complete list.
(See "History simplification" in linkgit:git-log[1] for a more
detailed explanation.)
+-L<start>,<end>:<file>::
+-L:<regex>:<file>::
+
+ Trace the evolution of the line range given by "<start>,<end>"
+ (or the funcname regex <regex>) within the <file>. You may
+ not give any pathspec limiters. This is currently limited to
+ a walk starting from a single revision, i.e., you may only
+ give zero or one positive revision arguments.
+ You can specify this option more than once.
++
+*Note:* gitk (unlike linkgit:git-log[1]) currently only understands
+this option if you specify it "glued together" with its argument. Do
+*not* put a space after `-L`.
++
+include::line-range-format.txt[]
+
<revision range>::
Limit the revisions to show. This can be either a single revision
diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt
index 347a9f76e..f539e3f66 100644
--- a/Documentation/gitmodules.txt
+++ b/Documentation/gitmodules.txt
@@ -55,6 +55,10 @@ submodule.<name>.branch::
A remote branch name for tracking updates in the upstream submodule.
If the option is not specified, it defaults to 'master'. See the
`--remote` documentation in linkgit:git-submodule[1] for details.
++
+This branch name is also used for the local branch created by
+non-checkout cloning updates. See the `update` documentation in
+linkgit:git-submodule[1] for details.
submodule.<name>.fetchRecurseSubmodules::
This option can be used to control recursive fetching of this
diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt
index c2908db76..64f7ad26b 100644
--- a/Documentation/gitremote-helpers.txt
+++ b/Documentation/gitremote-helpers.txt
@@ -437,6 +437,10 @@ set by Git if the remote helper has the 'option' capability.
'option check-connectivity' \{'true'|'false'\}::
Request the helper to check connectivity of a clone.
+'option force' \{'true'|'false'\}::
+ Request the helper to perform a force update. Defaults to
+ 'false'.
+
'option cloning \{'true'|'false'\}::
Notify the helper this is a clone request (i.e. the current
repository is guaranteed empty).
diff --git a/Documentation/gitrepository-layout.txt b/Documentation/gitrepository-layout.txt
index aa03882dd..17d2ea6c1 100644
--- a/Documentation/gitrepository-layout.txt
+++ b/Documentation/gitrepository-layout.txt
@@ -176,6 +176,10 @@ info/grafts::
per line describes a commit and its fake parents by
listing their 40-byte hexadecimal object names separated
by a space and terminated by a newline.
++
+Note that the grafts mechanism is outdated and can lead to problems
+transferring objects between repositories; see linkgit:git-replace[1]
+for a more flexible and robust system to do the same thing.
info/exclude::
This file, by convention among Porcelains, stores the
diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt
index db4154f9d..952f503af 100644
--- a/Documentation/gitweb.conf.txt
+++ b/Documentation/gitweb.conf.txt
@@ -630,13 +630,13 @@ need to set this element to empty list i.e. `[]`.
override::
If this field has a true value then the given feature is
- overriddable, which means that it can be configured
+ overridable, which means that it can be configured
(or enabled/disabled) on a per-repository basis.
+
Usually given "<feature>" is configurable via the `gitweb.<feature>`
config variable in the per-repository Git configuration file.
+
-*Note* that no feature is overriddable by default.
+*Note* that no feature is overridable by default.
sub::
Internal detail of implementation. What is important is that
diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.txt
index cca14b8cc..cd9c8951b 100644
--- a/Documentation/gitweb.txt
+++ b/Documentation/gitweb.txt
@@ -84,7 +84,7 @@ separator (rules for Perl's "`split(" ", $line)`").
* Fields use modified URI encoding, defined in RFC 3986, section 2.1
(Percent-Encoding), or rather "Query string encoding" (see
-link:http://en.wikipedia.org/wiki/Query_string#URL_encoding[]), the difference
+http://en.wikipedia.org/wiki/Query_string#URL_encoding[]), the difference
being that SP (" ") can be encoded as "{plus}" (and therefore "{plus}" has to be
also percent-encoded).
+
diff --git a/Documentation/glossary-content.txt b/Documentation/glossary-content.txt
index 378306f58..be0858c18 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.txt
@@ -176,6 +176,10 @@ current branch integrates with) obviously do not work, as there is no
you can make Git pretend the set of <<def_parent,parents>> a <<def_commit,commit>> has
is different from what was recorded when the commit was
created. Configured via the `.git/info/grafts` file.
++
+Note that the grafts mechanism is outdated and can lead to problems
+transferring objects between repositories; see linkgit:git-replace[1]
+for a more flexible and robust system to do the same thing.
[[def_hash]]hash::
In Git's context, synonym for <<def_object_name,object name>>.
diff --git a/Documentation/howto/maintain-git.txt b/Documentation/howto/maintain-git.txt
index 33ae69c11..ca4378740 100644
--- a/Documentation/howto/maintain-git.txt
+++ b/Documentation/howto/maintain-git.txt
@@ -39,26 +39,26 @@ The policy on Integration is informally mentioned in "A Note
from the maintainer" message, which is periodically posted to
this mailing list after each feature release is made.
- - Feature releases are numbered as vX.Y.Z and are meant to
+ - Feature releases are numbered as vX.Y.0 and are meant to
contain bugfixes and enhancements in any area, including
functionality, performance and usability, without regression.
- One release cycle for a feature release is expected to last for
eight to ten weeks.
- - Maintenance releases are numbered as vX.Y.Z.W and are meant
- to contain only bugfixes for the corresponding vX.Y.Z feature
- release and earlier maintenance releases vX.Y.Z.V (V < W).
+ - Maintenance releases are numbered as vX.Y.Z and are meant
+ to contain only bugfixes for the corresponding vX.Y.0 feature
+ release and earlier maintenance releases vX.Y.W (W < Z).
- 'master' branch is used to prepare for the next feature
release. In other words, at some point, the tip of 'master'
- branch is tagged with vX.Y.Z.
+ branch is tagged with vX.Y.0.
- 'maint' branch is used to prepare for the next maintenance
- release. After the feature release vX.Y.Z is made, the tip
+ release. After the feature release vX.Y.0 is made, the tip
of 'maint' branch is set to that release, and bugfixes will
accumulate on the branch, and at some point, the tip of the
- branch is tagged with vX.Y.Z.1, vX.Y.Z.2, and so on.
+ branch is tagged with vX.Y.1, vX.Y.2, and so on.
- 'next' branch is used to publish changes (both enhancements
and fixes) that (1) have worthwhile goal, (2) are in a fairly
@@ -86,6 +86,10 @@ this mailing list after each feature release is made.
users are encouraged to test it so that regressions and bugs
are found before new topics are merged to 'master'.
+Note that before v1.9.0 release, the version numbers used to be
+structured slightly differently. vX.Y.Z were feature releases while
+vX.Y.Z.W were maintenance releases for vX.Y.Z.
+
A Typical Git Day
-----------------
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index afba8d4f3..e1343155f 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -14,9 +14,12 @@ inspect and further tweak the merge result before committing.
further edit the auto-generated merge message, so that the user
can explain and justify the merge. The `--no-edit` option can be
used to accept the auto-generated message (this is generally
- discouraged). The `--edit` (or `-e`) option is still useful if you are
- giving a draft message with the `-m` option from the command line
- and want to edit it in the editor.
+ discouraged).
+ifndef::git-pull[]
+The `--edit` (or `-e`) option is still useful if you are
+giving a draft message with the `-m` option from the command line
+and want to edit it in the editor.
+endif::git-pull[]
+
Older scripts may depend on the historical behaviour of not allowing the
user to edit the merge log message. They will see an editor opened when
diff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.txt
index fb6e593e7..350949810 100644
--- a/Documentation/merge-strategies.txt
+++ b/Documentation/merge-strategies.txt
@@ -20,7 +20,7 @@ recursive::
merged tree of the common ancestors and uses that as
the reference tree for the 3-way merge. This has been
reported to result in fewer merge conflicts without
- causing mis-merges by tests done on actual merge commits
+ causing mismerges by tests done on actual merge commits
taken from Linux 2.6 kernel development history.
Additionally this can detect and handle merges involving
renames. This is the default merge strategy when
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index 03533af71..9a3da3646 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -257,6 +257,14 @@ See also linkgit:git-reflog[1].
Output excluded boundary commits. Boundary commits are
prefixed with `-`.
+ifdef::git-rev-list[]
+--use-bitmap-index::
+
+ Try to speed up the traversal using the pack bitmap index (if
+ one is available). Note that when traversing with `--objects`,
+ trees and blobs will not have their associated path printed.
+endif::git-rev-list[]
+
--
History Simplification
diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt
index 2c06ed34a..5a286d0d6 100644
--- a/Documentation/revisions.txt
+++ b/Documentation/revisions.txt
@@ -88,7 +88,7 @@ some output processing may assume ref names in UTF-8.
branch 'blabla' then '@\{1\}' means the same as 'blabla@\{1\}'.
'@\{-<n>\}', e.g. '@\{-1\}'::
- The construct '@\{-<n>\}' means the <n>th branch checked out
+ The construct '@\{-<n>\}' means the <n>th branch/commit checked out
before the current one.
'<branchname>@\{upstream\}', e.g. 'master@\{upstream\}', '@\{u\}'::
diff --git a/Documentation/technical/api-hash.txt b/Documentation/technical/api-hash.txt
deleted file mode 100644
index e5061e067..000000000
--- a/Documentation/technical/api-hash.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-hash API
-========
-
-The hash API is a collection of simple hash table functions. Users are expected
-to implement their own hashing.
-
-Data Structures
----------------
-
-`struct hash_table`::
-
- The hash table structure. The `array` member points to the hash table
- entries. The `size` member counts the total number of valid and invalid
- entries in the table. The `nr` member keeps track of the number of
- valid entries.
-
-`struct hash_table_entry`::
-
- An opaque structure representing an entry in the hash table. The `hash`
- member is the entry's hash key and the `ptr` member is the entry's
- value.
-
-Functions
----------
-
-`init_hash`::
-
- Initialize the hash table.
-
-`free_hash`::
-
- Release memory associated with the hash table.
-
-`insert_hash`::
-
- Insert a pointer into the hash table. If an entry with that hash
- already exists, a pointer to the existing entry's value is returned.
- Otherwise NULL is returned. This allows callers to implement
- chaining, etc.
-
-`lookup_hash`::
-
- Lookup an entry in the hash table. If an entry with that hash exists
- the entry's value is returned. Otherwise NULL is returned.
-
-`for_each_hash`::
-
- Call a function for each entry in the hash table. The function is
- expected to take the entry's value as its only argument and return an
- int. If the function returns a negative int the loop is aborted
- immediately. Otherwise, the return value is accumulated and the sum
- returned upon completion of the loop.
diff --git a/Documentation/technical/api-hashmap.txt b/Documentation/technical/api-hashmap.txt
new file mode 100644
index 000000000..42ca2347e
--- /dev/null
+++ b/Documentation/technical/api-hashmap.txt
@@ -0,0 +1,235 @@
+hashmap API
+===========
+
+The hashmap API is a generic implementation of hash-based key-value mappings.
+
+Data Structures
+---------------
+
+`struct hashmap`::
+
+ The hash table structure.
++
+The `size` member keeps track of the total number of entries. The `cmpfn`
+member is a function used to compare two entries for equality. The `table` and
+`tablesize` members store the hash table and its size, respectively.
+
+`struct hashmap_entry`::
+
+ An opaque structure representing an entry in the hash table, which must
+ be used as first member of user data structures. Ideally it should be
+ followed by an int-sized member to prevent unused memory on 64-bit
+ systems due to alignment.
++
+The `hash` member is the entry's hash code and the `next` member points to the
+next entry in case of collisions (i.e. if multiple entries map to the same
+bucket).
+
+`struct hashmap_iter`::
+
+ An iterator structure, to be used with hashmap_iter_* functions.
+
+Types
+-----
+
+`int (*hashmap_cmp_fn)(const void *entry, const void *entry_or_key, const void *keydata)`::
+
+ User-supplied function to test two hashmap entries for equality. Shall
+ return 0 if the entries are equal.
++
+This function is always called with non-NULL `entry` / `entry_or_key`
+parameters that have the same hash code. When looking up an entry, the `key`
+and `keydata` parameters to hashmap_get and hashmap_remove are always passed
+as second and third argument, respectively. Otherwise, `keydata` is NULL.
+
+Functions
+---------
+
+`unsigned int strhash(const char *buf)`::
+`unsigned int strihash(const char *buf)`::
+`unsigned int memhash(const void *buf, size_t len)`::
+`unsigned int memihash(const void *buf, size_t len)`::
+
+ Ready-to-use hash functions for strings, using the FNV-1 algorithm (see
+ http://www.isthe.com/chongo/tech/comp/fnv).
++
+`strhash` and `strihash` take 0-terminated strings, while `memhash` and
+`memihash` operate on arbitrary-length memory.
++
+`strihash` and `memihash` are case insensitive versions.
+
+`void hashmap_init(struct hashmap *map, hashmap_cmp_fn equals_function, size_t initial_size)`::
+
+ Initializes a hashmap structure.
++
+`map` is the hashmap to initialize.
++
+The `equals_function` can be specified to compare two entries for equality.
+If NULL, entries are considered equal if their hash codes are equal.
++
+If the total number of entries is known in advance, the `initial_size`
+parameter may be used to preallocate a sufficiently large table and thus
+prevent expensive resizing. If 0, the table is dynamically resized.
+
+`void hashmap_free(struct hashmap *map, int free_entries)`::
+
+ Frees a hashmap structure and allocated memory.
++
+`map` is the hashmap to free.
++
+If `free_entries` is true, each hashmap_entry in the map is freed as well
+(using stdlib's free()).
+
+`void hashmap_entry_init(void *entry, unsigned int hash)`::
+
+ Initializes a hashmap_entry structure.
++
+`entry` points to the entry to initialize.
++
+`hash` is the hash code of the entry.
+
+`void *hashmap_get(const struct hashmap *map, const void *key, const void *keydata)`::
+
+ Returns the hashmap entry for the specified key, or NULL if not found.
++
+`map` is the hashmap structure.
++
+`key` is a hashmap_entry structure (or user data structure that starts with
+hashmap_entry) that has at least been initialized with the proper hash code
+(via `hashmap_entry_init`).
++
+If an entry with matching hash code is found, `key` and `keydata` are passed
+to `hashmap_cmp_fn` to decide whether the entry matches the key.
+
+`void *hashmap_get_next(const struct hashmap *map, const void *entry)`::
+
+ Returns the next equal hashmap entry, or NULL if not found. This can be
+ used to iterate over duplicate entries (see `hashmap_add`).
++
+`map` is the hashmap structure.
++
+`entry` is the hashmap_entry to start the search from, obtained via a previous
+call to `hashmap_get` or `hashmap_get_next`.
+
+`void hashmap_add(struct hashmap *map, void *entry)`::
+
+ Adds a hashmap entry. This allows to add duplicate entries (i.e.
+ separate values with the same key according to hashmap_cmp_fn).
++
+`map` is the hashmap structure.
++
+`entry` is the entry to add.
+
+`void *hashmap_put(struct hashmap *map, void *entry)`::
+
+ Adds or replaces a hashmap entry. If the hashmap contains duplicate
+ entries equal to the specified entry, only one of them will be replaced.
++
+`map` is the hashmap structure.
++
+`entry` is the entry to add or replace.
++
+Returns the replaced entry, or NULL if not found (i.e. the entry was added).
+
+`void *hashmap_remove(struct hashmap *map, const void *key, const void *keydata)`::
+
+ Removes a hashmap entry matching the specified key. If the hashmap
+ contains duplicate entries equal to the specified key, only one of
+ them will be removed.
++
+`map` is the hashmap structure.
++
+`key` is a hashmap_entry structure (or user data structure that starts with
+hashmap_entry) that has at least been initialized with the proper hash code
+(via `hashmap_entry_init`).
++
+If an entry with matching hash code is found, `key` and `keydata` are
+passed to `hashmap_cmp_fn` to decide whether the entry matches the key.
++
+Returns the removed entry, or NULL if not found.
+
+`void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter)`::
+`void *hashmap_iter_next(struct hashmap_iter *iter)`::
+`void *hashmap_iter_first(struct hashmap *map, struct hashmap_iter *iter)`::
+
+ Used to iterate over all entries of a hashmap.
++
+`hashmap_iter_init` initializes a `hashmap_iter` structure.
++
+`hashmap_iter_next` returns the next hashmap_entry, or NULL if there are no
+more entries.
++
+`hashmap_iter_first` is a combination of both (i.e. initializes the iterator
+and returns the first entry, if any).
+
+Usage example
+-------------
+
+Here's a simple usage example that maps long keys to double values.
+[source,c]
+------------
+struct hashmap map;
+
+struct long2double {
+ struct hashmap_entry ent; /* must be the first member! */
+ long key;
+ double value;
+};
+
+static int long2double_cmp(const struct long2double *e1, const struct long2double *e2, const void *unused)
+{
+ return !(e1->key == e2->key);
+}
+
+void long2double_init(void)
+{
+ hashmap_init(&map, (hashmap_cmp_fn) long2double_cmp, 0);
+}
+
+void long2double_free(void)
+{
+ hashmap_free(&map, 1);
+}
+
+static struct long2double *find_entry(long key)
+{
+ struct long2double k;
+ hashmap_entry_init(&k, memhash(&key, sizeof(long)));
+ k.key = key;
+ return hashmap_get(&map, &k, NULL);
+}
+
+double get_value(long key)
+{
+ struct long2double *e = find_entry(key);
+ return e ? e->value : 0;
+}
+
+void set_value(long key, double value)
+{
+ struct long2double *e = find_entry(key);
+ if (!e) {
+ e = malloc(sizeof(struct long2double));
+ hashmap_entry_init(e, memhash(&key, sizeof(long)));
+ e->key = key;
+ hashmap_add(&map, e);
+ }
+ e->value = value;
+}
+------------
+
+Using variable-sized keys
+-------------------------
+
+The `hashmap_entry_get` and `hashmap_entry_remove` functions expect an ordinary
+`hashmap_entry` structure as key to find the correct entry. If the key data is
+variable-sized (e.g. a FLEX_ARRAY string) or quite large, it is undesirable
+to create a full-fledged entry structure on the heap and copy all the key data
+into the structure.
+
+In this case, the `keydata` parameter can be used to pass
+variable-sized key data directly to the comparison function, and the `key`
+parameter can be a stripped-down, fixed size entry structure allocated on the
+stack.
+
+See test-hashmap.c for an example using arbitrary-length strings as keys.
diff --git a/Documentation/technical/bitmap-format.txt b/Documentation/technical/bitmap-format.txt
new file mode 100644
index 000000000..f8c18a0f7
--- /dev/null
+++ b/Documentation/technical/bitmap-format.txt
@@ -0,0 +1,164 @@
+GIT bitmap v1 format
+====================
+
+ - A header appears at the beginning:
+
+ 4-byte signature: {'B', 'I', 'T', 'M'}
+
+ 2-byte version number (network byte order)
+ The current implementation only supports version 1
+ of the bitmap index (the same one as JGit).
+
+ 2-byte flags (network byte order)
+
+ The following flags are supported:
+
+ - BITMAP_OPT_FULL_DAG (0x1) REQUIRED
+ This flag must always be present. It implies that the bitmap
+ index has been generated for a packfile with full closure
+ (i.e. where every single object in the packfile can find
+ its parent links inside the same packfile). This is a
+ requirement for the bitmap index format, also present in JGit,
+ that greatly reduces the complexity of the implementation.
+
+ - BITMAP_OPT_HASH_CACHE (0x4)
+ If present, the end of the bitmap file contains
+ `N` 32-bit name-hash values, one per object in the
+ pack. The format and meaning of the name-hash is
+ described below.
+
+ 4-byte entry count (network byte order)
+
+ The total count of entries (bitmapped commits) in this bitmap index.
+
+ 20-byte checksum
+
+ The SHA1 checksum of the pack this bitmap index belongs to.
+
+ - 4 EWAH bitmaps that act as type indexes
+
+ Type indexes are serialized after the hash cache in the shape
+ of four EWAH bitmaps stored consecutively (see Appendix A for
+ the serialization format of an EWAH bitmap).
+
+ There is a bitmap for each Git object type, stored in the following
+ order:
+
+ - Commits
+ - Trees
+ - Blobs
+ - Tags
+
+ In each bitmap, the `n`th bit is set to true if the `n`th object
+ in the packfile is of that type.
+
+ The obvious consequence is that the OR of all 4 bitmaps will result
+ in a full set (all bits set), and the AND of all 4 bitmaps will
+ result in an empty bitmap (no bits set).
+
+ - N entries with compressed bitmaps, one for each indexed commit
+
+ Where `N` is the total amount of entries in this bitmap index.
+ Each entry contains the following:
+
+ - 4-byte object position (network byte order)
+ The position **in the index for the packfile** where the
+ bitmap for this commit is found.
+
+ - 1-byte XOR-offset
+ The xor offset used to compress this bitmap. For an entry
+ in position `x`, a XOR offset of `y` means that the actual
+ bitmap representing this commit is composed by XORing the
+ bitmap for this entry with the bitmap in entry `x-y` (i.e.
+ the bitmap `y` entries before this one).
+
+ Note that this compression can be recursive. In order to
+ XOR this entry with a previous one, the previous entry needs
+ to be decompressed first, and so on.
+
+ The hard-limit for this offset is 160 (an entry can only be
+ xor'ed against one of the 160 entries preceding it). This
+ number is always positive, and hence entries are always xor'ed
+ with **previous** bitmaps, not bitmaps that will come afterwards
+ in the index.
+
+ - 1-byte flags for this bitmap
+ At the moment the only available flag is `0x1`, which hints
+ that this bitmap can be re-used when rebuilding bitmap indexes
+ for the repository.
+
+ - The compressed bitmap itself, see Appendix A.
+
+== Appendix A: Serialization format for an EWAH bitmap
+
+Ewah bitmaps are serialized in the same protocol as the JAVAEWAH
+library, making them backwards compatible with the JGit
+implementation:
+
+ - 4-byte number of bits of the resulting UNCOMPRESSED bitmap
+
+ - 4-byte number of words of the COMPRESSED bitmap, when stored
+
+ - N x 8-byte words, as specified by the previous field
+
+ This is the actual content of the compressed bitmap.
+
+ - 4-byte position of the current RLW for the compressed
+ bitmap
+
+All words are stored in network byte order for their corresponding
+sizes.
+
+The compressed bitmap is stored in a form of run-length encoding, as
+follows. It consists of a concatenation of an arbitrary number of
+chunks. Each chunk consists of one or more 64-bit words
+
+ H L_1 L_2 L_3 .... L_M
+
+H is called RLW (run length word). It consists of (from lower to higher
+order bits):
+
+ - 1 bit: the repeated bit B
+
+ - 32 bits: repetition count K (unsigned)
+
+ - 31 bits: literal word count M (unsigned)
+
+The bitstream represented by the above chunk is then:
+
+ - K repetitions of B
+
+ - The bits stored in `L_1` through `L_M`. Within a word, bits at
+ lower order come earlier in the stream than those at higher
+ order.
+
+The next word after `L_M` (if any) must again be a RLW, for the next
+chunk. For efficient appending to the bitstream, the EWAH stores a
+pointer to the last RLW in the stream.
+
+
+== Appendix B: Optional Bitmap Sections
+
+These sections may or may not be present in the `.bitmap` file; their
+presence is indicated by the header flags section described above.
+
+Name-hash cache
+---------------
+
+If the BITMAP_OPT_HASH_CACHE flag is set, the end of the bitmap contains
+a cache of 32-bit values, one per object in the pack. The value at
+position `i` is the hash of the pathname at which the `i`th object
+(counting in index order) in the pack can be found. This can be fed
+into the delta heuristics to compare objects with similar pathnames.
+
+The hash algorithm used is:
+
+ hash = 0;
+ while ((c = *name++))
+ if (!isspace(c))
+ hash = (hash >> 2) + (c << 24);
+
+Note that this hashing scheme is tied to the BITMAP_OPT_HASH_CACHE flag.
+If implementations want to choose a different hashing scheme, they are
+free to do so, but MUST allocate a new header flag (because comparing
+hashes made under two different schemes would be pointless).
diff --git a/Documentation/technical/http-protocol.txt b/Documentation/technical/http-protocol.txt
index d21d77d1d..20525d98b 100644
--- a/Documentation/technical/http-protocol.txt
+++ b/Documentation/technical/http-protocol.txt
@@ -20,13 +20,13 @@ URL syntax documented by RFC 1738, so they are of the form:
http://<host>:<port>/<path>?<searchpart>
-Within this documentation the placeholder $GIT_URL will stand for
+Within this documentation the placeholder `$GIT_URL` will stand for
the http:// repository URL entered by the end-user.
-Servers SHOULD handle all requests to locations matching $GIT_URL, as
+Servers SHOULD handle all requests to locations matching `$GIT_URL`, as
both the "smart" and "dumb" HTTP protocols used by Git operate
by appending additional path components onto the end of the user
-supplied $GIT_URL string.
+supplied `$GIT_URL` string.
An example of a dumb client requesting for a loose object:
@@ -43,10 +43,10 @@ An example of a request to a submodule:
$GIT_URL: http://example.com/git/repo.git/path/submodule.git
URL request: http://example.com/git/repo.git/path/submodule.git/info/refs
-Clients MUST strip a trailing '/', if present, from the user supplied
-$GIT_URL string to prevent empty path tokens ('//') from appearing
+Clients MUST strip a trailing `/`, if present, from the user supplied
+`$GIT_URL` string to prevent empty path tokens (`//`) from appearing
in any URL sent to a server. Compatible clients MUST expand
-'$GIT_URL/info/refs' as 'foo/info/refs' and not 'foo//info/refs'.
+`$GIT_URL/info/refs` as `foo/info/refs` and not `foo//info/refs`.
Authentication
@@ -103,14 +103,14 @@ Except where noted, all standard HTTP behavior SHOULD be assumed
by both client and server. This includes (but is not necessarily
limited to):
-If there is no repository at $GIT_URL, or the resource pointed to by a
-location matching $GIT_URL does not exist, the server MUST NOT respond
-with '200 OK' response. A server SHOULD respond with
-'404 Not Found', '410 Gone', or any other suitable HTTP status code
+If there is no repository at `$GIT_URL`, or the resource pointed to by a
+location matching `$GIT_URL` does not exist, the server MUST NOT respond
+with `200 OK` response. A server SHOULD respond with
+`404 Not Found`, `410 Gone`, or any other suitable HTTP status code
which does not imply the resource exists as requested.
-If there is a repository at $GIT_URL, but access is not currently
-permitted, the server MUST respond with the '403 Forbidden' HTTP
+If there is a repository at `$GIT_URL`, but access is not currently
+permitted, the server MUST respond with the `403 Forbidden` HTTP
status code.
Servers SHOULD support both HTTP 1.0 and HTTP 1.1.
@@ -126,9 +126,9 @@ Servers MAY return ETag and/or Last-Modified headers.
Clients MAY revalidate cached entities by including If-Modified-Since
and/or If-None-Match request headers.
-Servers MAY return '304 Not Modified' if the relevant headers appear
+Servers MAY return `304 Not Modified` if the relevant headers appear
in the request and the entity has not changed. Clients MUST treat
-'304 Not Modified' identical to '200 OK' by reusing the cached entity.
+`304 Not Modified` identical to `200 OK` by reusing the cached entity.
Clients MAY reuse a cached entity without revalidation if the
Cache-Control and/or Expires header permits caching. Clients and
@@ -148,7 +148,7 @@ HTTP clients that only support the "dumb" protocol MUST discover
references by making a request for the special info/refs file of
the repository.
-Dumb HTTP clients MUST make a GET request to $GIT_URL/info/refs,
+Dumb HTTP clients MUST make a `GET` request to `$GIT_URL/info/refs`,
without any search/query parameters.
C: GET $GIT_URL/info/refs HTTP/1.0
@@ -161,21 +161,21 @@ without any search/query parameters.
S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}
The Content-Type of the returned info/refs entity SHOULD be
-"text/plain; charset=utf-8", but MAY be any content type.
+`text/plain; charset=utf-8`, but MAY be any content type.
Clients MUST NOT attempt to validate the returned Content-Type.
Dumb servers MUST NOT return a return type starting with
-"application/x-git-".
+`application/x-git-`.
Cache-Control headers MAY be returned to disable caching of the
returned entity.
When examining the response clients SHOULD only examine the HTTP
-status code. Valid responses are '200 OK', or '304 Not Modified'.
+status code. Valid responses are `200 OK`, or `304 Not Modified`.
The returned content is a UNIX formatted text file describing
each ref and its known value. The file SHOULD be sorted by name
according to the C locale ordering. The file SHOULD NOT include
-the default ref named 'HEAD'.
+the default ref named `HEAD`.
info_refs = *( ref_record )
ref_record = any_ref / peeled_ref
@@ -192,13 +192,14 @@ HTTP clients that support the "smart" protocol (or both the
a parameterized request for the info/refs file of the repository.
The request MUST contain exactly one query parameter,
-'service=$servicename', where $servicename MUST be the service
+`service=$servicename`, where `$servicename` MUST be the service
name the client wishes to contact to complete the operation.
The request MUST NOT contain additional query parameters.
C: GET $GIT_URL/info/refs?service=git-upload-pack HTTP/1.0
- dumb server reply:
+dumb server reply:
+
S: 200 OK
S:
S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint
@@ -206,7 +207,8 @@ The request MUST NOT contain additional query parameters.
S: 2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0
S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}
- smart server reply:
+smart server reply:
+
S: 200 OK
S: Content-Type: application/x-git-upload-pack-advertisement
S: Cache-Control: no-cache
@@ -228,7 +230,7 @@ Smart Server Response
^^^^^^^^^^^^^^^^^^^^^
If the server does not recognize the requested service name, or the
requested service name has been disabled by the server administrator,
-the server MUST respond with the '403 Forbidden' HTTP status code.
+the server MUST respond with the `403 Forbidden` HTTP status code.
Otherwise, smart servers MUST respond with the smart server reply
format for the requested service name.
@@ -236,35 +238,35 @@ format for the requested service name.
Cache-Control headers SHOULD be used to disable caching of the
returned entity.
-The Content-Type MUST be 'application/x-$servicename-advertisement'.
+The Content-Type MUST be `application/x-$servicename-advertisement`.
Clients SHOULD fall back to the dumb protocol if another content
type is returned. When falling back to the dumb protocol clients
-SHOULD NOT make an additional request to $GIT_URL/info/refs, but
+SHOULD NOT make an additional request to `$GIT_URL/info/refs`, but
instead SHOULD use the response already in hand. Clients MUST NOT
continue if they do not support the dumb protocol.
-Clients MUST validate the status code is either '200 OK' or
-'304 Not Modified'.
+Clients MUST validate the status code is either `200 OK` or
+`304 Not Modified`.
Clients MUST validate the first five bytes of the response entity
-matches the regex "^[0-9a-f]{4}#". If this test fails, clients
+matches the regex `^[0-9a-f]{4}#`. If this test fails, clients
MUST NOT continue.
Clients MUST parse the entire response as a sequence of pkt-line
records.
-Clients MUST verify the first pkt-line is "# service=$servicename".
+Clients MUST verify the first pkt-line is `# service=$servicename`.
Servers MUST set $servicename to be the request parameter value.
Servers SHOULD include an LF at the end of this line.
Clients MUST ignore an LF at the end of the line.
-Servers MUST terminate the response with the magic "0000" end
+Servers MUST terminate the response with the magic `0000` end
pkt-line marker.
The returned response is a pkt-line stream describing each ref and
its known value. The stream SHOULD be sorted by name according to
the C locale ordering. The stream SHOULD include the default ref
-named 'HEAD' as the first ref. The stream MUST include capability
+named `HEAD` as the first ref. The stream MUST include capability
declarations behind a NUL on the first ref.
smart_reply = PKT-LINE("# service=$servicename" LF)
@@ -286,12 +288,13 @@ declarations behind a NUL on the first ref.
peeled_ref = PKT-LINE(obj-id SP name LF)
PKT-LINE(obj-id SP name "^{}" LF
+
Smart Service git-upload-pack
------------------------------
-This service reads from the repository pointed to by $GIT_URL.
+This service reads from the repository pointed to by `$GIT_URL`.
Clients MUST first perform ref discovery with
-'$GIT_URL/info/refs?service=git-upload-pack'.
+`$GIT_URL/info/refs?service=git-upload-pack`.
C: POST $GIT_URL/git-upload-pack HTTP/1.0
C: Content-Type: application/x-git-upload-pack-request
@@ -313,10 +316,10 @@ to prevent caching of the response.
Servers SHOULD support all capabilities defined here.
-Clients MUST send at least one 'want' command in the request body.
-Clients MUST NOT reference an id in a 'want' command which did not
+Clients MUST send at least one "want" command in the request body.
+Clients MUST NOT reference an id in a "want" command which did not
appear in the response obtained through ref discovery unless the
-server advertises capability "allow-tip-sha1-in-want".
+server advertises capability `allow-tip-sha1-in-want`.
compute_request = want_list
have_list
@@ -332,128 +335,128 @@ server advertises capability "allow-tip-sha1-in-want".
have_list = *PKT-LINE("have" SP id LF)
TODO: Document this further.
-TODO: Don't use uppercase for variable names below.
The Negotiation Algorithm
~~~~~~~~~~~~~~~~~~~~~~~~~
The computation to select the minimal pack proceeds as follows
-(c = client, s = server):
+(C = client, S = server):
+
+'init step:'
+
+C: Use ref discovery to obtain the advertised refs.
+
+C: Place any object seen into set `advertised`.
- init step:
- (c) Use ref discovery to obtain the advertised refs.
- (c) Place any object seen into set ADVERTISED.
+C: Build an empty set, `common`, to hold the objects that are later
+ determined to be on both ends.
- (c) Build an empty set, COMMON, to hold the objects that are later
- determined to be on both ends.
- (c) Build a set, WANT, of the objects from ADVERTISED the client
- wants to fetch, based on what it saw during ref discovery.
+C: Build a set, `want`, of the objects from `advertised` the client
+ wants to fetch, based on what it saw during ref discovery.
- (c) Start a queue, C_PENDING, ordered by commit time (popping newest
- first). Add all client refs. When a commit is popped from
- the queue its parents SHOULD be automatically inserted back.
- Commits MUST only enter the queue once.
+C: Start a queue, `c_pending`, ordered by commit time (popping newest
+ first). Add all client refs. When a commit is popped from
+ the queue its parents SHOULD be automatically inserted back.
+ Commits MUST only enter the queue once.
- one compute step:
- (c) Send one $GIT_URL/git-upload-pack request:
+'one compute step:'
- C: 0032want <WANT #1>...............................
- C: 0032want <WANT #2>...............................
+C: Send one `$GIT_URL/git-upload-pack` request:
+
+ C: 0032want <want #1>...............................
+ C: 0032want <want #2>...............................
....
- C: 0032have <COMMON #1>.............................
- C: 0032have <COMMON #2>.............................
+ C: 0032have <common #1>.............................
+ C: 0032have <common #2>.............................
....
- C: 0032have <HAVE #1>...............................
- C: 0032have <HAVE #2>...............................
+ C: 0032have <have #1>...............................
+ C: 0032have <have #2>...............................
....
C: 0000
- The stream is organized into "commands", with each command
- appearing by itself in a pkt-line. Within a command line
- the text leading up to the first space is the command name,
- and the remainder of the line to the first LF is the value.
- Command lines are terminated with an LF as the last byte of
- the pkt-line value.
+The stream is organized into "commands", with each command
+appearing by itself in a pkt-line. Within a command line
+the text leading up to the first space is the command name,
+and the remainder of the line to the first LF is the value.
+Command lines are terminated with an LF as the last byte of
+the pkt-line value.
- Commands MUST appear in the following order, if they appear
- at all in the request stream:
+Commands MUST appear in the following order, if they appear
+at all in the request stream:
- * want
- * have
+* "want"
+* "have"
- The stream is terminated by a pkt-line flush ("0000").
+The stream is terminated by a pkt-line flush (`0000`).
- A single "want" or "have" command MUST have one hex formatted
- SHA-1 as its value. Multiple SHA-1s MUST be sent by sending
- multiple commands.
+A single "want" or "have" command MUST have one hex formatted
+SHA-1 as its value. Multiple SHA-1s MUST be sent by sending
+multiple commands.
- The HAVE list is created by popping the first 32 commits
- from C_PENDING. Less can be supplied if C_PENDING empties.
+The `have` list is created by popping the first 32 commits
+from `c_pending`. Less can be supplied if `c_pending` empties.
- If the client has sent 256 HAVE commits and has not yet
- received one of those back from S_COMMON, or the client has
- emptied C_PENDING it SHOULD include a "done" command to let
- the server know it won't proceed:
+If the client has sent 256 "have" commits and has not yet
+received one of those back from `s_common`, or the client has
+emptied `c_pending` it SHOULD include a "done" command to let
+the server know it won't proceed:
C: 0009done
- (s) Parse the git-upload-pack request:
-
- Verify all objects in WANT are directly reachable from refs.
-
- The server MAY walk backwards through history or through
- the reflog to permit slightly stale requests.
+S: Parse the git-upload-pack request:
- If no WANT objects are received, send an error:
+Verify all objects in `want` are directly reachable from refs.
-TODO: Define error if no want lines are requested.
+The server MAY walk backwards through history or through
+the reflog to permit slightly stale requests.
- If any WANT object is not reachable, send an error:
+If no "want" objects are received, send an error:
+TODO: Define error if no "want" lines are requested.
-TODO: Define error if an invalid want is requested.
+If any "want" object is not reachable, send an error:
+TODO: Define error if an invalid "want" is requested.
- Create an empty list, S_COMMON.
+Create an empty list, `s_common`.
- If 'have' was sent:
+If "have" was sent:
- Loop through the objects in the order supplied by the client.
- For each object, if the server has the object reachable from
- a ref, add it to S_COMMON. If a commit is added to S_COMMON,
- do not add any ancestors, even if they also appear in HAVE.
+Loop through the objects in the order supplied by the client.
- (s) Send the git-upload-pack response:
+For each object, if the server has the object reachable from
+a ref, add it to `s_common`. If a commit is added to `s_common`,
+do not add any ancestors, even if they also appear in `have`.
- If the server has found a closed set of objects to pack or the
- request ends with "done", it replies with the pack.
+S: Send the git-upload-pack response:
+If the server has found a closed set of objects to pack or the
+request ends with "done", it replies with the pack.
TODO: Document the pack based response
- S: PACK...
- The returned stream is the side-band-64k protocol supported
- by the git-upload-pack service, and the pack is embedded into
- stream 1. Progress messages from the server side MAY appear
- in stream 2.
+ S: PACK...
- Here a "closed set of objects" is defined to have at least
- one path from every WANT to at least one COMMON object.
+The returned stream is the side-band-64k protocol supported
+by the git-upload-pack service, and the pack is embedded into
+stream 1. Progress messages from the server side MAY appear
+in stream 2.
- If the server needs more information, it replies with a
- status continue response:
+Here a "closed set of objects" is defined to have at least
+one path from every "want" to at least one "common" object.
+If the server needs more information, it replies with a
+status continue response:
TODO: Document the non-pack response
- (c) Parse the upload-pack response:
-
-TODO: Document parsing response
+C: Parse the upload-pack response:
+ TODO: Document parsing response
- Do another compute step.
+'Do another compute step.'
Smart Service git-receive-pack
------------------------------
-This service reads from the repository pointed to by $GIT_URL.
+This service reads from the repository pointed to by `$GIT_URL`.
Clients MUST first perform ref discovery with
-'$GIT_URL/info/refs?service=git-receive-pack'.
+`$GIT_URL/info/refs?service=git-receive-pack`.
C: POST $GIT_URL/git-receive-pack HTTP/1.0
C: Content-Type: application/x-git-receive-pack-request
@@ -497,7 +500,7 @@ TODO: Document this further.
References
----------
-link:http://www.ietf.org/rfc/rfc1738.txt[RFC 1738: Uniform Resource Locators (URL)]
-link:http://www.ietf.org/rfc/rfc2616.txt[RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1]
+http://www.ietf.org/rfc/rfc1738.txt[RFC 1738: Uniform Resource Locators (URL)]
+http://www.ietf.org/rfc/rfc2616.txt[RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1]
link:technical/pack-protocol.html
link:technical/protocol-capabilities.html
diff --git a/Documentation/technical/pack-protocol.txt b/Documentation/technical/pack-protocol.txt
index c73b62f5e..39c64105a 100644
--- a/Documentation/technical/pack-protocol.txt
+++ b/Documentation/technical/pack-protocol.txt
@@ -338,7 +338,8 @@ during a prior round. This helps to ensure that at least one common
ancestor is found before we give up entirely.
Once the 'done' line is read from the client, the server will either
-send a final 'ACK obj-id' or it will send a 'NAK'. The server only sends
+send a final 'ACK obj-id' or it will send a 'NAK'. 'obj-id' is the object
+name of the last commit determined to be common. The server only sends
ACK after 'done' if there is at least one common base and multi_ack or
multi_ack_detailed is enabled. The server always sends NAK after 'done'
if there is no common base found.
diff --git a/Documentation/technical/protocol-capabilities.txt b/Documentation/technical/protocol-capabilities.txt
index e3e792476..e17434384 100644
--- a/Documentation/technical/protocol-capabilities.txt
+++ b/Documentation/technical/protocol-capabilities.txt
@@ -69,6 +69,24 @@ ends.
Without multi_ack the client would have sent that c-b-a chain anyway,
interleaved with S-R-Q.
+multi_ack_detailed
+------------------
+This is an extension of multi_ack that permits client to better
+understand the server's in-memory state. See pack-protocol.txt,
+section "Packfile Negotiation" for more information.
+
+no-done
+-------
+This capability should only be used with the smart HTTP protocol. If
+multi_ack_detailed and no-done are both present, then the sender is
+free to immediately send a pack following its first "ACK obj-id ready"
+message.
+
+Without no-done in the smart HTTP protocol, the server session would
+end and the client has to make another trip to send "done" before
+the server can send the pack. no-done removes the last round and
+thus slightly reduces latency.
+
thin-pack
---------
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index 248dcabd5..d4f980446 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -3795,7 +3795,7 @@ like so:
$ git update-index filename
-------------------------------------------------
-but to avoid common mistakes with filename globbing etc, the command
+but to avoid common mistakes with filename globbing etc., the command
will not normally add totally new entries or remove old entries,
i.e. it will normally just update existing cache entries.
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index e66a5abb0..a651d6865 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v1.9-rc0
+DEF_VER=v1.9.0.GIT
LF='
'
diff --git a/Makefile b/Makefile
index 99b2b8931..36463919a 100644
--- a/Makefile
+++ b/Makefile
@@ -101,14 +101,6 @@ all::
#
# Define NO_MKSTEMPS if you don't have mkstemps in the C library.
#
-# Define NO_FNMATCH if you don't have fnmatch in the C library.
-#
-# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
-# FNM_CASEFOLD GNU extension.
-#
-# Define NO_WILDMATCH if you do not want to use Git's wildmatch
-# implementation as fnmatch
-#
# Define NO_GECOS_IN_PWENT if you don't have pw_gecos in struct passwd
# in the C library.
#
@@ -342,6 +334,10 @@ all::
# Define DEFAULT_HELP_FORMAT to "man", "info" or "html"
# (defaults to "man") if you want to have a different default when
# "git help" is called without a parameter specifying the format.
+#
+# Define TEST_GIT_INDEX_VERSION to 2, 3 or 4 to run the test suite
+# with a different indexfile format version. If it isn't set the index
+# file format used is index-v[23].
GIT-VERSION-FILE: FORCE
@$(SHELL_PATH) ./GIT-VERSION-GEN
@@ -555,6 +551,7 @@ TEST_PROGRAMS_NEED_X += test-date
TEST_PROGRAMS_NEED_X += test-delta
TEST_PROGRAMS_NEED_X += test-dump-cache-tree
TEST_PROGRAMS_NEED_X += test-genrandom
+TEST_PROGRAMS_NEED_X += test-hashmap
TEST_PROGRAMS_NEED_X += test-index-version
TEST_PROGRAMS_NEED_X += test-line-buffer
TEST_PROGRAMS_NEED_X += test-match-trees
@@ -663,6 +660,8 @@ LIB_H += diff.h
LIB_H += diffcore.h
LIB_H += dir.h
LIB_H += exec_cmd.h
+LIB_H += ewah/ewok.h
+LIB_H += ewah/ewok_rlw.h
LIB_H += fetch-pack.h
LIB_H += fmt-merge-msg.h
LIB_H += fsck.h
@@ -671,7 +670,7 @@ LIB_H += git-compat-util.h
LIB_H += gpg-interface.h
LIB_H += graph.h
LIB_H += grep.h
-LIB_H += hash.h
+LIB_H += hashmap.h
LIB_H += help.h
LIB_H += http.h
LIB_H += kwset.h
@@ -690,8 +689,10 @@ LIB_H += notes-merge.h
LIB_H += notes-utils.h
LIB_H += notes.h
LIB_H += object.h
+LIB_H += pack-objects.h
LIB_H += pack-revindex.h
LIB_H += pack.h
+LIB_H += pack-bitmap.h
LIB_H += parse-options.h
LIB_H += patch-ids.h
LIB_H += pathspec.h
@@ -795,6 +796,10 @@ LIB_OBJS += dir.o
LIB_OBJS += editor.o
LIB_OBJS += entry.o
LIB_OBJS += environment.o
+LIB_OBJS += ewah/bitmap.o
+LIB_OBJS += ewah/ewah_bitmap.o
+LIB_OBJS += ewah/ewah_io.o
+LIB_OBJS += ewah/ewah_rlw.o
LIB_OBJS += exec_cmd.o
LIB_OBJS += fetch-pack.o
LIB_OBJS += fsck.o
@@ -802,7 +807,7 @@ LIB_OBJS += gettext.o
LIB_OBJS += gpg-interface.o
LIB_OBJS += graph.o
LIB_OBJS += grep.o
-LIB_OBJS += hash.o
+LIB_OBJS += hashmap.o
LIB_OBJS += help.o
LIB_OBJS += hex.o
LIB_OBJS += ident.o
@@ -826,7 +831,10 @@ LIB_OBJS += notes-cache.o
LIB_OBJS += notes-merge.o
LIB_OBJS += notes-utils.o
LIB_OBJS += object.o
+LIB_OBJS += pack-bitmap.o
+LIB_OBJS += pack-bitmap-write.o
LIB_OBJS += pack-check.o
+LIB_OBJS += pack-objects.o
LIB_OBJS += pack-revindex.o
LIB_OBJS += pack-write.o
LIB_OBJS += pager.o
@@ -884,6 +892,7 @@ LIB_OBJS += userdiff.o
LIB_OBJS += utf8.o
LIB_OBJS += varint.o
LIB_OBJS += version.o
+LIB_OBJS += versioncmp.o
LIB_OBJS += walker.o
LIB_OBJS += wildmatch.o
LIB_OBJS += wrapper.o
@@ -1271,20 +1280,6 @@ endif
ifdef NO_STRTOULL
COMPAT_CFLAGS += -DNO_STRTOULL
endif
-ifdef NO_FNMATCH
- COMPAT_CFLAGS += -Icompat/fnmatch
- COMPAT_CFLAGS += -DNO_FNMATCH
- COMPAT_OBJS += compat/fnmatch/fnmatch.o
-else
-ifdef NO_FNMATCH_CASEFOLD
- COMPAT_CFLAGS += -Icompat/fnmatch
- COMPAT_CFLAGS += -DNO_FNMATCH_CASEFOLD
- COMPAT_OBJS += compat/fnmatch/fnmatch.o
-endif
-endif
-ifndef NO_WILDMATCH
- COMPAT_CFLAGS += -DUSE_WILDMATCH
-endif
ifdef NO_SETENV
COMPAT_CFLAGS += -DNO_SETENV
COMPAT_OBJS += compat/setenv.o
@@ -2050,10 +2045,10 @@ git-imap-send$X: imap-send.o GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
$(LIBS) $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
-git-http-fetch$X: revision.o http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
+git-http-fetch$X: http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
$(LIBS) $(CURL_LIBCURL)
-git-http-push$X: revision.o http.o http-push.o GIT-LDFLAGS $(GITLIBS)
+git-http-push$X: http.o http-push.o GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
$(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
@@ -2222,6 +2217,9 @@ endif
ifdef GIT_PERF_MAKE_OPTS
@echo GIT_PERF_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_MAKE_OPTS)))'\' >>$@
endif
+ifdef TEST_GIT_INDEX_VERSION
+ @echo TEST_GIT_INDEX_VERSION=\''$(subst ','\'',$(subst ','\'',$(TEST_GIT_INDEX_VERSION)))'\' >>$@
+endif
### Detect Python interpreter path changes
ifndef NO_PYTHON
@@ -2479,8 +2477,9 @@ profile-clean:
$(RM) $(addsuffix *.gcno,$(addprefix $(PROFILE_DIR)/, $(object_dirs)))
clean: profile-clean coverage-clean
- $(RM) *.o *.res block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o xdiff/*.o vcs-svn/*.o \
- builtin/*.o $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
+ $(RM) *.o *.res block-sha1/*.o ppc/*.o compat/*.o compat/*/*.o
+ $(RM) xdiff/*.o vcs-svn/*.o ewah/*.o builtin/*.o
+ $(RM) $(LIB_FILE) $(XDIFF_LIB) $(VCSSVN_LIB)
$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) git$X
$(RM) $(TEST_PROGRAMS) $(NO_INSTALL)
$(RM) -r bin-wrappers $(dep_dirs)
diff --git a/RelNotes b/RelNotes
index c300119d9..e50885caa 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/1.9.txt \ No newline at end of file
+Documentation/RelNotes/2.0.0.txt \ No newline at end of file
diff --git a/advice.c b/advice.c
index 3eca9f5ff..486f823c7 100644
--- a/advice.c
+++ b/advice.c
@@ -2,7 +2,6 @@
int advice_push_update_rejected = 1;
int advice_push_non_ff_current = 1;
-int advice_push_non_ff_default = 1;
int advice_push_non_ff_matching = 1;
int advice_push_already_exists = 1;
int advice_push_fetch_first = 1;
@@ -23,7 +22,6 @@ static struct {
} advice_config[] = {
{ "pushupdaterejected", &advice_push_update_rejected },
{ "pushnonffcurrent", &advice_push_non_ff_current },
- { "pushnonffdefault", &advice_push_non_ff_default },
{ "pushnonffmatching", &advice_push_non_ff_matching },
{ "pushalreadyexists", &advice_push_already_exists },
{ "pushfetchfirst", &advice_push_fetch_first },
diff --git a/advice.h b/advice.h
index 08fbc8ee3..5ecc6c154 100644
--- a/advice.h
+++ b/advice.h
@@ -5,7 +5,6 @@
extern int advice_push_update_rejected;
extern int advice_push_non_ff_current;
-extern int advice_push_non_ff_default;
extern int advice_push_non_ff_matching;
extern int advice_push_already_exists;
extern int advice_push_fetch_first;
diff --git a/archive.c b/archive.c
index 346f3b2f1..3fc0fb292 100644
--- a/archive.c
+++ b/archive.c
@@ -17,6 +17,7 @@ static char const * const archive_usage[] = {
static const struct archiver **archivers;
static int nr_archivers;
static int alloc_archivers;
+static int remote_allow_unreachable;
void register_archiver(struct archiver *ar)
{
@@ -257,10 +258,10 @@ static void parse_treeish_arg(const char **argv,
unsigned char sha1[20];
/* Remotes are only allowed to fetch actual refs */
- if (remote) {
+ if (remote && !remote_allow_unreachable) {
char *ref = NULL;
- const char *colon = strchr(name, ':');
- int refnamelen = colon ? colon - name : strlen(name);
+ const char *colon = strchrnul(name, ':');
+ int refnamelen = colon - name;
if (!dwim_ref(name, refnamelen, sha1, &ref))
die("no such ref: %.*s", refnamelen, name);
@@ -401,6 +402,14 @@ static int parse_archive_args(int argc, const char **argv,
return argc;
}
+static int git_default_archive_config(const char *var, const char *value,
+ void *cb)
+{
+ if (!strcmp(var, "uploadarchive.allowunreachable"))
+ remote_allow_unreachable = git_config_bool(var, value);
+ return git_default_config(var, value, cb);
+}
+
int write_archive(int argc, const char **argv, const char *prefix,
int setup_prefix, const char *name_hint, int remote)
{
@@ -411,7 +420,7 @@ int write_archive(int argc, const char **argv, const char *prefix,
if (setup_prefix && prefix == NULL)
prefix = setup_git_directory_gently(&nongit);
- git_config(git_default_config, NULL);
+ git_config(git_default_archive_config, NULL);
init_tar_archiver();
init_zip_archiver();
diff --git a/attr.c b/attr.c
index 8d13d70e8..734222dc4 100644
--- a/attr.c
+++ b/attr.c
@@ -338,12 +338,7 @@ static void handle_attr_line(struct attr_stack *res,
a = parse_attr_line(line, src, lineno, macro_ok);
if (!a)
return;
- if (res->alloc <= res->num_matches) {
- res->alloc = alloc_nr(res->num_matches);
- res->attrs = xrealloc(res->attrs,
- sizeof(struct match_attr *) *
- res->alloc);
- }
+ ALLOC_GROW(res->attrs, res->num_matches + 1, res->alloc);
res->attrs[res->num_matches++] = a;
}
diff --git a/bisect.c b/bisect.c
index 37200b41f..8448d2787 100644
--- a/bisect.c
+++ b/bisect.c
@@ -685,7 +685,6 @@ static void mark_expected_rev(char *bisect_rev_hex)
static int bisect_checkout(char *bisect_rev_hex, int no_checkout)
{
- int res;
mark_expected_rev(bisect_rev_hex);
@@ -696,6 +695,7 @@ static int bisect_checkout(char *bisect_rev_hex, int no_checkout)
die("update-ref --no-deref HEAD failed on %s",
bisect_rev_hex);
} else {
+ int res;
res = run_command_v_opt(argv_checkout, RUN_GIT_CMD);
if (res)
exit(res);
diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
index e1a1eb609..22b125cf8 100644
--- a/block-sha1/sha1.c
+++ b/block-sha1/sha1.c
@@ -62,38 +62,6 @@
#define setW(x, val) (W(x) = (val))
#endif
-/*
- * Performance might be improved if the CPU architecture is OK with
- * unaligned 32-bit loads and a fast ntohl() is available.
- * Otherwise fall back to byte loads and shifts which is portable,
- * and is faster on architectures with memory alignment issues.
- */
-
-#if defined(__i386__) || defined(__x86_64__) || \
- defined(_M_IX86) || defined(_M_X64) || \
- defined(__ppc__) || defined(__ppc64__) || \
- defined(__powerpc__) || defined(__powerpc64__) || \
- defined(__s390__) || defined(__s390x__)
-
-#define get_be32(p) ntohl(*(unsigned int *)(p))
-#define put_be32(p, v) do { *(unsigned int *)(p) = htonl(v); } while (0)
-
-#else
-
-#define get_be32(p) ( \
- (*((unsigned char *)(p) + 0) << 24) | \
- (*((unsigned char *)(p) + 1) << 16) | \
- (*((unsigned char *)(p) + 2) << 8) | \
- (*((unsigned char *)(p) + 3) << 0) )
-#define put_be32(p, v) do { \
- unsigned int __v = (v); \
- *((unsigned char *)(p) + 0) = __v >> 24; \
- *((unsigned char *)(p) + 1) = __v >> 16; \
- *((unsigned char *)(p) + 2) = __v >> 8; \
- *((unsigned char *)(p) + 3) = __v >> 0; } while (0)
-
-#endif
-
/* This "rolls" over the 512-bit array */
#define W(x) (array[(x)&15])
diff --git a/branch.c b/branch.c
index 723a36bc5..8eecb1d8c 100644
--- a/branch.c
+++ b/branch.c
@@ -1,3 +1,4 @@
+#include "git-compat-util.h"
#include "cache.h"
#include "branch.h"
#include "refs.h"
@@ -49,12 +50,11 @@ static int should_setup_rebase(const char *origin)
void install_branch_config(int flag, const char *local, const char *origin, const char *remote)
{
- const char *shortname = remote + 11;
- int remote_is_branch = starts_with(remote, "refs/heads/");
+ const char *shortname = skip_prefix(remote, "refs/heads/");
struct strbuf key = STRBUF_INIT;
int rebasing = should_setup_rebase(origin);
- if (remote_is_branch
+ if (shortname
&& !strcmp(local, shortname)
&& !origin) {
warning(_("Not setting branch %s as its own upstream."),
@@ -77,29 +77,29 @@ void install_branch_config(int flag, const char *local, const char *origin, cons
strbuf_release(&key);
if (flag & BRANCH_CONFIG_VERBOSE) {
- if (remote_is_branch && origin)
+ if (shortname && origin)
printf_ln(rebasing ?
_("Branch %s set up to track remote branch %s from %s by rebasing.") :
_("Branch %s set up to track remote branch %s from %s."),
local, shortname, origin);
- else if (remote_is_branch && !origin)
+ else if (shortname && !origin)
printf_ln(rebasing ?
_("Branch %s set up to track local branch %s by rebasing.") :
_("Branch %s set up to track local branch %s."),
local, shortname);
- else if (!remote_is_branch && origin)
+ else if (!shortname && origin)
printf_ln(rebasing ?
_("Branch %s set up to track remote ref %s by rebasing.") :
_("Branch %s set up to track remote ref %s."),
local, remote);
- else if (!remote_is_branch && !origin)
+ else if (!shortname && !origin)
printf_ln(rebasing ?
_("Branch %s set up to track local ref %s by rebasing.") :
_("Branch %s set up to track local ref %s."),
local, remote);
else
- die("BUG: impossible combination of %d and %p",
- remote_is_branch, origin);
+ die("BUG: impossible combination of %p and %p",
+ shortname, origin);
}
}
@@ -114,10 +114,6 @@ static int setup_tracking(const char *new_ref, const char *orig_ref,
struct tracking tracking;
int config_flags = quiet ? 0 : BRANCH_CONFIG_VERBOSE;
- if (strlen(new_ref) > 1024 - 7 - 7 - 1)
- return error(_("Tracking not set up: name too long: %s"),
- new_ref);
-
memset(&tracking, 0, sizeof(tracking));
tracking.spec.dst = (char *)orig_ref;
if (for_each_remote(find_tracked_branch, &tracking))
diff --git a/builtin/add.c b/builtin/add.c
index 2a2722fa1..4b045bace 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -26,55 +26,8 @@ static int take_worktree_changes;
struct update_callback_data {
int flags;
int add_errors;
- const char *implicit_dot;
- size_t implicit_dot_len;
-
- /* only needed for 2.0 transition preparation */
- int warn_add_would_remove;
};
-static const char *option_with_implicit_dot;
-static const char *short_option_with_implicit_dot;
-
-static void warn_pathless_add(void)
-{
- static int shown;
- assert(option_with_implicit_dot && short_option_with_implicit_dot);
-
- if (shown)
- return;
- shown = 1;
-
- /*
- * To be consistent with "git add -p" and most Git
- * commands, we should default to being tree-wide, but
- * this is not the original behavior and can't be
- * changed until users trained themselves not to type
- * "git add -u" or "git add -A". For now, we warn and
- * keep the old behavior. Later, the behavior can be changed
- * to tree-wide, keeping the warning for a while, and
- * eventually we can drop the warning.
- */
- warning(_("The behavior of 'git add %s (or %s)' with no path argument from a\n"
- "subdirectory of the tree will change in Git 2.0 and should not be used anymore.\n"
- "To add content for the whole tree, run:\n"
- "\n"
- " git add %s :/\n"
- " (or git add %s :/)\n"
- "\n"
- "To restrict the command to the current directory, run:\n"
- "\n"
- " git add %s .\n"
- " (or git add %s .)\n"
- "\n"
- "With the current Git version, the command is restricted to "
- "the current directory.\n"
- ""),
- option_with_implicit_dot, short_option_with_implicit_dot,
- option_with_implicit_dot, short_option_with_implicit_dot,
- option_with_implicit_dot, short_option_with_implicit_dot);
-}
-
static int fix_unmerged_status(struct diff_filepair *p,
struct update_callback_data *data)
{
@@ -96,49 +49,15 @@ static int fix_unmerged_status(struct diff_filepair *p,
return DIFF_STATUS_MODIFIED;
}
-static const char *add_would_remove_warning = N_(
- "You ran 'git add' with neither '-A (--all)' or '--ignore-removal',\n"
-"whose behaviour will change in Git 2.0 with respect to paths you removed.\n"
-"Paths like '%s' that are\n"
-"removed from your working tree are ignored with this version of Git.\n"
-"\n"
-"* 'git add --ignore-removal <pathspec>', which is the current default,\n"
-" ignores paths you removed from your working tree.\n"
-"\n"
-"* 'git add --all <pathspec>' will let you also record the removals.\n"
-"\n"
-"Run 'git status' to check the paths you removed from your working tree.\n");
-
-static void warn_add_would_remove(const char *path)
-{
- warning(_(add_would_remove_warning), path);
-}
-
static void update_callback(struct diff_queue_struct *q,
struct diff_options *opt, void *cbdata)
{
int i;
struct update_callback_data *data = cbdata;
- const char *implicit_dot = data->implicit_dot;
- size_t implicit_dot_len = data->implicit_dot_len;
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
const char *path = p->one->path;
- /*
- * Check if "git add -A" or "git add -u" was run from a
- * subdirectory with a modified file outside that directory,
- * and warn if so.
- *
- * "git add -u" will behave like "git add -u :/" instead of
- * "git add -u ." in the future. This warning prepares for
- * that change.
- */
- if (implicit_dot &&
- strncmp_icase(path, implicit_dot, implicit_dot_len)) {
- warn_pathless_add();
- continue;
- }
switch (fix_unmerged_status(p, data)) {
default:
die(_("unexpected diff status %c"), p->status);
@@ -151,10 +70,6 @@ static void update_callback(struct diff_queue_struct *q,
}
break;
case DIFF_STATUS_DELETED:
- if (data->warn_add_would_remove) {
- warn_add_would_remove(path);
- data->warn_add_would_remove = 0;
- }
if (data->flags & ADD_CACHE_IGNORE_REMOVAL)
break;
if (!(data->flags & ADD_CACHE_PRETEND))
@@ -166,37 +81,28 @@ static void update_callback(struct diff_queue_struct *q,
}
}
-static void update_files_in_cache(const char *prefix,
- const struct pathspec *pathspec,
- struct update_callback_data *data)
+int add_files_to_cache(const char *prefix,
+ const struct pathspec *pathspec, int flags)
{
+ struct update_callback_data data;
struct rev_info rev;
+ memset(&data, 0, sizeof(data));
+ data.flags = flags;
+
init_revisions(&rev, prefix);
setup_revisions(0, NULL, &rev, NULL);
if (pathspec)
copy_pathspec(&rev.prune_data, pathspec);
rev.diffopt.output_format = DIFF_FORMAT_CALLBACK;
rev.diffopt.format_callback = update_callback;
- rev.diffopt.format_callback_data = data;
+ rev.diffopt.format_callback_data = &data;
rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
run_diff_files(&rev, DIFF_RACY_IS_MODIFIED);
-}
-
-int add_files_to_cache(const char *prefix,
- const struct pathspec *pathspec, int flags)
-{
- struct update_callback_data data;
-
- memset(&data, 0, sizeof(data));
- data.flags = flags;
- update_files_in_cache(prefix, pathspec, &data);
return !!data.add_errors;
}
-#define WARN_IMPLICIT_DOT (1u << 0)
-static char *prune_directory(struct dir_struct *dir, struct pathspec *pathspec,
- int prefix, unsigned flag)
+static char *prune_directory(struct dir_struct *dir, struct pathspec *pathspec, int prefix)
{
char *seen;
int i;
@@ -208,19 +114,8 @@ static char *prune_directory(struct dir_struct *dir, struct pathspec *pathspec,
i = dir->nr;
while (--i >= 0) {
struct dir_entry *entry = *src++;
- if (match_pathspec_depth(pathspec, entry->name, entry->len,
- prefix, seen))
+ if (dir_path_match(entry, pathspec, prefix, seen))
*dst++ = entry;
- else if (flag & WARN_IMPLICIT_DOT)
- /*
- * "git add -A" was run from a subdirectory with a
- * new file outside that directory.
- *
- * "git add -A" will behave like "git add -A :/"
- * instead of "git add -A ." in the future.
- * Warn about the coming behavior change.
- */
- warn_pathless_add();
}
dir->nr = dst - dir->entries;
add_pathspec_matches_against_index(pathspec, seen);
@@ -339,7 +234,7 @@ N_("The following paths are ignored by one of your .gitignore files:\n");
static int verbose, show_only, ignored_too, refresh_only;
static int ignore_add_errors, intent_to_add, ignore_missing;
-#define ADDREMOVE_DEFAULT 0 /* Change to 1 in Git 2.0 */
+#define ADDREMOVE_DEFAULT 1
static int addremove = ADDREMOVE_DEFAULT;
static int addremove_explicit = -1; /* unspecified */
@@ -412,8 +307,6 @@ int cmd_add(int argc, const char **argv, const char *prefix)
int add_new_files;
int require_pathspec;
char *seen = NULL;
- int implicit_dot = 0;
- struct update_callback_data update_data;
git_config(add_config, NULL);
@@ -437,36 +330,17 @@ int cmd_add(int argc, const char **argv, const char *prefix)
if (addremove && take_worktree_changes)
die(_("-A and -u are mutually incompatible"));
- /*
- * Warn when "git add pathspec..." was given without "-u" or "-A"
- * and pathspec... covers a removed path.
- */
- memset(&update_data, 0, sizeof(update_data));
- if (!take_worktree_changes && addremove_explicit < 0)
- update_data.warn_add_would_remove = 1;
-
if (!take_worktree_changes && addremove_explicit < 0 && argc)
- /*
- * Turn "git add pathspec..." to "git add -A pathspec..."
- * in Git 2.0 but not yet
- */
- ; /* addremove = 1; */
+ /* Turn "git add pathspec..." to "git add -A pathspec..." */
+ addremove = 1;
if (!show_only && ignore_missing)
die(_("Option --ignore-missing can only be used together with --dry-run"));
- if (addremove) {
- option_with_implicit_dot = "--all";
- short_option_with_implicit_dot = "-A";
- }
- if (take_worktree_changes) {
- option_with_implicit_dot = "--update";
- short_option_with_implicit_dot = "-u";
- }
- if (option_with_implicit_dot && !argc) {
- static const char *here[2] = { ".", NULL };
+
+ if ((0 < addremove_explicit || take_worktree_changes) && !argc) {
+ static const char *whole[2] = { ":/", NULL };
argc = 1;
- argv = here;
- implicit_dot = 1;
+ argv = whole;
}
add_new_files = !take_worktree_changes && !refresh_only;
@@ -479,8 +353,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
(intent_to_add ? ADD_CACHE_INTENT : 0) |
(ignore_add_errors ? ADD_CACHE_IGNORE_ERRORS : 0) |
(!(addremove || take_worktree_changes)
- ? ADD_CACHE_IGNORE_REMOVAL : 0)) |
- (implicit_dot ? ADD_CACHE_IMPLICIT_DOT : 0);
+ ? ADD_CACHE_IGNORE_REMOVAL : 0));
if (require_pathspec && argc == 0) {
fprintf(stderr, _("Nothing specified, nothing added.\n"));
@@ -514,18 +387,15 @@ int cmd_add(int argc, const char **argv, const char *prefix)
memset(&empty_pathspec, 0, sizeof(empty_pathspec));
/* This picks up the paths that are not tracked */
- baselen = fill_directory(&dir, implicit_dot ? &empty_pathspec : &pathspec);
+ baselen = fill_directory(&dir, &pathspec);
if (pathspec.nr)
- seen = prune_directory(&dir, &pathspec, baselen,
- implicit_dot ? WARN_IMPLICIT_DOT : 0);
+ seen = prune_directory(&dir, &pathspec, baselen);
}
if (refresh_only) {
refresh(verbose, &pathspec);
goto finish;
}
- if (implicit_dot && prefix)
- refresh_cache(REFRESH_QUIET);
if (pathspec.nr) {
int i;
@@ -565,21 +435,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
plug_bulk_checkin();
- if ((flags & ADD_CACHE_IMPLICIT_DOT) && prefix) {
- /*
- * Check for modified files throughout the worktree so
- * update_callback has a chance to warn about changes
- * outside the cwd.
- */
- update_data.implicit_dot = prefix;
- update_data.implicit_dot_len = strlen(prefix);
- free_pathspec(&pathspec);
- memset(&pathspec, 0, sizeof(pathspec));
- }
- update_data.flags = flags & ~ADD_CACHE_IMPLICIT_DOT;
- update_files_in_cache(prefix, &pathspec, &update_data);
+ exit_status |= add_files_to_cache(prefix, &pathspec, flags);
- exit_status |= !!update_data.add_errors;
if (add_new_files)
exit_status |= add_files(&dir, flags);
diff --git a/builtin/apply.c b/builtin/apply.c
index b0d098622..018952379 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -1943,13 +1943,7 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
size - offset - hdrsize, patch);
if (!patchsize) {
- static const char *binhdr[] = {
- "Binary files ",
- "Files ",
- NULL,
- };
static const char git_binary[] = "GIT binary patch\n";
- int i;
int hd = hdrsize + offset;
unsigned long llen = linelen(buffer + hd, size - hd);
@@ -1965,6 +1959,12 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
patchsize = 0;
}
else if (!memcmp(" differ\n", buffer + hd + llen - 8, 8)) {
+ static const char *binhdr[] = {
+ "Binary files ",
+ "Files ",
+ NULL,
+ };
+ int i;
for (i = 0; binhdr[i]; i++) {
int len = strlen(binhdr[i]);
if (len < size - hd &&
@@ -4152,7 +4152,7 @@ static int use_patch(struct patch *p)
/* See if it matches any of exclude/include rule */
for (i = 0; i < limit_by_name.nr; i++) {
struct string_list_item *it = &limit_by_name.items[i];
- if (!fnmatch(it->string, pathname, 0))
+ if (!wildmatch(it->string, pathname, 0, NULL))
return (it->util != NULL);
}
diff --git a/builtin/blame.c b/builtin/blame.c
index e44a6bb30..e5b5d71ba 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -197,7 +197,6 @@ static void drop_origin_blob(struct origin *o)
* scoreboard structure, sorted by the target line number.
*/
struct blame_entry {
- struct blame_entry *prev;
struct blame_entry *next;
/* the first line of this group in the final image;
@@ -256,15 +255,6 @@ struct scoreboard {
int *lineno;
};
-static inline int same_suspect(struct origin *a, struct origin *b)
-{
- if (a == b)
- return 1;
- if (a->commit != b->commit)
- return 0;
- return !strcmp(a->path, b->path);
-}
-
static void sanity_check_refcnt(struct scoreboard *);
/*
@@ -277,13 +267,11 @@ static void coalesce(struct scoreboard *sb)
struct blame_entry *ent, *next;
for (ent = sb->ent; ent && (next = ent->next); ent = next) {
- if (same_suspect(ent->suspect, next->suspect) &&
+ if (ent->suspect == next->suspect &&
ent->guilty == next->guilty &&
ent->s_lno + ent->num_lines == next->s_lno) {
ent->num_lines += next->num_lines;
ent->next = next->next;
- if (ent->next)
- ent->next->prev = ent;
origin_decref(next->suspect);
free(next);
ent->score = 0;
@@ -534,7 +522,7 @@ static void add_blame_entry(struct scoreboard *sb, struct blame_entry *e)
prev = ent;
/* prev, if not NULL, is the last one that is below e */
- e->prev = prev;
+
if (prev) {
e->next = prev->next;
prev->next = e;
@@ -543,8 +531,6 @@ static void add_blame_entry(struct scoreboard *sb, struct blame_entry *e)
e->next = sb->ent;
sb->ent = e;
}
- if (e->next)
- e->next->prev = e;
}
/*
@@ -555,14 +541,12 @@ static void add_blame_entry(struct scoreboard *sb, struct blame_entry *e)
*/
static void dup_entry(struct blame_entry *dst, struct blame_entry *src)
{
- struct blame_entry *p, *n;
+ struct blame_entry *n;
- p = dst->prev;
n = dst->next;
origin_incref(src->suspect);
origin_decref(dst->suspect);
memcpy(dst, src, sizeof(*src));
- dst->prev = p;
dst->next = n;
dst->score = 0;
}
@@ -742,7 +726,7 @@ static int find_last_in_target(struct scoreboard *sb, struct origin *target)
int last_in_target = -1;
for (e = sb->ent; e; e = e->next) {
- if (e->guilty || !same_suspect(e->suspect, target))
+ if (e->guilty || e->suspect != target)
continue;
if (last_in_target < e->s_lno + e->num_lines)
last_in_target = e->s_lno + e->num_lines;
@@ -762,7 +746,7 @@ static void blame_chunk(struct scoreboard *sb,
struct blame_entry *e;
for (e = sb->ent; e; e = e->next) {
- if (e->guilty || !same_suspect(e->suspect, target))
+ if (e->guilty || e->suspect != target)
continue;
if (same <= e->s_lno)
continue;
@@ -939,7 +923,6 @@ static void find_copy_in_blob(struct scoreboard *sb,
mmfile_t *file_p)
{
const char *cp;
- int cnt;
mmfile_t file_o;
struct handle_split_cb_data d;
@@ -950,13 +933,7 @@ static void find_copy_in_blob(struct scoreboard *sb,
*/
cp = nth_line(sb, ent->lno);
file_o.ptr = (char *) cp;
- cnt = ent->num_lines;
-
- while (cnt && cp < sb->final_buf + sb->final_buf_size) {
- if (*cp++ == '\n')
- cnt--;
- }
- file_o.size = cp - file_o.ptr;
+ file_o.size = nth_line(sb, ent->lno + ent->num_lines) - cp;
/*
* file_o is a part of final image we are annotating.
@@ -992,7 +969,7 @@ static int find_move_in_parent(struct scoreboard *sb,
while (made_progress) {
made_progress = 0;
for (e = sb->ent; e; e = e->next) {
- if (e->guilty || !same_suspect(e->suspect, target) ||
+ if (e->guilty || e->suspect != target ||
ent_score(sb, e) < blame_move_score)
continue;
find_copy_in_blob(sb, e, parent, split, &file_p);
@@ -1027,14 +1004,14 @@ static struct blame_list *setup_blame_list(struct scoreboard *sb,
for (e = sb->ent, num_ents = 0; e; e = e->next)
if (!e->scanned && !e->guilty &&
- same_suspect(e->suspect, target) &&
+ e->suspect == target &&
min_score < ent_score(sb, e))
num_ents++;
if (num_ents) {
blame_list = xcalloc(num_ents, sizeof(struct blame_list));
for (e = sb->ent, i = 0; e; e = e->next)
if (!e->scanned && !e->guilty &&
- same_suspect(e->suspect, target) &&
+ e->suspect == target &&
min_score < ent_score(sb, e))
blame_list[i++].ent = e;
}
@@ -1178,7 +1155,7 @@ static void pass_whole_blame(struct scoreboard *sb,
origin->file.ptr = NULL;
}
for (e = sb->ent; e; e = e->next) {
- if (!same_suspect(e->suspect, origin))
+ if (e->suspect != origin)
continue;
origin_incref(porigin);
origin_decref(e->suspect);
@@ -1567,7 +1544,7 @@ static void assign_blame(struct scoreboard *sb, int opt)
/* Take responsibility for the remaining entries */
for (ent = sb->ent; ent; ent = ent->next)
- if (same_suspect(ent->suspect, suspect))
+ if (ent->suspect == suspect)
found_guilty_entry(ent);
origin_decref(suspect);
@@ -1580,14 +1557,14 @@ static const char *format_time(unsigned long time, const char *tz_str,
int show_raw_time)
{
static char time_buf[128];
- const char *time_str;
- int time_len;
- int tz;
if (show_raw_time) {
snprintf(time_buf, sizeof(time_buf), "%lu %s", time, tz_str);
}
else {
+ const char *time_str;
+ int time_len;
+ int tz;
tz = atoi(tz_str);
time_str = show_date(time, tz, blame_date_mode);
time_len = strlen(time_str);
@@ -1772,25 +1749,41 @@ static int prepare_lines(struct scoreboard *sb)
{
const char *buf = sb->final_buf;
unsigned long len = sb->final_buf_size;
- int num = 0, incomplete = 0, bol = 1;
+ const char *end = buf + len;
+ const char *p;
+ int *lineno;
+ int num = 0, incomplete = 0;
- if (len && buf[len-1] != '\n')
- incomplete++; /* incomplete line at the end */
- while (len--) {
- if (bol) {
- sb->lineno = xrealloc(sb->lineno,
- sizeof(int *) * (num + 1));
- sb->lineno[num] = buf - sb->final_buf;
- bol = 0;
- }
- if (*buf++ == '\n') {
+ for (p = buf;;) {
+ p = memchr(p, '\n', end - p);
+ if (p) {
+ p++;
num++;
- bol = 1;
+ continue;
}
+ break;
}
- sb->lineno = xrealloc(sb->lineno,
- sizeof(int *) * (num + incomplete + 1));
- sb->lineno[num + incomplete] = buf - sb->final_buf;
+
+ if (len && end[-1] != '\n')
+ incomplete++; /* incomplete line at the end */
+
+ sb->lineno = xmalloc(sizeof(*sb->lineno) * (num + incomplete + 1));
+ lineno = sb->lineno;
+
+ *lineno++ = 0;
+ for (p = buf;;) {
+ p = memchr(p, '\n', end - p);
+ if (p) {
+ p++;
+ *lineno++ = p - buf;
+ continue;
+ }
+ break;
+ }
+
+ if (incomplete)
+ *lineno++ = len;
+
sb->num_lines = num + incomplete;
return sb->num_lines;
}
@@ -2502,8 +2495,6 @@ parse_done:
ent->suspect = o;
ent->s_lno = bottom;
ent->next = next;
- if (next)
- next->prev = ent;
origin_incref(o);
}
origin_decref(o);
diff --git a/builtin/branch.c b/builtin/branch.c
index b4d771673..652b1d2d1 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -315,7 +315,7 @@ static int match_patterns(const char **pattern, const char *refname)
if (!*pattern)
return 1; /* no pattern always matches */
while (*pattern) {
- if (!fnmatch(*pattern, refname, 0))
+ if (!wildmatch(*pattern, refname, 0, NULL))
return 1;
pattern++;
}
diff --git a/builtin/check-attr.c b/builtin/check-attr.c
index e9af7b2bf..5600ec3f6 100644
--- a/builtin/check-attr.c
+++ b/builtin/check-attr.c
@@ -102,6 +102,9 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix)
struct git_attr_check *check;
int cnt, i, doubledash, filei;
+ if (!is_bare_repository())
+ setup_work_tree();
+
git_config(git_default_config, NULL);
argc = parse_options(argc, argv, prefix, check_attr_options,
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 5df3837e3..ada51fa70 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -297,8 +297,7 @@ static int checkout_paths(const struct checkout_opts *opts,
* match_pathspec() for _all_ entries when
* opts->source_tree != NULL.
*/
- if (match_pathspec_depth(&opts->pathspec, ce->name, ce_namelen(ce),
- 0, ps_matched))
+ if (ce_path_match(ce, &opts->pathspec, ps_matched))
ce->ce_flags |= CE_MATCHED;
}
diff --git a/builtin/clean.c b/builtin/clean.c
index 2f2629714..cf76b1f41 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -154,7 +154,7 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag,
DIR *dir;
struct strbuf quoted = STRBUF_INIT;
struct dirent *e;
- int res = 0, ret = 0, gone = 1, original_len = path->len, len, i;
+ int res = 0, ret = 0, gone = 1, original_len = path->len, len;
unsigned char submodule_head[20];
struct string_list dels = STRING_LIST_INIT_DUP;
@@ -242,6 +242,7 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag,
}
if (!*dir_gone && !quiet) {
+ int i;
for (i = 0; i < dels.nr; i++)
printf(dry_run ? _(msg_would_remove) : _(msg_remove), dels.items[i].string);
}
@@ -933,48 +934,28 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
for (i = 0; i < dir.nr; i++) {
struct dir_entry *ent = dir.entries[i];
- int len, pos;
int matches = 0;
- const struct cache_entry *ce;
struct stat st;
const char *rel;
- /*
- * Remove the '/' at the end that directory
- * walking adds for directory entries.
- */
- len = ent->len;
- if (len && ent->name[len-1] == '/')
- len--;
- pos = cache_name_pos(ent->name, len);
- if (0 <= pos)
- continue; /* exact match */
- pos = -pos - 1;
- if (pos < active_nr) {
- ce = active_cache[pos];
- if (ce_namelen(ce) == len &&
- !memcmp(ce->name, ent->name, len))
- continue; /* Yup, this one exists unmerged */
- }
+ if (!cache_name_is_other(ent->name, ent->len))
+ continue;
if (lstat(ent->name, &st))
die_errno("Cannot lstat '%s'", ent->name);
if (pathspec.nr)
- matches = match_pathspec_depth(&pathspec, ent->name,
- len, 0, NULL);
+ matches = dir_path_match(ent, &pathspec, 0, NULL);
- if (S_ISDIR(st.st_mode)) {
- if (remove_directories || (matches == MATCHED_EXACTLY)) {
- rel = relative_path(ent->name, prefix, &buf);
- string_list_append(&del_list, rel);
- }
- } else {
- if (pathspec.nr && !matches)
- continue;
- rel = relative_path(ent->name, prefix, &buf);
- string_list_append(&del_list, rel);
- }
+ if (pathspec.nr && !matches)
+ continue;
+
+ if (S_ISDIR(st.st_mode) && !remove_directories &&
+ matches != MATCHED_EXACTLY)
+ continue;
+
+ rel = relative_path(ent->name, prefix, &buf);
+ string_list_append(&del_list, rel);
}
if (interactive && del_list.nr > 0)
diff --git a/builtin/commit-tree.c b/builtin/commit-tree.c
index f641ff2a8..987a4c3d7 100644
--- a/builtin/commit-tree.c
+++ b/builtin/commit-tree.c
@@ -12,6 +12,8 @@
static const char commit_tree_usage[] = "git commit-tree [(-p <sha1>)...] [-S[<keyid>]] [-m <message>] [-F <file>] <sha1> <changelog";
+static const char *sign_commit;
+
static void new_parent(struct commit *parent, struct commit_list **parents_p)
{
unsigned char *sha1 = parent->object.sha1;
@@ -31,6 +33,10 @@ static int commit_tree_config(const char *var, const char *value, void *cb)
int status = git_gpg_config(var, value, NULL);
if (status)
return status;
+ if (!strcmp(var, "commit.gpgsign")) {
+ sign_commit = git_config_bool(var, value) ? "" : NULL;
+ return 0;
+ }
return git_default_config(var, value, cb);
}
@@ -41,7 +47,6 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
unsigned char tree_sha1[20];
unsigned char commit_sha1[20];
struct strbuf buffer = STRBUF_INIT;
- const char *sign_commit = NULL;
git_config(commit_tree_config, NULL);
@@ -66,6 +71,11 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
continue;
}
+ if (!strcmp(arg, "--no-gpg-sign")) {
+ sign_commit = NULL;
+ continue;
+ }
+
if (!strcmp(arg, "-m")) {
if (argc <= ++i)
usage(commit_tree_usage);
diff --git a/builtin/commit.c b/builtin/commit.c
index 3767478c6..3783bcadc 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -234,7 +234,7 @@ static int list_paths(struct string_list *list, const char *with_tree,
if (ce->ce_flags & CE_UPDATE)
continue;
- if (!match_pathspec_depth(pattern, ce->name, ce_namelen(ce), 0, m))
+ if (!ce_path_match(ce, pattern, m))
continue;
item = string_list_insert(list, ce->name);
if (ce_skip_worktree(ce))
@@ -307,7 +307,6 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
int fd;
struct string_list partial;
struct pathspec pathspec;
- char *old_index_env = NULL;
int refresh_flags = REFRESH_QUIET;
if (is_status)
@@ -320,6 +319,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
die(_("index file corrupt"));
if (interactive) {
+ char *old_index_env = NULL;
fd = hold_locked_index(&index_lock, 1);
refresh_cache_or_die(refresh_flags);
@@ -600,12 +600,10 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
{
struct stat statbuf;
struct strbuf committer_ident = STRBUF_INIT;
- int commitable, saved_color_setting;
+ int commitable;
struct strbuf sb = STRBUF_INIT;
- char *buffer;
const char *hook_arg1 = NULL;
const char *hook_arg2 = NULL;
- int ident_shown = 0;
int clean_message_contents = (cleanup_mode != CLEANUP_NONE);
int old_display_comment_prefix;
@@ -649,6 +647,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
logfile);
hook_arg1 = "message";
} else if (use_message) {
+ char *buffer;
buffer = strstr(use_message_buffer, "\n\n");
if (!use_editor && (!buffer || buffer[2] == '\0'))
die(_("commit has empty message"));
@@ -753,6 +752,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
/* This checks if committer ident is explicitly given */
strbuf_addstr(&committer_ident, git_committer_info(IDENT_STRICT));
if (use_editor && include_status) {
+ int ident_shown = 0;
+ int saved_color_setting;
char *ai_tmp, *ci_tmp;
if (whence != FROM_COMMIT)
status_printf_ln(s, GIT_COLOR_NORMAL,
@@ -1406,6 +1407,10 @@ static int git_commit_config(const char *k, const char *v, void *cb)
}
if (!strcmp(k, "commit.cleanup"))
return git_config_string(&cleanup_arg, k, v);
+ if (!strcmp(k, "commit.gpgsign")) {
+ sign_commit = git_config_bool(k, v) ? "" : NULL;
+ return 0;
+ }
status = git_gpg_config(k, v, NULL);
if (status)
@@ -1510,7 +1515,6 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
struct ref_lock *ref_lock;
struct commit_list *parents = NULL, **pptr = &parents;
struct stat statbuf;
- int allow_fast_forward = 1;
struct commit *current_head = NULL;
struct commit_extra_header *extra = NULL;
@@ -1558,6 +1562,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
} else if (whence == FROM_MERGE) {
struct strbuf m = STRBUF_INIT;
FILE *fp;
+ int allow_fast_forward = 1;
if (!reflog_msg)
reflog_msg = "commit (merge)";
diff --git a/builtin/config.c b/builtin/config.c
index 92ebf23f0..5677c942b 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -21,8 +21,7 @@ static char key_delim = ' ';
static char term = '\n';
static int use_global_config, use_system_config, use_local_config;
-static const char *given_config_file;
-static const char *given_config_blob;
+static struct git_config_source given_config_source;
static int actions, types;
static const char *get_color_slot, *get_colorbool_slot;
static int end_null;
@@ -55,8 +54,8 @@ static struct option builtin_config_options[] = {
OPT_BOOL(0, "global", &use_global_config, N_("use global config file")),
OPT_BOOL(0, "system", &use_system_config, N_("use system config file")),
OPT_BOOL(0, "local", &use_local_config, N_("use repository config file")),
- OPT_STRING('f', "file", &given_config_file, N_("file"), N_("use given config file")),
- OPT_STRING(0, "blob", &given_config_blob, N_("blob-id"), N_("read config from given blob object")),
+ OPT_STRING('f', "file", &given_config_source.file, N_("file"), N_("use given config file")),
+ OPT_STRING(0, "blob", &given_config_source.blob, N_("blob-id"), N_("read config from given blob object")),
OPT_GROUP(N_("Action")),
OPT_BIT(0, "get", &actions, N_("get value: name [value-regex]"), ACTION_GET),
OPT_BIT(0, "get-all", &actions, N_("get all values: key [value-regex]"), ACTION_GET_ALL),
@@ -224,8 +223,7 @@ static int get_value(const char *key_, const char *regex_)
}
git_config_with_options(collect_config, &values,
- given_config_file, given_config_blob,
- respect_includes);
+ &given_config_source, respect_includes);
ret = !values.nr;
@@ -309,8 +307,7 @@ static void get_color(const char *def_color)
get_color_found = 0;
parsed_color[0] = '\0';
git_config_with_options(git_get_color_config, NULL,
- given_config_file, given_config_blob,
- respect_includes);
+ &given_config_source, respect_includes);
if (!get_color_found && def_color)
color_parse(def_color, "command line", parsed_color);
@@ -339,8 +336,7 @@ static int get_colorbool(int print)
get_diff_color_found = -1;
get_color_ui_found = -1;
git_config_with_options(git_get_colorbool_config, NULL,
- given_config_file, given_config_blob,
- respect_includes);
+ &given_config_source, respect_includes);
if (get_colorbool_found < 0) {
if (!strcmp(get_colorbool_slot, "color.diff"))
@@ -362,9 +358,12 @@ static int get_colorbool(int print)
return get_colorbool_found ? 0 : 1;
}
-static void check_blob_write(void)
+static void check_write(void)
{
- if (given_config_blob)
+ if (given_config_source.use_stdin)
+ die("writing to stdin is not supported");
+
+ if (given_config_source.blob)
die("writing config blobs is not supported");
}
@@ -435,7 +434,7 @@ static int get_urlmatch(const char *var, const char *url)
}
git_config_with_options(urlmatch_config_entry, &config,
- given_config_file, NULL, respect_includes);
+ &given_config_source, respect_includes);
for_each_string_list_item(item, &values) {
struct urlmatch_current_candidate_value *matched = item->util;
@@ -464,18 +463,24 @@ int cmd_config(int argc, const char **argv, const char *prefix)
int nongit = !startup_info->have_repository;
char *value;
- given_config_file = getenv(CONFIG_ENVIRONMENT);
+ given_config_source.file = getenv(CONFIG_ENVIRONMENT);
argc = parse_options(argc, argv, prefix, builtin_config_options,
builtin_config_usage,
PARSE_OPT_STOP_AT_NON_OPTION);
if (use_global_config + use_system_config + use_local_config +
- !!given_config_file + !!given_config_blob > 1) {
+ !!given_config_source.file + !!given_config_source.blob > 1) {
error("only one config file at a time.");
usage_with_options(builtin_config_usage, builtin_config_options);
}
+ if (given_config_source.file &&
+ !strcmp(given_config_source.file, "-")) {
+ given_config_source.file = NULL;
+ given_config_source.use_stdin = 1;
+ }
+
if (use_global_config) {
char *user_config = NULL;
char *xdg_config = NULL;
@@ -493,24 +498,24 @@ int cmd_config(int argc, const char **argv, const char *prefix)
if (access_or_warn(user_config, R_OK, 0) &&
xdg_config && !access_or_warn(xdg_config, R_OK, 0))
- given_config_file = xdg_config;
+ given_config_source.file = xdg_config;
else
- given_config_file = user_config;
+ given_config_source.file = user_config;
}
else if (use_system_config)
- given_config_file = git_etc_gitconfig();
+ given_config_source.file = git_etc_gitconfig();
else if (use_local_config)
- given_config_file = git_pathdup("config");
- else if (given_config_file) {
- if (!is_absolute_path(given_config_file) && prefix)
- given_config_file =
+ given_config_source.file = git_pathdup("config");
+ else if (given_config_source.file) {
+ if (!is_absolute_path(given_config_source.file) && prefix)
+ given_config_source.file =
xstrdup(prefix_filename(prefix,
strlen(prefix),
- given_config_file));
+ given_config_source.file));
}
if (respect_includes == -1)
- respect_includes = !given_config_file;
+ respect_includes = !given_config_source.file;
if (end_null) {
term = '\0';
@@ -549,57 +554,58 @@ int cmd_config(int argc, const char **argv, const char *prefix)
if (actions == ACTION_LIST) {
check_argc(argc, 0, 0);
if (git_config_with_options(show_all_config, NULL,
- given_config_file,
- given_config_blob,
+ &given_config_source,
respect_includes) < 0) {
- if (given_config_file)
+ if (given_config_source.file)
die_errno("unable to read config file '%s'",
- given_config_file);
+ given_config_source.file);
else
die("error processing config file(s)");
}
}
else if (actions == ACTION_EDIT) {
check_argc(argc, 0, 0);
- if (!given_config_file && nongit)
+ if (!given_config_source.file && nongit)
die("not in a git directory");
- if (given_config_blob)
+ if (given_config_source.use_stdin)
+ die("editing stdin is not supported");
+ if (given_config_source.blob)
die("editing blobs is not supported");
git_config(git_default_config, NULL);
- launch_editor(given_config_file ?
- given_config_file : git_path("config"),
+ launch_editor(given_config_source.file ?
+ given_config_source.file : git_path("config"),
NULL, NULL);
}
else if (actions == ACTION_SET) {
int ret;
- check_blob_write();
+ check_write();
check_argc(argc, 2, 2);
value = normalize_value(argv[0], argv[1]);
- ret = git_config_set_in_file(given_config_file, argv[0], value);
+ ret = git_config_set_in_file(given_config_source.file, argv[0], value);
if (ret == CONFIG_NOTHING_SET)
error("cannot overwrite multiple values with a single value\n"
" Use a regexp, --add or --replace-all to change %s.", argv[0]);
return ret;
}
else if (actions == ACTION_SET_ALL) {
- check_blob_write();
+ check_write();
check_argc(argc, 2, 3);
value = normalize_value(argv[0], argv[1]);
- return git_config_set_multivar_in_file(given_config_file,
+ return git_config_set_multivar_in_file(given_config_source.file,
argv[0], value, argv[2], 0);
}
else if (actions == ACTION_ADD) {
- check_blob_write();
+ check_write();
check_argc(argc, 2, 2);
value = normalize_value(argv[0], argv[1]);
- return git_config_set_multivar_in_file(given_config_file,
+ return git_config_set_multivar_in_file(given_config_source.file,
argv[0], value, "^$", 0);
}
else if (actions == ACTION_REPLACE_ALL) {
- check_blob_write();
+ check_write();
check_argc(argc, 2, 3);
value = normalize_value(argv[0], argv[1]);
- return git_config_set_multivar_in_file(given_config_file,
+ return git_config_set_multivar_in_file(given_config_source.file,
argv[0], value, argv[2], 1);
}
else if (actions == ACTION_GET) {
@@ -623,26 +629,26 @@ int cmd_config(int argc, const char **argv, const char *prefix)
return get_urlmatch(argv[0], argv[1]);
}
else if (actions == ACTION_UNSET) {
- check_blob_write();
+ check_write();
check_argc(argc, 1, 2);
if (argc == 2)
- return git_config_set_multivar_in_file(given_config_file,
+ return git_config_set_multivar_in_file(given_config_source.file,
argv[0], NULL, argv[1], 0);
else
- return git_config_set_in_file(given_config_file,
+ return git_config_set_in_file(given_config_source.file,
argv[0], NULL);
}
else if (actions == ACTION_UNSET_ALL) {
- check_blob_write();
+ check_write();
check_argc(argc, 1, 2);
- return git_config_set_multivar_in_file(given_config_file,
+ return git_config_set_multivar_in_file(given_config_source.file,
argv[0], NULL, argv[1], 1);
}
else if (actions == ACTION_RENAME_SECTION) {
int ret;
- check_blob_write();
+ check_write();
check_argc(argc, 2, 2);
- ret = git_config_rename_section_in_file(given_config_file,
+ ret = git_config_rename_section_in_file(given_config_source.file,
argv[0], argv[1]);
if (ret < 0)
return ret;
@@ -651,9 +657,9 @@ int cmd_config(int argc, const char **argv, const char *prefix)
}
else if (actions == ACTION_REMOVE_SECTION) {
int ret;
- check_blob_write();
+ check_write();
check_argc(argc, 1, 1);
- ret = git_config_rename_section_in_file(given_config_file,
+ ret = git_config_rename_section_in_file(given_config_source.file,
argv[0], NULL);
if (ret < 0)
return ret;
diff --git a/builtin/describe.c b/builtin/describe.c
index 7db43dae1..24d740c8b 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -6,7 +6,7 @@
#include "exec_cmd.h"
#include "parse-options.h"
#include "diff.h"
-#include "hash.h"
+#include "hashmap.h"
#include "argv-array.h"
#define SEEN (1u << 0)
@@ -25,7 +25,7 @@ static int longformat;
static int first_parent;
static int abbrev = -1; /* unspecified */
static int max_candidates = 10;
-static struct hash_table names;
+static struct hashmap names;
static int have_util;
static const char *pattern;
static int always;
@@ -37,7 +37,7 @@ static const char *diff_index_args[] = {
};
struct commit_name {
- struct commit_name *next;
+ struct hashmap_entry entry;
unsigned char peeled[20];
struct tag *tag;
unsigned prio:2; /* annotated tag = 2, tag = 1, head = 0 */
@@ -50,6 +50,12 @@ static const char *prio_names[] = {
"head", "lightweight", "annotated",
};
+static int commit_name_cmp(const struct commit_name *cn1,
+ const struct commit_name *cn2, const void *peeled)
+{
+ return hashcmp(cn1->peeled, peeled ? peeled : cn2->peeled);
+}
+
static inline unsigned int hash_sha1(const unsigned char *sha1)
{
unsigned int hash;
@@ -59,21 +65,9 @@ static inline unsigned int hash_sha1(const unsigned char *sha1)
static inline struct commit_name *find_commit_name(const unsigned char *peeled)
{
- struct commit_name *n = lookup_hash(hash_sha1(peeled), &names);
- while (n && !!hashcmp(peeled, n->peeled))
- n = n->next;
- return n;
-}
-
-static int set_util(void *chain, void *data)
-{
- struct commit_name *n;
- for (n = chain; n; n = n->next) {
- struct commit *c = lookup_commit_reference_gently(n->peeled, 1);
- if (c)
- c->util = n;
- }
- return 0;
+ struct commit_name key;
+ hashmap_entry_init(&key, hash_sha1(peeled));
+ return hashmap_get(&names, &key, peeled);
}
static int replace_name(struct commit_name *e,
@@ -118,16 +112,10 @@ static void add_to_known_names(const char *path,
struct tag *tag = NULL;
if (replace_name(e, prio, sha1, &tag)) {
if (!e) {
- void **pos;
e = xmalloc(sizeof(struct commit_name));
hashcpy(e->peeled, peeled);
- pos = insert_hash(hash_sha1(peeled), e, &names);
- if (pos) {
- e->next = *pos;
- *pos = e;
- } else {
- e->next = NULL;
- }
+ hashmap_entry_init(e, hash_sha1(peeled));
+ hashmap_add(&names, e);
e->path = NULL;
}
e->tag = tag;
@@ -150,7 +138,7 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void
return 0;
/* Accept only tags that match the pattern, if given */
- if (pattern && (!is_tag || fnmatch(pattern, path + 10, 0)))
+ if (pattern && (!is_tag || wildmatch(pattern, path + 10, 0, NULL)))
return 0;
/* Is it annotated? */
@@ -292,7 +280,14 @@ static void describe(const char *arg, int last_one)
fprintf(stderr, _("searching to describe %s\n"), arg);
if (!have_util) {
- for_each_hash(&names, set_util, NULL);
+ struct hashmap_iter iter;
+ struct commit *c;
+ struct commit_name *n = hashmap_iter_first(&names, &iter);
+ for (; n; n = hashmap_iter_next(&iter)) {
+ c = lookup_commit_reference_gently(n->peeled, 1);
+ if (c)
+ c->util = n;
+ }
have_util = 1;
}
@@ -463,9 +458,9 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
return cmd_name_rev(args.argc, args.argv, prefix);
}
- init_hash(&names);
+ hashmap_init(&names, (hashmap_cmp_fn) commit_name_cmp, 0);
for_each_rawref(get_name, NULL);
- if (!names.nr && !always)
+ if (!names.size && !always)
die(_("No names found, cannot describe anything."));
if (argc == 0) {
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 025bc3e38..55f457c04 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -1026,7 +1026,6 @@ static int fetch_multiple(struct string_list *list)
static int fetch_one(struct remote *remote, int argc, const char **argv)
{
- int i;
static const char **refs = NULL;
struct refspec *refspec;
int ref_nr = 0;
@@ -1050,6 +1049,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
if (argc > 0) {
int j = 0;
+ int i;
refs = xcalloc(argc + 1, sizeof(const char *));
for (i = 0; i < argc; i++) {
if (!strcmp(argv[i], "tag")) {
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index 51798b48b..3e1d5c333 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -864,7 +864,7 @@ static int grab_single_ref(const char *refname, const unsigned char *sha1, int f
refname[plen] == '/' ||
p[plen-1] == '/'))
break;
- if (!fnmatch(p, refname, FNM_PATHNAME))
+ if (!wildmatch(p, refname, WM_PATHNAME, NULL))
break;
}
if (!*pattern)
diff --git a/builtin/fsck.c b/builtin/fsck.c
index 1affdd5e9..fc150c882 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -144,7 +144,7 @@ static int traverse_reachable(void)
unsigned int nr = 0;
int result = 0;
if (show_progress)
- progress = start_progress_delay("Checking connectivity", 0, 0, 2);
+ progress = start_progress_delay(_("Checking connectivity"), 0, 0, 2);
while (pending.nr) {
struct object_array_entry *entry;
struct object *obj;
@@ -541,7 +541,7 @@ static void fsck_object_dir(const char *path)
fprintf(stderr, "Checking object directory\n");
if (show_progress)
- progress = start_progress("Checking object directories", 256);
+ progress = start_progress(_("Checking object directories"), 256);
for (i = 0; i < 256; i++) {
static char dir[4096];
sprintf(dir, "%s/%02x", path, i);
@@ -630,7 +630,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
struct alternate_object_database *alt;
errors_found = 0;
- read_replace_refs = 0;
+ check_replace_refs = 0;
argc = parse_options(argc, argv, prefix, fsck_opts, fsck_usage, 0);
@@ -670,7 +670,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
total += p->num_objects;
}
- progress = start_progress("Checking objects", total);
+ progress = start_progress(_("Checking objects"), total);
}
for (p = packed_git; p; p = p->next) {
/* verify gives error messages itself */
diff --git a/builtin/gc.c b/builtin/gc.c
index c19545d49..63d400bcb 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -29,6 +29,7 @@ static int pack_refs = 1;
static int aggressive_window = 250;
static int gc_auto_threshold = 6700;
static int gc_auto_pack_limit = 50;
+static int detach_auto = 1;
static const char *prune_expire = "2.weeks.ago";
static struct argv_array pack_refs_cmd = ARGV_ARRAY_INIT;
@@ -73,6 +74,10 @@ static int gc_config(const char *var, const char *value, void *cb)
gc_auto_pack_limit = git_config_int(var, value);
return 0;
}
+ if (!strcmp(var, "gc.autodetach")) {
+ detach_auto = git_config_bool(var, value);
+ return 0;
+ }
if (!strcmp(var, "gc.pruneexpire")) {
if (value && strcmp(value, "now")) {
unsigned long now = approxidate("now");
@@ -188,13 +193,12 @@ static int need_to_gc(void)
static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
{
static struct lock_file lock;
- static char locking_host[128];
char my_host[128];
struct strbuf sb = STRBUF_INIT;
struct stat st;
uintmax_t pid;
FILE *fp;
- int fd, should_exit;
+ int fd;
if (pidfile)
/* already locked */
@@ -206,6 +210,8 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
fd = hold_lock_file_for_update(&lock, git_path("gc.pid"),
LOCK_DIE_ON_ERROR);
if (!force) {
+ static char locking_host[128];
+ int should_exit;
fp = fopen(git_path("gc.pid"), "r");
memset(locking_host, 0, sizeof(locking_host));
should_exit =
@@ -301,11 +307,19 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
*/
if (!need_to_gc())
return 0;
- if (!quiet)
- fprintf(stderr,
- _("Auto packing the repository for optimum performance. You may also\n"
- "run \"git gc\" manually. See "
- "\"git help gc\" for more information.\n"));
+ if (!quiet) {
+ if (detach_auto)
+ fprintf(stderr, _("Auto packing the repository in background for optimum performance.\n"));
+ else
+ fprintf(stderr, _("Auto packing the repository for optimum performance.\n"));
+ fprintf(stderr, _("See \"git help gc\" for manual housekeeping.\n"));
+ }
+ if (detach_auto)
+ /*
+ * failure to daemonize is ok, we'll continue
+ * in foreground
+ */
+ daemonize();
} else
add_repack_all_option();
diff --git a/builtin/grep.c b/builtin/grep.c
index 63f86032d..69ac2d879 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -379,7 +379,7 @@ static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int
const struct cache_entry *ce = active_cache[nr];
if (!S_ISREG(ce->ce_mode))
continue;
- if (!match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL))
+ if (!ce_path_match(ce, pathspec, NULL))
continue;
/*
* If CE_VALID is on, we assume worktree file and its cache entry
@@ -524,9 +524,7 @@ static int grep_directory(struct grep_opt *opt, const struct pathspec *pathspec,
fill_directory(&dir, pathspec);
for (i = 0; i < dir.nr; i++) {
- const char *name = dir.entries[i]->name;
- int namelen = strlen(name);
- if (!match_pathspec_depth(pathspec, name, namelen, 0, NULL))
+ if (!dir_path_match(dir.entries[i], pathspec, 0, NULL))
continue;
hit |= grep_file(opt, dir.entries[i]->name);
if (hit && opt->status_only)
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 2f37a38fb..a6b1c1799 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -1502,7 +1502,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
if (argc == 2 && !strcmp(argv[1], "-h"))
usage(index_pack_usage);
- read_replace_refs = 0;
+ check_replace_refs = 0;
reset_pack_idx_option(&opts);
git_config(git_index_pack_config, &opts);
diff --git a/builtin/init-db.c b/builtin/init-db.c
index b3f03cf0d..c7c76bbf2 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -515,13 +515,14 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
saved = shared_repository;
shared_repository = 0;
switch (safe_create_leading_directories_const(argv[0])) {
- case -3:
+ case SCLD_OK:
+ case SCLD_PERMS:
+ break;
+ case SCLD_EXISTS:
errno = EEXIST;
/* fallthru */
- case -1:
- die_errno(_("cannot mkdir %s"), argv[0]);
- break;
default:
+ die_errno(_("cannot mkdir %s"), argv[0]);
break;
}
shared_repository = saved;
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index e1cf6d854..47c38808a 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -64,7 +64,7 @@ static void show_dir_entry(const char *tag, struct dir_entry *ent)
if (len >= ent->len)
die("git ls-files: internal error - directory entry not superset of prefix");
- if (!match_pathspec_depth(&pathspec, ent->name, ent->len, len, ps_matched))
+ if (!dir_path_match(ent, &pathspec, len, ps_matched))
return;
fputs(tag, stdout);
@@ -139,7 +139,9 @@ static void show_ce_entry(const char *tag, const struct cache_entry *ce)
if (len >= ce_namelen(ce))
die("git ls-files: internal error - cache entry not superset of prefix");
- if (!match_pathspec_depth(&pathspec, ce->name, ce_namelen(ce), len, ps_matched))
+ if (!match_pathspec(&pathspec, ce->name, ce_namelen(ce),
+ len, ps_matched,
+ S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode)))
return;
if (tag && *tag && show_valid_bit &&
@@ -195,7 +197,8 @@ static void show_ru_info(void)
len = strlen(path);
if (len < max_prefix_len)
continue; /* outside of the prefix */
- if (!match_pathspec_depth(&pathspec, path, len, max_prefix_len, ps_matched))
+ if (!match_pathspec(&pathspec, path, len,
+ max_prefix_len, ps_matched, 0))
continue; /* uninterested */
for (i = 0; i < 3; i++) {
if (!ui->mode[i])
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index 39e5144b9..3e9eefb09 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -22,7 +22,7 @@ static int tail_match(const char **pattern, const char *path)
if (snprintf(pathbuf, sizeof(pathbuf), "/%s", path) > sizeof(pathbuf))
return error("insanely long ref %.*s...", 20, path);
while ((p = *(pattern++)) != NULL) {
- if (!fnmatch(p, pathbuf, 0))
+ if (!wildmatch(p, pathbuf, 0, NULL))
return 1;
}
return 0;
diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
index 65ec93184..51184dfa2 100644
--- a/builtin/ls-tree.c
+++ b/builtin/ls-tree.c
@@ -171,7 +171,7 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
* show_recursive() rolls its own matching code and is
* generally ignorant of 'struct pathspec'. The magic mask
* cannot be lifted until it is converted to use
- * match_pathspec_depth() or tree_entry_interesting()
+ * match_pathspec() or tree_entry_interesting()
*/
parse_pathspec(&pathspec, PATHSPEC_GLOB | PATHSPEC_ICASE,
PATHSPEC_PREFER_CWD,
diff --git a/builtin/merge.c b/builtin/merge.c
index 4941a6c36..f0cf1205f 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -367,7 +367,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead
sha1_to_hex(commit->object.sha1));
pretty_print_commit(&ctx, commit, &out);
}
- if (write(fd, out.buf, out.len) < 0)
+ if (write_in_full(fd, out.buf, out.len) != out.len)
die_errno(_("Writing SQUASH_MSG"));
if (close(fd))
die_errno(_("Finishing SQUASH_MSG"));
@@ -597,6 +597,9 @@ static int git_merge_config(const char *k, const char *v, void *cb)
} else if (!strcmp(k, "merge.defaulttoupstream")) {
default_to_upstream = git_config_bool(k, v);
return 0;
+ } else if (!strcmp(k, "commit.gpgsign")) {
+ sign_commit = git_config_bool(k, v) ? "" : NULL;
+ return 0;
}
status = fmt_merge_msg_config(k, v, cb);
diff --git a/builtin/mktree.c b/builtin/mktree.c
index f92ba404a..a964d6be5 100644
--- a/builtin/mktree.c
+++ b/builtin/mktree.c
@@ -23,10 +23,7 @@ static void append_to_tree(unsigned mode, unsigned char *sha1, char *path)
if (strchr(path, '/'))
die("path %s contains slash", path);
- if (alloc <= used) {
- alloc = alloc_nr(used);
- entries = xrealloc(entries, sizeof(*entries) * alloc);
- }
+ ALLOC_GROW(entries, used + 1, alloc);
ent = entries[used++] = xmalloc(sizeof(**entries) + len + 1);
ent->mode = mode;
ent->len = len;
diff --git a/builtin/mv.c b/builtin/mv.c
index 21c46d163..7e26eb522 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -162,7 +162,8 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
if (strncmp(path, src_w_slash, len_w_slash))
break;
}
- free((char *)src_w_slash);
+ if (src_w_slash != src)
+ free((char *)src_w_slash);
if (last - first < 1)
bad = _("source directory is empty");
diff --git a/builtin/name-rev.c b/builtin/name-rev.c
index 0b21d7e5b..c824d4ec5 100644
--- a/builtin/name-rev.c
+++ b/builtin/name-rev.c
@@ -87,7 +87,7 @@ static int subpath_matches(const char *path, const char *filter)
const char *subpath = path;
while (subpath) {
- if (!fnmatch(filter, subpath, 0))
+ if (!wildmatch(filter, subpath, 0, NULL))
return subpath - path;
subpath = strchr(subpath, '/');
if (subpath)
diff --git a/builtin/notes.c b/builtin/notes.c
index 2b24d059b..bb8993037 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -269,7 +269,11 @@ static int parse_reuse_arg(const struct option *opt, const char *arg, int unset)
die(_("Failed to resolve '%s' as a valid ref."), arg);
if (!(buf = read_sha1_file(object, &type, &len)) || !len) {
free(buf);
- die(_("Failed to read object '%s'."), arg);;
+ die(_("Failed to read object '%s'."), arg);
+ }
+ if (type != OBJ_BLOB) {
+ free(buf);
+ die(_("Cannot read note data from non-blob object '%s'."), arg);
}
strbuf_add(&(msg->buf), buf, len);
free(buf);
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 541667f10..0ee5f1ff9 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -14,10 +14,12 @@
#include "diff.h"
#include "revision.h"
#include "list-objects.h"
+#include "pack-objects.h"
#include "progress.h"
#include "refs.h"
#include "streaming.h"
#include "thread-utils.h"
+#include "pack-bitmap.h"
static const char *pack_usage[] = {
N_("git pack-objects --stdout [options...] [< ref-list | < object-list]"),
@@ -25,42 +27,15 @@ static const char *pack_usage[] = {
NULL
};
-struct object_entry {
- struct pack_idx_entry idx;
- unsigned long size; /* uncompressed size */
- struct packed_git *in_pack; /* already in pack */
- off_t in_pack_offset;
- struct object_entry *delta; /* delta base object */
- struct object_entry *delta_child; /* deltified objects who bases me */
- struct object_entry *delta_sibling; /* other deltified objects who
- * uses the same base as me
- */
- void *delta_data; /* cached delta (uncompressed) */
- unsigned long delta_size; /* delta data size (uncompressed) */
- unsigned long z_delta_size; /* delta data size (compressed) */
- enum object_type type;
- enum object_type in_pack_type; /* could be delta */
- uint32_t hash; /* name hint hash */
- unsigned char in_pack_header_size;
- unsigned preferred_base:1; /*
- * we do not pack this, but is available
- * to be used as the base object to delta
- * objects against.
- */
- unsigned no_try_delta:1;
- unsigned tagged:1; /* near the very tip of refs */
- unsigned filled:1; /* assigned write-order */
-};
-
/*
- * Objects we are going to pack are collected in objects array (dynamically
- * expanded). nr_objects & nr_alloc controls this array. They are stored
- * in the order we see -- typically rev-list --objects order that gives us
- * nice "minimum seek" order.
+ * Objects we are going to pack are collected in the `to_pack` structure.
+ * It contains an array (dynamically expanded) of the object data, and a map
+ * that can resolve SHA1s to their position in the array.
*/
-static struct object_entry *objects;
+static struct packing_data to_pack;
+
static struct pack_idx_entry **written_list;
-static uint32_t nr_objects, nr_alloc, nr_result, nr_written;
+static uint32_t nr_result, nr_written;
static int non_empty;
static int reuse_delta = 1, reuse_object = 1;
@@ -83,6 +58,14 @@ static struct progress *progress_state;
static int pack_compression_level = Z_DEFAULT_COMPRESSION;
static int pack_compression_seen;
+static struct packed_git *reuse_packfile;
+static uint32_t reuse_packfile_objects;
+static off_t reuse_packfile_offset;
+
+static int use_bitmap_index = 1;
+static int write_bitmap_index;
+static uint16_t write_bitmap_options;
+
static unsigned long delta_cache_size = 0;
static unsigned long max_delta_cache_size = 256 * 1024 * 1024;
static unsigned long cache_max_small_delta_size = 1000;
@@ -90,20 +73,28 @@ static unsigned long cache_max_small_delta_size = 1000;
static unsigned long window_memory_limit = 0;
/*
- * The object names in objects array are hashed with this hashtable,
- * to help looking up the entry by object name.
- * This hashtable is built after all the objects are seen.
- */
-static int *object_ix;
-static int object_ix_hashsz;
-static struct object_entry *locate_object_entry(const unsigned char *sha1);
-
-/*
* stats
*/
static uint32_t written, written_delta;
static uint32_t reused, reused_delta;
+/*
+ * Indexed commits
+ */
+static struct commit **indexed_commits;
+static unsigned int indexed_commits_nr;
+static unsigned int indexed_commits_alloc;
+
+static void index_commit_for_bitmap(struct commit *commit)
+{
+ if (indexed_commits_nr >= indexed_commits_alloc) {
+ indexed_commits_alloc = (indexed_commits_alloc + 32) * 2;
+ indexed_commits = xrealloc(indexed_commits,
+ indexed_commits_alloc * sizeof(struct commit *));
+ }
+
+ indexed_commits[indexed_commits_nr++] = commit;
+}
static void *get_delta(struct object_entry *entry)
{
@@ -553,12 +544,12 @@ static int mark_tagged(const char *path, const unsigned char *sha1, int flag,
void *cb_data)
{
unsigned char peeled[20];
- struct object_entry *entry = locate_object_entry(sha1);
+ struct object_entry *entry = packlist_find(&to_pack, sha1, NULL);
if (entry)
entry->tagged = 1;
if (!peel_ref(path, peeled)) {
- entry = locate_object_entry(peeled);
+ entry = packlist_find(&to_pack, peeled, NULL);
if (entry)
entry->tagged = 1;
}
@@ -633,9 +624,10 @@ static struct object_entry **compute_write_order(void)
{
unsigned int i, wo_end, last_untagged;
- struct object_entry **wo = xmalloc(nr_objects * sizeof(*wo));
+ struct object_entry **wo = xmalloc(to_pack.nr_objects * sizeof(*wo));
+ struct object_entry *objects = to_pack.objects;
- for (i = 0; i < nr_objects; i++) {
+ for (i = 0; i < to_pack.nr_objects; i++) {
objects[i].tagged = 0;
objects[i].filled = 0;
objects[i].delta_child = NULL;
@@ -647,7 +639,7 @@ static struct object_entry **compute_write_order(void)
* Make sure delta_sibling is sorted in the original
* recency order.
*/
- for (i = nr_objects; i > 0;) {
+ for (i = to_pack.nr_objects; i > 0;) {
struct object_entry *e = &objects[--i];
if (!e->delta)
continue;
@@ -665,7 +657,7 @@ static struct object_entry **compute_write_order(void)
* Give the objects in the original recency order until
* we see a tagged tip.
*/
- for (i = wo_end = 0; i < nr_objects; i++) {
+ for (i = wo_end = 0; i < to_pack.nr_objects; i++) {
if (objects[i].tagged)
break;
add_to_write_order(wo, &wo_end, &objects[i]);
@@ -675,7 +667,7 @@ static struct object_entry **compute_write_order(void)
/*
* Then fill all the tagged tips.
*/
- for (; i < nr_objects; i++) {
+ for (; i < to_pack.nr_objects; i++) {
if (objects[i].tagged)
add_to_write_order(wo, &wo_end, &objects[i]);
}
@@ -683,7 +675,7 @@ static struct object_entry **compute_write_order(void)
/*
* And then all remaining commits and tags.
*/
- for (i = last_untagged; i < nr_objects; i++) {
+ for (i = last_untagged; i < to_pack.nr_objects; i++) {
if (objects[i].type != OBJ_COMMIT &&
objects[i].type != OBJ_TAG)
continue;
@@ -693,7 +685,7 @@ static struct object_entry **compute_write_order(void)
/*
* And then all the trees.
*/
- for (i = last_untagged; i < nr_objects; i++) {
+ for (i = last_untagged; i < to_pack.nr_objects; i++) {
if (objects[i].type != OBJ_TREE)
continue;
add_to_write_order(wo, &wo_end, &objects[i]);
@@ -702,17 +694,57 @@ static struct object_entry **compute_write_order(void)
/*
* Finally all the rest in really tight order
*/
- for (i = last_untagged; i < nr_objects; i++) {
+ for (i = last_untagged; i < to_pack.nr_objects; i++) {
if (!objects[i].filled)
add_family_to_write_order(wo, &wo_end, &objects[i]);
}
- if (wo_end != nr_objects)
- die("ordered %u objects, expected %"PRIu32, wo_end, nr_objects);
+ if (wo_end != to_pack.nr_objects)
+ die("ordered %u objects, expected %"PRIu32, wo_end, to_pack.nr_objects);
return wo;
}
+static off_t write_reused_pack(struct sha1file *f)
+{
+ unsigned char buffer[8192];
+ off_t to_write;
+ int fd;
+
+ if (!is_pack_valid(reuse_packfile))
+ die("packfile is invalid: %s", reuse_packfile->pack_name);
+
+ fd = git_open_noatime(reuse_packfile->pack_name);
+ if (fd < 0)
+ die_errno("unable to open packfile for reuse: %s",
+ reuse_packfile->pack_name);
+
+ if (lseek(fd, sizeof(struct pack_header), SEEK_SET) == -1)
+ die_errno("unable to seek in reused packfile");
+
+ if (reuse_packfile_offset < 0)
+ reuse_packfile_offset = reuse_packfile->pack_size - 20;
+
+ to_write = reuse_packfile_offset - sizeof(struct pack_header);
+
+ while (to_write) {
+ int read_pack = xread(fd, buffer, sizeof(buffer));
+
+ if (read_pack <= 0)
+ die_errno("unable to read from reused packfile");
+
+ if (read_pack > to_write)
+ read_pack = to_write;
+
+ sha1write(f, buffer, read_pack);
+ to_write -= read_pack;
+ }
+
+ close(fd);
+ written += reuse_packfile_objects;
+ return reuse_packfile_offset - sizeof(struct pack_header);
+}
+
static void write_pack_file(void)
{
uint32_t i = 0, j;
@@ -723,8 +755,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);
- written_list = xmalloc(nr_objects * sizeof(*written_list));
+ progress_state = start_progress(_("Writing objects"), nr_result);
+ written_list = xmalloc(to_pack.nr_objects * sizeof(*written_list));
write_order = compute_write_order();
do {
@@ -737,8 +769,17 @@ static void write_pack_file(void)
f = create_tmp_packfile(&pack_tmp_name);
offset = write_pack_header(f, nr_remaining);
+
+ if (reuse_packfile) {
+ off_t packfile_size;
+ assert(pack_to_stdout);
+
+ packfile_size = write_reused_pack(f);
+ offset += packfile_size;
+ }
+
nr_written = 0;
- for (; i < nr_objects; i++) {
+ for (; i < to_pack.nr_objects; i++) {
struct object_entry *e = write_order[i];
if (write_one(f, e, &offset) == WRITE_ONE_BREAK)
break;
@@ -762,7 +803,7 @@ static void write_pack_file(void)
if (!pack_to_stdout) {
struct stat st;
- char tmpname[PATH_MAX];
+ struct strbuf tmpname = STRBUF_INIT;
/*
* Packs are runtime accessed in their mtime
@@ -782,16 +823,35 @@ static void write_pack_file(void)
utb.modtime = --last_mtime;
if (utime(pack_tmp_name, &utb) < 0)
warning("failed utime() on %s: %s",
- tmpname, strerror(errno));
+ pack_tmp_name, strerror(errno));
}
- /* Enough space for "-<sha-1>.pack"? */
- if (sizeof(tmpname) <= strlen(base_name) + 50)
- die("pack base name '%s' too long", base_name);
- snprintf(tmpname, sizeof(tmpname), "%s-", base_name);
- finish_tmp_packfile(tmpname, pack_tmp_name,
+ strbuf_addf(&tmpname, "%s-", base_name);
+
+ if (write_bitmap_index) {
+ bitmap_writer_set_checksum(sha1);
+ bitmap_writer_build_type_index(written_list, nr_written);
+ }
+
+ finish_tmp_packfile(&tmpname, pack_tmp_name,
written_list, nr_written,
&pack_idx_opts, sha1);
+
+ if (write_bitmap_index) {
+ strbuf_addf(&tmpname, "%s.bitmap", sha1_to_hex(sha1));
+
+ stop_progress(&progress_state);
+
+ bitmap_writer_show_progress(progress);
+ bitmap_writer_reuse_bitmaps(&to_pack);
+ bitmap_writer_select_commits(indexed_commits, indexed_commits_nr, -1);
+ bitmap_writer_build(&to_pack);
+ bitmap_writer_finish(written_list, nr_written,
+ tmpname.buf, write_bitmap_options);
+ write_bitmap_index = 0;
+ }
+
+ strbuf_release(&tmpname);
free(pack_tmp_name);
puts(sha1_to_hex(sha1));
}
@@ -801,7 +861,7 @@ static void write_pack_file(void)
written_list[j]->offset = (off_t)-1;
}
nr_remaining -= nr_written;
- } while (nr_remaining && i < nr_objects);
+ } while (nr_remaining && i < to_pack.nr_objects);
free(written_list);
free(write_order);
@@ -811,73 +871,6 @@ static void write_pack_file(void)
written, nr_result);
}
-static int locate_object_entry_hash(const unsigned char *sha1)
-{
- int i;
- unsigned int ui;
- memcpy(&ui, sha1, sizeof(unsigned int));
- i = ui % object_ix_hashsz;
- while (0 < object_ix[i]) {
- if (!hashcmp(sha1, objects[object_ix[i] - 1].idx.sha1))
- return i;
- if (++i == object_ix_hashsz)
- i = 0;
- }
- return -1 - i;
-}
-
-static struct object_entry *locate_object_entry(const unsigned char *sha1)
-{
- int i;
-
- if (!object_ix_hashsz)
- return NULL;
-
- i = locate_object_entry_hash(sha1);
- if (0 <= i)
- return &objects[object_ix[i]-1];
- return NULL;
-}
-
-static void rehash_objects(void)
-{
- uint32_t i;
- struct object_entry *oe;
-
- object_ix_hashsz = nr_objects * 3;
- if (object_ix_hashsz < 1024)
- object_ix_hashsz = 1024;
- object_ix = xrealloc(object_ix, sizeof(int) * object_ix_hashsz);
- memset(object_ix, 0, sizeof(int) * object_ix_hashsz);
- for (i = 0, oe = objects; i < nr_objects; i++, oe++) {
- int ix = locate_object_entry_hash(oe->idx.sha1);
- if (0 <= ix)
- continue;
- ix = -1 - ix;
- object_ix[ix] = i + 1;
- }
-}
-
-static uint32_t name_hash(const char *name)
-{
- uint32_t c, hash = 0;
-
- if (!name)
- return 0;
-
- /*
- * This effectively just creates a sortable number from the
- * last sixteen non-whitespace characters. Last characters
- * count "most", so things that end in ".c" sort together.
- */
- while ((c = *name++) != 0) {
- if (isspace(c))
- continue;
- hash = (hash >> 2) + (c << 24);
- }
- return hash;
-}
-
static void setup_delta_attr_check(struct git_attr_check *check)
{
static struct git_attr *attr_delta;
@@ -900,42 +893,69 @@ static int no_try_delta(const char *path)
return 0;
}
-static int add_object_entry(const unsigned char *sha1, enum object_type type,
- const char *name, int exclude)
+/*
+ * When adding an object, check whether we have already added it
+ * to our packing list. If so, we can skip. However, if we are
+ * being asked to excludei t, but the previous mention was to include
+ * it, make sure to adjust its flags and tweak our numbers accordingly.
+ *
+ * As an optimization, we pass out the index position where we would have
+ * found the item, since that saves us from having to look it up again a
+ * few lines later when we want to add the new entry.
+ */
+static int have_duplicate_entry(const unsigned char *sha1,
+ int exclude,
+ uint32_t *index_pos)
{
struct object_entry *entry;
- struct packed_git *p, *found_pack = NULL;
- off_t found_offset = 0;
- int ix;
- uint32_t hash = name_hash(name);
-
- ix = nr_objects ? locate_object_entry_hash(sha1) : -1;
- if (ix >= 0) {
- if (exclude) {
- entry = objects + object_ix[ix] - 1;
- if (!entry->preferred_base)
- nr_result--;
- entry->preferred_base = 1;
- }
+
+ entry = packlist_find(&to_pack, sha1, index_pos);
+ if (!entry)
return 0;
+
+ if (exclude) {
+ if (!entry->preferred_base)
+ nr_result--;
+ entry->preferred_base = 1;
}
+ return 1;
+}
+
+/*
+ * Check whether we want the object in the pack (e.g., we do not want
+ * objects found in non-local stores if the "--local" option was used).
+ *
+ * As a side effect of this check, we will find the packed version of this
+ * object, if any. We therefore pass out the pack information to avoid having
+ * to look it up again later.
+ */
+static int want_object_in_pack(const unsigned char *sha1,
+ int exclude,
+ struct packed_git **found_pack,
+ off_t *found_offset)
+{
+ struct packed_git *p;
+
if (!exclude && local && has_loose_object_nonlocal(sha1))
return 0;
+ *found_pack = NULL;
+ *found_offset = 0;
+
for (p = packed_git; p; p = p->next) {
off_t offset = find_pack_entry_one(sha1, p);
if (offset) {
- if (!found_pack) {
+ if (!*found_pack) {
if (!is_pack_valid(p)) {
warning("packfile %s cannot be accessed", p->pack_name);
continue;
}
- found_offset = offset;
- found_pack = p;
+ *found_offset = offset;
+ *found_pack = p;
}
if (exclude)
- break;
+ return 1;
if (incremental)
return 0;
if (local && !p->pack_local)
@@ -945,14 +965,21 @@ static int add_object_entry(const unsigned char *sha1, enum object_type type,
}
}
- if (nr_objects >= nr_alloc) {
- nr_alloc = (nr_alloc + 1024) * 3 / 2;
- objects = xrealloc(objects, nr_alloc * sizeof(*entry));
- }
+ return 1;
+}
- entry = objects + nr_objects++;
- memset(entry, 0, sizeof(*entry));
- hashcpy(entry->idx.sha1, sha1);
+static void create_object_entry(const unsigned char *sha1,
+ enum object_type type,
+ uint32_t hash,
+ int exclude,
+ int no_try_delta,
+ uint32_t index_pos,
+ struct packed_git *found_pack,
+ off_t found_offset)
+{
+ struct object_entry *entry;
+
+ entry = packlist_alloc(&to_pack, sha1, index_pos);
entry->hash = hash;
if (type)
entry->type = type;
@@ -965,16 +992,43 @@ static int add_object_entry(const unsigned char *sha1, enum object_type type,
entry->in_pack_offset = found_offset;
}
- if (object_ix_hashsz * 3 <= nr_objects * 4)
- rehash_objects();
- else
- object_ix[-1 - ix] = nr_objects;
+ entry->no_try_delta = no_try_delta;
+}
+
+static int add_object_entry(const unsigned char *sha1, enum object_type type,
+ const char *name, int exclude)
+{
+ struct packed_git *found_pack;
+ off_t found_offset;
+ uint32_t index_pos;
+
+ if (have_duplicate_entry(sha1, exclude, &index_pos))
+ return 0;
- display_progress(progress_state, nr_objects);
+ if (!want_object_in_pack(sha1, exclude, &found_pack, &found_offset))
+ return 0;
- if (name && no_try_delta(name))
- entry->no_try_delta = 1;
+ create_object_entry(sha1, type, pack_name_hash(name),
+ exclude, name && no_try_delta(name),
+ index_pos, found_pack, found_offset);
+ display_progress(progress_state, to_pack.nr_objects);
+ return 1;
+}
+
+static int add_object_entry_from_bitmap(const unsigned char *sha1,
+ enum object_type type,
+ int flags, uint32_t name_hash,
+ struct packed_git *pack, off_t offset)
+{
+ uint32_t index_pos;
+
+ if (have_duplicate_entry(sha1, 0, &index_pos))
+ return 0;
+
+ create_object_entry(sha1, type, name_hash, 0, 0, index_pos, pack, offset);
+
+ display_progress(progress_state, to_pack.nr_objects);
return 1;
}
@@ -1156,12 +1210,9 @@ static int check_pbase_path(unsigned hash)
if (0 <= pos)
return 1;
pos = -pos - 1;
- if (done_pbase_paths_alloc <= done_pbase_paths_num) {
- done_pbase_paths_alloc = alloc_nr(done_pbase_paths_alloc);
- done_pbase_paths = xrealloc(done_pbase_paths,
- done_pbase_paths_alloc *
- sizeof(unsigned));
- }
+ ALLOC_GROW(done_pbase_paths,
+ done_pbase_paths_num + 1,
+ done_pbase_paths_alloc);
done_pbase_paths_num++;
if (pos < done_pbase_paths_num)
memmove(done_pbase_paths + pos + 1,
@@ -1175,7 +1226,7 @@ static void add_preferred_base_object(const char *name)
{
struct pbase_tree *it;
int cmplen;
- unsigned hash = name_hash(name);
+ unsigned hash = pack_name_hash(name);
if (!num_preferred_base || check_pbase_path(hash))
return;
@@ -1327,7 +1378,7 @@ static void check_object(struct object_entry *entry)
break;
}
- if (base_ref && (base_entry = locate_object_entry(base_ref))) {
+ if (base_ref && (base_entry = packlist_find(&to_pack, base_ref, NULL))) {
/*
* If base_ref was set above that means we wish to
* reuse delta data, and we even found that base
@@ -1401,12 +1452,12 @@ static void get_object_details(void)
uint32_t i;
struct object_entry **sorted_by_offset;
- sorted_by_offset = xcalloc(nr_objects, sizeof(struct object_entry *));
- for (i = 0; i < nr_objects; i++)
- sorted_by_offset[i] = objects + i;
- qsort(sorted_by_offset, nr_objects, sizeof(*sorted_by_offset), pack_offset_sort);
+ sorted_by_offset = xcalloc(to_pack.nr_objects, sizeof(struct object_entry *));
+ for (i = 0; i < to_pack.nr_objects; i++)
+ sorted_by_offset[i] = to_pack.objects + i;
+ qsort(sorted_by_offset, to_pack.nr_objects, sizeof(*sorted_by_offset), pack_offset_sort);
- for (i = 0; i < nr_objects; i++) {
+ for (i = 0; i < to_pack.nr_objects; i++) {
struct object_entry *entry = sorted_by_offset[i];
check_object(entry);
if (big_file_threshold < entry->size)
@@ -2032,7 +2083,7 @@ static int add_ref_tag(const char *path, const unsigned char *sha1, int flag, vo
if (starts_with(path, "refs/tags/") && /* is a tag? */
!peel_ref(path, peeled) && /* peelable? */
- locate_object_entry(peeled)) /* object packed? */
+ packlist_find(&to_pack, peeled, NULL)) /* object packed? */
add_object_entry(sha1, OBJ_TAG, NULL, 0);
return 0;
}
@@ -2055,14 +2106,14 @@ static void prepare_pack(int window, int depth)
if (!pack_to_stdout)
do_check_packed_object_crc = 1;
- if (!nr_objects || !window || !depth)
+ if (!to_pack.nr_objects || !window || !depth)
return;
- delta_list = xmalloc(nr_objects * sizeof(*delta_list));
+ delta_list = xmalloc(to_pack.nr_objects * sizeof(*delta_list));
nr_deltas = n = 0;
- for (i = 0; i < nr_objects; i++) {
- struct object_entry *entry = objects + i;
+ for (i = 0; i < to_pack.nr_objects; i++) {
+ struct object_entry *entry = to_pack.objects + i;
if (entry->delta)
/* This happens if we decided to reuse existing
@@ -2097,7 +2148,7 @@ static void prepare_pack(int window, int depth)
if (nr_deltas && n > 1) {
unsigned nr_done = 0;
if (progress)
- progress_state = start_progress("Compressing objects",
+ progress_state = start_progress(_("Compressing objects"),
nr_deltas);
qsort(delta_list, n, sizeof(*delta_list), type_size_sort);
ll_find_deltas(delta_list, n, window+1, depth, &nr_done);
@@ -2140,6 +2191,20 @@ static int git_pack_config(const char *k, const char *v, void *cb)
cache_max_small_delta_size = git_config_int(k, v);
return 0;
}
+ if (!strcmp(k, "pack.writebitmaps")) {
+ write_bitmap_index = git_config_bool(k, v);
+ return 0;
+ }
+ if (!strcmp(k, "pack.writebitmaphashcache")) {
+ if (git_config_bool(k, v))
+ write_bitmap_options |= BITMAP_OPT_HASH_CACHE;
+ else
+ write_bitmap_options &= ~BITMAP_OPT_HASH_CACHE;
+ }
+ if (!strcmp(k, "pack.usebitmaps")) {
+ use_bitmap_index = git_config_bool(k, v);
+ return 0;
+ }
if (!strcmp(k, "pack.threads")) {
delta_search_threads = git_config_int(k, v);
if (delta_search_threads < 0)
@@ -2198,6 +2263,9 @@ static void show_commit(struct commit *commit, void *data)
{
add_object_entry(commit->object.sha1, OBJ_COMMIT, NULL, 0);
commit->object.flags |= OBJECT_ADDED;
+
+ if (write_bitmap_index)
+ index_commit_for_bitmap(commit);
}
static void show_object(struct object *obj,
@@ -2340,7 +2408,7 @@ static void loosen_unused_packed_objects(struct rev_info *revs)
for (i = 0; i < p->num_objects; i++) {
sha1 = nth_packed_object_sha1(p, i);
- if (!locate_object_entry(sha1) &&
+ if (!packlist_find(&to_pack, sha1, NULL) &&
!has_sha1_pack_kept_or_nonlocal(sha1))
if (force_object_loose(sha1, p->mtime))
die("unable to force loose object");
@@ -2348,6 +2416,29 @@ static void loosen_unused_packed_objects(struct rev_info *revs)
}
}
+static int get_object_list_from_bitmap(struct rev_info *revs)
+{
+ if (prepare_bitmap_walk(revs) < 0)
+ return -1;
+
+ if (!reuse_partial_packfile_from_bitmap(
+ &reuse_packfile,
+ &reuse_packfile_objects,
+ &reuse_packfile_offset)) {
+ assert(reuse_packfile_objects);
+ nr_result += reuse_packfile_objects;
+
+ if (progress) {
+ fprintf(stderr, "Reusing existing pack: %d, done.\n",
+ reuse_packfile_objects);
+ fflush(stderr);
+ }
+ }
+
+ traverse_bitmap_commit_list(&add_object_entry_from_bitmap);
+ return 0;
+}
+
static void get_object_list(int ac, const char **av)
{
struct rev_info revs;
@@ -2358,6 +2449,9 @@ static void get_object_list(int ac, const char **av)
save_commit_buffer = 0;
setup_revisions(ac, av, &revs, NULL);
+ /* make sure shallows are read */
+ is_repository_shallow();
+
while (fgets(line, sizeof(line), stdin) != NULL) {
int len = strlen(line);
if (len && line[len - 1] == '\n')
@@ -2367,6 +2461,14 @@ static void get_object_list(int ac, const char **av)
if (*line == '-') {
if (!strcmp(line, "--not")) {
flags ^= UNINTERESTING;
+ write_bitmap_index = 0;
+ continue;
+ }
+ if (starts_with(line, "--shallow ")) {
+ unsigned char sha1[20];
+ if (get_sha1_hex(line + 10, sha1))
+ die("not an SHA-1 '%s'", line + 10);
+ register_shallow(sha1);
continue;
}
die("not a rev '%s'", line);
@@ -2375,6 +2477,9 @@ static void get_object_list(int ac, const char **av)
die("bad revision '%s'", line);
}
+ if (use_bitmap_index && !get_object_list_from_bitmap(&revs))
+ return;
+
if (prepare_revision_walk(&revs))
die("revision walk setup failed");
mark_edges_uninteresting(&revs, show_edge);
@@ -2504,10 +2609,14 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
N_("pack compression level")),
OPT_SET_INT(0, "keep-true-parents", &grafts_replace_parents,
N_("do not hide commits by grafts"), 0),
+ OPT_BOOL(0, "use-bitmap-index", &use_bitmap_index,
+ N_("use a bitmap index if available to speed up counting objects")),
+ OPT_BOOL(0, "write-bitmap-index", &write_bitmap_index,
+ N_("write a bitmap index together with the pack index")),
OPT_END(),
};
- read_replace_refs = 0;
+ check_replace_refs = 0;
reset_pack_idx_option(&pack_idx_opts);
git_config(git_pack_config, NULL);
@@ -2570,13 +2679,19 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
if (keep_unreachable && unpack_unreachable)
die("--keep-unreachable and --unpack-unreachable are incompatible.");
+ if (!use_internal_rev_list || !pack_to_stdout || is_repository_shallow())
+ use_bitmap_index = 0;
+
+ if (pack_to_stdout || !rev_list_all)
+ write_bitmap_index = 0;
+
if (progress && all_progress_implied)
progress = 2;
prepare_packed_git();
if (progress)
- progress_state = start_progress("Counting objects", 0);
+ progress_state = start_progress(_("Counting objects"), 0);
if (!use_internal_rev_list)
read_object_list_from_stdin();
else {
diff --git a/builtin/prune-packed.c b/builtin/prune-packed.c
index fcf5fb612..6879468c4 100644
--- a/builtin/prune-packed.c
+++ b/builtin/prune-packed.c
@@ -46,7 +46,7 @@ void prune_packed_objects(int opts)
strbuf_addstr(&pathname, dir);
if (opts & PRUNE_PACKED_VERBOSE)
- progress = start_progress_delay("Removing duplicate objects",
+ progress = start_progress_delay(_("Removing duplicate objects"),
256, 95, 2);
if (pathname.len && pathname.buf[pathname.len - 1] != '/')
diff --git a/builtin/prune.c b/builtin/prune.c
index de43b26cf..144a3bdb3 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -150,7 +150,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
expire = ULONG_MAX;
save_commit_buffer = 0;
- read_replace_refs = 0;
+ check_replace_refs = 0;
init_revisions(&revs, prefix);
argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
@@ -169,7 +169,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
if (show_progress == -1)
show_progress = isatty(2);
if (show_progress)
- progress = start_progress_delay("Checking connectivity", 0, 0, 2);
+ progress = start_progress_delay(_("Checking connectivity"), 0, 0, 2);
mark_reachable_objects(&revs, 1, progress);
stop_progress(&progress);
diff --git a/builtin/push.c b/builtin/push.c
index 0e50ddbb0..f8dfea41e 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -26,7 +26,6 @@ static struct push_cas_option cas;
static const char **refspec;
static int refspec_nr;
static int refspec_alloc;
-static int default_matching_used;
static void add_refspec(const char *ref)
{
@@ -59,7 +58,7 @@ static const char *map_refspec(const char *ref,
}
if (push_default == PUSH_DEFAULT_UPSTREAM &&
- !prefixcmp(matched->name, "refs/heads/")) {
+ starts_with(matched->name, "refs/heads/")) {
struct branch *branch = branch_get(matched->name + 11);
if (branch->merge_nr == 1 && branch->merge[0]->src) {
struct strbuf buf = STRBUF_INIT;
@@ -204,9 +203,9 @@ static void setup_push_current(struct remote *remote, struct branch *branch)
}
static char warn_unspecified_push_default_msg[] =
-N_("push.default is unset; its implicit value is changing in\n"
+N_("push.default is unset; its implicit value has changed in\n"
"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
- "and maintain the current behavior after the default changes, use:\n"
+ "and maintain the traditional behavior, use:\n"
"\n"
" git config --global push.default matching\n"
"\n"
@@ -217,7 +216,7 @@ N_("push.default is unset; its implicit value is changing in\n"
"When push.default is set to 'matching', git will push local branches\n"
"to the remote branches that already exist with the same name.\n"
"\n"
- "In Git 2.0, Git will default to the more conservative 'simple'\n"
+ "Since Git 2.0, Git defaults to the more conservative 'simple'\n"
"behavior, which only pushes the current branch to the corresponding\n"
"remote branch that 'git pull' uses to update the current branch.\n"
"\n"
@@ -247,14 +246,14 @@ static void setup_default_push_refspecs(struct remote *remote)
switch (push_default) {
default:
- case PUSH_DEFAULT_UNSPECIFIED:
- default_matching_used = 1;
- warn_unspecified_push_default_configuration();
- /* fallthru */
case PUSH_DEFAULT_MATCHING:
add_refspec(":");
break;
+ case PUSH_DEFAULT_UNSPECIFIED:
+ warn_unspecified_push_default_configuration();
+ /* fallthru */
+
case PUSH_DEFAULT_SIMPLE:
if (triangular)
setup_push_current(remote, branch);
@@ -283,12 +282,6 @@ static const char message_advice_pull_before_push[] =
"'git pull ...') before pushing again.\n"
"See the 'Note about fast-forwards' in 'git push --help' for details.");
-static const char message_advice_use_upstream[] =
- N_("Updates were rejected because a pushed branch tip is behind its remote\n"
- "counterpart. If you did not intend to push that branch, you may want to\n"
- "specify branches to push or set the 'push.default' configuration variable\n"
- "to 'simple', 'current' or 'upstream' to push only the current branch.");
-
static const char message_advice_checkout_pull_push[] =
N_("Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -317,13 +310,6 @@ static void advise_pull_before_push(void)
advise(_(message_advice_pull_before_push));
}
-static void advise_use_upstream(void)
-{
- if (!advice_push_non_ff_default || !advice_push_update_rejected)
- return;
- advise(_(message_advice_use_upstream));
-}
-
static void advise_checkout_pull_push(void)
{
if (!advice_push_non_ff_matching || !advice_push_update_rejected)
@@ -385,10 +371,7 @@ static int push_with_options(struct transport *transport, int flags)
if (reject_reasons & REJECT_NON_FF_HEAD) {
advise_pull_before_push();
} else if (reject_reasons & REJECT_NON_FF_OTHER) {
- if (default_matching_used)
- advise_use_upstream();
- else
- advise_checkout_pull_push();
+ advise_checkout_pull_push();
} else if (reject_reasons & REJECT_ALREADY_EXISTS) {
advise_ref_already_exists();
} else if (reject_reasons & REJECT_FETCH_FIRST) {
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 85bba356f..c3230817d 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -828,14 +828,10 @@ static void execute_commands(struct command *commands,
}
}
- if (shallow_update) {
- if (!checked_connectivity)
- error("BUG: run 'git fsck' for safety.\n"
- "If there are errors, try to remove "
- "the reported refs above");
- if (alt_shallow_file && *alt_shallow_file)
- unlink(alt_shallow_file);
- }
+ if (shallow_update && !checked_connectivity)
+ error("BUG: run 'git fsck' for safety.\n"
+ "If there are errors, try to remove "
+ "the reported refs above");
}
static struct command *read_head_info(struct sha1_array *shallow)
@@ -1087,10 +1083,6 @@ static void update_shallow_info(struct command *commands,
cmd->skip_update = 1;
}
}
- if (alt_shallow_file && *alt_shallow_file) {
- unlink(alt_shallow_file);
- alt_shallow_file = NULL;
- }
free(ref_status);
}
diff --git a/builtin/reflog.c b/builtin/reflog.c
index 852cff60b..c12a9784e 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -561,7 +561,7 @@ static void set_reflog_expiry_param(struct cmd_reflog_expire_cb *cb, int slot, c
return; /* both given explicitly -- nothing to tweak */
for (ent = reflog_expire_cfg; ent; ent = ent->next) {
- if (!fnmatch(ent->pattern, ref, 0)) {
+ if (!wildmatch(ent->pattern, ref, 0, NULL)) {
if (!(slot & EXPIRE_TOTAL))
cb->expire_total = ent->expire_total;
if (!(slot & EXPIRE_UNREACH))
diff --git a/builtin/repack.c b/builtin/repack.c
index ba66c6e37..6b0b62dcb 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -9,6 +9,7 @@
#include "argv-array.h"
static int delta_base_offset = 1;
+static int pack_kept_objects = -1;
static char *packdir, *packtmp;
static const char *const git_repack_usage[] = {
@@ -22,6 +23,10 @@ static int repack_config(const char *var, const char *value, void *cb)
delta_base_offset = git_config_bool(var, value);
return 0;
}
+ if (!strcmp(var, "repack.packkeptobjects")) {
+ pack_kept_objects = git_config_bool(var, value);
+ return 0;
+ }
return git_default_config(var, value, cb);
}
@@ -94,7 +99,7 @@ static void get_non_kept_pack_filenames(struct string_list *fname_list)
static void remove_redundant_pack(const char *dir_name, const char *base_name)
{
- const char *exts[] = {".pack", ".idx", ".keep"};
+ const char *exts[] = {".pack", ".idx", ".keep", ".bitmap"};
int i;
struct strbuf buf = STRBUF_INIT;
size_t plen;
@@ -115,7 +120,14 @@ static void remove_redundant_pack(const char *dir_name, const char *base_name)
int cmd_repack(int argc, const char **argv, const char *prefix)
{
- const char *exts[2] = {".pack", ".idx"};
+ struct {
+ const char *name;
+ unsigned optional:1;
+ } exts[] = {
+ {".pack"},
+ {".idx"},
+ {".bitmap", 1},
+ };
struct child_process cmd;
struct string_list_item *item;
struct argv_array cmd_args = ARGV_ARRAY_INIT;
@@ -129,14 +141,15 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
/* variables to be filled by option parsing */
int pack_everything = 0;
int delete_redundant = 0;
- char *unpack_unreachable = NULL;
- int window = 0, window_memory = 0;
- int depth = 0;
- int max_pack_size = 0;
+ const char *unpack_unreachable = NULL;
+ const char *window = NULL, *window_memory = NULL;
+ const char *depth = NULL;
+ const char *max_pack_size = NULL;
int no_reuse_delta = 0, no_reuse_object = 0;
int no_update_server_info = 0;
int quiet = 0;
int local = 0;
+ int write_bitmap = -1;
struct option builtin_repack_options[] = {
OPT_BIT('a', NULL, &pack_everything,
@@ -155,16 +168,20 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
OPT__QUIET(&quiet, N_("be quiet")),
OPT_BOOL('l', "local", &local,
N_("pass --local to git-pack-objects")),
+ OPT_BOOL('b', "write-bitmap-index", &write_bitmap,
+ N_("write bitmap index")),
OPT_STRING(0, "unpack-unreachable", &unpack_unreachable, N_("approxidate"),
N_("with -A, do not loosen objects older than this")),
- OPT_INTEGER(0, "window", &window,
+ OPT_STRING(0, "window", &window, N_("n"),
N_("size of the window used for delta compression")),
- OPT_INTEGER(0, "window-memory", &window_memory,
+ OPT_STRING(0, "window-memory", &window_memory, N_("bytes"),
N_("same as the above, but limit memory size instead of entries count")),
- OPT_INTEGER(0, "depth", &depth,
+ OPT_STRING(0, "depth", &depth, N_("n"),
N_("limits the maximum delta depth")),
- OPT_INTEGER(0, "max-pack-size", &max_pack_size,
+ OPT_STRING(0, "max-pack-size", &max_pack_size, N_("bytes"),
N_("maximum size of each packfile")),
+ OPT_BOOL(0, "pack-kept-objects", &pack_kept_objects,
+ N_("repack objects in packs marked with .keep")),
OPT_END()
};
@@ -173,6 +190,9 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, builtin_repack_options,
git_repack_usage, 0);
+ if (pack_kept_objects < 0)
+ pack_kept_objects = write_bitmap;
+
packdir = mkpathdup("%s/pack", get_object_directory());
packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid());
@@ -180,22 +200,26 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
argv_array_push(&cmd_args, "pack-objects");
argv_array_push(&cmd_args, "--keep-true-parents");
- argv_array_push(&cmd_args, "--honor-pack-keep");
+ if (!pack_kept_objects)
+ argv_array_push(&cmd_args, "--honor-pack-keep");
argv_array_push(&cmd_args, "--non-empty");
argv_array_push(&cmd_args, "--all");
argv_array_push(&cmd_args, "--reflog");
if (window)
- argv_array_pushf(&cmd_args, "--window=%u", window);
+ argv_array_pushf(&cmd_args, "--window=%s", window);
if (window_memory)
- argv_array_pushf(&cmd_args, "--window-memory=%u", window_memory);
+ argv_array_pushf(&cmd_args, "--window-memory=%s", window_memory);
if (depth)
- argv_array_pushf(&cmd_args, "--depth=%u", depth);
+ argv_array_pushf(&cmd_args, "--depth=%s", depth);
if (max_pack_size)
- argv_array_pushf(&cmd_args, "--max_pack_size=%u", max_pack_size);
+ argv_array_pushf(&cmd_args, "--max-pack-size=%s", max_pack_size);
if (no_reuse_delta)
argv_array_pushf(&cmd_args, "--no-reuse-delta");
if (no_reuse_object)
argv_array_pushf(&cmd_args, "--no-reuse-object");
+ if (write_bitmap >= 0)
+ argv_array_pushf(&cmd_args, "--%swrite-bitmap-index",
+ write_bitmap ? "" : "no-");
if (pack_everything & ALL_INTO_ONE) {
get_non_kept_pack_filenames(&existing_packs);
@@ -256,17 +280,17 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
*/
failed = 0;
for_each_string_list_item(item, &names) {
- for (ext = 0; ext < 2; ext++) {
+ for (ext = 0; ext < ARRAY_SIZE(exts); ext++) {
char *fname, *fname_old;
- fname = mkpathdup("%s/%s%s", packdir,
- item->string, exts[ext]);
+ fname = mkpathdup("%s/pack-%s%s", packdir,
+ item->string, exts[ext].name);
if (!file_exists(fname)) {
free(fname);
continue;
}
fname_old = mkpath("%s/old-%s%s", packdir,
- item->string, exts[ext]);
+ item->string, exts[ext].name);
if (file_exists(fname_old))
if (unlink(fname_old))
failed = 1;
@@ -313,19 +337,23 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
/* Now the ones with the same name are out of the way... */
for_each_string_list_item(item, &names) {
- for (ext = 0; ext < 2; ext++) {
+ for (ext = 0; ext < ARRAY_SIZE(exts); ext++) {
char *fname, *fname_old;
struct stat statbuffer;
+ int exists = 0;
fname = mkpathdup("%s/pack-%s%s",
- packdir, item->string, exts[ext]);
+ packdir, item->string, exts[ext].name);
fname_old = mkpathdup("%s-%s%s",
- packtmp, item->string, exts[ext]);
+ packtmp, item->string, exts[ext].name);
if (!stat(fname_old, &statbuffer)) {
statbuffer.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
chmod(fname_old, statbuffer.st_mode);
+ exists = 1;
+ }
+ if (exists || !exts[ext].optional) {
+ if (rename(fname_old, fname))
+ die_errno(_("renaming '%s' failed"), fname_old);
}
- if (rename(fname_old, fname))
- die_errno(_("renaming '%s' failed"), fname_old);
free(fname);
free(fname_old);
}
@@ -333,12 +361,12 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
/* Remove the "old-" files */
for_each_string_list_item(item, &names) {
- for (ext = 0; ext < 2; ext++) {
+ for (ext = 0; ext < ARRAY_SIZE(exts); ext++) {
char *fname;
- fname = mkpath("%s/old-pack-%s%s",
+ fname = mkpath("%s/old-%s%s",
packdir,
item->string,
- exts[ext]);
+ exts[ext].name);
if (remove_path(fname))
warning(_("removing '%s' failed"), fname);
}
diff --git a/builtin/replace.c b/builtin/replace.c
index 2336325ce..b62420a01 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -36,7 +36,7 @@ static int show_reference(const char *refname, const unsigned char *sha1,
{
struct show_data *data = cb_data;
- if (!fnmatch(data->pattern, refname, 0)) {
+ if (!wildmatch(data->pattern, refname, 0, NULL)) {
if (data->format == REPLACE_FORMAT_SHORT)
printf("%s\n", refname);
else if (data->format == REPLACE_FORMAT_MEDIUM)
@@ -178,7 +178,7 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
OPT_END()
};
- read_replace_refs = 0;
+ check_replace_refs = 0;
argc = parse_options(argc, argv, prefix, options, git_replace_usage, 0);
diff --git a/builtin/reset.c b/builtin/reset.c
index 60048030d..f4e087596 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -116,25 +116,34 @@ static void update_index_from_diff(struct diff_queue_struct *q,
struct diff_options *opt, void *data)
{
int i;
+ int intent_to_add = *(int *)data;
for (i = 0; i < q->nr; i++) {
struct diff_filespec *one = q->queue[i]->one;
- if (one->mode && !is_null_sha1(one->sha1)) {
- struct cache_entry *ce;
- ce = make_cache_entry(one->mode, one->sha1, one->path,
- 0, 0);
- if (!ce)
- die(_("make_cache_entry failed for path '%s'"),
- one->path);
- add_cache_entry(ce, ADD_CACHE_OK_TO_ADD |
- ADD_CACHE_OK_TO_REPLACE);
- } else
+ int is_missing = !(one->mode && !is_null_sha1(one->sha1));
+ struct cache_entry *ce;
+
+ if (is_missing && !intent_to_add) {
remove_file_from_cache(one->path);
+ continue;
+ }
+
+ ce = make_cache_entry(one->mode, one->sha1, one->path,
+ 0, 0);
+ if (!ce)
+ die(_("make_cache_entry failed for path '%s'"),
+ one->path);
+ if (is_missing) {
+ ce->ce_flags |= CE_INTENT_TO_ADD;
+ set_object_name_for_intent_to_add_entry(ce);
+ }
+ add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
}
}
static int read_from_tree(const struct pathspec *pathspec,
- unsigned char *tree_sha1)
+ unsigned char *tree_sha1,
+ int intent_to_add)
{
struct diff_options opt;
@@ -142,6 +151,7 @@ static int read_from_tree(const struct pathspec *pathspec,
copy_pathspec(&opt.pathspec, pathspec);
opt.output_format = DIFF_FORMAT_CALLBACK;
opt.format_callback = update_index_from_diff;
+ opt.format_callback_data = &intent_to_add;
if (do_diff_cache(tree_sha1, &opt))
return 1;
@@ -258,6 +268,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
const char *rev;
unsigned char sha1[20];
struct pathspec pathspec;
+ int intent_to_add = 0;
const struct option options[] = {
OPT__QUIET(&quiet, N_("be quiet, only report errors")),
OPT_SET_INT(0, "mixed", &reset_type,
@@ -270,6 +281,8 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
OPT_SET_INT(0, "keep", &reset_type,
N_("reset HEAD but keep local changes"), KEEP),
OPT_BOOL('p', "patch", &patch_mode, N_("select hunks interactively")),
+ OPT_BOOL('N', "intent-to-add", &intent_to_add,
+ N_("record only the fact that removed paths will be added later")),
OPT_END()
};
@@ -320,13 +333,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
if (reset_type == NONE)
reset_type = MIXED; /* by default */
- if (reset_type != SOFT && reset_type != MIXED)
+ if (reset_type != SOFT && (reset_type != MIXED || get_git_work_tree()))
setup_work_tree();
if (reset_type == MIXED && is_bare_repository())
die(_("%s reset is not allowed in a bare repository"),
_(reset_type_names[reset_type]));
+ if (intent_to_add && reset_type != MIXED)
+ die(_("-N can only be used with --mixed"));
+
/* Soft reset does not touch the index file nor the working tree
* at all, but requires them in a good order. Other resets reset
* the index file to the tree object we are switching to. */
@@ -338,10 +354,11 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
int newfd = hold_locked_index(lock, 1);
if (reset_type == MIXED) {
int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN;
- if (read_from_tree(&pathspec, sha1))
+ if (read_from_tree(&pathspec, sha1, intent_to_add))
return 1;
- refresh_index(&the_index, flags, NULL, NULL,
- _("Unstaged changes after reset:"));
+ if (get_git_work_tree())
+ refresh_index(&the_index, flags, NULL, NULL,
+ _("Unstaged changes after reset:"));
} else {
int err = reset_index(sha1, reset_type, quiet);
if (reset_type == KEEP && !err)
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 0745e2d05..9f9290537 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -3,6 +3,8 @@
#include "diff.h"
#include "revision.h"
#include "list-objects.h"
+#include "pack.h"
+#include "pack-bitmap.h"
#include "builtin.h"
#include "log-tree.h"
#include "graph.h"
@@ -257,6 +259,18 @@ static int show_bisect_vars(struct rev_list_info *info, int reaches, int all)
return 0;
}
+static int show_object_fast(
+ const unsigned char *sha1,
+ enum object_type type,
+ int exclude,
+ uint32_t name_hash,
+ struct packed_git *found_pack,
+ off_t found_offset)
+{
+ fprintf(stdout, "%s\n", sha1_to_hex(sha1));
+ return 1;
+}
+
int cmd_rev_list(int argc, const char **argv, const char *prefix)
{
struct rev_info revs;
@@ -265,6 +279,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
int bisect_list = 0;
int bisect_show_vars = 0;
int bisect_find_all = 0;
+ int use_bitmap_index = 0;
git_config(git_default_config, NULL);
init_revisions(&revs, prefix);
@@ -306,6 +321,14 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
bisect_show_vars = 1;
continue;
}
+ if (!strcmp(arg, "--use-bitmap-index")) {
+ use_bitmap_index = 1;
+ continue;
+ }
+ if (!strcmp(arg, "--test-bitmap")) {
+ test_bitmap_walk(&revs);
+ return 0;
+ }
usage(rev_list_usage);
}
@@ -333,6 +356,22 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
if (bisect_list)
revs.limited = 1;
+ if (use_bitmap_index) {
+ if (revs.count && !revs.left_right && !revs.cherry_mark) {
+ uint32_t commit_count;
+ if (!prepare_bitmap_walk(&revs)) {
+ count_bitmap_commit_list(&commit_count, NULL, NULL, NULL);
+ printf("%d\n", commit_count);
+ return 0;
+ }
+ } else if (revs.tag_objects && revs.tree_objects && revs.blob_objects) {
+ if (!prepare_bitmap_walk(&revs)) {
+ traverse_bitmap_commit_list(&show_object_fast);
+ return 0;
+ }
+ }
+ }
+
if (prepare_revision_walk(&revs))
die("revision walk setup failed");
if (revs.tree_objects)
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index aaeb611a9..45901df37 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -547,15 +547,17 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
continue;
}
if (!strcmp(arg, "--default")) {
- def = argv[i+1];
- i++;
+ def = argv[++i];
+ if (!def)
+ die("--default requires an argument");
continue;
}
if (!strcmp(arg, "--prefix")) {
- prefix = argv[i+1];
+ prefix = argv[++i];
+ if (!prefix)
+ die("--prefix requires an argument");
startup_info->prefix = prefix;
output_prefix = 1;
- i++;
continue;
}
if (!strcmp(arg, "--revs-only")) {
@@ -738,9 +740,12 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
continue;
}
if (!strcmp(arg, "--resolve-git-dir")) {
- const char *gitdir = resolve_gitdir(argv[i+1]);
+ const char *gitdir = argv[++i];
if (!gitdir)
- die("not a gitdir '%s'", argv[i+1]);
+ die("--resolve-git-dir requires an argument");
+ gitdir = resolve_gitdir(gitdir);
+ if (!gitdir)
+ die("not a gitdir '%s'", argv[i]);
puts(gitdir);
continue;
}
diff --git a/builtin/revert.c b/builtin/revert.c
index 87659c9fd..065d88dd0 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -89,6 +89,8 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
OPT_STRING(0, "strategy", &opts->strategy, N_("strategy"), N_("merge strategy")),
OPT_CALLBACK('X', "strategy-option", &opts, N_("option"),
N_("option for merge strategy"), option_parse_x),
+ { OPTION_STRING, 'S', "gpg-sign", &opts->gpg_sign, N_("key id"),
+ N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
OPT_END(),
OPT_END(),
OPT_END(),
diff --git a/builtin/rm.c b/builtin/rm.c
index 3a0e0eaab..960634dd0 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -308,10 +308,10 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
for (i = 0; i < active_nr; i++) {
const struct cache_entry *ce = active_cache[i];
- if (!match_pathspec_depth(&pathspec, ce->name, ce_namelen(ce), 0, seen))
+ if (!ce_path_match(ce, &pathspec, seen))
continue;
ALLOC_GROW(list.entry, list.nr + 1, list.alloc);
- list.entry[list.nr].name = ce->name;
+ list.entry[list.nr].name = xstrdup(ce->name);
list.entry[list.nr].is_submodule = S_ISGITLINK(ce->ce_mode);
if (list.entry[list.nr++].is_submodule &&
!is_staging_gitmodules_ok())
diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index d9217ce1e..d87317290 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -450,7 +450,7 @@ static int append_matching_ref(const char *refname, const unsigned char *sha1, i
slash--;
if (!*tail)
return 0;
- if (fnmatch(match_ref_pattern, tail, 0))
+ if (wildmatch(match_ref_pattern, tail, 0, NULL))
return 0;
if (starts_with(refname, "refs/heads/"))
return append_head_ref(refname, sha1, flag, cb_data);
diff --git a/builtin/tag.c b/builtin/tag.c
index 74d3780b7..40356e3e4 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -27,9 +27,16 @@ static const char * const git_tag_usage[] = {
NULL
};
+#define STRCMP_SORT 0 /* must be zero */
+#define VERCMP_SORT 1
+#define SORT_MASK 0x7fff
+#define REVERSE_SORT 0x8000
+
struct tag_filter {
const char **patterns;
int lines;
+ int sort;
+ struct string_list tags;
struct commit_list *with_commit;
};
@@ -42,7 +49,7 @@ static int match_pattern(const char **patterns, const char *ref)
if (!*patterns)
return 1;
for (; *patterns; patterns++)
- if (!fnmatch(*patterns, ref, 0))
+ if (!wildmatch(*patterns, ref, 0, NULL))
return 1;
return 0;
}
@@ -166,7 +173,10 @@ static int show_reference(const char *refname, const unsigned char *sha1,
return 0;
if (!filter->lines) {
- printf("%s\n", refname);
+ if (filter->sort)
+ string_list_append(&filter->tags, refname);
+ else
+ printf("%s\n", refname);
return 0;
}
printf("%-15s ", refname);
@@ -177,17 +187,39 @@ static int show_reference(const char *refname, const unsigned char *sha1,
return 0;
}
+static int sort_by_version(const void *a_, const void *b_)
+{
+ const struct string_list_item *a = a_;
+ const struct string_list_item *b = b_;
+ return versioncmp(a->string, b->string);
+}
+
static int list_tags(const char **patterns, int lines,
- struct commit_list *with_commit)
+ struct commit_list *with_commit, int sort)
{
struct tag_filter filter;
filter.patterns = patterns;
filter.lines = lines;
+ filter.sort = sort;
filter.with_commit = with_commit;
+ memset(&filter.tags, 0, sizeof(filter.tags));
+ filter.tags.strdup_strings = 1;
for_each_tag_ref(show_reference, (void *) &filter);
-
+ if (sort) {
+ int i;
+ if ((sort & SORT_MASK) == VERCMP_SORT)
+ qsort(filter.tags.items, filter.tags.nr,
+ sizeof(struct string_list_item), sort_by_version);
+ if (sort & REVERSE_SORT)
+ for (i = filter.tags.nr - 1; i >= 0; i--)
+ printf("%s\n", filter.tags.items[i].string);
+ else
+ for (i = 0; i < filter.tags.nr; i++)
+ printf("%s\n", filter.tags.items[i].string);
+ string_list_clear(&filter.tags, 0);
+ }
return 0;
}
@@ -427,6 +459,29 @@ static int parse_opt_points_at(const struct option *opt __attribute__((unused)),
return 0;
}
+static int parse_opt_sort(const struct option *opt, const char *arg, int unset)
+{
+ int *sort = opt->value;
+ int flags = 0;
+
+ if (*arg == '-') {
+ flags |= REVERSE_SORT;
+ arg++;
+ }
+ if (starts_with(arg, "version:")) {
+ *sort = VERCMP_SORT;
+ arg += 8;
+ } else if (starts_with(arg, "v:")) {
+ *sort = VERCMP_SORT;
+ arg += 2;
+ } else
+ *sort = STRCMP_SORT;
+ if (strcmp(arg, "refname"))
+ die(_("unsupported sort specification %s"), arg);
+ *sort |= flags;
+ return 0;
+}
+
int cmd_tag(int argc, const char **argv, const char *prefix)
{
struct strbuf buf = STRBUF_INIT;
@@ -437,7 +492,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
struct create_tag_options opt;
char *cleanup_arg = NULL;
int annotate = 0, force = 0, lines = -1;
- int cmdmode = 0;
+ int cmdmode = 0, sort = 0;
const char *msgfile = NULL, *keyid = NULL;
struct msg_arg msg = { 0, STRBUF_INIT };
struct commit_list *with_commit = NULL;
@@ -462,6 +517,10 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
N_("use another key to sign the tag")),
OPT__FORCE(&force, N_("replace the tag if exists")),
OPT_COLUMN(0, "column", &colopts, N_("show tag list in columns")),
+ {
+ OPTION_CALLBACK, 0, "sort", &sort, N_("type"), N_("sort tags"),
+ PARSE_OPT_NONEG, parse_opt_sort
+ },
OPT_GROUP(N_("Tag listing options")),
{
@@ -471,6 +530,12 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
parse_opt_with_commit, (intptr_t)"HEAD",
},
{
+ OPTION_CALLBACK, 0, "with", &with_commit, N_("commit"),
+ N_("print only tags that contain the commit"),
+ PARSE_OPT_HIDDEN | PARSE_OPT_LASTARG_DEFAULT,
+ parse_opt_with_commit, (intptr_t)"HEAD",
+ },
+ {
OPTION_CALLBACK, 0, "points-at", NULL, N_("object"),
N_("print only tags of the object"), 0, parse_opt_points_at
},
@@ -509,7 +574,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
copts.padding = 2;
run_column_filter(colopts, &copts);
}
- ret = list_tags(argv, lines == -1 ? 0 : lines, with_commit);
+ if (lines != -1 && sort)
+ die(_("--sort and -n are incompatible"));
+ ret = list_tags(argv, lines == -1 ? 0 : lines, with_commit, sort);
if (column_active(colopts))
stop_column_filter();
return ret;
diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index 62ff673f6..99cde4587 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -480,7 +480,7 @@ static void unpack_all(void)
use(sizeof(struct pack_header));
if (!quiet)
- progress = start_progress("Unpacking objects", nr_objects);
+ progress = start_progress(_("Unpacking objects"), nr_objects);
obj_list = xcalloc(nr_objects, sizeof(*obj_list));
for (i = 0; i < nr_objects; i++) {
unpack_one(i);
@@ -497,7 +497,7 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix)
int i;
unsigned char sha1[20];
- read_replace_refs = 0;
+ check_replace_refs = 0;
git_config(git_default_config, NULL);
diff --git a/builtin/update-index.c b/builtin/update-index.c
index e3a10d706..d12ad95f3 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -12,6 +12,7 @@
#include "resolve-undo.h"
#include "parse-options.h"
#include "pathspec.h"
+#include "dir.h"
/*
* Default to not allowing changes to the list of files. The
@@ -274,36 +275,32 @@ static void chmod_path(int flip, const char *path)
die("git update-index: cannot chmod %cx '%s'", flip, path);
}
-static void update_one(const char *path, const char *prefix, int prefix_length)
+static void update_one(const char *path)
{
- const char *p = prefix_path(prefix, prefix_length, path);
- if (!verify_path(p)) {
+ if (!verify_path(path)) {
fprintf(stderr, "Ignoring path %s\n", path);
- goto free_return;
+ return;
}
if (mark_valid_only) {
- if (mark_ce_flags(p, CE_VALID, mark_valid_only == MARK_FLAG))
+ if (mark_ce_flags(path, CE_VALID, mark_valid_only == MARK_FLAG))
die("Unable to mark file %s", path);
- goto free_return;
+ return;
}
if (mark_skip_worktree_only) {
- if (mark_ce_flags(p, CE_SKIP_WORKTREE, mark_skip_worktree_only == MARK_FLAG))
+ if (mark_ce_flags(path, CE_SKIP_WORKTREE, mark_skip_worktree_only == MARK_FLAG))
die("Unable to mark file %s", path);
- goto free_return;
+ return;
}
if (force_remove) {
- if (remove_file_from_cache(p))
+ if (remove_file_from_cache(path))
die("git update-index: unable to remove %s", path);
report("remove '%s'", path);
- goto free_return;
+ return;
}
- if (process_path(p))
+ if (process_path(path))
die("Unable to process path %s", path);
report("add '%s'", path);
- free_return:
- if (p < path || p > path + strlen(path))
- free((char *)p);
}
static void read_index_info(int line_termination)
@@ -563,8 +560,9 @@ static int do_reupdate(int ac, const char **av,
const struct cache_entry *ce = active_cache[pos];
struct cache_entry *old = NULL;
int save_nr;
+ char *path;
- if (ce_stage(ce) || !ce_path_match(ce, &pathspec))
+ if (ce_stage(ce) || !ce_path_match(ce, &pathspec, NULL))
continue;
if (has_head)
old = read_one_ent(NULL, head_sha1,
@@ -579,7 +577,9 @@ static int do_reupdate(int ac, const char **av,
* or worse yet 'allow_replace', active_nr may decrease.
*/
save_nr = active_nr;
- update_one(ce->name + prefix_length, prefix, prefix_length);
+ path = xstrdup(ce->name);
+ update_one(path);
+ free(path);
if (save_nr != active_nr)
goto redo;
}
@@ -836,11 +836,10 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
setup_work_tree();
p = prefix_path(prefix, prefix_length, path);
- update_one(p, NULL, 0);
+ update_one(p);
if (set_executable_bit)
chmod_path(set_executable_bit, p);
- if (p < path || p > path + strlen(path))
- free((char *)p);
+ free((char *)p);
ctx.argc--;
ctx.argv++;
break;
@@ -879,11 +878,10 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
strbuf_swap(&buf, &nbuf);
}
p = prefix_path(prefix, prefix_length, buf.buf);
- update_one(p, NULL, 0);
+ update_one(p);
if (set_executable_bit)
chmod_path(set_executable_bit, p);
- if (p < buf.buf || p > buf.buf + buf.len)
- free((char *)p);
+ free((char *)p);
}
strbuf_release(&nbuf);
strbuf_release(&buf);
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 118c62528..98e651c28 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -4,6 +4,7 @@
#include "bulk-checkin.h"
#include "csum-file.h"
#include "pack.h"
+#include "strbuf.h"
static int pack_compression_level = Z_DEFAULT_COMPRESSION;
@@ -23,7 +24,7 @@ static struct bulk_checkin_state {
static void finish_bulk_checkin(struct bulk_checkin_state *state)
{
unsigned char sha1[20];
- char packname[PATH_MAX];
+ struct strbuf packname = STRBUF_INIT;
int i;
if (!state->f)
@@ -43,8 +44,8 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
close(fd);
}
- sprintf(packname, "%s/pack/pack-", get_object_directory());
- finish_tmp_packfile(packname, state->pack_tmp_name,
+ strbuf_addf(&packname, "%s/pack/pack-", get_object_directory());
+ finish_tmp_packfile(&packname, state->pack_tmp_name,
state->written, state->nr_written,
&state->pack_idx_opts, sha1);
for (i = 0; i < state->nr_written; i++)
@@ -54,6 +55,7 @@ clear_exit:
free(state->written);
memset(state, 0, sizeof(*state));
+ strbuf_release(&packname);
/* Make objects we just wrote available to ourselves */
reprepare_packed_git();
}
diff --git a/bundle.c b/bundle.c
index e99065ce4..a85e0e453 100644
--- a/bundle.c
+++ b/bundle.c
@@ -14,12 +14,8 @@ static const char bundle_signature[] = "# v2 git bundle\n";
static void add_to_ref_list(const unsigned char *sha1, const char *name,
struct ref_list *list)
{
- if (list->nr + 1 >= list->alloc) {
- list->alloc = alloc_nr(list->nr + 1);
- list->list = xrealloc(list->list,
- list->alloc * sizeof(list->list[0]));
- }
- memcpy(list->list[list->nr].sha1, sha1, 20);
+ ALLOC_GROW(list->list, list->nr + 1, list->alloc);
+ hashcpy(list->list[list->nr].sha1, sha1);
list->list[list->nr].name = xstrdup(name);
list->nr++;
}
diff --git a/cache-tree.c b/cache-tree.c
index 0bbec4321..7fa524a11 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -75,11 +75,7 @@ static struct cache_tree_sub *find_subtree(struct cache_tree *it,
return NULL;
pos = -pos-1;
- if (it->subtree_alloc <= it->subtree_nr) {
- it->subtree_alloc = alloc_nr(it->subtree_alloc);
- it->down = xrealloc(it->down, it->subtree_alloc *
- sizeof(*it->down));
- }
+ ALLOC_GROW(it->down, it->subtree_nr + 1, it->subtree_alloc);
it->subtree_nr++;
down = xmalloc(sizeof(*down) + pathlen + 1);
@@ -121,11 +117,11 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
if (!it)
return;
- slash = strchr(path, '/');
+ slash = strchrnul(path, '/');
+ namelen = slash - path;
it->entry_count = -1;
- if (!slash) {
+ if (!*slash) {
int pos;
- namelen = strlen(path);
pos = subtree_pos(it, path, namelen);
if (0 <= pos) {
cache_tree_free(&it->down[pos]->cache_tree);
@@ -143,7 +139,6 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
}
return;
}
- namelen = slash - path;
down = find_subtree(it, path, namelen, 0);
if (down)
cache_tree_invalidate_path(down->cache_tree, slash + 1);
@@ -554,22 +549,19 @@ static struct cache_tree *cache_tree_find(struct cache_tree *it, const char *pat
const char *slash;
struct cache_tree_sub *sub;
- slash = strchr(path, '/');
- if (!slash)
- slash = path + strlen(path);
- /* between path and slash is the name of the
- * subtree to look for.
+ slash = strchrnul(path, '/');
+ /*
+ * Between path and slash is the name of the subtree
+ * to look for.
*/
sub = find_subtree(it, path, slash - path, 0);
if (!sub)
return NULL;
it = sub->cache_tree;
- if (slash)
- while (*slash && *slash == '/')
- slash++;
- if (!slash || !*slash)
- return it; /* prefix ended with slashes */
+
path = slash;
+ while (*path == '/')
+ path++;
}
return it;
}
diff --git a/cache.h b/cache.h
index c9efe88e9..107ac61b6 100644
--- a/cache.h
+++ b/cache.h
@@ -3,7 +3,7 @@
#include "git-compat-util.h"
#include "strbuf.h"
-#include "hash.h"
+#include "hashmap.h"
#include "advice.h"
#include "gettext.h"
#include "convert.h"
@@ -130,12 +130,12 @@ struct stat_data {
};
struct cache_entry {
+ struct hashmap_entry ent;
struct stat_data ce_stat_data;
unsigned int ce_mode;
unsigned int ce_flags;
unsigned int ce_namelen;
unsigned char sha1[20];
- struct cache_entry *next;
char name[FLEX_ARRAY]; /* more */
};
@@ -159,7 +159,6 @@ struct cache_entry {
#define CE_ADDED (1 << 19)
#define CE_HASHED (1 << 20)
-#define CE_UNHASHED (1 << 21)
#define CE_WT_REMOVE (1 << 22) /* remove in work directory */
#define CE_CONFLICTED (1 << 23)
@@ -195,17 +194,18 @@ struct pathspec;
* Copy the sha1 and stat state of a cache entry from one to
* another. But we never change the name, or the hash state!
*/
-#define CE_STATE_MASK (CE_HASHED | CE_UNHASHED)
static inline void copy_cache_entry(struct cache_entry *dst,
const struct cache_entry *src)
{
- unsigned int state = dst->ce_flags & CE_STATE_MASK;
+ unsigned int state = dst->ce_flags & CE_HASHED;
/* Don't copy hash chain and name */
- memcpy(dst, src, offsetof(struct cache_entry, next));
+ memcpy(&dst->ce_stat_data, &src->ce_stat_data,
+ offsetof(struct cache_entry, name) -
+ offsetof(struct cache_entry, ce_stat_data));
/* Restore the hash state */
- dst->ce_flags = (dst->ce_flags & ~CE_STATE_MASK) | state;
+ dst->ce_flags = (dst->ce_flags & ~CE_HASHED) | state;
}
static inline unsigned create_ce_flags(unsigned stage)
@@ -277,8 +277,8 @@ struct index_state {
struct cache_time timestamp;
unsigned name_hash_initialized : 1,
initialized : 1;
- struct hash_table name_hash;
- struct hash_table dir_hash;
+ struct hashmap name_hash;
+ struct hashmap dir_hash;
};
extern struct index_state the_index;
@@ -316,7 +316,6 @@ extern void free_name_hash(struct index_state *istate);
#define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options))
#define cache_dir_exists(name, namelen) index_dir_exists(&the_index, (name), (namelen))
#define cache_file_exists(name, namelen, igncase) index_file_exists(&the_index, (name), (namelen), (igncase))
-#define cache_name_exists(name, namelen, igncase) index_name_exists(&the_index, (name), (namelen), (igncase))
#define cache_name_is_other(name, namelen) index_name_is_other(&the_index, (name), (namelen))
#define resolve_undo_clear() resolve_undo_clear_index(&the_index)
#define unmerge_cache_entry_at(at) unmerge_index_entry_at(&the_index, at)
@@ -434,6 +433,7 @@ extern int set_git_dir_init(const char *git_dir, const char *real_git_dir, int);
extern int init_db(const char *template_dir, unsigned int flags);
extern void sanitize_stdfds(void);
+extern int daemonize(void);
#define alloc_nr(x) (((x)+16)*3/2)
@@ -467,7 +467,6 @@ extern int unmerged_index(const struct index_state *);
extern int verify_path(const char *path);
extern struct cache_entry *index_dir_exists(struct index_state *istate, const char *name, int namelen);
extern struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
-extern struct cache_entry *index_name_exists(struct index_state *istate, const char *name, int namelen, int igncase);
extern int index_name_pos(const struct index_state *, const char *name, int namelen);
#define ADD_CACHE_OK_TO_ADD 1 /* Ok to add */
#define ADD_CACHE_OK_TO_REPLACE 2 /* Ok to replace file/directory */
@@ -484,11 +483,11 @@ extern int remove_file_from_index(struct index_state *, const char *path);
#define ADD_CACHE_IGNORE_ERRORS 4
#define ADD_CACHE_IGNORE_REMOVAL 8
#define ADD_CACHE_INTENT 16
-#define ADD_CACHE_IMPLICIT_DOT 32 /* internal to "git add -u/-A" */
extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags);
extern int add_file_to_index(struct index_state *, const char *path, int flags);
-extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh);
+extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, unsigned int refresh_options);
extern int ce_same_name(const struct cache_entry *a, const struct cache_entry *b);
+extern void set_object_name_for_intent_to_add_entry(struct cache_entry *ce);
extern int index_name_is_other(const struct index_state *, const char *, int);
extern void *read_blob_data_from_index(struct index_state *, const char *, unsigned long *);
@@ -498,11 +497,13 @@ extern void *read_blob_data_from_index(struct index_state *, const char *, unsig
#define CE_MATCH_RACY_IS_DIRTY 02
/* do stat comparison even if CE_SKIP_WORKTREE is true */
#define CE_MATCH_IGNORE_SKIP_WORKTREE 04
+/* ignore non-existent files during stat update */
+#define CE_MATCH_IGNORE_MISSING 0x08
+/* enable stat refresh */
+#define CE_MATCH_REFRESH 0x10
extern int ie_match_stat(const struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
extern int ie_modified(const struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
-extern int ce_path_match(const struct cache_entry *ce, const struct pathspec *pathspec);
-
#define HASH_WRITE_OBJECT 1
#define HASH_FORMAT_CHECK 2
extern int index_fd(unsigned char *sha1, int fd, struct stat *st, enum object_type type, const char *path, unsigned flags);
@@ -580,7 +581,17 @@ extern size_t packed_git_limit;
extern size_t delta_base_cache_limit;
extern unsigned long big_file_threshold;
extern unsigned long pack_size_limit_cfg;
-extern int read_replace_refs;
+
+/*
+ * Do replace refs need to be checked this run? This variable is
+ * initialized to true unless --no-replace-object is used or
+ * $GIT_NO_REPLACE_OBJECTS is set, but is set to false by some
+ * commands that do not want replace references to be active. As an
+ * optimization it is also set to false if replace references have
+ * been sought but there were none.
+ */
+extern int check_replace_refs;
+
extern int fsync_object_files;
extern int core_preload_index;
extern int core_apply_sparse_checkout;
@@ -659,9 +670,28 @@ extern char *git_path(const char *fmt, ...) __attribute__((format (printf, 1, 2)
extern char *git_path_submodule(const char *path, const char *fmt, ...)
__attribute__((format (printf, 2, 3)));
-extern char *sha1_file_name(const unsigned char *sha1);
+/*
+ * Return the name of the file in the local object database that would
+ * be used to store a loose object with the specified sha1. The
+ * return value is a pointer to a statically allocated buffer that is
+ * overwritten each time the function is called.
+ */
+extern const char *sha1_file_name(const unsigned char *sha1);
+
+/*
+ * Return the name of the (local) packfile with the specified sha1 in
+ * its name. The return value is a pointer to memory that is
+ * overwritten each time this function is called.
+ */
extern char *sha1_pack_name(const unsigned char *sha1);
+
+/*
+ * Return the name of the (local) pack index file with the specified
+ * sha1 in its name. The return value is a pointer to memory that is
+ * overwritten each time this function is called.
+ */
extern char *sha1_pack_index_name(const unsigned char *sha1);
+
extern const char *find_unique_abbrev(const unsigned char *sha1, int);
extern const unsigned char null_sha1[20];
@@ -737,8 +767,29 @@ enum sharedrepo {
};
int git_config_perm(const char *var, const char *value);
int adjust_shared_perm(const char *path);
-int safe_create_leading_directories(char *path);
-int safe_create_leading_directories_const(const char *path);
+
+/*
+ * Create the directory containing the named path, using care to be
+ * somewhat safe against races. Return one of the scld_error values
+ * to indicate success/failure.
+ *
+ * SCLD_VANISHED indicates that one of the ancestor directories of the
+ * path existed at one point during the function call and then
+ * suddenly vanished, probably because another process pruned the
+ * directory while we were working. To be robust against this kind of
+ * race, callers might want to try invoking the function again when it
+ * returns SCLD_VANISHED.
+ */
+enum scld_error {
+ SCLD_OK = 0,
+ SCLD_FAILED = -1,
+ SCLD_PERMS = -2,
+ SCLD_EXISTS = -3,
+ SCLD_VANISHED = -4
+};
+enum scld_error safe_create_leading_directories(char *path);
+enum scld_error safe_create_leading_directories_const(const char *path);
+
int mkdir_in_gitdir(const char *path);
extern void home_config_paths(char **global, char **xdg, char *file);
extern char *expand_user_path(const char *path);
@@ -767,13 +818,26 @@ static inline void *read_sha1_file(const unsigned char *sha1, enum object_type *
{
return read_sha1_file_extended(sha1, type, size, LOOKUP_REPLACE_OBJECT);
}
+
+/*
+ * This internal function is only declared here for the benefit of
+ * lookup_replace_object(). Please do not call it directly.
+ */
extern const unsigned char *do_lookup_replace_object(const unsigned char *sha1);
+
+/*
+ * If object sha1 should be replaced, return the replacement object's
+ * name (replaced recursively, if necessary). The return value is
+ * either sha1 or a pointer to a permanently-allocated value. When
+ * object replacement is suppressed, always return sha1.
+ */
static inline const unsigned char *lookup_replace_object(const unsigned char *sha1)
{
- if (!read_replace_refs)
+ if (!check_replace_refs)
return sha1;
return do_lookup_replace_object(sha1);
}
+
static inline const unsigned char *lookup_replace_object_extended(const unsigned char *sha1, unsigned flag)
{
if (!(flag & LOOKUP_REPLACE_OBJECT))
@@ -787,6 +851,7 @@ extern int hash_sha1_file(const void *buf, unsigned long len, const char *type,
extern int write_sha1_file(const void *buf, unsigned long len, const char *type, unsigned char *return_sha1);
extern int pretend_sha1_file(void *, unsigned long, enum object_type, unsigned char *);
extern int force_object_loose(const unsigned char *sha1, time_t mtime);
+extern int git_open_noatime(const char *name);
extern void *map_sha1_file(const unsigned char *sha1, unsigned long *size);
extern int unpack_sha1_header(git_zstream *stream, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz);
extern int parse_sha1_header(const char *hdr, unsigned long *sizep);
@@ -799,7 +864,19 @@ extern int check_sha1_signature(const unsigned char *sha1, void *buf, unsigned l
extern int move_temp_to_file(const char *tmpfile, const char *filename);
extern int has_sha1_pack(const unsigned char *sha1);
+
+/*
+ * Return true iff we have an object named sha1, whether local or in
+ * an alternate object database, and whether packed or loose. This
+ * function does not respect replace references.
+ */
extern int has_sha1_file(const unsigned char *sha1);
+
+/*
+ * Return true iff an alternate object database has a loose object
+ * with the specified name. This function does not respect replace
+ * references.
+ */
extern int has_loose_object_nonlocal(const unsigned char *sha1);
extern int has_pack_index(const unsigned char *sha1);
@@ -894,9 +971,12 @@ extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
extern int interpret_branch_name(const char *str, int len, struct strbuf *);
extern int get_sha1_mb(const char *str, unsigned char *sha1);
-extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules);
-extern const char *ref_rev_parse_rules[];
-#define ref_fetch_rules ref_rev_parse_rules
+/*
+ * Return true iff abbrev_name is a possible abbreviation for
+ * full_name according to the rules defined by ref_rev_parse_rules in
+ * refs.c.
+ */
+extern int refname_match(const char *abbrev_name, const char *full_name);
extern int create_symref(const char *ref, const char *refs_heads_master, const char *logmsg);
extern int validate_headref(const char *ref);
@@ -935,6 +1015,7 @@ void datestamp(char *buf, int bufsize);
unsigned long approxidate_careful(const char *, int *);
unsigned long approxidate_relative(const char *date, const struct timeval *now);
enum date_mode parse_date_format(const char *format);
+int date_overflows(unsigned long date);
#define IDENT_STRICT 1
#define IDENT_NO_DATE 2
@@ -1059,17 +1140,46 @@ extern struct packed_git *find_sha1_pack(const unsigned char *sha1,
struct packed_git *packs);
extern void pack_report(void);
+
+/*
+ * mmap the index file for the specified packfile (if it is not
+ * already mmapped). Return 0 on success.
+ */
extern int open_pack_index(struct packed_git *);
+
+/*
+ * munmap the index file for the specified packfile (if it is
+ * currently mmapped).
+ */
extern void close_pack_index(struct packed_git *);
+
extern unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t, unsigned long *);
extern void close_pack_windows(struct packed_git *);
extern void unuse_pack(struct pack_window **);
extern void free_pack_by_name(const char *);
extern void clear_delta_base_cache(void);
extern struct packed_git *add_packed_git(const char *, int, int);
-extern const unsigned char *nth_packed_object_sha1(struct packed_git *, uint32_t);
-extern off_t nth_packed_object_offset(const struct packed_git *, uint32_t);
-extern off_t find_pack_entry_one(const unsigned char *, struct packed_git *);
+
+/*
+ * Return the SHA-1 of the nth object within the specified packfile.
+ * Open the index if it is not already open. The return value points
+ * at the SHA-1 within the mmapped index. Return NULL if there is an
+ * error.
+ */
+extern const unsigned char *nth_packed_object_sha1(struct packed_git *, uint32_t n);
+
+/*
+ * Return the offset of the nth object within the specified packfile.
+ * The index must already be opened.
+ */
+extern off_t nth_packed_object_offset(const struct packed_git *, uint32_t n);
+
+/*
+ * If the object named sha1 is present in the specified packfile,
+ * return its offset within the packfile; otherwise, return 0.
+ */
+extern off_t find_pack_entry_one(const unsigned char *sha1, struct packed_git *);
+
extern int is_pack_valid(struct packed_git *);
extern void *unpack_entry(struct packed_git *, off_t, enum object_type *, unsigned long *);
extern unsigned long unpack_object_header_buffer(const unsigned char *buf, unsigned long len, enum object_type *type, unsigned long *sizep);
@@ -1122,6 +1232,12 @@ extern int update_server_info(int);
#define CONFIG_INVALID_PATTERN 6
#define CONFIG_GENERIC_ERROR 7
+struct git_config_source {
+ unsigned int use_stdin:1;
+ const char *file;
+ const char *blob;
+};
+
typedef int (*config_fn_t)(const char *, const char *, void *);
extern int git_default_config(const char *, const char *, void *);
extern int git_config_from_file(config_fn_t fn, const char *, void *);
@@ -1131,8 +1247,7 @@ extern void git_config_push_parameter(const char *text);
extern int git_config_from_parameters(config_fn_t fn, void *data);
extern int git_config(config_fn_t fn, void *);
extern int git_config_with_options(config_fn_t fn, void *,
- const char *filename,
- const char *blob_ref,
+ struct git_config_source *config_source,
int respect_includes);
extern int git_config_early(config_fn_t fn, void *, const char *repo_config);
extern int git_parse_ulong(const char *, unsigned long *);
@@ -1343,4 +1458,6 @@ int stat_validity_check(struct stat_validity *sv, const char *path);
*/
void stat_validity_update(struct stat_validity *sv, int fd);
+int versioncmp(const char *s1, const char *s2);
+
#endif /* CACHE_H */
diff --git a/combine-diff.c b/combine-diff.c
index 3b92c4488..24ca7e233 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -15,11 +15,10 @@
static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr, int n, int num_parent)
{
struct diff_queue_struct *q = &diff_queued_diff;
- struct combine_diff_path *p;
- int i;
+ struct combine_diff_path *p, **tail = &curr;
+ int i, cmp;
if (!n) {
- struct combine_diff_path *list = NULL, **tail = &list;
for (i = 0; i < q->nr; i++) {
int len;
const char *path;
@@ -31,7 +30,6 @@ static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr,
p->path = (char *) &(p->parent[num_parent]);
memcpy(p->path, path, len);
p->path[len] = 0;
- p->len = len;
p->next = NULL;
memset(p->parent, 0,
sizeof(p->parent[0]) * num_parent);
@@ -44,31 +42,37 @@ static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr,
*tail = p;
tail = &p->next;
}
- return list;
+ return curr;
}
- for (p = curr; p; p = p->next) {
- int found = 0;
- if (!p->len)
+ /*
+ * paths in curr (linked list) and q->queue[] (array) are
+ * both sorted in the tree order.
+ */
+ i = 0;
+ while ((p = *tail) != NULL) {
+ cmp = ((i >= q->nr)
+ ? -1 : strcmp(p->path, q->queue[i]->two->path));
+
+ if (cmp < 0) {
+ /* p->path not in q->queue[]; drop it */
+ *tail = p->next;
+ free(p);
continue;
- for (i = 0; i < q->nr; i++) {
- const char *path;
- int len;
+ }
- if (diff_unmodified_pair(q->queue[i]))
- continue;
- path = q->queue[i]->two->path;
- len = strlen(path);
- if (len == p->len && !memcmp(path, p->path, len)) {
- found = 1;
- hashcpy(p->parent[n].sha1, q->queue[i]->one->sha1);
- p->parent[n].mode = q->queue[i]->one->mode;
- p->parent[n].status = q->queue[i]->status;
- break;
- }
+ if (cmp > 0) {
+ /* q->queue[i] not in p->path; skip it */
+ i++;
+ continue;
}
- if (!found)
- p->len = 0;
+
+ hashcpy(p->parent[n].sha1, q->queue[i]->one->sha1);
+ p->parent[n].mode = q->queue[i]->one->mode;
+ p->parent[n].status = q->queue[i]->status;
+
+ tail = &p->next;
+ i++;
}
return curr;
}
@@ -1219,8 +1223,6 @@ void show_combined_diff(struct combine_diff_path *p,
{
struct diff_options *opt = &rev->diffopt;
- if (!p->len)
- return;
if (opt->output_format & (DIFF_FORMAT_RAW |
DIFF_FORMAT_NAME |
DIFF_FORMAT_NAME_STATUS))
@@ -1284,17 +1286,21 @@ static void handle_combined_callback(struct diff_options *opt,
q.queue = xcalloc(num_paths, sizeof(struct diff_filepair *));
q.alloc = num_paths;
q.nr = num_paths;
- for (i = 0, p = paths; p; p = p->next) {
- if (!p->len)
- continue;
+ for (i = 0, p = paths; p; p = p->next)
q.queue[i++] = combined_pair(p, num_parent);
- }
opt->format_callback(&q, opt, opt->format_callback_data);
for (i = 0; i < num_paths; i++)
free_combined_pair(q.queue[i]);
free(q.queue);
}
+static const char *path_path(void *obj)
+{
+ struct combine_diff_path *path = (struct combine_diff_path *)obj;
+
+ return path->path;
+}
+
void diff_tree_combined(const unsigned char *sha1,
const struct sha1_array *parents,
int dense,
@@ -1310,6 +1316,8 @@ void diff_tree_combined(const unsigned char *sha1,
diffopts.output_format = DIFF_FORMAT_NO_OUTPUT;
DIFF_OPT_SET(&diffopts, RECURSIVE);
DIFF_OPT_CLR(&diffopts, ALLOW_EXTERNAL);
+ /* tell diff_tree to emit paths in sorted (=tree) order */
+ diffopts.orderfile = NULL;
show_log_first = !!rev->loginfo && !rev->no_commit_id;
needsep = 0;
@@ -1335,22 +1343,46 @@ void diff_tree_combined(const unsigned char *sha1,
printf("%s%c", diff_line_prefix(opt),
opt->line_termination);
}
+
+ /* if showing diff, show it in requested order */
+ if (diffopts.output_format != DIFF_FORMAT_NO_OUTPUT &&
+ opt->orderfile) {
+ diffcore_order(opt->orderfile);
+ }
+
diff_flush(&diffopts);
}
- /* find out surviving paths */
- for (num_paths = 0, p = paths; p; p = p->next) {
- if (p->len)
- num_paths++;
+ /* find out number of surviving paths */
+ for (num_paths = 0, p = paths; p; p = p->next)
+ num_paths++;
+
+ /* order paths according to diffcore_order */
+ if (opt->orderfile && num_paths) {
+ struct obj_order *o;
+
+ o = xmalloc(sizeof(*o) * num_paths);
+ for (i = 0, p = paths; p; p = p->next, i++)
+ o[i].obj = p;
+ order_objects(opt->orderfile, path_path, o, num_paths);
+ for (i = 0; i < num_paths - 1; i++) {
+ p = o[i].obj;
+ p->next = o[i+1].obj;
+ }
+
+ p = o[num_paths-1].obj;
+ p->next = NULL;
+ paths = o[0].obj;
+ free(o);
}
+
+
if (num_paths) {
if (opt->output_format & (DIFF_FORMAT_RAW |
DIFF_FORMAT_NAME |
DIFF_FORMAT_NAME_STATUS)) {
- for (p = paths; p; p = p->next) {
- if (p->len)
- show_raw_diff(p, num_parent, rev);
- }
+ for (p = paths; p; p = p->next)
+ show_raw_diff(p, num_parent, rev);
needsep = 1;
}
else if (opt->output_format &
@@ -1363,11 +1395,9 @@ void diff_tree_combined(const unsigned char *sha1,
if (needsep)
printf("%s%c", diff_line_prefix(opt),
opt->line_termination);
- for (p = paths; p; p = p->next) {
- if (p->len)
- show_patch_diff(p, num_parent, dense,
- 0, rev);
- }
+ for (p = paths; p; p = p->next)
+ show_patch_diff(p, num_parent, dense,
+ 0, rev);
}
}
diff --git a/commit.c b/commit.c
index 6bf4fe00d..0f28902bc 100644
--- a/commit.c
+++ b/commit.c
@@ -10,6 +10,7 @@
#include "mergesort.h"
#include "commit-slab.h"
#include "prio-queue.h"
+#include "sha1-lookup.h"
static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **);
@@ -114,23 +115,16 @@ static unsigned long parse_commit_date(const char *buf, const char *tail)
static struct commit_graft **commit_graft;
static int commit_graft_alloc, commit_graft_nr;
+static const unsigned char *commit_graft_sha1_access(size_t index, void *table)
+{
+ struct commit_graft **commit_graft_table = table;
+ return commit_graft_table[index]->sha1;
+}
+
static int commit_graft_pos(const unsigned char *sha1)
{
- int lo, hi;
- lo = 0;
- hi = commit_graft_nr;
- while (lo < hi) {
- int mi = (lo + hi) / 2;
- struct commit_graft *graft = commit_graft[mi];
- int cmp = hashcmp(sha1, graft->sha1);
- if (!cmp)
- return mi;
- if (cmp < 0)
- hi = mi;
- else
- lo = mi + 1;
- }
- return -lo - 1;
+ return sha1_pos(sha1, commit_graft, commit_graft_nr,
+ commit_graft_sha1_access);
}
int register_commit_graft(struct commit_graft *graft, int ignore_dups)
@@ -147,12 +141,8 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)
return 1;
}
pos = -pos - 1;
- if (commit_graft_alloc <= ++commit_graft_nr) {
- commit_graft_alloc = alloc_nr(commit_graft_alloc);
- commit_graft = xrealloc(commit_graft,
- sizeof(*commit_graft) *
- commit_graft_alloc);
- }
+ ALLOC_GROW(commit_graft, commit_graft_nr + 1, commit_graft_alloc);
+ commit_graft_nr++;
if (pos < commit_graft_nr)
memmove(commit_graft + pos + 1,
commit_graft + pos,
@@ -548,7 +538,7 @@ define_commit_slab(author_date_slab, unsigned long);
static void record_author_date(struct author_date_slab *author_date,
struct commit *commit)
{
- const char *buf, *line_end;
+ const char *buf, *line_end, *ident_line;
char *buffer = NULL;
struct ident_split ident;
char *date_end;
@@ -566,14 +556,14 @@ static void record_author_date(struct author_date_slab *author_date,
buf;
buf = line_end + 1) {
line_end = strchrnul(buf, '\n');
- if (!starts_with(buf, "author ")) {
+ ident_line = skip_prefix(buf, "author ");
+ if (!ident_line) {
if (!line_end[0] || line_end[1] == '\n')
return; /* end of header */
continue;
}
if (split_ident_line(&ident,
- buf + strlen("author "),
- line_end - (buf + strlen("author "))) ||
+ ident_line, line_end - ident_line) ||
!ident.date_begin || !ident.date_end)
goto fail_exit; /* malformed "author" line */
break;
@@ -1193,10 +1183,8 @@ static void parse_gpg_output(struct signature_check *sigc)
for (i = 0; i < ARRAY_SIZE(sigcheck_gpg_status); i++) {
const char *found, *next;
- if (starts_with(buf, sigcheck_gpg_status[i].check + 1)) {
- /* At the very beginning of the buffer */
- found = buf + strlen(sigcheck_gpg_status[i].check + 1);
- } else {
+ found = skip_prefix(buf, sigcheck_gpg_status[i].check + 1);
+ if (!found) {
found = strstr(buf, sigcheck_gpg_status[i].check);
if (!found)
continue;
diff --git a/commit.h b/commit.h
index 16d9c4351..55631f191 100644
--- a/commit.h
+++ b/commit.h
@@ -209,7 +209,7 @@ extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
extern void setup_alternate_shallow(struct lock_file *shallow_lock,
const char **alternate_shallow_file,
const struct sha1_array *extra);
-extern char *setup_temporary_shallow(const struct sha1_array *extra);
+extern const char *setup_temporary_shallow(const struct sha1_array *extra);
extern void advertise_shallow_grafts(int);
struct shallow_info {
diff --git a/compat/bswap.h b/compat/bswap.h
index 5061214f7..120c6c1d3 100644
--- a/compat/bswap.h
+++ b/compat/bswap.h
@@ -17,7 +17,20 @@ static inline uint32_t default_swab32(uint32_t val)
((val & 0x000000ff) << 24));
}
+static inline uint64_t default_bswap64(uint64_t val)
+{
+ return (((val & (uint64_t)0x00000000000000ffULL) << 56) |
+ ((val & (uint64_t)0x000000000000ff00ULL) << 40) |
+ ((val & (uint64_t)0x0000000000ff0000ULL) << 24) |
+ ((val & (uint64_t)0x00000000ff000000ULL) << 8) |
+ ((val & (uint64_t)0x000000ff00000000ULL) >> 8) |
+ ((val & (uint64_t)0x0000ff0000000000ULL) >> 24) |
+ ((val & (uint64_t)0x00ff000000000000ULL) >> 40) |
+ ((val & (uint64_t)0xff00000000000000ULL) >> 56));
+}
+
#undef bswap32
+#undef bswap64
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
@@ -32,15 +45,42 @@ static inline uint32_t git_bswap32(uint32_t x)
return result;
}
+#define bswap64 git_bswap64
+#if defined(__x86_64__)
+static inline uint64_t git_bswap64(uint64_t x)
+{
+ uint64_t result;
+ if (__builtin_constant_p(x))
+ result = default_bswap64(x);
+ else
+ __asm__("bswap %q0" : "=r" (result) : "0" (x));
+ return result;
+}
+#else
+static inline uint64_t git_bswap64(uint64_t x)
+{
+ union { uint64_t i64; uint32_t i32[2]; } tmp, result;
+ if (__builtin_constant_p(x))
+ result.i64 = default_bswap64(x);
+ else {
+ tmp.i64 = x;
+ result.i32[0] = git_bswap32(tmp.i32[1]);
+ result.i32[1] = git_bswap32(tmp.i32[0]);
+ }
+ return result.i64;
+}
+#endif
+
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
#include <stdlib.h>
#define bswap32(x) _byteswap_ulong(x)
+#define bswap64(x) _byteswap_uint64(x)
#endif
-#ifdef bswap32
+#if defined(bswap32)
#undef ntohl
#undef htonl
@@ -48,3 +88,73 @@ static inline uint32_t git_bswap32(uint32_t x)
#define htonl(x) bswap32(x)
#endif
+
+#if defined(bswap64)
+
+#undef ntohll
+#undef htonll
+#define ntohll(x) bswap64(x)
+#define htonll(x) bswap64(x)
+
+#else
+
+#undef ntohll
+#undef htonll
+
+#if !defined(__BYTE_ORDER)
+# if defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN)
+# define __BYTE_ORDER BYTE_ORDER
+# define __LITTLE_ENDIAN LITTLE_ENDIAN
+# define __BIG_ENDIAN BIG_ENDIAN
+# endif
+#endif
+
+#if !defined(__BYTE_ORDER)
+# error "Cannot determine endianness"
+#endif
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define ntohll(n) (n)
+# define htonll(n) (n)
+#else
+# define ntohll(n) default_bswap64(n)
+# define htonll(n) default_bswap64(n)
+#endif
+
+#endif
+
+/*
+ * Performance might be improved if the CPU architecture is OK with
+ * unaligned 32-bit loads and a fast ntohl() is available.
+ * Otherwise fall back to byte loads and shifts which is portable,
+ * and is faster on architectures with memory alignment issues.
+ */
+
+#if defined(__i386__) || defined(__x86_64__) || \
+ defined(_M_IX86) || defined(_M_X64) || \
+ defined(__ppc__) || defined(__ppc64__) || \
+ defined(__powerpc__) || defined(__powerpc64__) || \
+ defined(__s390__) || defined(__s390x__)
+
+#define get_be16(p) ntohs(*(unsigned short *)(p))
+#define get_be32(p) ntohl(*(unsigned int *)(p))
+#define put_be32(p, v) do { *(unsigned int *)(p) = htonl(v); } while (0)
+
+#else
+
+#define get_be16(p) ( \
+ (*((unsigned char *)(p) + 0) << 8) | \
+ (*((unsigned char *)(p) + 1) << 0) )
+#define get_be32(p) ( \
+ (*((unsigned char *)(p) + 0) << 24) | \
+ (*((unsigned char *)(p) + 1) << 16) | \
+ (*((unsigned char *)(p) + 2) << 8) | \
+ (*((unsigned char *)(p) + 3) << 0) )
+#define put_be32(p, v) do { \
+ unsigned int __v = (v); \
+ *((unsigned char *)(p) + 0) = __v >> 24; \
+ *((unsigned char *)(p) + 1) = __v >> 16; \
+ *((unsigned char *)(p) + 2) = __v >> 8; \
+ *((unsigned char *)(p) + 3) = __v >> 0; } while (0)
+
+#endif
diff --git a/compat/fnmatch/fnmatch.c b/compat/fnmatch/fnmatch.c
deleted file mode 100644
index 378c46740..000000000
--- a/compat/fnmatch/fnmatch.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Enable GNU extensions in fnmatch.h. */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE 1
-#endif
-
-#include <stddef.h>
-#include <errno.h>
-#include <fnmatch.h>
-#include <ctype.h>
-
-#if HAVE_STRING_H || defined _LIBC
-# include <string.h>
-#else
-# include <strings.h>
-#endif
-
-#if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-#endif
-
-/* For platforms which support the ISO C amendment 1 functionality we
- support user defined character classes. */
-#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
-/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
-# include <wchar.h>
-# include <wctype.h>
-#endif
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#if defined NO_FNMATCH || defined NO_FNMATCH_CASEFOLD || \
- defined _LIBC || !defined __GNU_LIBRARY__
-
-
-# if defined STDC_HEADERS || !defined isascii
-# define ISASCII(c) 1
-# else
-# define ISASCII(c) isascii(c)
-# endif
-
-# ifdef isblank
-# define ISBLANK(c) (ISASCII (c) && isblank (c))
-# else
-# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
-# endif
-# ifdef isgraph
-# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
-# else
-# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
-# endif
-
-# define ISPRINT(c) (ISASCII (c) && isprint (c))
-# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
-# define ISALNUM(c) (ISASCII (c) && isalnum (c))
-# define ISALPHA(c) (ISASCII (c) && isalpha (c))
-# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
-# define ISLOWER(c) (ISASCII (c) && islower (c))
-# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
-# define ISSPACE(c) (ISASCII (c) && isspace (c))
-# define ISUPPER(c) (ISASCII (c) && isupper (c))
-# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
-
-# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
-
-# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
-/* The GNU C library provides support for user-defined character classes
- and the functions from ISO C amendment 1. */
-# ifdef CHARCLASS_NAME_MAX
-# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
-# else
-/* This shouldn't happen but some implementation might still have this
- problem. Use a reasonable default value. */
-# define CHAR_CLASS_MAX_LENGTH 256
-# endif
-
-# ifdef _LIBC
-# define IS_CHAR_CLASS(string) __wctype (string)
-# else
-# define IS_CHAR_CLASS(string) wctype (string)
-# endif
-# else
-# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
-
-# define IS_CHAR_CLASS(string) \
- (STREQ (string, "alpha") || STREQ (string, "upper") \
- || STREQ (string, "lower") || STREQ (string, "digit") \
- || STREQ (string, "alnum") || STREQ (string, "xdigit") \
- || STREQ (string, "space") || STREQ (string, "print") \
- || STREQ (string, "punct") || STREQ (string, "graph") \
- || STREQ (string, "cntrl") || STREQ (string, "blank"))
-# endif
-
-/* Avoid depending on library functions or files
- whose names are inconsistent. */
-
-# if !defined _LIBC && !defined getenv
-extern char *getenv (const char *name);
-# endif
-
-# ifndef errno
-extern int errno;
-# endif
-
-# ifndef NULL
-# define NULL 0
-# endif
-
-/* This function doesn't exist on most systems. */
-
-# if !defined HAVE___STRCHRNUL && !defined _LIBC
-static char *
-__strchrnul (const char *s, int c)
-
-
-{
- char *result = strchr (s, c);
- if (result == NULL)
- result = strchr (s, '\0');
- return result;
-}
-# endif
-
-# ifndef internal_function
-/* Inside GNU libc we mark some function in a special way. In other
- environments simply ignore the marking. */
-# define internal_function
-# endif
-
-/* Match STRING against the filename pattern PATTERN, returning zero if
- it matches, nonzero if not. */
-static int internal_fnmatch __P ((const char *pattern, const char *string,
- int no_leading_period, int flags))
- internal_function;
-static int
-internal_function
-internal_fnmatch (const char *pattern, const char *string, int no_leading_period, int flags)
-
-
-
-
-{
- register const char *p = pattern, *n = string;
- register unsigned char c;
-
-/* Note that this evaluates C many times. */
-# ifdef _LIBC
-# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
-# else
-# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
-# endif
-
- while ((c = *p++) != '\0')
- {
- c = FOLD (c);
-
- switch (c)
- {
- case '?':
- if (*n == '\0')
- return FNM_NOMATCH;
- else if (*n == '/' && (flags & FNM_FILE_NAME))
- return FNM_NOMATCH;
- else if (*n == '.' && no_leading_period
- && (n == string
- || (n[-1] == '/' && (flags & FNM_FILE_NAME))))
- return FNM_NOMATCH;
- break;
-
- case '\\':
- if (!(flags & FNM_NOESCAPE))
- {
- c = *p++;
- if (c == '\0')
- /* Trailing \ loses. */
- return FNM_NOMATCH;
- c = FOLD (c);
- }
- if (FOLD ((unsigned char) *n) != c)
- return FNM_NOMATCH;
- break;
-
- case '*':
- if (*n == '.' && no_leading_period
- && (n == string
- || (n[-1] == '/' && (flags & FNM_FILE_NAME))))
- return FNM_NOMATCH;
-
- for (c = *p++; c == '?' || c == '*'; c = *p++)
- {
- if (*n == '/' && (flags & FNM_FILE_NAME))
- /* A slash does not match a wildcard under FNM_FILE_NAME. */
- return FNM_NOMATCH;
- else if (c == '?')
- {
- /* A ? needs to match one character. */
- if (*n == '\0')
- /* There isn't another character; no match. */
- return FNM_NOMATCH;
- else
- /* One character of the string is consumed in matching
- this ? wildcard, so *??? won't match if there are
- less than three characters. */
- ++n;
- }
- }
-
- if (c == '\0')
- /* The wildcard(s) is/are the last element of the pattern.
- If the name is a file name and contains another slash
- this does mean it cannot match. */
- return ((flags & FNM_FILE_NAME) && strchr (n, '/') != NULL
- ? FNM_NOMATCH : 0);
- else
- {
- const char *endp;
-
- endp = __strchrnul (n, (flags & FNM_FILE_NAME) ? '/' : '\0');
-
- if (c == '[')
- {
- int flags2 = ((flags & FNM_FILE_NAME)
- ? flags : (flags & ~FNM_PERIOD));
-
- for (--p; n < endp; ++n)
- if (internal_fnmatch (p, n,
- (no_leading_period
- && (n == string
- || (n[-1] == '/'
- && (flags
- & FNM_FILE_NAME)))),
- flags2)
- == 0)
- return 0;
- }
- else if (c == '/' && (flags & FNM_FILE_NAME))
- {
- while (*n != '\0' && *n != '/')
- ++n;
- if (*n == '/'
- && (internal_fnmatch (p, n + 1, flags & FNM_PERIOD,
- flags) == 0))
- return 0;
- }
- else
- {
- int flags2 = ((flags & FNM_FILE_NAME)
- ? flags : (flags & ~FNM_PERIOD));
-
- if (c == '\\' && !(flags & FNM_NOESCAPE))
- c = *p;
- c = FOLD (c);
- for (--p; n < endp; ++n)
- if (FOLD ((unsigned char) *n) == c
- && (internal_fnmatch (p, n,
- (no_leading_period
- && (n == string
- || (n[-1] == '/'
- && (flags
- & FNM_FILE_NAME)))),
- flags2) == 0))
- return 0;
- }
- }
-
- /* If we come here no match is possible with the wildcard. */
- return FNM_NOMATCH;
-
- case '[':
- {
- /* Nonzero if the sense of the character class is inverted. */
- static int posixly_correct;
- register int not;
- char cold;
-
- if (posixly_correct == 0)
- posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
-
- if (*n == '\0')
- return FNM_NOMATCH;
-
- if (*n == '.' && no_leading_period && (n == string
- || (n[-1] == '/'
- && (flags
- & FNM_FILE_NAME))))
- return FNM_NOMATCH;
-
- if (*n == '/' && (flags & FNM_FILE_NAME))
- /* `/' cannot be matched. */
- return FNM_NOMATCH;
-
- not = (*p == '!' || (posixly_correct < 0 && *p == '^'));
- if (not)
- ++p;
-
- c = *p++;
- for (;;)
- {
- unsigned char fn = FOLD ((unsigned char) *n);
-
- if (!(flags & FNM_NOESCAPE) && c == '\\')
- {
- if (*p == '\0')
- return FNM_NOMATCH;
- c = FOLD ((unsigned char) *p);
- ++p;
-
- if (c == fn)
- goto matched;
- }
- else if (c == '[' && *p == ':')
- {
- /* Leave room for the null. */
- char str[CHAR_CLASS_MAX_LENGTH + 1];
- size_t c1 = 0;
-# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
- wctype_t wt;
-# endif
- const char *startp = p;
-
- for (;;)
- {
- if (c1 > CHAR_CLASS_MAX_LENGTH)
- /* The name is too long and therefore the pattern
- is ill-formed. */
- return FNM_NOMATCH;
-
- c = *++p;
- if (c == ':' && p[1] == ']')
- {
- p += 2;
- break;
- }
- if (c < 'a' || c >= 'z')
- {
- /* This cannot possibly be a character class name.
- Match it as a normal range. */
- p = startp;
- c = '[';
- goto normal_bracket;
- }
- str[c1++] = c;
- }
- str[c1] = '\0';
-
-# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
- wt = IS_CHAR_CLASS (str);
- if (wt == 0)
- /* Invalid character class name. */
- return FNM_NOMATCH;
-
- if (__iswctype (__btowc ((unsigned char) *n), wt))
- goto matched;
-# else
- if ((STREQ (str, "alnum") && ISALNUM ((unsigned char) *n))
- || (STREQ (str, "alpha") && ISALPHA ((unsigned char) *n))
- || (STREQ (str, "blank") && ISBLANK ((unsigned char) *n))
- || (STREQ (str, "cntrl") && ISCNTRL ((unsigned char) *n))
- || (STREQ (str, "digit") && ISDIGIT ((unsigned char) *n))
- || (STREQ (str, "graph") && ISGRAPH ((unsigned char) *n))
- || (STREQ (str, "lower") && ISLOWER ((unsigned char) *n))
- || (STREQ (str, "print") && ISPRINT ((unsigned char) *n))
- || (STREQ (str, "punct") && ISPUNCT ((unsigned char) *n))
- || (STREQ (str, "space") && ISSPACE ((unsigned char) *n))
- || (STREQ (str, "upper") && ISUPPER ((unsigned char) *n))
- || (STREQ (str, "xdigit") && ISXDIGIT ((unsigned char) *n)))
- goto matched;
-# endif
- }
- else if (c == '\0')
- /* [ (unterminated) loses. */
- return FNM_NOMATCH;
- else
- {
- normal_bracket:
- if (FOLD (c) == fn)
- goto matched;
-
- cold = c;
- c = *p++;
-
- if (c == '-' && *p != ']')
- {
- /* It is a range. */
- unsigned char cend = *p++;
- if (!(flags & FNM_NOESCAPE) && cend == '\\')
- cend = *p++;
- if (cend == '\0')
- return FNM_NOMATCH;
-
- if (cold <= fn && fn <= FOLD (cend))
- goto matched;
-
- c = *p++;
- }
- }
-
- if (c == ']')
- break;
- }
-
- if (!not)
- return FNM_NOMATCH;
- break;
-
- matched:
- /* Skip the rest of the [...] that already matched. */
- while (c != ']')
- {
- if (c == '\0')
- /* [... (unterminated) loses. */
- return FNM_NOMATCH;
-
- c = *p++;
- if (!(flags & FNM_NOESCAPE) && c == '\\')
- {
- if (*p == '\0')
- return FNM_NOMATCH;
- /* XXX 1003.2d11 is unclear if this is right. */
- ++p;
- }
- else if (c == '[' && *p == ':')
- {
- do
- if (*++p == '\0')
- return FNM_NOMATCH;
- while (*p != ':' || p[1] == ']');
- p += 2;
- c = *p;
- }
- }
- if (not)
- return FNM_NOMATCH;
- }
- break;
-
- default:
- if (c != FOLD ((unsigned char) *n))
- return FNM_NOMATCH;
- }
-
- ++n;
- }
-
- if (*n == '\0')
- return 0;
-
- if ((flags & FNM_LEADING_DIR) && *n == '/')
- /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */
- return 0;
-
- return FNM_NOMATCH;
-
-# undef FOLD
-}
-
-
-int
-fnmatch (const char *pattern, const char *string, int flags)
-
-
-
-{
- return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags);
-}
-
-#endif /* _LIBC or not __GNU_LIBRARY__. */
diff --git a/compat/fnmatch/fnmatch.h b/compat/fnmatch/fnmatch.h
deleted file mode 100644
index cc3ec3794..000000000
--- a/compat/fnmatch/fnmatch.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#ifndef _FNMATCH_H
-#define _FNMATCH_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32
-# if !defined __GLIBC__ || !defined __P
-# undef __P
-# define __P(protos) protos
-# endif
-#else /* Not C++ or ANSI C. */
-# undef __P
-# define __P(protos) ()
-/* We can get away without defining `const' here only because in this file
- it is used only inside the prototype for `fnmatch', which is elided in
- non-ANSI C where `const' is problematical. */
-#endif /* C++ or ANSI C. */
-
-#ifndef const
-# if (defined __STDC__ && __STDC__) || defined __cplusplus
-# define __const const
-# else
-# define __const
-# endif
-#endif
-
-/* We #undef these before defining them because some losing systems
- (HP-UX A.08.07 for example) define these in <unistd.h>. */
-#undef FNM_PATHNAME
-#undef FNM_NOESCAPE
-#undef FNM_PERIOD
-
-/* Bits set in the FLAGS argument to `fnmatch'. */
-#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */
-#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */
-#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */
-
-#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
-# define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */
-# define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */
-# define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */
-#endif
-
-/* Value returned by `fnmatch' if STRING does not match PATTERN. */
-#define FNM_NOMATCH 1
-
-/* This value is returned if the implementation does not support
- `fnmatch'. Since this is not the case here it will never be
- returned but the conformance test suites still require the symbol
- to be defined. */
-#ifdef _XOPEN_SOURCE
-# define FNM_NOSYS (-1)
-#endif
-
-/* Match NAME against the filename pattern PATTERN,
- returning zero if it matches, FNM_NOMATCH if not. */
-extern int fnmatch __P ((__const char *__pattern, __const char *__name,
- int __flags));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* fnmatch.h */
diff --git a/compat/mingw.c b/compat/mingw.c
index fecb98bcf..e9892f8ee 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -304,23 +304,6 @@ int mingw_open (const char *filename, int oflags, ...)
return fd;
}
-#undef write
-ssize_t mingw_write(int fd, const void *buf, size_t count)
-{
- /*
- * While write() calls to a file on a local disk are translated
- * into WriteFile() calls with a maximum size of 64KB on Windows
- * XP and 256KB on Vista, no such cap is placed on writes to
- * files over the network on Windows XP. Unfortunately, there
- * seems to be a limit of 32MB-28KB on X64 and 64MB-32KB on x86;
- * bigger writes fail on Windows XP.
- * So we cap to a nice 31MB here to avoid write failures over
- * the net without changing the number of WriteFile() calls in
- * the local case.
- */
- return write(fd, buf, min(count, 31 * 1024 * 1024));
-}
-
static BOOL WINAPI ctrl_ignore(DWORD type)
{
return TRUE;
diff --git a/compat/mingw.h b/compat/mingw.h
index 92cd728d3..e033e720c 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -180,9 +180,6 @@ int mingw_rmdir(const char *path);
int mingw_open (const char *filename, int oflags, ...);
#define open mingw_open
-ssize_t mingw_write(int fd, const void *buf, size_t count);
-#define write mingw_write
-
int mingw_fgetc(FILE *stream);
#define fgetc mingw_fgetc
diff --git a/config.c b/config.c
index d969a5aef..6821cef00 100644
--- a/config.c
+++ b/config.c
@@ -21,6 +21,7 @@ struct config_source {
} buf;
} u;
const char *name;
+ const char *path;
int die_on_error;
int linenr;
int eof;
@@ -84,8 +85,12 @@ static int handle_path_include(const char *path, struct config_include_data *inc
{
int ret = 0;
struct strbuf buf = STRBUF_INIT;
- char *expanded = expand_user_path(path);
+ char *expanded;
+ if (!path)
+ return config_error_nonbool("include.path");
+
+ expanded = expand_user_path(path);
if (!expanded)
return error("Could not expand include path '%s'", path);
path = expanded;
@@ -97,12 +102,12 @@ static int handle_path_include(const char *path, struct config_include_data *inc
if (!is_absolute_path(path)) {
char *slash;
- if (!cf || !cf->name)
+ if (!cf || !cf->path)
return error("relative config includes must come from files");
- slash = find_last_dir_sep(cf->name);
+ slash = find_last_dir_sep(cf->path);
if (slash)
- strbuf_add(&buf, cf->name, slash - cf->name + 1);
+ strbuf_add(&buf, cf->path, slash - cf->path + 1);
strbuf_addstr(&buf, path);
path = buf.buf;
}
@@ -663,20 +668,7 @@ static int git_default_core_config(const char *var, const char *value)
trust_ctime = git_config_bool(var, value);
return 0;
}
- if (!strcmp(var, "core.statinfo") ||
- !strcmp(var, "core.checkstat")) {
- /*
- * NEEDSWORK: statinfo was a typo in v1.8.2 that has
- * never been advertised. we will remove it at Git
- * 2.0 boundary.
- */
- if (!strcmp(var, "core.statinfo")) {
- static int warned;
- if (!warned++) {
- warning("'core.statinfo' will be removed in Git 2.0; "
- "use 'core.checkstat' instead.");
- }
- }
+ if (!strcmp(var, "core.checkstat")) {
if (!strcasecmp(value, "default"))
check_stat = 1;
else if (!strcasecmp(value, "minimal"))
@@ -1030,24 +1022,35 @@ static int do_config_from(struct config_source *top, config_fn_t fn, void *data)
return ret;
}
-int git_config_from_file(config_fn_t fn, const char *filename, void *data)
+static int do_config_from_file(config_fn_t fn,
+ const char *name, const char *path, FILE *f, void *data)
{
- int ret;
- FILE *f = fopen(filename, "r");
+ struct config_source top;
- ret = -1;
- if (f) {
- struct config_source top;
+ top.u.file = f;
+ top.name = name;
+ top.path = path;
+ top.die_on_error = 1;
+ top.do_fgetc = config_file_fgetc;
+ top.do_ungetc = config_file_ungetc;
+ top.do_ftell = config_file_ftell;
- top.u.file = f;
- top.name = filename;
- top.die_on_error = 1;
- top.do_fgetc = config_file_fgetc;
- top.do_ungetc = config_file_ungetc;
- top.do_ftell = config_file_ftell;
+ return do_config_from(&top, fn, data);
+}
- ret = do_config_from(&top, fn, data);
+static int git_config_from_stdin(config_fn_t fn, void *data)
+{
+ return do_config_from_file(fn, "<stdin>", NULL, stdin, data);
+}
+int git_config_from_file(config_fn_t fn, const char *filename, void *data)
+{
+ int ret = -1;
+ FILE *f;
+
+ f = fopen(filename, "r");
+ if (f) {
+ ret = do_config_from_file(fn, filename, filename, f, data);
fclose(f);
}
return ret;
@@ -1062,6 +1065,7 @@ int git_config_from_buf(config_fn_t fn, const char *name, const char *buf,
top.u.buf.len = len;
top.u.buf.pos = 0;
top.name = name;
+ top.path = NULL;
top.die_on_error = 0;
top.do_fgetc = config_buf_fgetc;
top.do_ungetc = config_buf_ungetc;
@@ -1170,8 +1174,7 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
}
int git_config_with_options(config_fn_t fn, void *data,
- const char *filename,
- const char *blob_ref,
+ struct git_config_source *config_source,
int respect_includes)
{
char *repo_config = NULL;
@@ -1189,10 +1192,12 @@ int git_config_with_options(config_fn_t fn, void *data,
* If we have a specific filename, use it. Otherwise, follow the
* regular lookup sequence.
*/
- if (filename)
- return git_config_from_file(fn, filename, data);
- else if (blob_ref)
- return git_config_from_blob_ref(fn, blob_ref, data);
+ if (config_source && config_source->use_stdin)
+ return git_config_from_stdin(fn, data);
+ else if (config_source && config_source->file)
+ return git_config_from_file(fn, config_source->file, data);
+ else if (config_source && config_source->blob)
+ return git_config_from_blob_ref(fn, config_source->blob, data);
repo_config = git_pathdup("config");
ret = git_config_early(fn, data, repo_config);
@@ -1203,7 +1208,7 @@ int git_config_with_options(config_fn_t fn, void *data,
int git_config(config_fn_t fn, void *data)
{
- return git_config_with_options(fn, data, NULL, NULL, 1);
+ return git_config_with_options(fn, data, NULL, 1);
}
/*
diff --git a/config.mak.uname b/config.mak.uname
index 7d31fad24..6069a4435 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -108,7 +108,6 @@ ifeq ($(uname_S),SunOS)
NO_MKDTEMP = YesPlease
NO_MKSTEMPS = YesPlease
NO_REGEX = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
NO_MSGFMT_EXTENDED_OPTIONS = YesPlease
HAVE_DEV_TTY = YesPlease
ifeq ($(uname_R),5.6)
@@ -259,7 +258,6 @@ ifeq ($(uname_S),IRIX)
# issue, comment out the NO_MMAP statement.
NO_MMAP = YesPlease
NO_REGEX = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
SNPRINTF_RETURNS_BOGUS = YesPlease
SHELL_PATH = /usr/gnu/bin/bash
NEEDS_LIBGEN = YesPlease
@@ -279,7 +277,6 @@ ifeq ($(uname_S),IRIX64)
# issue, comment out the NO_MMAP statement.
NO_MMAP = YesPlease
NO_REGEX = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
SNPRINTF_RETURNS_BOGUS = YesPlease
SHELL_PATH = /usr/gnu/bin/bash
NEEDS_LIBGEN = YesPlease
@@ -296,7 +293,6 @@ ifeq ($(uname_S),HP-UX)
NO_UNSETENV = YesPlease
NO_HSTRERROR = YesPlease
NO_SYS_SELECT_H = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
SNPRINTF_RETURNS_BOGUS = YesPlease
NO_NSEC = YesPlease
ifeq ($(uname_R),B.11.00)
@@ -327,7 +323,6 @@ ifeq ($(uname_S),Windows)
NO_UNSETENV = YesPlease
NO_STRCASESTR = YesPlease
NO_STRLCPY = YesPlease
- NO_FNMATCH = YesPlease
NO_MEMMEM = YesPlease
# NEEDS_LIBICONV = YesPlease
NO_ICONV = YesPlease
@@ -389,13 +384,11 @@ ifeq ($(uname_S),Interix)
NO_INET_NTOP = YesPlease
NO_INET_PTON = YesPlease
NO_SOCKADDR_STORAGE = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
endif
ifeq ($(uname_R),5.2)
NO_INET_NTOP = YesPlease
NO_INET_PTON = YesPlease
NO_SOCKADDR_STORAGE = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
endif
endif
ifeq ($(uname_S),Minix)
@@ -440,7 +433,6 @@ ifeq ($(uname_S),NONSTOP_KERNEL)
NO_D_TYPE_IN_DIRENT = YesPlease
NO_HSTRERROR = YesPlease
NO_STRCASESTR = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
NO_MEMMEM = YesPlease
NO_STRLCPY = YesPlease
NO_SETENV = YesPlease
@@ -484,7 +476,6 @@ ifneq (,$(findstring MINGW,$(uname_S)))
NO_UNSETENV = YesPlease
NO_STRCASESTR = YesPlease
NO_STRLCPY = YesPlease
- NO_FNMATCH = YesPlease
NO_MEMMEM = YesPlease
NEEDS_LIBICONV = YesPlease
NO_STRTOUMAX = YesPlease
@@ -538,7 +529,6 @@ ifeq ($(uname_S),QNX)
EXPAT_NEEDS_XMLPARSE_H = YesPlease
HAVE_STRINGS_H = YesPlease
NEEDS_SOCKET = YesPlease
- NO_FNMATCH_CASEFOLD = YesPlease
NO_GETPAGESIZE = YesPlease
NO_ICONV = YesPlease
NO_MEMMEM = YesPlease
diff --git a/configure.ac b/configure.ac
index 2f433939d..24ab7383a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -901,34 +901,6 @@ GIT_CHECK_FUNC(strcasestr,
[NO_STRCASESTR=YesPlease])
GIT_CONF_SUBST([NO_STRCASESTR])
#
-# Define NO_FNMATCH if you don't have fnmatch
-GIT_CHECK_FUNC(fnmatch,
-[NO_FNMATCH=],
-[NO_FNMATCH=YesPlease])
-GIT_CONF_SUBST([NO_FNMATCH])
-#
-# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
-# FNM_CASEFOLD GNU extension.
-AC_CACHE_CHECK([whether the fnmatch function supports the FNMATCH_CASEFOLD GNU extension],
- [ac_cv_c_excellent_fnmatch], [
-AC_EGREP_CPP(yippeeyeswehaveit,
- AC_LANG_PROGRAM([
-#include <fnmatch.h>
-],
-[#ifdef FNM_CASEFOLD
-yippeeyeswehaveit
-#endif
-]),
- [ac_cv_c_excellent_fnmatch=yes],
- [ac_cv_c_excellent_fnmatch=no])
-])
-if test $ac_cv_c_excellent_fnmatch = yes; then
- NO_FNMATCH_CASEFOLD=
-else
- NO_FNMATCH_CASEFOLD=YesPlease
-fi
-GIT_CONF_SUBST([NO_FNMATCH_CASEFOLD])
-#
# Define NO_MEMMEM if you don't have memmem.
GIT_CHECK_FUNC(memmem,
[NO_MEMMEM=],
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 8aaf214b7..87de809d2 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1221,14 +1221,20 @@ _git_difftool ()
__git_complete_revlist_file
}
+__git_fetch_recurse_submodules="yes on-demand no"
+
__git_fetch_options="
--quiet --verbose --append --upload-pack --force --keep --depth=
- --tags --no-tags --all --prune --dry-run
+ --tags --no-tags --all --prune --dry-run --recurse-submodules=
"
_git_fetch ()
{
case "$cur" in
+ --recurse-submodules=*)
+ __gitcomp "$__git_fetch_recurse_submodules" "" "${cur##--recurse-submodules=}"
+ return
+ ;;
--*)
__gitcomp "$__git_fetch_options"
return
@@ -1499,6 +1505,12 @@ _git_mergetool ()
_git_merge_base ()
{
+ case "$cur" in
+ --*)
+ __gitcomp "--octopus --independent --is-ancestor --fork-point"
+ return
+ ;;
+ esac
__gitcomp_nl "$(__git_refs)"
}
@@ -1577,6 +1589,10 @@ _git_pull ()
__git_complete_strategy && return
case "$cur" in
+ --recurse-submodules=*)
+ __gitcomp "$__git_fetch_recurse_submodules" "" "${cur##--recurse-submodules=}"
+ return
+ ;;
--*)
__gitcomp "
--rebase --no-rebase
@@ -1589,6 +1605,8 @@ _git_pull ()
__git_complete_remote_or_refspec
}
+__git_push_recurse_submodules="check on-demand"
+
_git_push ()
{
case "$prev" in
@@ -1601,10 +1619,15 @@ _git_push ()
__gitcomp_nl "$(__git_remotes)" "" "${cur##--repo=}"
return
;;
+ --recurse-submodules=*)
+ __gitcomp "$__git_push_recurse_submodules" "" "${cur##--recurse-submodules=}"
+ return
+ ;;
--*)
__gitcomp "
--all --mirror --tags --dry-run --force --verbose
--receive-pack= --repo= --set-upstream
+ --recurse-submodules=
"
return
;;
@@ -1631,7 +1654,7 @@ _git_rebase ()
--preserve-merges --stat --no-stat
--committer-date-is-author-date --ignore-date
--ignore-whitespace --whitespace=
- --autosquash
+ --autosquash --fork-point --no-fork-point
"
return
diff --git a/contrib/contacts/git-contacts b/contrib/contacts/git-contacts
index 428cc1a9a..dbe2abf27 100755
--- a/contrib/contacts/git-contacts
+++ b/contrib/contacts/git-contacts
@@ -96,8 +96,6 @@ sub scan_patches {
next unless $id;
if (m{^--- (?:a/(.+)|/dev/null)$}) {
$source = $1;
- } elsif (/^--- /) {
- die "Cannot parse hunk source: $_\n";
} elsif (/^@@ -(\d+)(?:,(\d+))?/ && $source) {
my $len = defined($2) ? $2 : 1;
push @{$sources->{$source}{$id}}, [$1, $len] if $len;
diff --git a/contrib/git-resurrect.sh b/contrib/git-resurrect.sh
index a4ed4c3c6..d7e97bbc7 100755
--- a/contrib/git-resurrect.sh
+++ b/contrib/git-resurrect.sh
@@ -10,6 +10,7 @@ is rather slow but allows you to resurrect other people's topic
branches."
OPTIONS_KEEPDASHDASH=
+OPTIONS_STUCKLONG=
OPTIONS_SPEC="\
git resurrect $USAGE
--
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr
index 332aba784..5f4b2e3e1 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -684,7 +684,8 @@ def do_export(parser):
peer = bzrlib.branch.Branch.open(peers[name],
possible_transports=transports)
try:
- peer.bzrdir.push_branch(branch, revision_id=revid)
+ peer.bzrdir.push_branch(branch, revision_id=revid,
+ overwrite=force)
except bzrlib.errors.DivergedBranches:
print "error %s non-fast forward" % ref
continue
@@ -718,8 +719,32 @@ def do_capabilities(parser):
print "*import-marks %s" % path
print "*export-marks %s" % path
+ print "option"
print
+class InvalidOptionValue(Exception):
+ pass
+
+def get_bool_option(val):
+ if val == 'true':
+ return True
+ elif val == 'false':
+ return False
+ else:
+ raise InvalidOptionValue()
+
+def do_option(parser):
+ global force
+ opt, val = parser[1:3]
+ try:
+ if opt == 'force':
+ force = get_bool_option(val)
+ print 'ok'
+ else:
+ print 'unsupported'
+ except InvalidOptionValue:
+ print "error '%s' is not a valid value for option '%s'" % (val, opt)
+
def ref_is_valid(name):
return not True in [c in name for c in '~^: \\']
@@ -882,6 +907,7 @@ def main(args):
global is_tmp
global branches, peers
global transports
+ global force
marks = None
is_tmp = False
@@ -904,6 +930,7 @@ def main(args):
branches = {}
peers = {}
transports = []
+ force = False
if alias[5:] == url:
is_tmp = True
@@ -936,6 +963,8 @@ def main(args):
do_import(parser)
elif parser.check('export'):
do_export(parser)
+ elif parser.check('option'):
+ do_option(parser)
else:
die('unhandled command: %s' % line)
sys.stdout.flush()
diff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh
index 1e53ff9a5..4f379c2ab 100755
--- a/contrib/remote-helpers/test-bzr.sh
+++ b/contrib/remote-helpers/test-bzr.sh
@@ -66,13 +66,33 @@ test_expect_success 'pushing' '
test_cmp expected actual
'
+test_expect_success 'forced pushing' '
+ (
+ cd gitrepo &&
+ echo three-new >content &&
+ git commit -a --amend -m three-new &&
+ git push -f
+ ) &&
+
+ (
+ cd bzrrepo &&
+ # the forced update overwrites the bzr branch but not the bzr
+ # working directory (it tries to merge instead)
+ bzr revert
+ ) &&
+
+ echo three-new >expected &&
+ cat bzrrepo/content >actual &&
+ test_cmp expected actual
+'
+
test_expect_success 'roundtrip' '
(
cd gitrepo &&
git pull &&
git log --format="%s" -1 origin/master >actual
) &&
- echo three >expected &&
+ echo three-new >expected &&
test_cmp expected actual &&
(cd gitrepo && git push && git pull) &&
diff --git a/contrib/remote-helpers/test-hg.sh b/contrib/remote-helpers/test-hg.sh
index 5d128a5da..a933b1e30 100755
--- a/contrib/remote-helpers/test-hg.sh
+++ b/contrib/remote-helpers/test-hg.sh
@@ -680,7 +680,7 @@ test_expect_success 'remote big push fetch first' '
)
'
-test_expect_failure 'remote big push force' '
+test_expect_success 'remote big push force' '
test_when_finished "rm -rf hgrepo gitrepo*" &&
setup_big_push
@@ -710,7 +710,7 @@ test_expect_failure 'remote big push force' '
check_bookmark hgrepo new_bmark six
'
-test_expect_failure 'remote big push dry-run' '
+test_expect_success 'remote big push dry-run' '
test_when_finished "rm -rf hgrepo gitrepo*" &&
setup_big_push
diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 7d7af0327..dc59a9103 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -9,10 +9,10 @@ if [ $# -eq 0 ]; then
fi
OPTS_SPEC="\
git subtree add --prefix=<prefix> <commit>
-git subtree add --prefix=<prefix> <repository> <commit>
+git subtree add --prefix=<prefix> <repository> <ref>
git subtree merge --prefix=<prefix> <commit>
-git subtree pull --prefix=<prefix> <repository> <refspec...>
-git subtree push --prefix=<prefix> <repository> <refspec...>
+git subtree pull --prefix=<prefix> <repository> <ref>
+git subtree push --prefix=<prefix> <repository> <ref>
git subtree split --prefix=<prefix> <commit...>
--
h,help show the help
@@ -489,6 +489,12 @@ ensure_clean()
fi
}
+ensure_valid_ref_format()
+{
+ git check-ref-format "refs/heads/$1" ||
+ die "'$1' does not look like a ref"
+}
+
cmd_add()
{
if [ -e "$dir" ]; then
@@ -508,8 +514,7 @@ cmd_add()
# specified directory. Allowing a refspec might be
# misleading because we won't do anything with any other
# branches fetched via the refspec.
- git rev-parse -q --verify "$2^{commit}" >/dev/null ||
- die "'$2' does not refer to a commit"
+ ensure_valid_ref_format "$2"
"cmd_add_repository" "$@"
else
@@ -699,7 +704,11 @@ cmd_merge()
cmd_pull()
{
+ if [ $# -ne 2 ]; then
+ die "You must provide <repository> <ref>"
+ fi
ensure_clean
+ ensure_valid_ref_format "$2"
git fetch "$@" || exit $?
revs=FETCH_HEAD
set -- $revs
@@ -709,8 +718,9 @@ cmd_pull()
cmd_push()
{
if [ $# -ne 2 ]; then
- die "You must provide <repository> <refspec>"
+ die "You must provide <repository> <ref>"
fi
+ ensure_valid_ref_format "$2"
if [ -e "$dir" ]; then
repository=$1
refspec=$2
diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt
index e0957eee5..02669b153 100644
--- a/contrib/subtree/git-subtree.txt
+++ b/contrib/subtree/git-subtree.txt
@@ -9,10 +9,10 @@ git-subtree - Merge subtrees together and split repository into subtrees
SYNOPSIS
--------
[verse]
-'git subtree' add -P <prefix> <refspec>
-'git subtree' add -P <prefix> <repository> <refspec>
-'git subtree' pull -P <prefix> <repository> <refspec...>
-'git subtree' push -P <prefix> <repository> <refspec...>
+'git subtree' add -P <prefix> <commit>
+'git subtree' add -P <prefix> <repository> <ref>
+'git subtree' pull -P <prefix> <repository> <ref>
+'git subtree' push -P <prefix> <repository> <ref>
'git subtree' merge -P <prefix> <commit>
'git subtree' split -P <prefix> [OPTIONS] [<commit>]
@@ -68,7 +68,7 @@ COMMANDS
--------
add::
Create the <prefix> subtree by importing its contents
- from the given <refspec> or <repository> and remote <refspec>.
+ from the given <commit> or <repository> and remote <ref>.
A new commit is created automatically, joining the imported
project's history with your own. With '--squash', imports
only a single commit from the subproject, rather than its
@@ -90,13 +90,13 @@ merge::
pull::
Exactly like 'merge', but parallels 'git pull' in that
- it fetches the given commit from the specified remote
+ it fetches the given ref from the specified remote
repository.
push::
Does a 'split' (see below) using the <prefix> supplied
and then does a 'git push' to push the result to the
- repository and refspec. This can be used to push your
+ repository and ref. This can be used to push your
subtree to different branches of the remote repository.
split::
diff --git a/daemon.c b/daemon.c
index 503e03906..eba125568 100644
--- a/daemon.c
+++ b/daemon.c
@@ -1056,11 +1056,6 @@ static void drop_privileges(struct credentials *cred)
/* nothing */
}
-static void daemonize(void)
-{
- die("--detach not supported on this platform");
-}
-
static struct credentials *prepare_credentials(const char *user_name,
const char *group_name)
{
@@ -1102,24 +1097,6 @@ static struct credentials *prepare_credentials(const char *user_name,
return &c;
}
-
-static void daemonize(void)
-{
- switch (fork()) {
- case 0:
- break;
- case -1:
- die_errno("fork failed");
- default:
- exit(0);
- }
- if (setsid() == -1)
- die_errno("setsid failed");
- close(0);
- close(1);
- close(2);
- sanitize_stdfds();
-}
#endif
static void store_pid(const char *path)
@@ -1333,9 +1310,10 @@ int main(int argc, char **argv)
if (inetd_mode || serve_mode)
return execute();
- if (detach)
- daemonize();
- else
+ if (detach) {
+ if (daemonize())
+ die("--detach not supported on this platform");
+ } else
sanitize_stdfds();
if (pid_file)
diff --git a/date.c b/date.c
index 83b416634..e1a2cee56 100644
--- a/date.c
+++ b/date.c
@@ -184,8 +184,10 @@ const char *show_date(unsigned long time, int tz, enum date_mode mode)
tz = local_tzoffset(time);
tm = time_to_tm(time, tz);
- if (!tm)
- return NULL;
+ if (!tm) {
+ tm = time_to_tm(0, 0);
+ tz = 0;
+ }
strbuf_reset(&timebuf);
if (mode == DATE_SHORT)
@@ -1113,3 +1115,20 @@ unsigned long approxidate_careful(const char *date, int *error_ret)
gettimeofday(&tv, NULL);
return approxidate_str(date, &tv, error_ret);
}
+
+int date_overflows(unsigned long t)
+{
+ time_t sys;
+
+ /* If we overflowed our unsigned long, that's bad... */
+ if (t == ULONG_MAX)
+ return 1;
+
+ /*
+ * ...but we also are going to feed the result to system
+ * functions that expect time_t, which is often "signed long".
+ * Make sure that we fit into time_t, as well.
+ */
+ sys = t;
+ return t != sys || (t < 1) != (sys < 1);
+}
diff --git a/diff-lib.c b/diff-lib.c
index 346cac651..044872935 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -11,6 +11,7 @@
#include "unpack-trees.h"
#include "refs.h"
#include "submodule.h"
+#include "dir.h"
/*
* diff-files
@@ -90,9 +91,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
unsigned ce_option = ((option & DIFF_RACY_IS_MODIFIED)
? CE_MATCH_RACY_IS_DIRTY : 0);
- if (option & DIFF_SILENT_ON_REMOVED)
- handle_deprecated_show_diff_q(&revs->diffopt);
-
diff_set_mnemonic_prefix(&revs->diffopt, "i/", "w/");
if (diff_unmerged_stage < 0)
@@ -108,7 +106,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
if (diff_can_quit_early(&revs->diffopt))
break;
- if (!ce_path_match(ce, &revs->prune_data))
+ if (!ce_path_match(ce, &revs->prune_data, NULL))
continue;
if (ce_stage(ce)) {
@@ -124,7 +122,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
dpath->path = (char *) &(dpath->parent[5]);
dpath->next = NULL;
- dpath->len = path_len;
memcpy(dpath->path, ce->name, path_len);
dpath->path[path_len] = '\0';
hashclr(dpath->sha1);
@@ -326,7 +323,6 @@ static int show_modified(struct rev_info *revs,
p = xmalloc(combine_diff_path_size(2, pathlen));
p->path = (char *) &p->parent[2];
p->next = NULL;
- p->len = pathlen;
memcpy(p->path, new->name, pathlen);
p->path[pathlen] = 0;
p->mode = mode;
@@ -438,7 +434,7 @@ static int oneway_diff(const struct cache_entry * const *src,
if (tree == o->df_conflict_entry)
tree = NULL;
- if (ce_path_match(idx ? idx : tree, &revs->prune_data)) {
+ if (ce_path_match(idx ? idx : tree, &revs->prune_data, NULL)) {
do_oneway_diff(o, idx, tree);
if (diff_can_quit_early(&revs->diffopt)) {
o->exiting_early = 1;
diff --git a/diff-no-index.c b/diff-no-index.c
index 33e5982a1..8e10bff30 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c
@@ -186,7 +186,6 @@ void diff_no_index(struct rev_info *revs,
const char *prefix)
{
int i, prefixlen;
- unsigned deprecated_show_diff_q_option_used = 0;
const char *paths[2];
diff_setup(&revs->diffopt);
@@ -194,10 +193,6 @@ void diff_no_index(struct rev_info *revs,
int j;
if (!strcmp(argv[i], "--no-index"))
i++;
- else if (!strcmp(argv[i], "-q")) {
- deprecated_show_diff_q_option_used = 1;
- i++;
- }
else if (!strcmp(argv[i], "--"))
i++;
else {
@@ -230,9 +225,6 @@ void diff_no_index(struct rev_info *revs,
revs->max_count = -2;
diff_setup_done(&revs->diffopt);
- if (deprecated_show_diff_q_option_used)
- handle_deprecated_show_diff_q(&revs->diffopt);
-
setup_diff_pager(&revs->diffopt);
DIFF_OPT_SET(&revs->diffopt, EXIT_WITH_STATUS);
diff --git a/diff.c b/diff.c
index 6b4cd0eb3..e343191bd 100644
--- a/diff.c
+++ b/diff.c
@@ -1361,11 +1361,7 @@ static struct diffstat_file *diffstat_add(struct diffstat_t *diffstat,
{
struct diffstat_file *x;
x = xcalloc(sizeof (*x), 1);
- if (diffstat->nr == diffstat->alloc) {
- diffstat->alloc = alloc_nr(diffstat->alloc);
- diffstat->files = xrealloc(diffstat->files,
- diffstat->alloc * sizeof(x));
- }
+ ALLOC_GROW(diffstat->files, diffstat->nr + 1, diffstat->alloc);
diffstat->files[diffstat->nr++] = x;
if (name_b) {
x->from_name = xstrdup(name_a);
@@ -2845,8 +2841,9 @@ static struct diff_tempfile *prepare_temp_file(const char *name,
remove_tempfile_installed = 1;
}
- if (!one->sha1_valid ||
- reuse_worktree_file(name, one->sha1, 1)) {
+ if (!S_ISGITLINK(one->mode) &&
+ (!one->sha1_valid ||
+ reuse_worktree_file(name, one->sha1, 1))) {
struct stat st;
if (lstat(name, &st) < 0) {
if (errno == ENOENT)
@@ -3365,14 +3362,11 @@ static int opt_arg(const char *arg, int arg_short, const char *arg_long, int *va
if (c != '-')
return 0;
arg++;
- eq = strchr(arg, '=');
- if (eq)
- len = eq - arg;
- else
- len = strlen(arg);
+ eq = strchrnul(arg, '=');
+ len = eq - arg;
if (!len || strncmp(arg, arg_long, len))
return 0;
- if (eq) {
+ if (*eq) {
int n;
char *end;
if (!isdigit(*++eq))
@@ -3599,14 +3593,6 @@ static int parse_diff_filter_opt(const char *optarg, struct diff_options *opt)
return 0;
}
-/* Used only by "diff-files" and "diff --no-index" */
-void handle_deprecated_show_diff_q(struct diff_options *opt)
-{
- warning("'diff -q' and 'diff-files -q' are deprecated.");
- warning("Use 'diff --diff-filter=d' instead to ignore deleted filepairs.");
- parse_diff_filter_opt("d", opt);
-}
-
static void enable_patch_output(int *fmt) {
*fmt &= ~DIFF_FORMAT_NO_OUTPUT;
*fmt |= DIFF_FORMAT_PATCH;
@@ -3965,11 +3951,7 @@ struct diff_queue_struct diff_queued_diff;
void diff_q(struct diff_queue_struct *queue, struct diff_filepair *dp)
{
- if (queue->alloc <= queue->nr) {
- queue->alloc = alloc_nr(queue->alloc);
- queue->queue = xrealloc(queue->queue,
- sizeof(dp) * queue->alloc);
- }
+ ALLOC_GROW(queue->queue, queue->nr + 1, queue->alloc);
queue->queue[queue->nr++] = dp;
}
@@ -4139,9 +4121,9 @@ void diff_debug_filespec(struct diff_filespec *s, int x, const char *one)
DIFF_FILE_VALID(s) ? "valid" : "invalid",
s->mode,
s->sha1_valid ? sha1_to_hex(s->sha1) : "");
- fprintf(stderr, "queue[%d] %s size %lu flags %d\n",
+ fprintf(stderr, "queue[%d] %s size %lu\n",
x, one ? one : "",
- s->size, s->xfrm_flags);
+ s->size);
}
void diff_debug_filepair(const struct diff_filepair *p, int i)
@@ -4697,6 +4679,38 @@ static int diff_filespec_is_identical(struct diff_filespec *one,
return !memcmp(one->data, two->data, one->size);
}
+static int diff_filespec_check_stat_unmatch(struct diff_filepair *p)
+{
+ if (p->done_skip_stat_unmatch)
+ return p->skip_stat_unmatch_result;
+
+ p->done_skip_stat_unmatch = 1;
+ p->skip_stat_unmatch_result = 0;
+ /*
+ * 1. Entries that come from stat info dirtiness
+ * always have both sides (iow, not create/delete),
+ * one side of the object name is unknown, with
+ * the same mode and size. Keep the ones that
+ * do not match these criteria. They have real
+ * differences.
+ *
+ * 2. At this point, the file is known to be modified,
+ * with the same mode and size, and the object
+ * name of one side is unknown. Need to inspect
+ * the identical contents.
+ */
+ if (!DIFF_FILE_VALID(p->one) || /* (1) */
+ !DIFF_FILE_VALID(p->two) ||
+ (p->one->sha1_valid && p->two->sha1_valid) ||
+ (p->one->mode != p->two->mode) ||
+ diff_populate_filespec(p->one, 1) ||
+ diff_populate_filespec(p->two, 1) ||
+ (p->one->size != p->two->size) ||
+ !diff_filespec_is_identical(p->one, p->two)) /* (2) */
+ p->skip_stat_unmatch_result = 1;
+ return p->skip_stat_unmatch_result;
+}
+
static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
{
int i;
@@ -4707,27 +4721,7 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
- /*
- * 1. Entries that come from stat info dirtiness
- * always have both sides (iow, not create/delete),
- * one side of the object name is unknown, with
- * the same mode and size. Keep the ones that
- * do not match these criteria. They have real
- * differences.
- *
- * 2. At this point, the file is known to be modified,
- * with the same mode and size, and the object
- * name of one side is unknown. Need to inspect
- * the identical contents.
- */
- if (!DIFF_FILE_VALID(p->one) || /* (1) */
- !DIFF_FILE_VALID(p->two) ||
- (p->one->sha1_valid && p->two->sha1_valid) ||
- (p->one->mode != p->two->mode) ||
- diff_populate_filespec(p->one, 1) ||
- diff_populate_filespec(p->two, 1) ||
- (p->one->size != p->two->size) ||
- !diff_filespec_is_identical(p->one, p->two)) /* (2) */
+ if (diff_filespec_check_stat_unmatch(p))
diff_q(&outq, p);
else {
/*
@@ -4890,6 +4884,7 @@ void diff_change(struct diff_options *options,
unsigned old_dirty_submodule, unsigned new_dirty_submodule)
{
struct diff_filespec *one, *two;
+ struct diff_filepair *p;
if (S_ISGITLINK(old_mode) && S_ISGITLINK(new_mode) &&
is_submodule_ignored(concatpath, options))
@@ -4916,10 +4911,16 @@ void diff_change(struct diff_options *options,
fill_filespec(two, new_sha1, new_sha1_valid, new_mode);
one->dirty_submodule = old_dirty_submodule;
two->dirty_submodule = new_dirty_submodule;
+ p = diff_queue(&diff_queued_diff, one, two);
- diff_queue(&diff_queued_diff, one, two);
- if (!DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
- DIFF_OPT_SET(options, HAS_CHANGES);
+ if (DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
+ return;
+
+ if (DIFF_OPT_TST(options, QUICK) && options->skip_stat_unmatch &&
+ !diff_filespec_check_stat_unmatch(p))
+ return;
+
+ DIFF_OPT_SET(options, HAS_CHANGES);
}
struct diff_filepair *diff_unmerge(struct diff_options *options, const char *path)
diff --git a/diff.h b/diff.h
index ce123fa06..a24a767db 100644
--- a/diff.h
+++ b/diff.h
@@ -198,7 +198,6 @@ extern int diff_root_tree_sha1(const unsigned char *new, const char *base,
struct combine_diff_path {
struct combine_diff_path *next;
- int len;
char *path;
unsigned int mode;
unsigned char sha1[20];
@@ -346,8 +345,6 @@ extern int parse_rename_score(const char **cp_p);
extern long parse_algorithm_value(const char *value);
-extern void handle_deprecated_show_diff_q(struct diff_options *);
-
extern int print_stat_summary(FILE *fp, int files,
int insertions, int deletions);
extern void setup_diff_pager(struct diff_options *);
diff --git a/diffcore-order.c b/diffcore-order.c
index fe7f1f464..97dd3d009 100644
--- a/diffcore-order.c
+++ b/diffcore-order.c
@@ -57,12 +57,6 @@ static void prepare_order(const char *orderfile)
}
}
-struct pair_order {
- struct diff_filepair *pair;
- int orig_order;
- int order;
-};
-
static int match_order(const char *path)
{
int i;
@@ -73,7 +67,7 @@ static int match_order(const char *path)
strbuf_addstr(&p, path);
while (p.buf[0]) {
char *cp;
- if (!fnmatch(order[i], p.buf, 0))
+ if (!wildmatch(order[i], p.buf, 0, NULL))
return i;
cp = strrchr(p.buf, '/');
if (!cp)
@@ -84,35 +78,54 @@ static int match_order(const char *path)
return order_cnt;
}
-static int compare_pair_order(const void *a_, const void *b_)
+static int compare_objs_order(const void *a_, const void *b_)
{
- struct pair_order const *a, *b;
- a = (struct pair_order const *)a_;
- b = (struct pair_order const *)b_;
+ struct obj_order const *a, *b;
+ a = (struct obj_order const *)a_;
+ b = (struct obj_order const *)b_;
if (a->order != b->order)
return a->order - b->order;
return a->orig_order - b->orig_order;
}
+void order_objects(const char *orderfile, obj_path_fn_t obj_path,
+ struct obj_order *objs, int nr)
+{
+ int i;
+
+ if (!nr)
+ return;
+
+ prepare_order(orderfile);
+ for (i = 0; i < nr; i++) {
+ objs[i].orig_order = i;
+ objs[i].order = match_order(obj_path(objs[i].obj));
+ }
+ qsort(objs, nr, sizeof(*objs), compare_objs_order);
+}
+
+static const char *pair_pathtwo(void *obj)
+{
+ struct diff_filepair *pair = (struct diff_filepair *)obj;
+
+ return pair->two->path;
+}
+
void diffcore_order(const char *orderfile)
{
struct diff_queue_struct *q = &diff_queued_diff;
- struct pair_order *o;
+ struct obj_order *o;
int i;
if (!q->nr)
return;
o = xmalloc(sizeof(*o) * q->nr);
- prepare_order(orderfile);
- for (i = 0; i < q->nr; i++) {
- o[i].pair = q->queue[i];
- o[i].orig_order = i;
- o[i].order = match_order(o[i].pair->two->path);
- }
- qsort(o, q->nr, sizeof(*o), compare_pair_order);
for (i = 0; i < q->nr; i++)
- q->queue[i] = o[i].pair;
+ o[i].obj = q->queue[i];
+ order_objects(orderfile, pair_pathtwo, o, q->nr);
+ for (i = 0; i < q->nr; i++)
+ q->queue[i] = o[i].obj;
free(o);
return;
}
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 6c7a72fbe..749a35d2c 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -4,7 +4,7 @@
#include "cache.h"
#include "diff.h"
#include "diffcore.h"
-#include "hash.h"
+#include "hashmap.h"
#include "progress.h"
/* Table of rename/copy destinations */
@@ -38,11 +38,7 @@ static struct diff_rename_dst *locate_rename_dst(struct diff_filespec *two,
if (!insert_ok)
return NULL;
/* insert to make it at "first" */
- if (rename_dst_alloc <= rename_dst_nr) {
- rename_dst_alloc = alloc_nr(rename_dst_alloc);
- rename_dst = xrealloc(rename_dst,
- rename_dst_alloc * sizeof(*rename_dst));
- }
+ ALLOC_GROW(rename_dst, rename_dst_nr + 1, rename_dst_alloc);
rename_dst_nr++;
if (first < rename_dst_nr)
memmove(rename_dst + first + 1, rename_dst + first,
@@ -82,11 +78,7 @@ static struct diff_rename_src *register_rename_src(struct diff_filepair *p)
}
/* insert to make it at "first" */
- if (rename_src_alloc <= rename_src_nr) {
- rename_src_alloc = alloc_nr(rename_src_alloc);
- rename_src = xrealloc(rename_src,
- rename_src_alloc * sizeof(*rename_src));
- }
+ ALLOC_GROW(rename_src, rename_src_nr + 1, rename_src_alloc);
rename_src_nr++;
if (first < rename_src_nr)
memmove(rename_src + first + 1, rename_src + first,
@@ -243,137 +235,82 @@ static int score_compare(const void *a_, const void *b_)
}
struct file_similarity {
- int src_dst, index;
+ struct hashmap_entry entry;
+ int index;
struct diff_filespec *filespec;
- struct file_similarity *next;
};
-static int find_identical_files(struct file_similarity *src,
- struct file_similarity *dst,
+static unsigned int hash_filespec(struct diff_filespec *filespec)
+{
+ unsigned int hash;
+ if (!filespec->sha1_valid) {
+ if (diff_populate_filespec(filespec, 0))
+ return 0;
+ hash_sha1_file(filespec->data, filespec->size, "blob", filespec->sha1);
+ }
+ memcpy(&hash, filespec->sha1, sizeof(hash));
+ return hash;
+}
+
+static int find_identical_files(struct hashmap *srcs,
+ int dst_index,
struct diff_options *options)
{
int renames = 0;
+ struct diff_filespec *target = rename_dst[dst_index].two;
+ struct file_similarity *p, *best, dst;
+ int i = 100, best_score = -1;
+
/*
- * Walk over all the destinations ...
+ * Find the best source match for specified destination.
*/
- do {
- struct diff_filespec *target = dst->filespec;
- struct file_similarity *p, *best;
- int i = 100, best_score = -1;
-
- /*
- * .. to find the best source match
- */
- best = NULL;
- for (p = src; p; p = p->next) {
- int score;
- struct diff_filespec *source = p->filespec;
-
- /* False hash collision? */
- if (hashcmp(source->sha1, target->sha1))
- continue;
- /* Non-regular files? If so, the modes must match! */
- if (!S_ISREG(source->mode) || !S_ISREG(target->mode)) {
- if (source->mode != target->mode)
- continue;
- }
- /* Give higher scores to sources that haven't been used already */
- score = !source->rename_used;
- if (source->rename_used && options->detect_rename != DIFF_DETECT_COPY)
+ best = NULL;
+ hashmap_entry_init(&dst, hash_filespec(target));
+ for (p = hashmap_get(srcs, &dst, NULL); p; p = hashmap_get_next(srcs, p)) {
+ int score;
+ struct diff_filespec *source = p->filespec;
+
+ /* False hash collision? */
+ if (hashcmp(source->sha1, target->sha1))
+ continue;
+ /* Non-regular files? If so, the modes must match! */
+ if (!S_ISREG(source->mode) || !S_ISREG(target->mode)) {
+ if (source->mode != target->mode)
continue;
- score += basename_same(source, target);
- if (score > best_score) {
- best = p;
- best_score = score;
- if (score == 2)
- break;
- }
-
- /* Too many identical alternatives? Pick one */
- if (!--i)
- break;
}
- if (best) {
- record_rename_pair(dst->index, best->index, MAX_SCORE);
- renames++;
+ /* Give higher scores to sources that haven't been used already */
+ score = !source->rename_used;
+ if (source->rename_used && options->detect_rename != DIFF_DETECT_COPY)
+ continue;
+ score += basename_same(source, target);
+ if (score > best_score) {
+ best = p;
+ best_score = score;
+ if (score == 2)
+ break;
}
- } while ((dst = dst->next) != NULL);
- return renames;
-}
-static void free_similarity_list(struct file_similarity *p)
-{
- while (p) {
- struct file_similarity *entry = p;
- p = p->next;
- free(entry);
+ /* Too many identical alternatives? Pick one */
+ if (!--i)
+ break;
}
-}
-
-static int find_same_files(void *ptr, void *data)
-{
- int ret;
- struct file_similarity *p = ptr;
- struct file_similarity *src = NULL, *dst = NULL;
- struct diff_options *options = data;
-
- /* Split the hash list up into sources and destinations */
- do {
- struct file_similarity *entry = p;
- p = p->next;
- if (entry->src_dst < 0) {
- entry->next = src;
- src = entry;
- } else {
- entry->next = dst;
- dst = entry;
- }
- } while (p);
-
- /*
- * If we have both sources *and* destinations, see if
- * we can match them up
- */
- ret = (src && dst) ? find_identical_files(src, dst, options) : 0;
-
- /* Free the hashes and return the number of renames found */
- free_similarity_list(src);
- free_similarity_list(dst);
- return ret;
-}
-
-static unsigned int hash_filespec(struct diff_filespec *filespec)
-{
- unsigned int hash;
- if (!filespec->sha1_valid) {
- if (diff_populate_filespec(filespec, 0))
- return 0;
- hash_sha1_file(filespec->data, filespec->size, "blob", filespec->sha1);
+ if (best) {
+ record_rename_pair(dst_index, best->index, MAX_SCORE);
+ renames++;
}
- memcpy(&hash, filespec->sha1, sizeof(hash));
- return hash;
+ return renames;
}
-static void insert_file_table(struct hash_table *table, int src_dst, int index, struct diff_filespec *filespec)
+static void insert_file_table(struct hashmap *table, int index, struct diff_filespec *filespec)
{
- void **pos;
- unsigned int hash;
struct file_similarity *entry = xmalloc(sizeof(*entry));
- entry->src_dst = src_dst;
entry->index = index;
entry->filespec = filespec;
- entry->next = NULL;
-
- hash = hash_filespec(filespec);
- pos = insert_hash(hash, entry, table);
- /* We already had an entry there? */
- if (pos) {
- entry->next = *pos;
- *pos = entry;
- }
+ hashmap_entry_init(entry, hash_filespec(filespec));
+ hashmap_add(table, entry);
}
/*
@@ -385,24 +322,22 @@ static void insert_file_table(struct hash_table *table, int src_dst, int index,
*/
static int find_exact_renames(struct diff_options *options)
{
- int i;
- struct hash_table file_table;
+ int i, renames = 0;
+ struct hashmap file_table;
- init_hash(&file_table);
- preallocate_hash(&file_table, rename_src_nr + rename_dst_nr);
+ /* Add all sources to the hash table */
+ hashmap_init(&file_table, NULL, rename_src_nr);
for (i = 0; i < rename_src_nr; i++)
- insert_file_table(&file_table, -1, i, rename_src[i].p->one);
+ insert_file_table(&file_table, i, rename_src[i].p->one);
+ /* Walk the destinations and find best source match */
for (i = 0; i < rename_dst_nr; i++)
- insert_file_table(&file_table, 1, i, rename_dst[i].two);
-
- /* Find the renames */
- i = for_each_hash(&file_table, find_same_files, options);
+ renames += find_identical_files(&file_table, i, options);
- /* .. and free the hash data structure */
- free_hash(&file_table);
+ /* Free the hash data structure and entries */
+ hashmap_free(&file_table, 1);
- return i;
+ return renames;
}
#define NUM_CANDIDATE_PER_DST 4
@@ -579,7 +514,7 @@ void diffcore_rename(struct diff_options *options)
if (options->show_rename_progress) {
progress = start_progress_delay(
- "Performing inexact rename detection",
+ _("Performing inexact rename detection"),
rename_dst_nr * rename_src_nr, 50, 1);
}
diff --git a/diffcore.h b/diffcore.h
index 1c16c8595..c876dac71 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -29,10 +29,8 @@ struct diff_filespec {
char *path;
void *data;
void *cnt_data;
- const char *funcname_pattern_ident;
unsigned long size;
int count; /* Reference count */
- int xfrm_flags; /* for use by the xfrm */
int rename_used; /* Count of rename users */
unsigned short mode; /* file mode */
unsigned sha1_valid : 1; /* if true, use sha1 and trust mode;
@@ -43,13 +41,13 @@ struct diff_filespec {
unsigned should_free : 1; /* data should be free()'ed */
unsigned should_munmap : 1; /* data should be munmap()'ed */
unsigned dirty_submodule : 2; /* For submodules: its work tree is dirty */
- unsigned is_stdin : 1;
#define DIRTY_SUBMODULE_UNTRACKED 1
#define DIRTY_SUBMODULE_MODIFIED 2
+ unsigned is_stdin : 1;
unsigned has_more_entries : 1; /* only appear in combined diff */
- struct userdiff_driver *driver;
/* data should be considered "binary"; -1 means "don't know yet" */
- int is_binary;
+ signed int is_binary : 2;
+ struct userdiff_driver *driver;
};
extern struct diff_filespec *alloc_filespec(const char *);
@@ -70,6 +68,8 @@ struct diff_filepair {
unsigned broken_pair : 1;
unsigned renamed_pair : 1;
unsigned is_unmerged : 1;
+ unsigned done_skip_stat_unmatch : 1;
+ unsigned skip_stat_unmatch_result : 1;
};
#define DIFF_PAIR_UNMERGED(p) ((p)->is_unmerged)
@@ -111,6 +111,20 @@ extern void diffcore_merge_broken(void);
extern void diffcore_pickaxe(struct diff_options *);
extern void diffcore_order(const char *orderfile);
+/* low-level interface to diffcore_order */
+struct obj_order {
+ void *obj; /* setup by caller */
+
+ /* setup/used by order_objects() */
+ int orig_order;
+ int order;
+};
+
+typedef const char *(*obj_path_fn_t)(void *obj);
+
+void order_objects(const char *orderfile, obj_path_fn_t obj_path,
+ struct obj_order *objs, int nr);
+
#define DIFF_DEBUG 0
#if DIFF_DEBUG
void diff_debug_filespec(struct diff_filespec *, int, const char *);
diff --git a/dir.c b/dir.c
index d10a63f73..99f53033b 100644
--- a/dir.c
+++ b/dir.c
@@ -49,7 +49,9 @@ int strncmp_icase(const char *a, const char *b, size_t count)
int fnmatch_icase(const char *pattern, const char *string, int flags)
{
- return fnmatch(pattern, string, flags | (ignore_case ? FNM_CASEFOLD : 0));
+ return wildmatch(pattern, string,
+ flags | (ignore_case ? WM_CASEFOLD : 0),
+ NULL);
}
inline int git_fnmatch(const struct pathspec_item *item,
@@ -58,7 +60,7 @@ inline int git_fnmatch(const struct pathspec_item *item,
{
if (prefix > 0) {
if (ps_strncmp(item, pattern, string, prefix))
- return FNM_NOMATCH;
+ return WM_NOMATCH;
pattern += prefix;
string += prefix;
}
@@ -76,8 +78,9 @@ inline int git_fnmatch(const struct pathspec_item *item,
NULL);
else
/* wildmatch has not learned no FNM_PATHNAME mode yet */
- return fnmatch(pattern, string,
- item->magic & PATHSPEC_ICASE ? FNM_CASEFOLD : 0);
+ return wildmatch(pattern, string,
+ item->magic & PATHSPEC_ICASE ? WM_CASEFOLD : 0,
+ NULL);
}
static int fnmatch_icase_mem(const char *pattern, int patternlen,
@@ -195,6 +198,9 @@ int within_depth(const char *name, int namelen,
return 1;
}
+#define DO_MATCH_EXCLUDE 1
+#define DO_MATCH_DIRECTORY 2
+
/*
* Does 'match' match the given name?
* A match is found if
@@ -208,7 +214,7 @@ int within_depth(const char *name, int namelen,
* It returns 0 when there is no match.
*/
static int match_pathspec_item(const struct pathspec_item *item, int prefix,
- const char *name, int namelen)
+ const char *name, int namelen, unsigned flags)
{
/* name/namelen has prefix cut off by caller */
const char *match = item->match + prefix;
@@ -218,7 +224,7 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix,
* The normal call pattern is:
* 1. prefix = common_prefix_len(ps);
* 2. prune something, or fill_directory
- * 3. match_pathspec_depth()
+ * 3. match_pathspec()
*
* 'prefix' at #1 may be shorter than the command's prefix and
* it's ok for #2 to match extra files. Those extras will be
@@ -257,7 +263,11 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix,
if (match[matchlen-1] == '/' || name[matchlen] == '/')
return MATCHED_RECURSIVELY;
- }
+ } else if ((flags & DO_MATCH_DIRECTORY) &&
+ match[matchlen - 1] == '/' &&
+ namelen == matchlen - 1 &&
+ !ps_strncmp(item, match, name, namelen))
+ return MATCHED_EXACTLY;
if (item->nowildcard_len < item->len &&
!git_fnmatch(item, match, name,
@@ -282,12 +292,12 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix,
* pathspec did not match any names, which could indicate that the
* user mistyped the nth pathspec.
*/
-static int match_pathspec_depth_1(const struct pathspec *ps,
- const char *name, int namelen,
- int prefix, char *seen,
- int exclude)
+static int do_match_pathspec(const struct pathspec *ps,
+ const char *name, int namelen,
+ int prefix, char *seen,
+ unsigned flags)
{
- int i, retval = 0;
+ int i, retval = 0, exclude = flags & DO_MATCH_EXCLUDE;
GUARD_PATHSPEC(ps,
PATHSPEC_FROMTOP |
@@ -327,7 +337,8 @@ static int match_pathspec_depth_1(const struct pathspec *ps,
*/
if (seen && ps->items[i].magic & PATHSPEC_EXCLUDE)
seen[i] = MATCHED_FNMATCH;
- how = match_pathspec_item(ps->items+i, prefix, name, namelen);
+ how = match_pathspec_item(ps->items+i, prefix, name,
+ namelen, flags);
if (ps->recursive &&
(ps->magic & PATHSPEC_MAXDEPTH) &&
ps->max_depth != -1 &&
@@ -350,15 +361,19 @@ static int match_pathspec_depth_1(const struct pathspec *ps,
return retval;
}
-int match_pathspec_depth(const struct pathspec *ps,
- const char *name, int namelen,
- int prefix, char *seen)
+int match_pathspec(const struct pathspec *ps,
+ const char *name, int namelen,
+ int prefix, char *seen, int is_dir)
{
int positive, negative;
- positive = match_pathspec_depth_1(ps, name, namelen, prefix, seen, 0);
+ unsigned flags = is_dir ? DO_MATCH_DIRECTORY : 0;
+ positive = do_match_pathspec(ps, name, namelen,
+ prefix, seen, flags);
if (!(ps->magic & PATHSPEC_EXCLUDE) || !positive)
return positive;
- negative = match_pathspec_depth_1(ps, name, namelen, prefix, seen, 1);
+ negative = do_match_pathspec(ps, name, namelen,
+ prefix, seen,
+ flags | DO_MATCH_EXCLUDE);
return negative ? 0 : positive;
}
@@ -491,6 +506,25 @@ void clear_exclude_list(struct exclude_list *el)
el->filebuf = NULL;
}
+static void trim_trailing_spaces(char *buf)
+{
+ int i, last_space = -1, nr_spaces, len = strlen(buf);
+ for (i = 0; i < len; i++)
+ if (buf[i] == '\\')
+ i++;
+ else if (buf[i] == ' ') {
+ if (last_space == -1) {
+ last_space = i;
+ nr_spaces = 1;
+ } else
+ nr_spaces++;
+ } else
+ last_space = -1;
+
+ if (last_space != -1 && last_space + nr_spaces == len)
+ buf[last_space] = '\0';
+}
+
int add_excludes_from_file_to_list(const char *fname,
const char *base,
int baselen,
@@ -542,6 +576,7 @@ int add_excludes_from_file_to_list(const char *fname,
if (buf[i] == '\n') {
if (entry != buf + i && entry[0] != '#') {
buf[i - (i && buf[i-1] == '\r')] = 0;
+ trim_trailing_spaces(entry);
add_exclude(entry, base, baselen, el, lineno);
}
lineno++;
@@ -1329,10 +1364,7 @@ static struct path_simplify *create_simplify(const char **pathspec)
for (nr = 0 ; ; nr++) {
const char *match;
- if (nr >= alloc) {
- alloc = alloc_nr(alloc);
- simplify = xrealloc(simplify, alloc * sizeof(*simplify));
- }
+ ALLOC_GROW(simplify, nr + 1, alloc);
match = *pathspec++;
if (!match)
break;
@@ -1511,8 +1543,13 @@ static int remove_dir_recurse(struct strbuf *path, int flag, int *kept_up)
flag &= ~REMOVE_DIR_KEEP_TOPLEVEL;
dir = opendir(path->buf);
if (!dir) {
- /* an empty dir could be removed even if it is unreadble */
- if (!keep_toplevel)
+ if (errno == ENOENT)
+ return keep_toplevel ? -1 : 0;
+ else if (errno == EACCES && !keep_toplevel)
+ /*
+ * An empty dir could be removable even if it
+ * is unreadable:
+ */
return rmdir(path->buf);
else
return -1;
@@ -1528,13 +1565,21 @@ static int remove_dir_recurse(struct strbuf *path, int flag, int *kept_up)
strbuf_setlen(path, len);
strbuf_addstr(path, e->d_name);
- if (lstat(path->buf, &st))
- ; /* fall thru */
- else if (S_ISDIR(st.st_mode)) {
+ if (lstat(path->buf, &st)) {
+ if (errno == ENOENT)
+ /*
+ * file disappeared, which is what we
+ * wanted anyway
+ */
+ continue;
+ /* fall thru */
+ } else if (S_ISDIR(st.st_mode)) {
if (!remove_dir_recurse(path, flag, &kept_down))
continue; /* happy */
- } else if (!only_empty && !unlink(path->buf))
+ } else if (!only_empty &&
+ (!unlink(path->buf) || errno == ENOENT)) {
continue; /* happy, too */
+ }
/* path too long, stat fails, or non-directory still exists */
ret = -1;
@@ -1544,7 +1589,7 @@ static int remove_dir_recurse(struct strbuf *path, int flag, int *kept_up)
strbuf_setlen(path, original_len);
if (!ret && !keep_toplevel && !kept_down)
- ret = rmdir(path->buf);
+ ret = (!rmdir(path->buf) || errno == ENOENT) ? 0 : -1;
else if (kept_up)
/*
* report the uplevel that it is not an error that we
diff --git a/dir.h b/dir.h
index 9b7e4e77d..55e53456a 100644
--- a/dir.h
+++ b/dir.h
@@ -132,9 +132,9 @@ struct dir_struct {
extern int simple_length(const char *match);
extern int no_wildcard(const char *string);
extern char *common_prefix(const struct pathspec *pathspec);
-extern int match_pathspec_depth(const struct pathspec *pathspec,
- const char *name, int namelen,
- int prefix, char *seen);
+extern int match_pathspec(const struct pathspec *pathspec,
+ const char *name, int namelen,
+ int prefix, char *seen, int is_dir);
extern int within_depth(const char *name, int namelen, int depth, int max_depth);
extern int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec);
@@ -205,4 +205,22 @@ extern int git_fnmatch(const struct pathspec_item *item,
const char *pattern, const char *string,
int prefix);
+static inline int ce_path_match(const struct cache_entry *ce,
+ const struct pathspec *pathspec,
+ char *seen)
+{
+ return match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, seen,
+ S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode));
+}
+
+static inline int dir_path_match(const struct dir_entry *ent,
+ const struct pathspec *pathspec,
+ int prefix, char *seen)
+{
+ int has_trailing_dir = ent->len && ent->name[ent->len - 1] == '/';
+ int len = has_trailing_dir ? ent->len - 1 : ent->len;
+ return match_pathspec(pathspec, ent->name, len, prefix, seen,
+ has_trailing_dir);
+}
+
#endif
diff --git a/environment.c b/environment.c
index 4a3437d8a..c3c860603 100644
--- a/environment.c
+++ b/environment.c
@@ -45,7 +45,7 @@ const char *editor_program;
const char *askpass_program;
const char *excludes_file;
enum auto_crlf auto_crlf = AUTO_CRLF_FALSE;
-int read_replace_refs = 1; /* NEEDSWORK: rename to use_replace_refs */
+int check_replace_refs = 1;
enum eol core_eol = EOL_UNSET;
enum safe_crlf safe_crlf = SAFE_CRLF_WARN;
unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;
@@ -147,7 +147,7 @@ static void setup_git_env(void)
if (!git_graft_file)
git_graft_file = git_pathdup("info/grafts");
if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT))
- read_replace_refs = 0;
+ check_replace_refs = 0;
namespace = expand_namespace(getenv(GIT_NAMESPACE_ENVIRONMENT));
namespace_len = strlen(namespace);
shallow_file = getenv(GIT_SHALLOW_FILE_ENVIRONMENT);
diff --git a/ewah/bitmap.c b/ewah/bitmap.c
new file mode 100644
index 000000000..710e58c1b
--- /dev/null
+++ b/ewah/bitmap.c
@@ -0,0 +1,221 @@
+/**
+ * Copyright 2013, GitHub, Inc
+ * Copyright 2009-2013, Daniel Lemire, Cliff Moon,
+ * David McIntosh, Robert Becho, Google Inc. and Veronika Zenz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include "git-compat-util.h"
+#include "ewok.h"
+
+#define MASK(x) ((eword_t)1 << (x % BITS_IN_WORD))
+#define BLOCK(x) (x / BITS_IN_WORD)
+
+struct bitmap *bitmap_new(void)
+{
+ struct bitmap *bitmap = ewah_malloc(sizeof(struct bitmap));
+ bitmap->words = ewah_calloc(32, sizeof(eword_t));
+ bitmap->word_alloc = 32;
+ return bitmap;
+}
+
+void bitmap_set(struct bitmap *self, size_t pos)
+{
+ size_t block = BLOCK(pos);
+
+ if (block >= self->word_alloc) {
+ size_t old_size = self->word_alloc;
+ self->word_alloc = block * 2;
+ self->words = ewah_realloc(self->words,
+ self->word_alloc * sizeof(eword_t));
+
+ memset(self->words + old_size, 0x0,
+ (self->word_alloc - old_size) * sizeof(eword_t));
+ }
+
+ self->words[block] |= MASK(pos);
+}
+
+void bitmap_clear(struct bitmap *self, size_t pos)
+{
+ size_t block = BLOCK(pos);
+
+ if (block < self->word_alloc)
+ self->words[block] &= ~MASK(pos);
+}
+
+int bitmap_get(struct bitmap *self, size_t pos)
+{
+ size_t block = BLOCK(pos);
+ return block < self->word_alloc &&
+ (self->words[block] & MASK(pos)) != 0;
+}
+
+struct ewah_bitmap *bitmap_to_ewah(struct bitmap *bitmap)
+{
+ struct ewah_bitmap *ewah = ewah_new();
+ size_t i, running_empty_words = 0;
+ eword_t last_word = 0;
+
+ for (i = 0; i < bitmap->word_alloc; ++i) {
+ if (bitmap->words[i] == 0) {
+ running_empty_words++;
+ continue;
+ }
+
+ if (last_word != 0)
+ ewah_add(ewah, last_word);
+
+ if (running_empty_words > 0) {
+ ewah_add_empty_words(ewah, 0, running_empty_words);
+ running_empty_words = 0;
+ }
+
+ last_word = bitmap->words[i];
+ }
+
+ ewah_add(ewah, last_word);
+ return ewah;
+}
+
+struct bitmap *ewah_to_bitmap(struct ewah_bitmap *ewah)
+{
+ struct bitmap *bitmap = bitmap_new();
+ struct ewah_iterator it;
+ eword_t blowup;
+ size_t i = 0;
+
+ ewah_iterator_init(&it, ewah);
+
+ while (ewah_iterator_next(&blowup, &it)) {
+ if (i >= bitmap->word_alloc) {
+ bitmap->word_alloc *= 1.5;
+ bitmap->words = ewah_realloc(
+ bitmap->words, bitmap->word_alloc * sizeof(eword_t));
+ }
+
+ bitmap->words[i++] = blowup;
+ }
+
+ bitmap->word_alloc = i;
+ return bitmap;
+}
+
+void bitmap_and_not(struct bitmap *self, struct bitmap *other)
+{
+ const size_t count = (self->word_alloc < other->word_alloc) ?
+ self->word_alloc : other->word_alloc;
+
+ size_t i;
+
+ for (i = 0; i < count; ++i)
+ self->words[i] &= ~other->words[i];
+}
+
+void bitmap_or_ewah(struct bitmap *self, struct ewah_bitmap *other)
+{
+ size_t original_size = self->word_alloc;
+ size_t other_final = (other->bit_size / BITS_IN_WORD) + 1;
+ size_t i = 0;
+ struct ewah_iterator it;
+ eword_t word;
+
+ if (self->word_alloc < other_final) {
+ self->word_alloc = other_final;
+ self->words = ewah_realloc(self->words,
+ self->word_alloc * sizeof(eword_t));
+ memset(self->words + original_size, 0x0,
+ (self->word_alloc - original_size) * sizeof(eword_t));
+ }
+
+ ewah_iterator_init(&it, other);
+
+ while (ewah_iterator_next(&word, &it))
+ self->words[i++] |= word;
+}
+
+void bitmap_each_bit(struct bitmap *self, ewah_callback callback, void *data)
+{
+ size_t pos = 0, i;
+
+ for (i = 0; i < self->word_alloc; ++i) {
+ eword_t word = self->words[i];
+ uint32_t offset;
+
+ if (word == (eword_t)~0) {
+ for (offset = 0; offset < BITS_IN_WORD; ++offset)
+ callback(pos++, data);
+ } else {
+ for (offset = 0; offset < BITS_IN_WORD; ++offset) {
+ if ((word >> offset) == 0)
+ break;
+
+ offset += ewah_bit_ctz64(word >> offset);
+ callback(pos + offset, data);
+ }
+ pos += BITS_IN_WORD;
+ }
+ }
+}
+
+size_t bitmap_popcount(struct bitmap *self)
+{
+ size_t i, count = 0;
+
+ for (i = 0; i < self->word_alloc; ++i)
+ count += ewah_bit_popcount64(self->words[i]);
+
+ return count;
+}
+
+int bitmap_equals(struct bitmap *self, struct bitmap *other)
+{
+ struct bitmap *big, *small;
+ size_t i;
+
+ if (self->word_alloc < other->word_alloc) {
+ small = self;
+ big = other;
+ } else {
+ small = other;
+ big = self;
+ }
+
+ for (i = 0; i < small->word_alloc; ++i) {
+ if (small->words[i] != big->words[i])
+ return 0;
+ }
+
+ for (; i < big->word_alloc; ++i) {
+ if (big->words[i] != 0)
+ return 0;
+ }
+
+ return 1;
+}
+
+void bitmap_reset(struct bitmap *bitmap)
+{
+ memset(bitmap->words, 0x0, bitmap->word_alloc * sizeof(eword_t));
+}
+
+void bitmap_free(struct bitmap *bitmap)
+{
+ if (bitmap == NULL)
+ return;
+
+ free(bitmap->words);
+ free(bitmap);
+}
diff --git a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c
new file mode 100644
index 000000000..9ced2dadf
--- /dev/null
+++ b/ewah/ewah_bitmap.c
@@ -0,0 +1,714 @@
+/**
+ * Copyright 2013, GitHub, Inc
+ * Copyright 2009-2013, Daniel Lemire, Cliff Moon,
+ * David McIntosh, Robert Becho, Google Inc. and Veronika Zenz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include "git-compat-util.h"
+#include "ewok.h"
+#include "ewok_rlw.h"
+
+static inline size_t min_size(size_t a, size_t b)
+{
+ return a < b ? a : b;
+}
+
+static inline size_t max_size(size_t a, size_t b)
+{
+ return a > b ? a : b;
+}
+
+static inline void buffer_grow(struct ewah_bitmap *self, size_t new_size)
+{
+ size_t rlw_offset = (uint8_t *)self->rlw - (uint8_t *)self->buffer;
+
+ if (self->alloc_size >= new_size)
+ return;
+
+ self->alloc_size = new_size;
+ self->buffer = ewah_realloc(self->buffer,
+ self->alloc_size * sizeof(eword_t));
+ self->rlw = self->buffer + (rlw_offset / sizeof(size_t));
+}
+
+static inline void buffer_push(struct ewah_bitmap *self, eword_t value)
+{
+ if (self->buffer_size + 1 >= self->alloc_size)
+ buffer_grow(self, self->buffer_size * 3 / 2);
+
+ self->buffer[self->buffer_size++] = value;
+}
+
+static void buffer_push_rlw(struct ewah_bitmap *self, eword_t value)
+{
+ buffer_push(self, value);
+ self->rlw = self->buffer + self->buffer_size - 1;
+}
+
+static size_t add_empty_words(struct ewah_bitmap *self, int v, size_t number)
+{
+ size_t added = 0;
+ eword_t runlen, can_add;
+
+ if (rlw_get_run_bit(self->rlw) != v && rlw_size(self->rlw) == 0) {
+ rlw_set_run_bit(self->rlw, v);
+ } else if (rlw_get_literal_words(self->rlw) != 0 ||
+ rlw_get_run_bit(self->rlw) != v) {
+ buffer_push_rlw(self, 0);
+ if (v) rlw_set_run_bit(self->rlw, v);
+ added++;
+ }
+
+ runlen = rlw_get_running_len(self->rlw);
+ can_add = min_size(number, RLW_LARGEST_RUNNING_COUNT - runlen);
+
+ rlw_set_running_len(self->rlw, runlen + can_add);
+ number -= can_add;
+
+ while (number >= RLW_LARGEST_RUNNING_COUNT) {
+ buffer_push_rlw(self, 0);
+ added++;
+ if (v) rlw_set_run_bit(self->rlw, v);
+ rlw_set_running_len(self->rlw, RLW_LARGEST_RUNNING_COUNT);
+ number -= RLW_LARGEST_RUNNING_COUNT;
+ }
+
+ if (number > 0) {
+ buffer_push_rlw(self, 0);
+ added++;
+
+ if (v) rlw_set_run_bit(self->rlw, v);
+ rlw_set_running_len(self->rlw, number);
+ }
+
+ return added;
+}
+
+size_t ewah_add_empty_words(struct ewah_bitmap *self, int v, size_t number)
+{
+ if (number == 0)
+ return 0;
+
+ self->bit_size += number * BITS_IN_WORD;
+ return add_empty_words(self, v, number);
+}
+
+static size_t add_literal(struct ewah_bitmap *self, eword_t new_data)
+{
+ eword_t current_num = rlw_get_literal_words(self->rlw);
+
+ if (current_num >= RLW_LARGEST_LITERAL_COUNT) {
+ buffer_push_rlw(self, 0);
+
+ rlw_set_literal_words(self->rlw, 1);
+ buffer_push(self, new_data);
+ return 2;
+ }
+
+ rlw_set_literal_words(self->rlw, current_num + 1);
+
+ /* sanity check */
+ assert(rlw_get_literal_words(self->rlw) == current_num + 1);
+
+ buffer_push(self, new_data);
+ return 1;
+}
+
+void ewah_add_dirty_words(
+ struct ewah_bitmap *self, const eword_t *buffer,
+ size_t number, int negate)
+{
+ size_t literals, can_add;
+
+ while (1) {
+ literals = rlw_get_literal_words(self->rlw);
+ can_add = min_size(number, RLW_LARGEST_LITERAL_COUNT - literals);
+
+ rlw_set_literal_words(self->rlw, literals + can_add);
+
+ if (self->buffer_size + can_add >= self->alloc_size)
+ buffer_grow(self, (self->buffer_size + can_add) * 3 / 2);
+
+ if (negate) {
+ size_t i;
+ for (i = 0; i < can_add; ++i)
+ self->buffer[self->buffer_size++] = ~buffer[i];
+ } else {
+ memcpy(self->buffer + self->buffer_size,
+ buffer, can_add * sizeof(eword_t));
+ self->buffer_size += can_add;
+ }
+
+ self->bit_size += can_add * BITS_IN_WORD;
+
+ if (number - can_add == 0)
+ break;
+
+ buffer_push_rlw(self, 0);
+ buffer += can_add;
+ number -= can_add;
+ }
+}
+
+static size_t add_empty_word(struct ewah_bitmap *self, int v)
+{
+ int no_literal = (rlw_get_literal_words(self->rlw) == 0);
+ eword_t run_len = rlw_get_running_len(self->rlw);
+
+ if (no_literal && run_len == 0) {
+ rlw_set_run_bit(self->rlw, v);
+ assert(rlw_get_run_bit(self->rlw) == v);
+ }
+
+ if (no_literal && rlw_get_run_bit(self->rlw) == v &&
+ run_len < RLW_LARGEST_RUNNING_COUNT) {
+ rlw_set_running_len(self->rlw, run_len + 1);
+ assert(rlw_get_running_len(self->rlw) == run_len + 1);
+ return 0;
+ } else {
+ buffer_push_rlw(self, 0);
+
+ assert(rlw_get_running_len(self->rlw) == 0);
+ assert(rlw_get_run_bit(self->rlw) == 0);
+ assert(rlw_get_literal_words(self->rlw) == 0);
+
+ rlw_set_run_bit(self->rlw, v);
+ assert(rlw_get_run_bit(self->rlw) == v);
+
+ rlw_set_running_len(self->rlw, 1);
+ assert(rlw_get_running_len(self->rlw) == 1);
+ assert(rlw_get_literal_words(self->rlw) == 0);
+ return 1;
+ }
+}
+
+size_t ewah_add(struct ewah_bitmap *self, eword_t word)
+{
+ self->bit_size += BITS_IN_WORD;
+
+ if (word == 0)
+ return add_empty_word(self, 0);
+
+ if (word == (eword_t)(~0))
+ return add_empty_word(self, 1);
+
+ return add_literal(self, word);
+}
+
+void ewah_set(struct ewah_bitmap *self, size_t i)
+{
+ const size_t dist =
+ (i + BITS_IN_WORD) / BITS_IN_WORD -
+ (self->bit_size + BITS_IN_WORD - 1) / BITS_IN_WORD;
+
+ assert(i >= self->bit_size);
+
+ self->bit_size = i + 1;
+
+ if (dist > 0) {
+ if (dist > 1)
+ add_empty_words(self, 0, dist - 1);
+
+ add_literal(self, (eword_t)1 << (i % BITS_IN_WORD));
+ return;
+ }
+
+ if (rlw_get_literal_words(self->rlw) == 0) {
+ rlw_set_running_len(self->rlw,
+ rlw_get_running_len(self->rlw) - 1);
+ add_literal(self, (eword_t)1 << (i % BITS_IN_WORD));
+ return;
+ }
+
+ self->buffer[self->buffer_size - 1] |=
+ ((eword_t)1 << (i % BITS_IN_WORD));
+
+ /* check if we just completed a stream of 1s */
+ if (self->buffer[self->buffer_size - 1] == (eword_t)(~0)) {
+ self->buffer[--self->buffer_size] = 0;
+ rlw_set_literal_words(self->rlw,
+ rlw_get_literal_words(self->rlw) - 1);
+ add_empty_word(self, 1);
+ }
+}
+
+void ewah_each_bit(struct ewah_bitmap *self, void (*callback)(size_t, void*), void *payload)
+{
+ size_t pos = 0;
+ size_t pointer = 0;
+ size_t k;
+
+ while (pointer < self->buffer_size) {
+ eword_t *word = &self->buffer[pointer];
+
+ if (rlw_get_run_bit(word)) {
+ size_t len = rlw_get_running_len(word) * BITS_IN_WORD;
+ for (k = 0; k < len; ++k, ++pos)
+ callback(pos, payload);
+ } else {
+ pos += rlw_get_running_len(word) * BITS_IN_WORD;
+ }
+
+ ++pointer;
+
+ for (k = 0; k < rlw_get_literal_words(word); ++k) {
+ int c;
+
+ /* todo: zero count optimization */
+ for (c = 0; c < BITS_IN_WORD; ++c, ++pos) {
+ if ((self->buffer[pointer] & ((eword_t)1 << c)) != 0)
+ callback(pos, payload);
+ }
+
+ ++pointer;
+ }
+ }
+}
+
+struct ewah_bitmap *ewah_new(void)
+{
+ struct ewah_bitmap *self;
+
+ self = ewah_malloc(sizeof(struct ewah_bitmap));
+ if (self == NULL)
+ return NULL;
+
+ self->buffer = ewah_malloc(32 * sizeof(eword_t));
+ self->alloc_size = 32;
+
+ ewah_clear(self);
+ return self;
+}
+
+void ewah_clear(struct ewah_bitmap *self)
+{
+ self->buffer_size = 1;
+ self->buffer[0] = 0;
+ self->bit_size = 0;
+ self->rlw = self->buffer;
+}
+
+void ewah_free(struct ewah_bitmap *self)
+{
+ if (!self)
+ return;
+
+ if (self->alloc_size)
+ free(self->buffer);
+
+ free(self);
+}
+
+static void read_new_rlw(struct ewah_iterator *it)
+{
+ const eword_t *word = NULL;
+
+ it->literals = 0;
+ it->compressed = 0;
+
+ while (1) {
+ word = &it->buffer[it->pointer];
+
+ it->rl = rlw_get_running_len(word);
+ it->lw = rlw_get_literal_words(word);
+ it->b = rlw_get_run_bit(word);
+
+ if (it->rl || it->lw)
+ return;
+
+ if (it->pointer < it->buffer_size - 1) {
+ it->pointer++;
+ } else {
+ it->pointer = it->buffer_size;
+ return;
+ }
+ }
+}
+
+int ewah_iterator_next(eword_t *next, struct ewah_iterator *it)
+{
+ if (it->pointer >= it->buffer_size)
+ return 0;
+
+ if (it->compressed < it->rl) {
+ it->compressed++;
+ *next = it->b ? (eword_t)(~0) : 0;
+ } else {
+ assert(it->literals < it->lw);
+
+ it->literals++;
+ it->pointer++;
+
+ assert(it->pointer < it->buffer_size);
+
+ *next = it->buffer[it->pointer];
+ }
+
+ if (it->compressed == it->rl && it->literals == it->lw) {
+ if (++it->pointer < it->buffer_size)
+ read_new_rlw(it);
+ }
+
+ return 1;
+}
+
+void ewah_iterator_init(struct ewah_iterator *it, struct ewah_bitmap *parent)
+{
+ it->buffer = parent->buffer;
+ it->buffer_size = parent->buffer_size;
+ it->pointer = 0;
+
+ it->lw = 0;
+ it->rl = 0;
+ it->compressed = 0;
+ it->literals = 0;
+ it->b = 0;
+
+ if (it->pointer < it->buffer_size)
+ read_new_rlw(it);
+}
+
+void ewah_not(struct ewah_bitmap *self)
+{
+ size_t pointer = 0;
+
+ while (pointer < self->buffer_size) {
+ eword_t *word = &self->buffer[pointer];
+ size_t literals, k;
+
+ rlw_xor_run_bit(word);
+ ++pointer;
+
+ literals = rlw_get_literal_words(word);
+ for (k = 0; k < literals; ++k) {
+ self->buffer[pointer] = ~self->buffer[pointer];
+ ++pointer;
+ }
+ }
+}
+
+void ewah_xor(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out)
+{
+ struct rlw_iterator rlw_i;
+ struct rlw_iterator rlw_j;
+ size_t literals;
+
+ rlwit_init(&rlw_i, ewah_i);
+ rlwit_init(&rlw_j, ewah_j);
+
+ while (rlwit_word_size(&rlw_i) > 0 && rlwit_word_size(&rlw_j) > 0) {
+ while (rlw_i.rlw.running_len > 0 || rlw_j.rlw.running_len > 0) {
+ struct rlw_iterator *prey, *predator;
+ size_t index;
+ int negate_words;
+
+ if (rlw_i.rlw.running_len < rlw_j.rlw.running_len) {
+ prey = &rlw_i;
+ predator = &rlw_j;
+ } else {
+ prey = &rlw_j;
+ predator = &rlw_i;
+ }
+
+ negate_words = !!predator->rlw.running_bit;
+ index = rlwit_discharge(prey, out,
+ predator->rlw.running_len, negate_words);
+
+ ewah_add_empty_words(out, negate_words,
+ predator->rlw.running_len - index);
+
+ rlwit_discard_first_words(predator,
+ predator->rlw.running_len);
+ }
+
+ literals = min_size(
+ rlw_i.rlw.literal_words,
+ rlw_j.rlw.literal_words);
+
+ if (literals) {
+ size_t k;
+
+ for (k = 0; k < literals; ++k) {
+ ewah_add(out,
+ rlw_i.buffer[rlw_i.literal_word_start + k] ^
+ rlw_j.buffer[rlw_j.literal_word_start + k]
+ );
+ }
+
+ rlwit_discard_first_words(&rlw_i, literals);
+ rlwit_discard_first_words(&rlw_j, literals);
+ }
+ }
+
+ if (rlwit_word_size(&rlw_i) > 0)
+ rlwit_discharge(&rlw_i, out, ~0, 0);
+ else
+ rlwit_discharge(&rlw_j, out, ~0, 0);
+
+ out->bit_size = max_size(ewah_i->bit_size, ewah_j->bit_size);
+}
+
+void ewah_and(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out)
+{
+ struct rlw_iterator rlw_i;
+ struct rlw_iterator rlw_j;
+ size_t literals;
+
+ rlwit_init(&rlw_i, ewah_i);
+ rlwit_init(&rlw_j, ewah_j);
+
+ while (rlwit_word_size(&rlw_i) > 0 && rlwit_word_size(&rlw_j) > 0) {
+ while (rlw_i.rlw.running_len > 0 || rlw_j.rlw.running_len > 0) {
+ struct rlw_iterator *prey, *predator;
+
+ if (rlw_i.rlw.running_len < rlw_j.rlw.running_len) {
+ prey = &rlw_i;
+ predator = &rlw_j;
+ } else {
+ prey = &rlw_j;
+ predator = &rlw_i;
+ }
+
+ if (predator->rlw.running_bit == 0) {
+ ewah_add_empty_words(out, 0,
+ predator->rlw.running_len);
+ rlwit_discard_first_words(prey,
+ predator->rlw.running_len);
+ rlwit_discard_first_words(predator,
+ predator->rlw.running_len);
+ } else {
+ size_t index = rlwit_discharge(prey, out,
+ predator->rlw.running_len, 0);
+ ewah_add_empty_words(out, 0,
+ predator->rlw.running_len - index);
+ rlwit_discard_first_words(predator,
+ predator->rlw.running_len);
+ }
+ }
+
+ literals = min_size(
+ rlw_i.rlw.literal_words,
+ rlw_j.rlw.literal_words);
+
+ if (literals) {
+ size_t k;
+
+ for (k = 0; k < literals; ++k) {
+ ewah_add(out,
+ rlw_i.buffer[rlw_i.literal_word_start + k] &
+ rlw_j.buffer[rlw_j.literal_word_start + k]
+ );
+ }
+
+ rlwit_discard_first_words(&rlw_i, literals);
+ rlwit_discard_first_words(&rlw_j, literals);
+ }
+ }
+
+ if (rlwit_word_size(&rlw_i) > 0)
+ rlwit_discharge_empty(&rlw_i, out);
+ else
+ rlwit_discharge_empty(&rlw_j, out);
+
+ out->bit_size = max_size(ewah_i->bit_size, ewah_j->bit_size);
+}
+
+void ewah_and_not(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out)
+{
+ struct rlw_iterator rlw_i;
+ struct rlw_iterator rlw_j;
+ size_t literals;
+
+ rlwit_init(&rlw_i, ewah_i);
+ rlwit_init(&rlw_j, ewah_j);
+
+ while (rlwit_word_size(&rlw_i) > 0 && rlwit_word_size(&rlw_j) > 0) {
+ while (rlw_i.rlw.running_len > 0 || rlw_j.rlw.running_len > 0) {
+ struct rlw_iterator *prey, *predator;
+
+ if (rlw_i.rlw.running_len < rlw_j.rlw.running_len) {
+ prey = &rlw_i;
+ predator = &rlw_j;
+ } else {
+ prey = &rlw_j;
+ predator = &rlw_i;
+ }
+
+ if ((predator->rlw.running_bit && prey == &rlw_i) ||
+ (!predator->rlw.running_bit && prey != &rlw_i)) {
+ ewah_add_empty_words(out, 0,
+ predator->rlw.running_len);
+ rlwit_discard_first_words(prey,
+ predator->rlw.running_len);
+ rlwit_discard_first_words(predator,
+ predator->rlw.running_len);
+ } else {
+ size_t index;
+ int negate_words;
+
+ negate_words = (&rlw_i != prey);
+ index = rlwit_discharge(prey, out,
+ predator->rlw.running_len, negate_words);
+ ewah_add_empty_words(out, negate_words,
+ predator->rlw.running_len - index);
+ rlwit_discard_first_words(predator,
+ predator->rlw.running_len);
+ }
+ }
+
+ literals = min_size(
+ rlw_i.rlw.literal_words,
+ rlw_j.rlw.literal_words);
+
+ if (literals) {
+ size_t k;
+
+ for (k = 0; k < literals; ++k) {
+ ewah_add(out,
+ rlw_i.buffer[rlw_i.literal_word_start + k] &
+ ~(rlw_j.buffer[rlw_j.literal_word_start + k])
+ );
+ }
+
+ rlwit_discard_first_words(&rlw_i, literals);
+ rlwit_discard_first_words(&rlw_j, literals);
+ }
+ }
+
+ if (rlwit_word_size(&rlw_i) > 0)
+ rlwit_discharge(&rlw_i, out, ~0, 0);
+ else
+ rlwit_discharge_empty(&rlw_j, out);
+
+ out->bit_size = max_size(ewah_i->bit_size, ewah_j->bit_size);
+}
+
+void ewah_or(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out)
+{
+ struct rlw_iterator rlw_i;
+ struct rlw_iterator rlw_j;
+ size_t literals;
+
+ rlwit_init(&rlw_i, ewah_i);
+ rlwit_init(&rlw_j, ewah_j);
+
+ while (rlwit_word_size(&rlw_i) > 0 && rlwit_word_size(&rlw_j) > 0) {
+ while (rlw_i.rlw.running_len > 0 || rlw_j.rlw.running_len > 0) {
+ struct rlw_iterator *prey, *predator;
+
+ if (rlw_i.rlw.running_len < rlw_j.rlw.running_len) {
+ prey = &rlw_i;
+ predator = &rlw_j;
+ } else {
+ prey = &rlw_j;
+ predator = &rlw_i;
+ }
+
+ if (predator->rlw.running_bit) {
+ ewah_add_empty_words(out, 0,
+ predator->rlw.running_len);
+ rlwit_discard_first_words(prey,
+ predator->rlw.running_len);
+ rlwit_discard_first_words(predator,
+ predator->rlw.running_len);
+ } else {
+ size_t index = rlwit_discharge(prey, out,
+ predator->rlw.running_len, 0);
+ ewah_add_empty_words(out, 0,
+ predator->rlw.running_len - index);
+ rlwit_discard_first_words(predator,
+ predator->rlw.running_len);
+ }
+ }
+
+ literals = min_size(
+ rlw_i.rlw.literal_words,
+ rlw_j.rlw.literal_words);
+
+ if (literals) {
+ size_t k;
+
+ for (k = 0; k < literals; ++k) {
+ ewah_add(out,
+ rlw_i.buffer[rlw_i.literal_word_start + k] |
+ rlw_j.buffer[rlw_j.literal_word_start + k]
+ );
+ }
+
+ rlwit_discard_first_words(&rlw_i, literals);
+ rlwit_discard_first_words(&rlw_j, literals);
+ }
+ }
+
+ if (rlwit_word_size(&rlw_i) > 0)
+ rlwit_discharge(&rlw_i, out, ~0, 0);
+ else
+ rlwit_discharge(&rlw_j, out, ~0, 0);
+
+ out->bit_size = max_size(ewah_i->bit_size, ewah_j->bit_size);
+}
+
+
+#define BITMAP_POOL_MAX 16
+static struct ewah_bitmap *bitmap_pool[BITMAP_POOL_MAX];
+static size_t bitmap_pool_size;
+
+struct ewah_bitmap *ewah_pool_new(void)
+{
+ if (bitmap_pool_size)
+ return bitmap_pool[--bitmap_pool_size];
+
+ return ewah_new();
+}
+
+void ewah_pool_free(struct ewah_bitmap *self)
+{
+ if (self == NULL)
+ return;
+
+ if (bitmap_pool_size == BITMAP_POOL_MAX ||
+ self->alloc_size == 0) {
+ ewah_free(self);
+ return;
+ }
+
+ ewah_clear(self);
+ bitmap_pool[bitmap_pool_size++] = self;
+}
+
+uint32_t ewah_checksum(struct ewah_bitmap *self)
+{
+ const uint8_t *p = (uint8_t *)self->buffer;
+ uint32_t crc = (uint32_t)self->bit_size;
+ size_t size = self->buffer_size * sizeof(eword_t);
+
+ while (size--)
+ crc = (crc << 5) - crc + (uint32_t)*p++;
+
+ return crc;
+}
diff --git a/ewah/ewah_io.c b/ewah/ewah_io.c
new file mode 100644
index 000000000..f7f700ef5
--- /dev/null
+++ b/ewah/ewah_io.c
@@ -0,0 +1,204 @@
+/**
+ * Copyright 2013, GitHub, Inc
+ * Copyright 2009-2013, Daniel Lemire, Cliff Moon,
+ * David McIntosh, Robert Becho, Google Inc. and Veronika Zenz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include "git-compat-util.h"
+#include "ewok.h"
+
+int ewah_serialize_native(struct ewah_bitmap *self, int fd)
+{
+ uint32_t write32;
+ size_t to_write = self->buffer_size * 8;
+
+ /* 32 bit -- bit size for the map */
+ write32 = (uint32_t)self->bit_size;
+ if (write(fd, &write32, 4) != 4)
+ return -1;
+
+ /** 32 bit -- number of compressed 64-bit words */
+ write32 = (uint32_t)self->buffer_size;
+ if (write(fd, &write32, 4) != 4)
+ return -1;
+
+ if (write(fd, self->buffer, to_write) != to_write)
+ return -1;
+
+ /** 32 bit -- position for the RLW */
+ write32 = self->rlw - self->buffer;
+ if (write(fd, &write32, 4) != 4)
+ return -1;
+
+ return (3 * 4) + to_write;
+}
+
+int ewah_serialize_to(struct ewah_bitmap *self,
+ int (*write_fun)(void *, const void *, size_t),
+ void *data)
+{
+ size_t i;
+ eword_t dump[2048];
+ const size_t words_per_dump = sizeof(dump) / sizeof(eword_t);
+ uint32_t bitsize, word_count, rlw_pos;
+
+ const eword_t *buffer;
+ size_t words_left;
+
+ /* 32 bit -- bit size for the map */
+ bitsize = htonl((uint32_t)self->bit_size);
+ if (write_fun(data, &bitsize, 4) != 4)
+ return -1;
+
+ /** 32 bit -- number of compressed 64-bit words */
+ word_count = htonl((uint32_t)self->buffer_size);
+ if (write_fun(data, &word_count, 4) != 4)
+ return -1;
+
+ /** 64 bit x N -- compressed words */
+ buffer = self->buffer;
+ words_left = self->buffer_size;
+
+ while (words_left >= words_per_dump) {
+ for (i = 0; i < words_per_dump; ++i, ++buffer)
+ dump[i] = htonll(*buffer);
+
+ if (write_fun(data, dump, sizeof(dump)) != sizeof(dump))
+ return -1;
+
+ words_left -= words_per_dump;
+ }
+
+ if (words_left) {
+ for (i = 0; i < words_left; ++i, ++buffer)
+ dump[i] = htonll(*buffer);
+
+ if (write_fun(data, dump, words_left * 8) != words_left * 8)
+ return -1;
+ }
+
+ /** 32 bit -- position for the RLW */
+ rlw_pos = (uint8_t*)self->rlw - (uint8_t *)self->buffer;
+ rlw_pos = htonl(rlw_pos / sizeof(eword_t));
+
+ if (write_fun(data, &rlw_pos, 4) != 4)
+ return -1;
+
+ return (3 * 4) + (self->buffer_size * 8);
+}
+
+static int write_helper(void *fd, const void *buf, size_t len)
+{
+ return write((intptr_t)fd, buf, len);
+}
+
+int ewah_serialize(struct ewah_bitmap *self, int fd)
+{
+ return ewah_serialize_to(self, write_helper, (void *)(intptr_t)fd);
+}
+
+int ewah_read_mmap(struct ewah_bitmap *self, void *map, size_t len)
+{
+ uint8_t *ptr = map;
+ size_t i;
+
+ self->bit_size = get_be32(ptr);
+ ptr += sizeof(uint32_t);
+
+ self->buffer_size = self->alloc_size = get_be32(ptr);
+ ptr += sizeof(uint32_t);
+
+ self->buffer = ewah_realloc(self->buffer,
+ self->alloc_size * sizeof(eword_t));
+
+ if (!self->buffer)
+ return -1;
+
+ /*
+ * Copy the raw data for the bitmap as a whole chunk;
+ * if we're in a little-endian platform, we'll perform
+ * the endianness conversion in a separate pass to ensure
+ * we're loading 8-byte aligned words.
+ */
+ memcpy(self->buffer, ptr, self->buffer_size * sizeof(uint64_t));
+ ptr += self->buffer_size * sizeof(uint64_t);
+
+ for (i = 0; i < self->buffer_size; ++i)
+ self->buffer[i] = ntohll(self->buffer[i]);
+
+ self->rlw = self->buffer + get_be32(ptr);
+
+ return (3 * 4) + (self->buffer_size * 8);
+}
+
+int ewah_deserialize(struct ewah_bitmap *self, int fd)
+{
+ size_t i;
+ eword_t dump[2048];
+ const size_t words_per_dump = sizeof(dump) / sizeof(eword_t);
+ uint32_t bitsize, word_count, rlw_pos;
+
+ eword_t *buffer = NULL;
+ size_t words_left;
+
+ ewah_clear(self);
+
+ /* 32 bit -- bit size for the map */
+ if (read(fd, &bitsize, 4) != 4)
+ return -1;
+
+ self->bit_size = (size_t)ntohl(bitsize);
+
+ /** 32 bit -- number of compressed 64-bit words */
+ if (read(fd, &word_count, 4) != 4)
+ return -1;
+
+ self->buffer_size = self->alloc_size = (size_t)ntohl(word_count);
+ self->buffer = ewah_realloc(self->buffer,
+ self->alloc_size * sizeof(eword_t));
+
+ if (!self->buffer)
+ return -1;
+
+ /** 64 bit x N -- compressed words */
+ buffer = self->buffer;
+ words_left = self->buffer_size;
+
+ while (words_left >= words_per_dump) {
+ if (read(fd, dump, sizeof(dump)) != sizeof(dump))
+ return -1;
+
+ for (i = 0; i < words_per_dump; ++i, ++buffer)
+ *buffer = ntohll(dump[i]);
+
+ words_left -= words_per_dump;
+ }
+
+ if (words_left) {
+ if (read(fd, dump, words_left * 8) != words_left * 8)
+ return -1;
+
+ for (i = 0; i < words_left; ++i, ++buffer)
+ *buffer = ntohll(dump[i]);
+ }
+
+ /** 32 bit -- position for the RLW */
+ if (read(fd, &rlw_pos, 4) != 4)
+ return -1;
+
+ self->rlw = self->buffer + ntohl(rlw_pos);
+ return 0;
+}
diff --git a/ewah/ewah_rlw.c b/ewah/ewah_rlw.c
new file mode 100644
index 000000000..c723f1aef
--- /dev/null
+++ b/ewah/ewah_rlw.c
@@ -0,0 +1,115 @@
+/**
+ * Copyright 2013, GitHub, Inc
+ * Copyright 2009-2013, Daniel Lemire, Cliff Moon,
+ * David McIntosh, Robert Becho, Google Inc. and Veronika Zenz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include "git-compat-util.h"
+#include "ewok.h"
+#include "ewok_rlw.h"
+
+static inline int next_word(struct rlw_iterator *it)
+{
+ if (it->pointer >= it->size)
+ return 0;
+
+ it->rlw.word = &it->buffer[it->pointer];
+ it->pointer += rlw_get_literal_words(it->rlw.word) + 1;
+
+ it->rlw.literal_words = rlw_get_literal_words(it->rlw.word);
+ it->rlw.running_len = rlw_get_running_len(it->rlw.word);
+ it->rlw.running_bit = rlw_get_run_bit(it->rlw.word);
+ it->rlw.literal_word_offset = 0;
+
+ return 1;
+}
+
+void rlwit_init(struct rlw_iterator *it, struct ewah_bitmap *from_ewah)
+{
+ it->buffer = from_ewah->buffer;
+ it->size = from_ewah->buffer_size;
+ it->pointer = 0;
+
+ next_word(it);
+
+ it->literal_word_start = rlwit_literal_words(it) +
+ it->rlw.literal_word_offset;
+}
+
+void rlwit_discard_first_words(struct rlw_iterator *it, size_t x)
+{
+ while (x > 0) {
+ size_t discard;
+
+ if (it->rlw.running_len > x) {
+ it->rlw.running_len -= x;
+ return;
+ }
+
+ x -= it->rlw.running_len;
+ it->rlw.running_len = 0;
+
+ discard = (x > it->rlw.literal_words) ? it->rlw.literal_words : x;
+
+ it->literal_word_start += discard;
+ it->rlw.literal_words -= discard;
+ x -= discard;
+
+ if (x > 0 || rlwit_word_size(it) == 0) {
+ if (!next_word(it))
+ break;
+
+ it->literal_word_start =
+ rlwit_literal_words(it) + it->rlw.literal_word_offset;
+ }
+ }
+}
+
+size_t rlwit_discharge(
+ struct rlw_iterator *it, struct ewah_bitmap *out, size_t max, int negate)
+{
+ size_t index = 0;
+
+ while (index < max && rlwit_word_size(it) > 0) {
+ size_t pd, pl = it->rlw.running_len;
+
+ if (index + pl > max)
+ pl = max - index;
+
+ ewah_add_empty_words(out, it->rlw.running_bit ^ negate, pl);
+ index += pl;
+
+ pd = it->rlw.literal_words;
+ if (pd + index > max)
+ pd = max - index;
+
+ ewah_add_dirty_words(out,
+ it->buffer + it->literal_word_start, pd, negate);
+
+ rlwit_discard_first_words(it, pd + pl);
+ index += pd;
+ }
+
+ return index;
+}
+
+void rlwit_discharge_empty(struct rlw_iterator *it, struct ewah_bitmap *out)
+{
+ while (rlwit_word_size(it) > 0) {
+ ewah_add_empty_words(out, 0, rlwit_word_size(it));
+ rlwit_discard_first_words(it, rlwit_word_size(it));
+ }
+}
diff --git a/ewah/ewok.h b/ewah/ewok.h
new file mode 100644
index 000000000..43adeb5c6
--- /dev/null
+++ b/ewah/ewok.h
@@ -0,0 +1,233 @@
+/**
+ * Copyright 2013, GitHub, Inc
+ * Copyright 2009-2013, Daniel Lemire, Cliff Moon,
+ * David McIntosh, Robert Becho, Google Inc. and Veronika Zenz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#ifndef __EWOK_BITMAP_H__
+#define __EWOK_BITMAP_H__
+
+#ifndef ewah_malloc
+# define ewah_malloc xmalloc
+#endif
+#ifndef ewah_realloc
+# define ewah_realloc xrealloc
+#endif
+#ifndef ewah_calloc
+# define ewah_calloc xcalloc
+#endif
+
+typedef uint64_t eword_t;
+#define BITS_IN_WORD (sizeof(eword_t) * 8)
+
+/**
+ * Do not use __builtin_popcountll. The GCC implementation
+ * is notoriously slow on all platforms.
+ *
+ * See: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36041
+ */
+static inline uint32_t ewah_bit_popcount64(uint64_t x)
+{
+ x = (x & 0x5555555555555555ULL) + ((x >> 1) & 0x5555555555555555ULL);
+ x = (x & 0x3333333333333333ULL) + ((x >> 2) & 0x3333333333333333ULL);
+ x = (x & 0x0F0F0F0F0F0F0F0FULL) + ((x >> 4) & 0x0F0F0F0F0F0F0F0FULL);
+ return (x * 0x0101010101010101ULL) >> 56;
+}
+
+#ifdef __GNUC__
+#define ewah_bit_ctz64(x) __builtin_ctzll(x)
+#else
+static inline int ewah_bit_ctz64(uint64_t x)
+{
+ int n = 0;
+ if ((x & 0xffffffff) == 0) { x >>= 32; n += 32; }
+ if ((x & 0xffff) == 0) { x >>= 16; n += 16; }
+ if ((x & 0xff) == 0) { x >>= 8; n += 8; }
+ if ((x & 0xf) == 0) { x >>= 4; n += 4; }
+ if ((x & 0x3) == 0) { x >>= 2; n += 2; }
+ if ((x & 0x1) == 0) { x >>= 1; n += 1; }
+ return n + !x;
+}
+#endif
+
+struct ewah_bitmap {
+ eword_t *buffer;
+ size_t buffer_size;
+ size_t alloc_size;
+ size_t bit_size;
+ eword_t *rlw;
+};
+
+typedef void (*ewah_callback)(size_t pos, void *);
+
+struct ewah_bitmap *ewah_pool_new(void);
+void ewah_pool_free(struct ewah_bitmap *self);
+
+/**
+ * Allocate a new EWAH Compressed bitmap
+ */
+struct ewah_bitmap *ewah_new(void);
+
+/**
+ * Clear all the bits in the bitmap. Does not free or resize
+ * memory.
+ */
+void ewah_clear(struct ewah_bitmap *self);
+
+/**
+ * Free all the memory of the bitmap
+ */
+void ewah_free(struct ewah_bitmap *self);
+
+int ewah_serialize_to(struct ewah_bitmap *self,
+ int (*write_fun)(void *out, const void *buf, size_t len),
+ void *out);
+int ewah_serialize(struct ewah_bitmap *self, int fd);
+int ewah_serialize_native(struct ewah_bitmap *self, int fd);
+
+int ewah_deserialize(struct ewah_bitmap *self, int fd);
+int ewah_read_mmap(struct ewah_bitmap *self, void *map, size_t len);
+int ewah_read_mmap_native(struct ewah_bitmap *self, void *map, size_t len);
+
+uint32_t ewah_checksum(struct ewah_bitmap *self);
+
+/**
+ * Logical not (bitwise negation) in-place on the bitmap
+ *
+ * This operation is linear time based on the size of the bitmap.
+ */
+void ewah_not(struct ewah_bitmap *self);
+
+/**
+ * Call the given callback with the position of every single bit
+ * that has been set on the bitmap.
+ *
+ * This is an efficient operation that does not fully decompress
+ * the bitmap.
+ */
+void ewah_each_bit(struct ewah_bitmap *self, ewah_callback callback, void *payload);
+
+/**
+ * Set a given bit on the bitmap.
+ *
+ * The bit at position `pos` will be set to true. Because of the
+ * way that the bitmap is compressed, a set bit cannot be unset
+ * later on.
+ *
+ * Furthermore, since the bitmap uses streaming compression, bits
+ * can only set incrementally.
+ *
+ * E.g.
+ * ewah_set(bitmap, 1); // ok
+ * ewah_set(bitmap, 76); // ok
+ * ewah_set(bitmap, 77); // ok
+ * ewah_set(bitmap, 8712800127); // ok
+ * ewah_set(bitmap, 25); // failed, assert raised
+ */
+void ewah_set(struct ewah_bitmap *self, size_t i);
+
+struct ewah_iterator {
+ const eword_t *buffer;
+ size_t buffer_size;
+
+ size_t pointer;
+ eword_t compressed, literals;
+ eword_t rl, lw;
+ int b;
+};
+
+/**
+ * Initialize a new iterator to run through the bitmap in uncompressed form.
+ *
+ * The iterator can be stack allocated. The underlying bitmap must not be freed
+ * before the iteration is over.
+ *
+ * E.g.
+ *
+ * struct ewah_bitmap *bitmap = ewah_new();
+ * struct ewah_iterator it;
+ *
+ * ewah_iterator_init(&it, bitmap);
+ */
+void ewah_iterator_init(struct ewah_iterator *it, struct ewah_bitmap *parent);
+
+/**
+ * Yield every single word in the bitmap in uncompressed form. This is:
+ * yield single words (32-64 bits) where each bit represents an actual
+ * bit from the bitmap.
+ *
+ * Return: true if a word was yield, false if there are no words left
+ */
+int ewah_iterator_next(eword_t *next, struct ewah_iterator *it);
+
+void ewah_or(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out);
+
+void ewah_and_not(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out);
+
+void ewah_xor(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out);
+
+void ewah_and(
+ struct ewah_bitmap *ewah_i,
+ struct ewah_bitmap *ewah_j,
+ struct ewah_bitmap *out);
+
+/**
+ * Direct word access
+ */
+size_t ewah_add_empty_words(struct ewah_bitmap *self, int v, size_t number);
+void ewah_add_dirty_words(
+ struct ewah_bitmap *self, const eword_t *buffer, size_t number, int negate);
+size_t ewah_add(struct ewah_bitmap *self, eword_t word);
+
+
+/**
+ * Uncompressed, old-school bitmap that can be efficiently compressed
+ * into an `ewah_bitmap`.
+ */
+struct bitmap {
+ eword_t *words;
+ size_t word_alloc;
+};
+
+struct bitmap *bitmap_new(void);
+void bitmap_set(struct bitmap *self, size_t pos);
+void bitmap_clear(struct bitmap *self, size_t pos);
+int bitmap_get(struct bitmap *self, size_t pos);
+void bitmap_reset(struct bitmap *self);
+void bitmap_free(struct bitmap *self);
+int bitmap_equals(struct bitmap *self, struct bitmap *other);
+int bitmap_is_subset(struct bitmap *self, struct bitmap *super);
+
+struct ewah_bitmap * bitmap_to_ewah(struct bitmap *bitmap);
+struct bitmap *ewah_to_bitmap(struct ewah_bitmap *ewah);
+
+void bitmap_and_not(struct bitmap *self, struct bitmap *other);
+void bitmap_or_ewah(struct bitmap *self, struct ewah_bitmap *other);
+void bitmap_or(struct bitmap *self, const struct bitmap *other);
+
+void bitmap_each_bit(struct bitmap *self, ewah_callback callback, void *data);
+size_t bitmap_popcount(struct bitmap *self);
+
+#endif
diff --git a/ewah/ewok_rlw.h b/ewah/ewok_rlw.h
new file mode 100644
index 000000000..63efdf969
--- /dev/null
+++ b/ewah/ewok_rlw.h
@@ -0,0 +1,114 @@
+/**
+ * Copyright 2013, GitHub, Inc
+ * Copyright 2009-2013, Daniel Lemire, Cliff Moon,
+ * David McIntosh, Robert Becho, Google Inc. and Veronika Zenz
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#ifndef __EWOK_RLW_H__
+#define __EWOK_RLW_H__
+
+#define RLW_RUNNING_BITS (sizeof(eword_t) * 4)
+#define RLW_LITERAL_BITS (sizeof(eword_t) * 8 - 1 - RLW_RUNNING_BITS)
+
+#define RLW_LARGEST_RUNNING_COUNT (((eword_t)1 << RLW_RUNNING_BITS) - 1)
+#define RLW_LARGEST_LITERAL_COUNT (((eword_t)1 << RLW_LITERAL_BITS) - 1)
+
+#define RLW_LARGEST_RUNNING_COUNT_SHIFT (RLW_LARGEST_RUNNING_COUNT << 1)
+
+#define RLW_RUNNING_LEN_PLUS_BIT (((eword_t)1 << (RLW_RUNNING_BITS + 1)) - 1)
+
+static int rlw_get_run_bit(const eword_t *word)
+{
+ return *word & (eword_t)1;
+}
+
+static inline void rlw_set_run_bit(eword_t *word, int b)
+{
+ if (b) {
+ *word |= (eword_t)1;
+ } else {
+ *word &= (eword_t)(~1);
+ }
+}
+
+static inline void rlw_xor_run_bit(eword_t *word)
+{
+ if (*word & 1) {
+ *word &= (eword_t)(~1);
+ } else {
+ *word |= (eword_t)1;
+ }
+}
+
+static inline void rlw_set_running_len(eword_t *word, eword_t l)
+{
+ *word |= RLW_LARGEST_RUNNING_COUNT_SHIFT;
+ *word &= (l << 1) | (~RLW_LARGEST_RUNNING_COUNT_SHIFT);
+}
+
+static inline eword_t rlw_get_running_len(const eword_t *word)
+{
+ return (*word >> 1) & RLW_LARGEST_RUNNING_COUNT;
+}
+
+static inline eword_t rlw_get_literal_words(const eword_t *word)
+{
+ return *word >> (1 + RLW_RUNNING_BITS);
+}
+
+static inline void rlw_set_literal_words(eword_t *word, eword_t l)
+{
+ *word |= ~RLW_RUNNING_LEN_PLUS_BIT;
+ *word &= (l << (RLW_RUNNING_BITS + 1)) | RLW_RUNNING_LEN_PLUS_BIT;
+}
+
+static inline eword_t rlw_size(const eword_t *self)
+{
+ return rlw_get_running_len(self) + rlw_get_literal_words(self);
+}
+
+struct rlw_iterator {
+ const eword_t *buffer;
+ size_t size;
+ size_t pointer;
+ size_t literal_word_start;
+
+ struct {
+ const eword_t *word;
+ int literal_words;
+ int running_len;
+ int literal_word_offset;
+ int running_bit;
+ } rlw;
+};
+
+void rlwit_init(struct rlw_iterator *it, struct ewah_bitmap *bitmap);
+void rlwit_discard_first_words(struct rlw_iterator *it, size_t x);
+size_t rlwit_discharge(
+ struct rlw_iterator *it, struct ewah_bitmap *out, size_t max, int negate);
+void rlwit_discharge_empty(struct rlw_iterator *it, struct ewah_bitmap *out);
+
+static inline size_t rlwit_word_size(struct rlw_iterator *it)
+{
+ return it->rlw.running_len + it->rlw.literal_words;
+}
+
+static inline size_t rlwit_literal_words(struct rlw_iterator *it)
+{
+ return it->pointer - it->rlw.literal_words;
+}
+
+#endif
diff --git a/fast-import.c b/fast-import.c
index 4fd18a357..fb4738d37 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -1485,14 +1485,11 @@ static int tree_content_set(
unsigned int i, n;
struct tree_entry *e;
- slash1 = strchr(p, '/');
- if (slash1)
- n = slash1 - p;
- else
- n = strlen(p);
+ slash1 = strchrnul(p, '/');
+ n = slash1 - p;
if (!n)
die("Empty path component found in input");
- if (!slash1 && !S_ISDIR(mode) && subtree)
+ if (!*slash1 && !S_ISDIR(mode) && subtree)
die("Non-directories cannot have subtrees");
if (!root->tree)
@@ -1501,7 +1498,7 @@ static int tree_content_set(
for (i = 0; i < t->entry_count; i++) {
e = t->entries[i];
if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) {
- if (!slash1) {
+ if (!*slash1) {
if (!S_ISDIR(mode)
&& e->versions[1].mode == mode
&& !hashcmp(e->versions[1].sha1, sha1))
@@ -1552,7 +1549,7 @@ static int tree_content_set(
e->versions[0].mode = 0;
hashclr(e->versions[0].sha1);
t->entries[t->entry_count++] = e;
- if (slash1) {
+ if (*slash1) {
e->tree = new_tree_content(8);
e->versions[1].mode = S_IFDIR;
tree_content_set(e, slash1 + 1, sha1, mode, subtree);
@@ -1576,11 +1573,8 @@ static int tree_content_remove(
unsigned int i, n;
struct tree_entry *e;
- slash1 = strchr(p, '/');
- if (slash1)
- n = slash1 - p;
- else
- n = strlen(p);
+ slash1 = strchrnul(p, '/');
+ n = slash1 - p;
if (!root->tree)
load_tree(root);
@@ -1594,7 +1588,7 @@ static int tree_content_remove(
for (i = 0; i < t->entry_count; i++) {
e = t->entries[i];
if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) {
- if (slash1 && !S_ISDIR(e->versions[1].mode))
+ if (*slash1 && !S_ISDIR(e->versions[1].mode))
/*
* If p names a file in some subdirectory, and a
* file or symlink matching the name of the
@@ -1602,7 +1596,7 @@ static int tree_content_remove(
* exist and need not be deleted.
*/
return 1;
- if (!slash1 || !S_ISDIR(e->versions[1].mode))
+ if (!*slash1 || !S_ISDIR(e->versions[1].mode))
goto del_entry;
if (!e->tree)
load_tree(e);
@@ -1644,11 +1638,8 @@ static int tree_content_get(
unsigned int i, n;
struct tree_entry *e;
- slash1 = strchr(p, '/');
- if (slash1)
- n = slash1 - p;
- else
- n = strlen(p);
+ slash1 = strchrnul(p, '/');
+ n = slash1 - p;
if (!n && !allow_root)
die("Empty path component found in input");
@@ -1664,7 +1655,7 @@ static int tree_content_get(
for (i = 0; i < t->entry_count; i++) {
e = t->entries[i];
if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) {
- if (!slash1)
+ if (!*slash1)
goto found_entry;
if (!S_ISDIR(e->versions[1].mode))
return 0;
diff --git a/fetch-pack.c b/fetch-pack.c
index d52de74c4..90d47da8a 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -439,7 +439,8 @@ done:
}
strbuf_release(&req_buf);
- consume_shallow_list(args, fd[0]);
+ if (!got_ready || !no_done)
+ consume_shallow_list(args, fd[0]);
while (flushes || multi_ack) {
int ack = get_ack(fd[0], result_sha1);
if (ack) {
@@ -506,7 +507,7 @@ static void filter_refs(struct fetch_pack_args *args,
next = ref->next;
if (!memcmp(ref->name, "refs/", 5) &&
- check_refname_format(ref->name + 5, 0))
+ check_refname_format(ref->name, 0))
; /* trash */
else {
while (i < nr_sought) {
@@ -947,17 +948,6 @@ static void update_shallow(struct fetch_pack_args *args,
if (!si->shallow || !si->shallow->nr)
return;
- if (alternate_shallow_file) {
- /*
- * The temporary shallow file is only useful for
- * index-pack and unpack-objects because it may
- * contain more roots than we want. Delete it.
- */
- if (*alternate_shallow_file)
- unlink(alternate_shallow_file);
- free((char *)alternate_shallow_file);
- }
-
if (args->cloning) {
/*
* remote is shallow, but this is a clone, there are
diff --git a/fsck.c b/fsck.c
index 99c049767..64bf279fd 100644
--- a/fsck.c
+++ b/fsck.c
@@ -245,6 +245,8 @@ static int fsck_tree(struct tree *item, int strict, fsck_error error_func)
static int fsck_ident(char **ident, struct object *obj, fsck_error error_func)
{
+ char *end;
+
if (**ident == '<')
return error_func(obj, FSCK_ERROR, "invalid author/committer line - missing space before email");
*ident += strcspn(*ident, "<>\n");
@@ -264,10 +266,11 @@ static int fsck_ident(char **ident, struct object *obj, fsck_error error_func)
(*ident)++;
if (**ident == '0' && (*ident)[1] != ' ')
return error_func(obj, FSCK_ERROR, "invalid author/committer line - zero-padded date");
- *ident += strspn(*ident, "0123456789");
- if (**ident != ' ')
+ if (date_overflows(strtoul(*ident, &end, 10)))
+ return error_func(obj, FSCK_ERROR, "invalid author/committer line - date causes integer overflow");
+ if (end == *ident || *end != ' ')
return error_func(obj, FSCK_ERROR, "invalid author/committer line - bad date");
- (*ident)++;
+ *ident = end + 1;
if ((**ident != '+' && **ident != '-') ||
!isdigit((*ident)[1]) ||
!isdigit((*ident)[2]) ||
@@ -287,9 +290,6 @@ static int fsck_commit(struct commit *commit, fsck_error error_func)
int parents = 0;
int err;
- if (commit->date == ULONG_MAX)
- return error_func(&commit->object, FSCK_ERROR, "invalid author/committer line");
-
if (memcmp(buffer, "tree ", 5))
return error_func(&commit->object, FSCK_ERROR, "invalid format - expected 'tree' line");
if (get_sha1_hex(buffer+5, tree_sha1) || buffer[45] != '\n')
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 24bb1ab99..d3bca1261 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -58,6 +58,9 @@ if ($repo->config_bool("interactive.singlekey")) {
Term::ReadKey->import;
$use_readkey = 1;
};
+ if (!$use_readkey) {
+ print STDERR "missing Term::ReadKey, disabling interactive.singlekey\n";
+ }
eval {
require Term::Cap;
my $termcap = Term::Cap->Tgetent;
diff --git a/git-am.sh b/git-am.sh
index bbea43075..78517f254 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -4,6 +4,7 @@
SUBDIRECTORY_OK=Yes
OPTIONS_KEEPDASHDASH=
+OPTIONS_STUCKLONG=t
OPTIONS_SPEC="\
git am [options] [(<mbox>|<Maildir>)...]
git am [options] (--continue | --skip | --abort)
@@ -37,6 +38,7 @@ abort restore the original branch and abort the patching operation.
committer-date-is-author-date lie about committer date
ignore-date use current timestamp for author date
rerere-autoupdate update the index with reused conflict resolution if possible
+S,gpg-sign? GPG-sign commits
rebasing* (internal use for git-rebase)"
. git-sh-setup
@@ -374,6 +376,7 @@ git_apply_opt=
committer_date_is_author_date=
ignore_date=
allow_rerere_autoupdate=
+gpg_sign_opt=
if test "$(git config --bool --get am.keepcr)" = true
then
@@ -413,14 +416,14 @@ it will be removed. Please do not use it anymore."
abort=t ;;
--rebasing)
rebasing=t threeway=t ;;
- --resolvemsg)
- shift; resolvemsg=$1 ;;
- --whitespace|--directory|--exclude|--include)
- git_apply_opt="$git_apply_opt $(sq "$1=$2")"; shift ;;
- -C|-p)
- git_apply_opt="$git_apply_opt $(sq "$1$2")"; shift ;;
- --patch-format)
- shift ; patch_format="$1" ;;
+ --resolvemsg=*)
+ resolvemsg="${1#--resolvemsg=}" ;;
+ --whitespace=*|--directory=*|--exclude=*|--include=*)
+ git_apply_opt="$git_apply_opt $(sq "$1")" ;;
+ -C*|-p*)
+ git_apply_opt="$git_apply_opt $(sq "$1")" ;;
+ --patch-format=*)
+ patch_format="${1#--patch-format=}" ;;
--reject|--ignore-whitespace|--ignore-space-change)
git_apply_opt="$git_apply_opt $1" ;;
--committer-date-is-author-date)
@@ -435,6 +438,10 @@ it will be removed. Please do not use it anymore."
keepcr=t ;;
--no-keep-cr)
keepcr=f ;;
+ --gpg-sign)
+ gpg_sign_opt=-S ;;
+ --gpg-sign=*)
+ gpg_sign_opt="-S${1#--gpg-sign=}" ;;
--)
shift; break ;;
*)
@@ -899,7 +906,8 @@ did you forget to use 'git add'?"
GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
export GIT_COMMITTER_DATE
fi &&
- git commit-tree $tree ${parent:+-p} $parent <"$dotest/final-commit"
+ git commit-tree ${parent:+-p} $parent ${gpg_sign_opt:+"$gpg_sign_opt"} $tree \
+ <"$dotest/final-commit"
) &&
git update-ref -m "$GIT_REFLOG_ACTION: $FIRSTLINE" HEAD $commit $parent ||
stop_here $this
diff --git a/git-bisect.sh b/git-bisect.sh
index 73b4c14d4..af4d04c3b 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -365,7 +365,7 @@ bisect_reset() {
}
case "$#" in
0) branch=$(cat "$GIT_DIR/BISECT_START") ;;
- 1) git rev-parse --quiet --verify "$1^{commit}" > /dev/null || {
+ 1) git rev-parse --quiet --verify "$1^{commit}" >/dev/null || {
invalid="$1"
die "$(eval_gettext "'\$invalid' is not a valid commit")"
}
@@ -458,13 +458,13 @@ exit code \$res from '\$command' is < 0 or >= 128" >&2
fi
# We have to use a subshell because "bisect_state" can exit.
- ( bisect_state $state > "$GIT_DIR/BISECT_RUN" )
+ ( bisect_state $state >"$GIT_DIR/BISECT_RUN" )
res=$?
cat "$GIT_DIR/BISECT_RUN"
if sane_grep "first bad commit could be any of" "$GIT_DIR/BISECT_RUN" \
- > /dev/null
+ >/dev/null
then
gettextln "bisect run cannot continue any more" >&2
exit $res
@@ -477,7 +477,7 @@ exit code \$res from '\$command' is < 0 or >= 128" >&2
exit $res
fi
- if sane_grep "is the first bad commit" "$GIT_DIR/BISECT_RUN" > /dev/null
+ if sane_grep "is the first bad commit" "$GIT_DIR/BISECT_RUN" >/dev/null
then
gettextln "bisect run success"
exit 0;
diff --git a/git-compat-util.h b/git-compat-util.h
index cbd86c37f..892032bc7 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -116,9 +116,6 @@
#include <sys/time.h>
#include <time.h>
#include <signal.h>
-#ifndef USE_WILDMATCH
-#include <fnmatch.h>
-#endif
#include <assert.h>
#include <regex.h>
#include <utime.h>
@@ -304,16 +301,7 @@ extern char *gitbasename(char *);
#include "compat/bswap.h"
-#ifdef USE_WILDMATCH
#include "wildmatch.h"
-#define FNM_PATHNAME WM_PATHNAME
-#define FNM_CASEFOLD WM_CASEFOLD
-#define FNM_NOMATCH WM_NOMATCH
-static inline int fnmatch(const char *pattern, const char *string, int flags)
-{
- return wildmatch(pattern, string, flags, NULL);
-}
-#endif
/* General helper functions */
extern void vreportf(const char *prefix, const char *err, va_list params);
@@ -351,14 +339,15 @@ extern void set_error_routine(void (*routine)(const char *err, va_list params));
extern void set_die_is_recursing_routine(int (*routine)(void));
extern int starts_with(const char *str, const char *prefix);
-extern int prefixcmp(const char *str, const char *prefix);
extern int ends_with(const char *str, const char *suffix);
-extern int suffixcmp(const char *str, const char *suffix);
static inline const char *skip_prefix(const char *str, const char *prefix)
{
- size_t len = strlen(prefix);
- return strncmp(str, prefix, len) ? NULL : str + len;
+ do {
+ if (!*prefix)
+ return str;
+ } while (*str++ == *prefix++);
+ return NULL;
}
#if defined(NO_MMAP) || defined(USE_WIN32_MMAP)
@@ -480,9 +469,15 @@ extern FILE *git_fopen(const char*, const char*);
#endif
#ifdef SNPRINTF_RETURNS_BOGUS
+#ifdef snprintf
+#undef snprintf
+#endif
#define snprintf git_snprintf
extern int git_snprintf(char *str, size_t maxsize,
const char *format, ...);
+#ifdef vsnprintf
+#undef vsnprintf
+#endif
#define vsnprintf git_vsnprintf
extern int git_vsnprintf(char *str, size_t maxsize,
const char *format, va_list ap);
diff --git a/git-difftool.perl b/git-difftool.perl
index e57d3d129..18ca61e8d 100755
--- a/git-difftool.perl
+++ b/git-difftool.perl
@@ -39,24 +39,10 @@ USAGE
sub find_worktree
{
- my ($repo) = @_;
-
# Git->repository->wc_path() does not honor changes to the working
# tree location made by $ENV{GIT_WORK_TREE} or the 'core.worktree'
# config variable.
- my $worktree;
- my $env_worktree = $ENV{GIT_WORK_TREE};
- my $core_worktree = Git::config('core.worktree');
-
- if (defined($env_worktree) and (length($env_worktree) > 0)) {
- $worktree = $env_worktree;
- } elsif (defined($core_worktree) and (length($core_worktree) > 0)) {
- $worktree = $core_worktree;
- } else {
- $worktree = $repo->wc_path();
- }
-
- return $worktree;
+ return Git::command_oneline('rev-parse', '--show-toplevel');
}
sub print_tool_help
@@ -418,7 +404,7 @@ sub dir_diff
my $rc;
my $error = 0;
my $repo = Git->repository();
- my $workdir = find_worktree($repo);
+ my $workdir = find_worktree();
my ($a, $b, $tmpdir, @worktree) =
setup_dir_diff($repo, $workdir, $symlinks);
diff --git a/git-instaweb.sh b/git-instaweb.sh
index e93a23867..4aa3eb80f 100755
--- a/git-instaweb.sh
+++ b/git-instaweb.sh
@@ -5,6 +5,7 @@
PERL='@@PERL@@'
OPTIONS_KEEPDASHDASH=
+OPTIONS_STUCKLONG=
OPTIONS_SPEC="\
git instaweb [options] (--start | --stop | --restart)
--
diff --git a/git-p4.py b/git-p4.py
index 5ea8bb8fc..cdfa2df5d 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -310,8 +310,8 @@ def split_p4_type(p4type):
#
# return the raw p4 type of a file (text, text+ko, etc)
#
-def p4_type(file):
- results = p4CmdList(["fstat", "-T", "headType", file])
+def p4_type(f):
+ results = p4CmdList(["fstat", "-T", "headType", wildcard_encode(f)])
return results[0]['headType']
#
@@ -1220,7 +1220,7 @@ class P4Submit(Command, P4UserMap):
editor = os.environ.get("P4EDITOR")
else:
editor = read_pipe("git var GIT_EDITOR").strip()
- system(editor + " " + template_file)
+ system([editor, template_file])
# If the file was not saved, prompt to see if this patch should
# be skipped. But skip this verification step if configured so.
@@ -1871,7 +1871,7 @@ class View(object):
# assume error is "... file(s) not in client view"
continue
if "clientFile" not in res:
- die("No clientFile from 'p4 where %s'" % depot_path)
+ die("No clientFile in 'p4 where' output")
if "unmap" in res:
# it will list all of them, but only one not unmap-ped
continue
@@ -2075,7 +2075,14 @@ class P4Sync(Command, P4UserMap):
# p4 print on a symlink sometimes contains "target\n";
# if it does, remove the newline
data = ''.join(contents)
- if data[-1] == '\n':
+ if not data:
+ # Some version of p4 allowed creating a symlink that pointed
+ # to nothing. This causes p4 errors when checking out such
+ # a change, and errors here too. Work around it by ignoring
+ # the bad symlink; hopefully a future change fixes it.
+ print "\nIgnoring empty symlink in %s" % file['depotFile']
+ return
+ elif data[-1] == '\n':
contents = [data[:-1]]
else:
contents = [data]
diff --git a/git-pull.sh b/git-pull.sh
index 0a5aa2c82..6cd8ebc53 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -4,7 +4,7 @@
#
# Fetch one or more remote refs and merge it/them into the current HEAD.
-USAGE='[-n | --no-stat] [--[no-]commit] [--[no-]squash] [--[no-]ff] [--[no-]rebase|--rebase=preserve] [-s strategy]... [<fetch-options>] <repo> <head>...'
+USAGE='[-n | --no-stat] [--[no-]commit] [--[no-]squash] [--[no-]ff|--ff-only] [--[no-]rebase|--rebase=preserve] [-s strategy]... [<fetch-options>] <repo> <head>...'
LONG_USAGE='Fetch one or more remote refs and integrate it/them with the current HEAD.'
SUBDIRECTORY_OK=Yes
OPTIONS_SPEC=
@@ -52,6 +52,21 @@ if test -z "$rebase"
then
rebase=$(bool_or_string_config pull.rebase)
fi
+
+# Setup default fast-forward options via `pull.ff`
+pull_ff=$(git config pull.ff)
+case "$pull_ff" in
+false)
+ no_ff=--no-ff
+ break
+ ;;
+only)
+ ff_only=--ff-only
+ break
+ ;;
+esac
+
+
dry_run=
while :
do
@@ -138,6 +153,15 @@ do
--no-verify-signatures)
verify_signatures=--no-verify-signatures
;;
+ --gpg-sign|-S)
+ gpg_sign_args=-S
+ ;;
+ --gpg-sign=*)
+ gpg_sign_args=$(git rev-parse --sq-quote "-S${1#--gpg-sign=}")
+ ;;
+ -S*)
+ gpg_sign_args=$(git rev-parse --sq-quote "$1")
+ ;;
--d|--dr|--dry|--dry-|--dry-r|--dry-ru|--dry-run)
dry_run=--dry-run
;;
@@ -305,11 +329,13 @@ merge_name=$(git fmt-merge-msg $log_arg <"$GIT_DIR/FETCH_HEAD") || exit
case "$rebase" in
true)
eval="git-rebase $diffstat $strategy_args $merge_args $rebase_args $verbosity"
+ eval="$eval $gpg_sign_args"
eval="$eval --onto $merge_head ${oldremoteref:-$merge_head}"
;;
*)
eval="git-merge $diffstat $no_commit $verify_signatures $edit $squash $no_ff $ff_only"
- eval="$eval $log_arg $strategy_args $merge_args $verbosity $progress"
+ eval="$eval $log_arg $strategy_args $merge_args $verbosity $progress"
+ eval="$eval $gpg_sign_args"
eval="$eval \"\$merge_name\" HEAD $merge_head"
;;
esac
diff --git a/git-quiltimport.sh b/git-quiltimport.sh
index 8e17525dd..167d79fea 100755
--- a/git-quiltimport.sh
+++ b/git-quiltimport.sh
@@ -1,5 +1,6 @@
#!/bin/sh
OPTIONS_KEEPDASHDASH=
+OPTIONS_STUCKLONG=
OPTIONS_SPEC="\
git quiltimport [options]
--
diff --git a/git-rebase--am.sh b/git-rebase--am.sh
index a4f683a5d..df46f4ca9 100644
--- a/git-rebase--am.sh
+++ b/git-rebase--am.sh
@@ -6,7 +6,8 @@
case "$action" in
continue)
- git am --resolved --resolvemsg="$resolvemsg" &&
+ git am --resolved --resolvemsg="$resolvemsg" \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} &&
move_to_original_branch
return
;;
@@ -26,7 +27,7 @@ then
# empty commits and even if it didn't the format doesn't really lend
# itself well to recording empty patches. fortunately, cherry-pick
# makes this easy
- git cherry-pick --allow-empty "$revisions"
+ git cherry-pick ${gpg_sign_opt:+"$gpg_sign_opt"} --allow-empty "$revisions"
ret=$?
else
rm -f "$GIT_DIR/rebased-patches"
@@ -60,7 +61,8 @@ else
return $?
fi
- git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" <"$GIT_DIR/rebased-patches"
+ git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} <"$GIT_DIR/rebased-patches"
ret=$?
rm -f "$GIT_DIR/rebased-patches"
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 43c19e082..a1adae831 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -179,9 +179,10 @@ exit_with_patch () {
echo "$1" > "$state_dir"/stopped-sha
make_patch $1
git rev-parse --verify HEAD > "$amend"
+ gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
warn "You can amend the commit now, with"
warn
- warn " git commit --amend"
+ warn " git commit --amend $gpg_sign_opt_quoted"
warn
warn "Once you are satisfied with your changes, run"
warn
@@ -248,7 +249,9 @@ pick_one () {
test -d "$rewritten" &&
pick_one_preserving_merges "$@" && return
- output eval git cherry-pick "$strategy_args" $empty_args $ff "$@"
+ output eval git cherry-pick \
+ ${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")} \
+ "$strategy_args" $empty_args $ff "$@"
}
pick_one_preserving_merges () {
@@ -351,7 +354,8 @@ pick_one_preserving_merges () {
new_parents=${new_parents# $first_parent}
merge_args="--no-log --no-ff"
if ! do_with_author output eval \
- 'git merge $merge_args $strategy_args -m "$msg_content" $new_parents'
+ 'git merge ${gpg_sign_opt:+"$gpg_sign_opt"} \
+ $merge_args $strategy_args -m "$msg_content" $new_parents'
then
printf "%s\n" "$msg_content" > "$GIT_DIR"/MERGE_MSG
die_with_patch $sha1 "Error redoing merge $sha1"
@@ -359,7 +363,9 @@ pick_one_preserving_merges () {
echo "$sha1 $(git rev-parse HEAD^0)" >> "$rewritten_list"
;;
*)
- output eval git cherry-pick "$strategy_args" "$@" ||
+ output eval git cherry-pick \
+ ${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")} \
+ "$strategy_args" "$@" ||
die_with_patch $sha1 "Could not pick $sha1"
;;
esac
@@ -470,7 +476,8 @@ do_pick () {
--no-post-rewrite -n -q -C $1 &&
pick_one -n $1 &&
git commit --allow-empty --allow-empty-message \
- --amend --no-post-rewrite -n -q -C $1 ||
+ --amend --no-post-rewrite -n -q -C $1 \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} ||
die_with_patch $1 "Could not apply $1... $2"
else
pick_one $1 ||
@@ -497,7 +504,7 @@ do_next () {
mark_action_done
do_pick $sha1 "$rest"
- git commit --amend --no-post-rewrite || {
+ git commit --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} || {
warn "Could not amend commit after successfully picking $sha1... $rest"
warn "This is most likely due to an empty commit message, or the pre-commit hook"
warn "failed. If the pre-commit hook failed, you may need to resolve the issue before"
@@ -542,19 +549,22 @@ do_next () {
squash|s|fixup|f)
# This is an intermediate commit; its message will only be
# used in case of trouble. So use the long version:
- do_with_author output git commit --amend --no-verify -F "$squash_msg" ||
+ do_with_author output git commit --amend --no-verify -F "$squash_msg" \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} ||
die_failed_squash $sha1 "$rest"
;;
*)
# This is the final command of this squash/fixup group
if test -f "$fixup_msg"
then
- do_with_author git commit --amend --no-verify -F "$fixup_msg" ||
+ do_with_author git commit --amend --no-verify -F "$fixup_msg" \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} ||
die_failed_squash $sha1 "$rest"
else
cp "$squash_msg" "$GIT_DIR"/SQUASH_MSG || exit
rm -f "$GIT_DIR"/MERGE_MSG
- do_with_author git commit --amend --no-verify -F "$GIT_DIR"/SQUASH_MSG -e ||
+ do_with_author git commit --amend --no-verify -F "$GIT_DIR"/SQUASH_MSG -e \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} ||
die_failed_squash $sha1 "$rest"
fi
rm -f "$squash_msg" "$fixup_msg"
@@ -819,14 +829,15 @@ continue)
else
if ! test -f "$author_script"
then
+ gpg_sign_opt_quoted=${gpg_sign_opt:+$(git rev-parse --sq-quote "$gpg_sign_opt")}
die "You have staged changes in your working tree. If these changes are meant to be
squashed into the previous commit, run:
- git commit --amend
+ git commit --amend $gpg_sign_opt_quoted
If they are meant to go into a new commit, run:
- git commit
+ git commit $gpg_sign_opt_quoted
In both case, once you're done, continue with:
@@ -842,10 +853,12 @@ In both case, once you're done, continue with:
die "\
You have uncommitted changes in your working tree. Please, commit them
first and then run 'git rebase --continue' again."
- do_with_author git commit --amend --no-verify -F "$msg" -e ||
+ do_with_author git commit --amend --no-verify -F "$msg" -e \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
else
- do_with_author git commit --no-verify -F "$msg" -e ||
+ do_with_author git commit --no-verify -F "$msg" -e \
+ ${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
fi
fi
diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh
index e7d96de9a..5381857c5 100644
--- a/git-rebase--merge.sh
+++ b/git-rebase--merge.sh
@@ -27,7 +27,7 @@ continue_merge () {
cmt=`cat "$state_dir/current"`
if ! git diff-index --quiet --ignore-submodules HEAD --
then
- if ! git commit --no-verify -C "$cmt"
+ if ! git commit ${gpg_sign_opt:+"$gpg_sign_opt"} --no-verify -C "$cmt"
then
echo "Commit failed, please do not call \"git commit\""
echo "directly, but instead do one of the following: "
diff --git a/git-rebase.sh b/git-rebase.sh
index 8a3efa298..5f6732bf3 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -5,6 +5,7 @@
SUBDIRECTORY_OK=Yes
OPTIONS_KEEPDASHDASH=
+OPTIONS_STUCKLONG=t
OPTIONS_SPEC="\
git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
@@ -36,6 +37,7 @@ ignore-date! passed to 'git am'
whitespace=! passed to 'git apply'
ignore-whitespace! passed to 'git apply'
C=! passed to 'git apply'
+S,gpg-sign? GPG-sign commits
Actions:
continue! continue
abort! abort and check out the original branch
@@ -84,6 +86,7 @@ preserve_merges=
autosquash=
keep_empty=
test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
+gpg_sign_opt=
read_basic_state () {
test -f "$state_dir/head-name" &&
@@ -106,6 +109,8 @@ read_basic_state () {
strategy_opts="$(cat "$state_dir"/strategy_opts)"
test -f "$state_dir"/allow_rerere_autoupdate &&
allow_rerere_autoupdate="$(cat "$state_dir"/allow_rerere_autoupdate)"
+ test -f "$state_dir"/gpg_sign_opt &&
+ gpg_sign_opt="$(cat "$state_dir"/gpg_sign_opt)"
}
write_basic_state () {
@@ -119,6 +124,7 @@ write_basic_state () {
"$state_dir"/strategy_opts
test -n "$allow_rerere_autoupdate" && echo "$allow_rerere_autoupdate" > \
"$state_dir"/allow_rerere_autoupdate
+ test -n "$gpg_sign_opt" && echo "$gpg_sign_opt" > "$state_dir"/gpg_sign_opt
}
output () {
@@ -236,23 +242,19 @@ do
test $total_argc -eq 2 || usage
action=${1##--}
;;
- --onto)
- test 2 -le "$#" || usage
- onto="$2"
- shift
+ --onto=*)
+ onto="${1#--onto=}"
;;
- -x)
- test 2 -le "$#" || usage
- cmd="${cmd}exec $2${LF}"
- shift
+ --exec=*)
+ cmd="${cmd}exec ${1#--exec=}${LF}"
;;
- -i)
+ --interactive)
interactive_rebase=explicit
;;
- -k)
+ --keep-empty)
keep_empty=yes
;;
- -p)
+ --preserve-merges)
preserve_merges=t
test -z "$interactive_rebase" && interactive_rebase=implied
;;
@@ -268,21 +270,19 @@ do
--no-fork-point)
fork_point=
;;
- -M|-m)
+ --merge)
do_merge=t
;;
- -X)
- shift
- strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--$1")"
+ --strategy-option=*)
+ strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}")"
do_merge=t
test -z "$strategy" && strategy=recursive
;;
- -s)
- shift
- strategy="$1"
+ --strategy=*)
+ strategy="${1#--strategy=}"
do_merge=t
;;
- -n)
+ --no-stat)
diffstat=
;;
--stat)
@@ -291,21 +291,20 @@ do
--autostash)
autostash=true
;;
- -v)
+ --verbose)
verbose=t
diffstat=t
GIT_QUIET=
;;
- -q)
+ --quiet)
GIT_QUIET=t
git_am_opt="$git_am_opt -q"
verbose=
diffstat=
;;
- --whitespace)
- shift
- git_am_opt="$git_am_opt --whitespace=$1"
- case "$1" in
+ --whitespace=*)
+ git_am_opt="$git_am_opt --whitespace=${1#--whitespace=}"
+ case "${1#--whitespace=}" in
fix|strip)
force_rebase=t
;;
@@ -318,19 +317,24 @@ do
git_am_opt="$git_am_opt $1"
force_rebase=t
;;
- -C)
- shift
- git_am_opt="$git_am_opt -C$1"
+ -C*)
+ git_am_opt="$git_am_opt $1"
;;
--root)
rebase_root=t
;;
- -f|--no-ff)
+ --force-rebase|--no-ff)
force_rebase=t
;;
--rerere-autoupdate|--no-rerere-autoupdate)
allow_rerere_autoupdate="$1"
;;
+ --gpg-sign)
+ gpg_sign_opt=-S
+ ;;
+ --gpg-sign=*)
+ gpg_sign_opt="-S${1#--gpg-sign=}"
+ ;;
--)
shift
break
diff --git a/git-remote-testgit.sh b/git-remote-testgit.sh
index 6d2f282d3..1c006a051 100755
--- a/git-remote-testgit.sh
+++ b/git-remote-testgit.sh
@@ -15,6 +15,8 @@ test -z "$refspec" && prefix="refs"
export GIT_DIR="$url/.git"
+force=
+
mkdir -p "$dir"
if test -z "$GIT_REMOTE_TESTGIT_NO_MARKS"
@@ -39,6 +41,7 @@ do
fi
test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
test -n "$GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE" && echo "no-private-update"
+ echo 'option'
echo
;;
list)
@@ -93,6 +96,7 @@ do
before=$(git for-each-ref --format=' %(refname) %(objectname) ')
git fast-import \
+ ${force:+--force} \
${testgitmarks:+"--import-marks=$testgitmarks"} \
${testgitmarks:+"--export-marks=$testgitmarks"} \
--quiet
@@ -115,6 +119,20 @@ do
echo
;;
+ option\ *)
+ read cmd opt val <<-EOF
+ $line
+ EOF
+ case $opt in
+ force)
+ test $val = "true" && force="true" || force=
+ echo "ok"
+ ;;
+ *)
+ echo "unsupported"
+ ;;
+ esac
+ ;;
'')
exit
;;
diff --git a/git-request-pull.sh b/git-request-pull.sh
index b67513a2e..5c1599752 100755
--- a/git-request-pull.sh
+++ b/git-request-pull.sh
@@ -9,6 +9,7 @@ LONG_USAGE='Summarizes the changes between two commits to the standard output,
and includes the given URL in the generated summary.'
SUBDIRECTORY_OK='Yes'
OPTIONS_KEEPDASHDASH=
+OPTIONS_STUCKLONG=
OPTIONS_SPEC='git request-pull [options] start url [end]
--
p show patch text as well
diff --git a/git-send-email.perl b/git-send-email.perl
index 2016d9c61..fdb0029b5 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -1095,7 +1095,8 @@ sub ssl_verify_params {
}
if (!defined $smtp_ssl_cert_path) {
- $smtp_ssl_cert_path = "/etc/ssl/certs";
+ # use the OpenSSL defaults
+ return (SSL_verify_mode => SSL_VERIFY_PEER());
}
if ($smtp_ssl_cert_path eq "") {
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index fffa3c72d..5f28b32dc 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -72,6 +72,8 @@ if test -n "$OPTIONS_SPEC"; then
parseopt_extra=
[ -n "$OPTIONS_KEEPDASHDASH" ] &&
parseopt_extra="--keep-dashdash"
+ [ -n "$OPTIONS_STUCKLONG" ] &&
+ parseopt_extra="$parseopt_extra --stuck-long"
eval "$(
echo "$OPTIONS_SPEC" |
diff --git a/git-stash.sh b/git-stash.sh
index f0a94abf1..4798bcf0e 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -512,8 +512,14 @@ apply_stash () {
pop_stash() {
assert_stash_ref "$@"
- apply_stash "$@" &&
- drop_stash "$@"
+ if apply_stash "$@"
+ then
+ drop_stash "$@"
+ else
+ status=$?
+ say "The stash is kept in case you need it again."
+ exit $status
+ fi
}
drop_stash () {
diff --git a/git-submodule.sh b/git-submodule.sh
index 4a3008776..6135cfa91 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -9,7 +9,7 @@ USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <re
or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
or: $dashless [--quiet] init [--] [<path>...]
or: $dashless [--quiet] deinit [-f|--force] [--] <path>...
- or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
+ or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--reference <repository>] [--recursive] [--] [<path>...]
or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
or: $dashless [--quiet] foreach [--recursive] <command>
or: $dashless [--quiet] sync [--recursive] [--] [<path>...]"
@@ -241,6 +241,15 @@ module_name()
#
# Clone a submodule
#
+# $1 = submodule path
+# $2 = submodule name
+# $3 = URL to clone
+# $4 = reference repository to reuse (empty for independent)
+# $5 = depth argument for shallow clones (empty for deep)
+# $6 = (remote-tracking) starting point for the local branch (empty for HEAD)
+# $7 = local branch to create (empty for a detached HEAD, unless $6 is
+# also empty, in which case the local branch is left unchanged)
+#
# Prior to calling, cmd_update checks that a possibly existing
# path is not a git repository.
# Likewise, cmd_add checks that path does not exist at all,
@@ -253,6 +262,8 @@ module_clone()
url=$3
reference="$4"
depth="$5"
+ start_point="$6"
+ local_branch="$7"
quiet=
if test -n "$GIT_QUIET"
then
@@ -306,7 +317,16 @@ module_clone()
echo "gitdir: $rel/$a" >"$sm_path/.git"
rel=$(echo $a | sed -e 's|[^/][^/]*|..|g')
- (clear_local_git_env; cd "$sm_path" && GIT_WORK_TREE=. git config core.worktree "$rel/$b")
+ (
+ clear_local_git_env
+ cd "$sm_path" &&
+ GIT_WORK_TREE=. git config core.worktree "$rel/$b" &&
+ # ash fails to wordsplit ${local_branch:+-B "$local_branch"...}
+ case "$local_branch" in
+ '') git checkout -f -q ${start_point:+"$start_point"} ;;
+ ?*) git checkout -f -q -B "$local_branch" ${start_point:+"$start_point"} ;;
+ esac
+ ) || die "$(eval_gettext "Unable to setup cloned submodule '\$sm_path'")"
}
isnumber()
@@ -469,16 +489,15 @@ Use -f if you really want to add it." >&2
echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
fi
fi
- module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" || exit
- (
- clear_local_git_env
- cd "$sm_path" &&
- # ash fails to wordsplit ${branch:+-b "$branch"...}
- case "$branch" in
- '') git checkout -f -q ;;
- ?*) git checkout -f -q -B "$branch" "origin/$branch" ;;
- esac
- ) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
+ if test -n "$branch"
+ then
+ start_point="origin/$branch"
+ local_branch="$branch"
+ else
+ start_point=""
+ local_branch=""
+ fi
+ module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" "$start_point" "$local_branch" || exit
fi
git config submodule."$sm_name".url "$realrepo"
@@ -799,32 +818,35 @@ cmd_update()
fi
name=$(module_name "$sm_path") || exit
url=$(git config submodule."$name".url)
- branch=$(get_submodule_config "$name" branch master)
+ config_branch=$(get_submodule_config "$name" branch)
+ branch="${config_branch:-master}"
+ local_branch="$branch"
if ! test -z "$update"
then
update_module=$update
else
update_module=$(git config submodule."$name".update)
- case "$update_module" in
- '')
- ;; # Unset update mode
- checkout | rebase | merge | none)
- ;; # Known update modes
- !*)
- ;; # Custom update command
- *)
- die "$(eval_gettext "Invalid update mode '$update_module' for submodule '$name'")"
- ;;
- esac
+ if test -z "$update_module"
+ then
+ update_module="checkout"
+ fi
fi
displaypath=$(relative_path "$prefix$sm_path")
- if test "$update_module" = "none"
- then
+ case "$update_module" in
+ none)
echo "Skipping submodule '$displaypath'"
continue
- fi
+ ;;
+ checkout)
+ local_branch=""
+ ;;
+ rebase | merge | !*)
+ ;;
+ *)
+ die "$(eval_gettext "Invalid update mode '$update_module' for submodule '$name'")"
+ esac
if test -z "$url"
then
@@ -838,7 +860,8 @@ Maybe you want to use 'update --init'?")"
if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
then
- module_clone "$sm_path" "$name" "$url" "$reference" "$depth" || exit
+ start_point="origin/${branch}"
+ module_clone "$sm_path" "$name" "$url" "$reference" "$depth" "$start_point" "$local_branch" || exit
cloned_modules="$cloned_modules;$name"
subsha1=
else
@@ -884,11 +907,16 @@ Maybe you want to use 'update --init'?")"
case ";$cloned_modules;" in
*";$name;"*)
# then there is no local change to integrate
- update_module= ;;
+ update_module='!git reset --hard -q'
esac
must_die_on_failure=
case "$update_module" in
+ checkout)
+ command="git checkout $subforce -q"
+ die_msg="$(eval_gettext "Unable to checkout '\$sha1' in submodule path '\$displaypath'")"
+ say_msg="$(eval_gettext "Submodule path '\$displaypath': checked out '\$sha1'")"
+ ;;
rebase)
command="git rebase"
die_msg="$(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$displaypath'")"
@@ -908,10 +936,7 @@ Maybe you want to use 'update --init'?")"
must_die_on_failure=yes
;;
*)
- command="git checkout $subforce -q"
- die_msg="$(eval_gettext "Unable to checkout '\$sha1' in submodule path '\$displaypath'")"
- say_msg="$(eval_gettext "Submodule path '\$displaypath': checked out '\$sha1'")"
- ;;
+ die "$(eval_gettext "Invalid update mode '$update_module' for submodule '$name'")"
esac
if (clear_local_git_env; cd "$sm_path" && $command "$sha1")
diff --git a/git.c b/git.c
index 7cf2953ef..9efd1a3ec 100644
--- a/git.c
+++ b/git.c
@@ -78,7 +78,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
if (envchanged)
*envchanged = 1;
} else if (!strcmp(cmd, "--no-replace-objects")) {
- read_replace_refs = 0;
+ check_replace_refs = 0;
setenv(NO_REPLACE_OBJECTS_ENVIRONMENT, "1", 1);
if (envchanged)
*envchanged = 1;
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 3bc0f0b5c..79057b7d0 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -7094,7 +7094,7 @@ sub git_blob {
git_print_page_path($file_name, "blob", $hash_base);
print "<div class=\"page_body\">\n";
if ($mimetype =~ m!^image/!) {
- print qq!<img type="!.esc_attr($mimetype).qq!"!;
+ print qq!<img class="blob" type="!.esc_attr($mimetype).qq!"!;
if ($file_name) {
print qq! alt="!.esc_attr($file_name).qq!" title="!.esc_attr($file_name).qq!"!;
}
diff --git a/gitweb/static/gitweb.css b/gitweb/static/gitweb.css
index 3b4d83382..321260103 100644
--- a/gitweb/static/gitweb.css
+++ b/gitweb/static/gitweb.css
@@ -32,6 +32,11 @@ img.avatar {
vertical-align: middle;
}
+img.blob {
+ max-height: 100%;
+ max-width: 100%;
+}
+
a.list img.avatar {
border-style: none;
}
diff --git a/grep.c b/grep.c
index c66803473..4aef0a69d 100644
--- a/grep.c
+++ b/grep.c
@@ -1562,8 +1562,11 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
*/
if (opt->count && count) {
char buf[32];
- output_color(opt, gs->name, strlen(gs->name), opt->color_filename);
- output_sep(opt, ':');
+ if (opt->pathname) {
+ output_color(opt, gs->name, strlen(gs->name),
+ opt->color_filename);
+ output_sep(opt, ':');
+ }
snprintf(buf, sizeof(buf), "%u\n", count);
opt->output(opt, buf, strlen(buf));
return 1;
@@ -1650,7 +1653,7 @@ void grep_source_init(struct grep_source *gs, enum grep_source_type type,
break;
case GREP_SOURCE_SHA1:
gs->identifier = xmalloc(20);
- memcpy(gs->identifier, identifier, 20);
+ hashcpy(gs->identifier, identifier);
break;
case GREP_SOURCE_BUF:
gs->identifier = NULL;
diff --git a/hash.c b/hash.c
deleted file mode 100644
index 749ecfe48..000000000
--- a/hash.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Some generic hashing helpers.
- */
-#include "cache.h"
-#include "hash.h"
-
-/*
- * Look up a hash entry in the hash table. Return the pointer to
- * the existing entry, or the empty slot if none existed. The caller
- * can then look at the (*ptr) to see whether it existed or not.
- */
-static struct hash_table_entry *lookup_hash_entry(unsigned int hash, const struct hash_table *table)
-{
- unsigned int size = table->size, nr = hash % size;
- struct hash_table_entry *array = table->array;
-
- while (array[nr].ptr) {
- if (array[nr].hash == hash)
- break;
- nr++;
- if (nr >= size)
- nr = 0;
- }
- return array + nr;
-}
-
-
-/*
- * Insert a new hash entry pointer into the table.
- *
- * If that hash entry already existed, return the pointer to
- * the existing entry (and the caller can create a list of the
- * pointers or do anything else). If it didn't exist, return
- * NULL (and the caller knows the pointer has been inserted).
- */
-static void **insert_hash_entry(unsigned int hash, void *ptr, struct hash_table *table)
-{
- struct hash_table_entry *entry = lookup_hash_entry(hash, table);
-
- if (!entry->ptr) {
- entry->ptr = ptr;
- entry->hash = hash;
- table->nr++;
- return NULL;
- }
- return &entry->ptr;
-}
-
-static void grow_hash_table(struct hash_table *table)
-{
- unsigned int i;
- unsigned int old_size = table->size, new_size;
- struct hash_table_entry *old_array = table->array, *new_array;
-
- new_size = alloc_nr(old_size);
- new_array = xcalloc(sizeof(struct hash_table_entry), new_size);
- table->size = new_size;
- table->array = new_array;
- table->nr = 0;
- for (i = 0; i < old_size; i++) {
- unsigned int hash = old_array[i].hash;
- void *ptr = old_array[i].ptr;
- if (ptr)
- insert_hash_entry(hash, ptr, table);
- }
- free(old_array);
-}
-
-void *lookup_hash(unsigned int hash, const struct hash_table *table)
-{
- if (!table->array)
- return NULL;
- return lookup_hash_entry(hash, table)->ptr;
-}
-
-void **insert_hash(unsigned int hash, void *ptr, struct hash_table *table)
-{
- unsigned int nr = table->nr;
- if (nr >= table->size/2)
- grow_hash_table(table);
- return insert_hash_entry(hash, ptr, table);
-}
-
-int for_each_hash(const struct hash_table *table, int (*fn)(void *, void *), void *data)
-{
- int sum = 0;
- unsigned int i;
- unsigned int size = table->size;
- struct hash_table_entry *array = table->array;
-
- for (i = 0; i < size; i++) {
- void *ptr = array->ptr;
- array++;
- if (ptr) {
- int val = fn(ptr, data);
- if (val < 0)
- return val;
- sum += val;
- }
- }
- return sum;
-}
-
-void free_hash(struct hash_table *table)
-{
- free(table->array);
- table->array = NULL;
- table->size = 0;
- table->nr = 0;
-}
diff --git a/hash.h b/hash.h
deleted file mode 100644
index 1d43ac0ba..000000000
--- a/hash.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef HASH_H
-#define HASH_H
-
-/*
- * These are some simple generic hash table helper functions.
- * Not necessarily suitable for all users, but good for things
- * where you want to just keep track of a list of things, and
- * have a good hash to use on them.
- *
- * It keeps the hash table at roughly 50-75% free, so the memory
- * cost of the hash table itself is roughly
- *
- * 3 * 2*sizeof(void *) * nr_of_objects
- *
- * bytes.
- *
- * FIXME: on 64-bit architectures, we waste memory. It would be
- * good to have just 32-bit pointers, requiring a special allocator
- * for hashed entries or something.
- */
-struct hash_table_entry {
- unsigned int hash;
- void *ptr;
-};
-
-struct hash_table {
- unsigned int size, nr;
- struct hash_table_entry *array;
-};
-
-extern void *lookup_hash(unsigned int hash, const struct hash_table *table);
-extern void **insert_hash(unsigned int hash, void *ptr, struct hash_table *table);
-extern int for_each_hash(const struct hash_table *table, int (*fn)(void *, void *), void *data);
-extern void free_hash(struct hash_table *table);
-
-static inline void init_hash(struct hash_table *table)
-{
- table->size = 0;
- table->nr = 0;
- table->array = NULL;
-}
-
-static inline void preallocate_hash(struct hash_table *table, unsigned int elts)
-{
- assert(table->size == 0 && table->nr == 0 && table->array == NULL);
- table->size = elts * 2;
- table->array = xcalloc(sizeof(struct hash_table_entry), table->size);
-}
-
-#endif
diff --git a/hashmap.c b/hashmap.c
new file mode 100644
index 000000000..d1b8056d8
--- /dev/null
+++ b/hashmap.c
@@ -0,0 +1,228 @@
+/*
+ * Generic implementation of hash-based key value mappings.
+ */
+#include "cache.h"
+#include "hashmap.h"
+
+#define FNV32_BASE ((unsigned int) 0x811c9dc5)
+#define FNV32_PRIME ((unsigned int) 0x01000193)
+
+unsigned int strhash(const char *str)
+{
+ unsigned int c, hash = FNV32_BASE;
+ while ((c = (unsigned char) *str++))
+ hash = (hash * FNV32_PRIME) ^ c;
+ return hash;
+}
+
+unsigned int strihash(const char *str)
+{
+ unsigned int c, hash = FNV32_BASE;
+ while ((c = (unsigned char) *str++)) {
+ if (c >= 'a' && c <= 'z')
+ c -= 'a' - 'A';
+ hash = (hash * FNV32_PRIME) ^ c;
+ }
+ return hash;
+}
+
+unsigned int memhash(const void *buf, size_t len)
+{
+ unsigned int hash = FNV32_BASE;
+ unsigned char *ucbuf = (unsigned char *) buf;
+ while (len--) {
+ unsigned int c = *ucbuf++;
+ hash = (hash * FNV32_PRIME) ^ c;
+ }
+ return hash;
+}
+
+unsigned int memihash(const void *buf, size_t len)
+{
+ unsigned int hash = FNV32_BASE;
+ unsigned char *ucbuf = (unsigned char *) buf;
+ while (len--) {
+ unsigned int c = *ucbuf++;
+ if (c >= 'a' && c <= 'z')
+ c -= 'a' - 'A';
+ hash = (hash * FNV32_PRIME) ^ c;
+ }
+ return hash;
+}
+
+#define HASHMAP_INITIAL_SIZE 64
+/* grow / shrink by 2^2 */
+#define HASHMAP_RESIZE_BITS 2
+/* load factor in percent */
+#define HASHMAP_LOAD_FACTOR 80
+
+static void alloc_table(struct hashmap *map, unsigned int size)
+{
+ map->tablesize = size;
+ map->table = xcalloc(size, sizeof(struct hashmap_entry *));
+
+ /* calculate resize thresholds for new size */
+ map->grow_at = (unsigned int) ((uint64_t) size * HASHMAP_LOAD_FACTOR / 100);
+ if (size <= HASHMAP_INITIAL_SIZE)
+ map->shrink_at = 0;
+ else
+ /*
+ * The shrink-threshold must be slightly smaller than
+ * (grow-threshold / resize-factor) to prevent erratic resizing,
+ * thus we divide by (resize-factor + 1).
+ */
+ map->shrink_at = map->grow_at / ((1 << HASHMAP_RESIZE_BITS) + 1);
+}
+
+static inline int entry_equals(const struct hashmap *map,
+ const struct hashmap_entry *e1, const struct hashmap_entry *e2,
+ const void *keydata)
+{
+ return (e1 == e2) || (e1->hash == e2->hash && !map->cmpfn(e1, e2, keydata));
+}
+
+static inline unsigned int bucket(const struct hashmap *map,
+ const struct hashmap_entry *key)
+{
+ return key->hash & (map->tablesize - 1);
+}
+
+static void rehash(struct hashmap *map, unsigned int newsize)
+{
+ unsigned int i, oldsize = map->tablesize;
+ struct hashmap_entry **oldtable = map->table;
+
+ alloc_table(map, newsize);
+ for (i = 0; i < oldsize; i++) {
+ struct hashmap_entry *e = oldtable[i];
+ while (e) {
+ struct hashmap_entry *next = e->next;
+ unsigned int b = bucket(map, e);
+ e->next = map->table[b];
+ map->table[b] = e;
+ e = next;
+ }
+ }
+ free(oldtable);
+}
+
+static inline struct hashmap_entry **find_entry_ptr(const struct hashmap *map,
+ const struct hashmap_entry *key, const void *keydata)
+{
+ struct hashmap_entry **e = &map->table[bucket(map, key)];
+ while (*e && !entry_equals(map, *e, key, keydata))
+ e = &(*e)->next;
+ return e;
+}
+
+static int always_equal(const void *unused1, const void *unused2, const void *unused3)
+{
+ return 0;
+}
+
+void hashmap_init(struct hashmap *map, hashmap_cmp_fn equals_function,
+ size_t initial_size)
+{
+ unsigned int size = HASHMAP_INITIAL_SIZE;
+ map->size = 0;
+ map->cmpfn = equals_function ? equals_function : always_equal;
+
+ /* calculate initial table size and allocate the table */
+ initial_size = (unsigned int) ((uint64_t) initial_size * 100
+ / HASHMAP_LOAD_FACTOR);
+ while (initial_size > size)
+ size <<= HASHMAP_RESIZE_BITS;
+ alloc_table(map, size);
+}
+
+void hashmap_free(struct hashmap *map, int free_entries)
+{
+ if (!map || !map->table)
+ return;
+ if (free_entries) {
+ struct hashmap_iter iter;
+ struct hashmap_entry *e;
+ hashmap_iter_init(map, &iter);
+ while ((e = hashmap_iter_next(&iter)))
+ free(e);
+ }
+ free(map->table);
+ memset(map, 0, sizeof(*map));
+}
+
+void *hashmap_get(const struct hashmap *map, const void *key, const void *keydata)
+{
+ return *find_entry_ptr(map, key, keydata);
+}
+
+void *hashmap_get_next(const struct hashmap *map, const void *entry)
+{
+ struct hashmap_entry *e = ((struct hashmap_entry *) entry)->next;
+ for (; e; e = e->next)
+ if (entry_equals(map, entry, e, NULL))
+ return e;
+ return NULL;
+}
+
+void hashmap_add(struct hashmap *map, void *entry)
+{
+ unsigned int b = bucket(map, entry);
+
+ /* add entry */
+ ((struct hashmap_entry *) entry)->next = map->table[b];
+ map->table[b] = entry;
+
+ /* fix size and rehash if appropriate */
+ map->size++;
+ if (map->size > map->grow_at)
+ rehash(map, map->tablesize << HASHMAP_RESIZE_BITS);
+}
+
+void *hashmap_remove(struct hashmap *map, const void *key, const void *keydata)
+{
+ struct hashmap_entry *old;
+ struct hashmap_entry **e = find_entry_ptr(map, key, keydata);
+ if (!*e)
+ return NULL;
+
+ /* remove existing entry */
+ old = *e;
+ *e = old->next;
+ old->next = NULL;
+
+ /* fix size and rehash if appropriate */
+ map->size--;
+ if (map->size < map->shrink_at)
+ rehash(map, map->tablesize >> HASHMAP_RESIZE_BITS);
+ return old;
+}
+
+void *hashmap_put(struct hashmap *map, void *entry)
+{
+ struct hashmap_entry *old = hashmap_remove(map, entry, NULL);
+ hashmap_add(map, entry);
+ return old;
+}
+
+void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter)
+{
+ iter->map = map;
+ iter->tablepos = 0;
+ iter->next = NULL;
+}
+
+void *hashmap_iter_next(struct hashmap_iter *iter)
+{
+ struct hashmap_entry *current = iter->next;
+ for (;;) {
+ if (current) {
+ iter->next = current->next;
+ return current;
+ }
+
+ if (iter->tablepos >= iter->map->tablesize)
+ return NULL;
+
+ current = iter->map->table[iter->tablepos++];
+ }
+}
diff --git a/hashmap.h b/hashmap.h
new file mode 100644
index 000000000..a816ad47b
--- /dev/null
+++ b/hashmap.h
@@ -0,0 +1,71 @@
+#ifndef HASHMAP_H
+#define HASHMAP_H
+
+/*
+ * Generic implementation of hash-based key-value mappings.
+ * See Documentation/technical/api-hashmap.txt.
+ */
+
+/* FNV-1 functions */
+
+extern unsigned int strhash(const char *buf);
+extern unsigned int strihash(const char *buf);
+extern unsigned int memhash(const void *buf, size_t len);
+extern unsigned int memihash(const void *buf, size_t len);
+
+/* data structures */
+
+struct hashmap_entry {
+ struct hashmap_entry *next;
+ unsigned int hash;
+};
+
+typedef int (*hashmap_cmp_fn)(const void *entry, const void *entry_or_key,
+ const void *keydata);
+
+struct hashmap {
+ struct hashmap_entry **table;
+ hashmap_cmp_fn cmpfn;
+ unsigned int size, tablesize, grow_at, shrink_at;
+};
+
+struct hashmap_iter {
+ struct hashmap *map;
+ struct hashmap_entry *next;
+ unsigned int tablepos;
+};
+
+/* hashmap functions */
+
+extern void hashmap_init(struct hashmap *map, hashmap_cmp_fn equals_function,
+ size_t initial_size);
+extern void hashmap_free(struct hashmap *map, int free_entries);
+
+/* hashmap_entry functions */
+
+static inline void hashmap_entry_init(void *entry, unsigned int hash)
+{
+ struct hashmap_entry *e = entry;
+ e->hash = hash;
+ e->next = NULL;
+}
+extern void *hashmap_get(const struct hashmap *map, const void *key,
+ const void *keydata);
+extern void *hashmap_get_next(const struct hashmap *map, const void *entry);
+extern void hashmap_add(struct hashmap *map, void *entry);
+extern void *hashmap_put(struct hashmap *map, void *entry);
+extern void *hashmap_remove(struct hashmap *map, const void *key,
+ const void *keydata);
+
+/* hashmap_iter functions */
+
+extern void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter);
+extern void *hashmap_iter_next(struct hashmap_iter *iter);
+static inline void *hashmap_iter_first(struct hashmap *map,
+ struct hashmap_iter *iter)
+{
+ hashmap_iter_init(map, iter);
+ return hashmap_iter_next(iter);
+}
+
+#endif
diff --git a/help.c b/help.c
index df7d16d7c..b266b0932 100644
--- a/help.c
+++ b/help.c
@@ -78,8 +78,7 @@ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)
cmds->cnt = cj;
}
-static void pretty_print_string_list(struct cmdnames *cmds,
- unsigned int colopts)
+static void pretty_print_cmdnames(struct cmdnames *cmds, unsigned int colopts)
{
struct string_list list = STRING_LIST_INIT_NODUP;
struct column_options copts;
@@ -209,14 +208,14 @@ void list_commands(unsigned int colopts,
const char *exec_path = git_exec_path();
printf_ln(_("available git commands in '%s'"), exec_path);
putchar('\n');
- pretty_print_string_list(main_cmds, colopts);
+ pretty_print_cmdnames(main_cmds, colopts);
putchar('\n');
}
if (other_cmds->cnt) {
printf_ln(_("git commands available from elsewhere on your $PATH"));
putchar('\n');
- pretty_print_string_list(other_cmds, colopts);
+ pretty_print_cmdnames(other_cmds, colopts);
putchar('\n');
}
}
diff --git a/http.c b/http.c
index 70eaa26e8..94e1afdee 100644
--- a/http.c
+++ b/http.c
@@ -880,6 +880,20 @@ int handle_curl_result(struct slot_results *results)
}
}
+int run_one_slot(struct active_request_slot *slot,
+ struct slot_results *results)
+{
+ slot->results = results;
+ if (!start_active_slot(slot)) {
+ snprintf(curl_errorstr, sizeof(curl_errorstr),
+ "failed to start HTTP request");
+ return HTTP_START_FAILED;
+ }
+
+ run_active_slot(slot);
+ return handle_curl_result(results);
+}
+
static CURLcode curlinfo_strbuf(CURL *curl, CURLINFO info, struct strbuf *buf)
{
char *ptr;
@@ -907,7 +921,6 @@ static int http_request(const char *url,
int ret;
slot = get_active_slot();
- slot->results = &results;
curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
if (result == NULL) {
@@ -942,14 +955,7 @@ static int http_request(const char *url,
curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "gzip");
- if (start_active_slot(slot)) {
- run_active_slot(slot);
- ret = handle_curl_result(&results);
- } else {
- snprintf(curl_errorstr, sizeof(curl_errorstr),
- "failed to start HTTP request");
- ret = HTTP_START_FAILED;
- }
+ ret = run_one_slot(slot, &results);
if (options && options->content_type)
curlinfo_strbuf(slot->curl, CURLINFO_CONTENT_TYPE,
@@ -1384,7 +1390,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
unsigned char *sha1)
{
char *hex = sha1_to_hex(sha1);
- char *filename;
+ const char *filename;
char prevfile[PATH_MAX];
int prevlocal;
char prev_buf[PREV_BUF_SIZE];
diff --git a/http.h b/http.h
index cd37d5881..a82888445 100644
--- a/http.h
+++ b/http.h
@@ -90,6 +90,15 @@ extern void finish_active_slot(struct active_request_slot *slot);
extern void finish_all_active_slots(void);
extern int handle_curl_result(struct slot_results *results);
+/*
+ * This will run one slot to completion in a blocking manner, similar to how
+ * curl_easy_perform would work (but we don't want to use that, because
+ * we do not want to intermingle calls to curl_multi and curl_easy).
+ *
+ */
+int run_one_slot(struct active_request_slot *slot,
+ struct slot_results *results);
+
#ifdef USE_CURL_MULTI
extern void fill_active_slots(void);
extern void add_fill_function(void *data, int (*fill)(void *));
diff --git a/khash.h b/khash.h
new file mode 100644
index 000000000..57ff6038c
--- /dev/null
+++ b/khash.h
@@ -0,0 +1,338 @@
+/* The MIT License
+
+ Copyright (c) 2008, 2009, 2011 by Attractive Chaos <attractor@live.co.uk>
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#ifndef __AC_KHASH_H
+#define __AC_KHASH_H
+
+#define AC_VERSION_KHASH_H "0.2.8"
+
+typedef uint32_t khint32_t;
+typedef uint64_t khint64_t;
+
+typedef khint32_t khint_t;
+typedef khint_t khiter_t;
+
+#define __ac_isempty(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&2)
+#define __ac_isdel(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&1)
+#define __ac_iseither(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&3)
+#define __ac_set_isdel_false(flag, i) (flag[i>>4]&=~(1ul<<((i&0xfU)<<1)))
+#define __ac_set_isempty_false(flag, i) (flag[i>>4]&=~(2ul<<((i&0xfU)<<1)))
+#define __ac_set_isboth_false(flag, i) (flag[i>>4]&=~(3ul<<((i&0xfU)<<1)))
+#define __ac_set_isdel_true(flag, i) (flag[i>>4]|=1ul<<((i&0xfU)<<1))
+
+#define __ac_fsize(m) ((m) < 16? 1 : (m)>>4)
+
+#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x))
+
+static inline khint_t __ac_X31_hash_string(const char *s)
+{
+ khint_t h = (khint_t)*s;
+ if (h) for (++s ; *s; ++s) h = (h << 5) - h + (khint_t)*s;
+ return h;
+}
+
+#define kh_str_hash_func(key) __ac_X31_hash_string(key)
+#define kh_str_hash_equal(a, b) (strcmp(a, b) == 0)
+
+static const double __ac_HASH_UPPER = 0.77;
+
+#define __KHASH_TYPE(name, khkey_t, khval_t) \
+ typedef struct { \
+ khint_t n_buckets, size, n_occupied, upper_bound; \
+ khint32_t *flags; \
+ khkey_t *keys; \
+ khval_t *vals; \
+ } kh_##name##_t;
+
+#define __KHASH_PROTOTYPES(name, khkey_t, khval_t) \
+ extern kh_##name##_t *kh_init_##name(void); \
+ extern void kh_destroy_##name(kh_##name##_t *h); \
+ extern void kh_clear_##name(kh_##name##_t *h); \
+ extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \
+ extern int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \
+ extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \
+ extern void kh_del_##name(kh_##name##_t *h, khint_t x);
+
+#define __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
+ SCOPE kh_##name##_t *kh_init_##name(void) { \
+ return (kh_##name##_t*)xcalloc(1, sizeof(kh_##name##_t)); \
+ } \
+ SCOPE void kh_destroy_##name(kh_##name##_t *h) \
+ { \
+ if (h) { \
+ free((void *)h->keys); free(h->flags); \
+ free((void *)h->vals); \
+ free(h); \
+ } \
+ } \
+ SCOPE void kh_clear_##name(kh_##name##_t *h) \
+ { \
+ if (h && h->flags) { \
+ memset(h->flags, 0xaa, __ac_fsize(h->n_buckets) * sizeof(khint32_t)); \
+ h->size = h->n_occupied = 0; \
+ } \
+ } \
+ SCOPE khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key) \
+ { \
+ if (h->n_buckets) { \
+ khint_t k, i, last, mask, step = 0; \
+ mask = h->n_buckets - 1; \
+ k = __hash_func(key); i = k & mask; \
+ last = i; \
+ while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \
+ i = (i + (++step)) & mask; \
+ if (i == last) return h->n_buckets; \
+ } \
+ return __ac_iseither(h->flags, i)? h->n_buckets : i; \
+ } else return 0; \
+ } \
+ SCOPE int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \
+ { /* This function uses 0.25*n_buckets bytes of working space instead of [sizeof(key_t+val_t)+.25]*n_buckets. */ \
+ khint32_t *new_flags = NULL; \
+ khint_t j = 1; \
+ { \
+ kroundup32(new_n_buckets); \
+ if (new_n_buckets < 4) new_n_buckets = 4; \
+ if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) j = 0; /* requested size is too small */ \
+ else { /* hash table size to be changed (shrink or expand); rehash */ \
+ new_flags = (khint32_t*)xmalloc(__ac_fsize(new_n_buckets) * sizeof(khint32_t)); \
+ if (!new_flags) return -1; \
+ memset(new_flags, 0xaa, __ac_fsize(new_n_buckets) * sizeof(khint32_t)); \
+ if (h->n_buckets < new_n_buckets) { /* expand */ \
+ khkey_t *new_keys = (khkey_t*)xrealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \
+ if (!new_keys) return -1; \
+ h->keys = new_keys; \
+ if (kh_is_map) { \
+ khval_t *new_vals = (khval_t*)xrealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \
+ if (!new_vals) return -1; \
+ h->vals = new_vals; \
+ } \
+ } /* otherwise shrink */ \
+ } \
+ } \
+ if (j) { /* rehashing is needed */ \
+ for (j = 0; j != h->n_buckets; ++j) { \
+ if (__ac_iseither(h->flags, j) == 0) { \
+ khkey_t key = h->keys[j]; \
+ khval_t val; \
+ khint_t new_mask; \
+ new_mask = new_n_buckets - 1; \
+ if (kh_is_map) val = h->vals[j]; \
+ __ac_set_isdel_true(h->flags, j); \
+ while (1) { /* kick-out process; sort of like in Cuckoo hashing */ \
+ khint_t k, i, step = 0; \
+ k = __hash_func(key); \
+ i = k & new_mask; \
+ while (!__ac_isempty(new_flags, i)) i = (i + (++step)) & new_mask; \
+ __ac_set_isempty_false(new_flags, i); \
+ if (i < h->n_buckets && __ac_iseither(h->flags, i) == 0) { /* kick out the existing element */ \
+ { khkey_t tmp = h->keys[i]; h->keys[i] = key; key = tmp; } \
+ if (kh_is_map) { khval_t tmp = h->vals[i]; h->vals[i] = val; val = tmp; } \
+ __ac_set_isdel_true(h->flags, i); /* mark it as deleted in the old hash table */ \
+ } else { /* write the element and jump out of the loop */ \
+ h->keys[i] = key; \
+ if (kh_is_map) h->vals[i] = val; \
+ break; \
+ } \
+ } \
+ } \
+ } \
+ if (h->n_buckets > new_n_buckets) { /* shrink the hash table */ \
+ h->keys = (khkey_t*)xrealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \
+ if (kh_is_map) h->vals = (khval_t*)xrealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \
+ } \
+ free(h->flags); /* free the working space */ \
+ h->flags = new_flags; \
+ h->n_buckets = new_n_buckets; \
+ h->n_occupied = h->size; \
+ h->upper_bound = (khint_t)(h->n_buckets * __ac_HASH_UPPER + 0.5); \
+ } \
+ return 0; \
+ } \
+ SCOPE khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret) \
+ { \
+ khint_t x; \
+ if (h->n_occupied >= h->upper_bound) { /* update the hash table */ \
+ if (h->n_buckets > (h->size<<1)) { \
+ if (kh_resize_##name(h, h->n_buckets - 1) < 0) { /* clear "deleted" elements */ \
+ *ret = -1; return h->n_buckets; \
+ } \
+ } else if (kh_resize_##name(h, h->n_buckets + 1) < 0) { /* expand the hash table */ \
+ *ret = -1; return h->n_buckets; \
+ } \
+ } /* TODO: to implement automatically shrinking; resize() already support shrinking */ \
+ { \
+ khint_t k, i, site, last, mask = h->n_buckets - 1, step = 0; \
+ x = site = h->n_buckets; k = __hash_func(key); i = k & mask; \
+ if (__ac_isempty(h->flags, i)) x = i; /* for speed up */ \
+ else { \
+ last = i; \
+ while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \
+ if (__ac_isdel(h->flags, i)) site = i; \
+ i = (i + (++step)) & mask; \
+ if (i == last) { x = site; break; } \
+ } \
+ if (x == h->n_buckets) { \
+ if (__ac_isempty(h->flags, i) && site != h->n_buckets) x = site; \
+ else x = i; \
+ } \
+ } \
+ } \
+ if (__ac_isempty(h->flags, x)) { /* not present at all */ \
+ h->keys[x] = key; \
+ __ac_set_isboth_false(h->flags, x); \
+ ++h->size; ++h->n_occupied; \
+ *ret = 1; \
+ } else if (__ac_isdel(h->flags, x)) { /* deleted */ \
+ h->keys[x] = key; \
+ __ac_set_isboth_false(h->flags, x); \
+ ++h->size; \
+ *ret = 2; \
+ } else *ret = 0; /* Don't touch h->keys[x] if present and not deleted */ \
+ return x; \
+ } \
+ SCOPE void kh_del_##name(kh_##name##_t *h, khint_t x) \
+ { \
+ if (x != h->n_buckets && !__ac_iseither(h->flags, x)) { \
+ __ac_set_isdel_true(h->flags, x); \
+ --h->size; \
+ } \
+ }
+
+#define KHASH_DECLARE(name, khkey_t, khval_t) \
+ __KHASH_TYPE(name, khkey_t, khval_t) \
+ __KHASH_PROTOTYPES(name, khkey_t, khval_t)
+
+#define KHASH_INIT2(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
+ __KHASH_TYPE(name, khkey_t, khval_t) \
+ __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal)
+
+#define KHASH_INIT(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
+ KHASH_INIT2(name, static inline, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal)
+
+/* Other convenient macros... */
+
+/*! @function
+ @abstract Test whether a bucket contains data.
+ @param h Pointer to the hash table [khash_t(name)*]
+ @param x Iterator to the bucket [khint_t]
+ @return 1 if containing data; 0 otherwise [int]
+ */
+#define kh_exist(h, x) (!__ac_iseither((h)->flags, (x)))
+
+/*! @function
+ @abstract Get key given an iterator
+ @param h Pointer to the hash table [khash_t(name)*]
+ @param x Iterator to the bucket [khint_t]
+ @return Key [type of keys]
+ */
+#define kh_key(h, x) ((h)->keys[x])
+
+/*! @function
+ @abstract Get value given an iterator
+ @param h Pointer to the hash table [khash_t(name)*]
+ @param x Iterator to the bucket [khint_t]
+ @return Value [type of values]
+ @discussion For hash sets, calling this results in segfault.
+ */
+#define kh_val(h, x) ((h)->vals[x])
+
+/*! @function
+ @abstract Alias of kh_val()
+ */
+#define kh_value(h, x) ((h)->vals[x])
+
+/*! @function
+ @abstract Get the start iterator
+ @param h Pointer to the hash table [khash_t(name)*]
+ @return The start iterator [khint_t]
+ */
+#define kh_begin(h) (khint_t)(0)
+
+/*! @function
+ @abstract Get the end iterator
+ @param h Pointer to the hash table [khash_t(name)*]
+ @return The end iterator [khint_t]
+ */
+#define kh_end(h) ((h)->n_buckets)
+
+/*! @function
+ @abstract Get the number of elements in the hash table
+ @param h Pointer to the hash table [khash_t(name)*]
+ @return Number of elements in the hash table [khint_t]
+ */
+#define kh_size(h) ((h)->size)
+
+/*! @function
+ @abstract Get the number of buckets in the hash table
+ @param h Pointer to the hash table [khash_t(name)*]
+ @return Number of buckets in the hash table [khint_t]
+ */
+#define kh_n_buckets(h) ((h)->n_buckets)
+
+/*! @function
+ @abstract Iterate over the entries in the hash table
+ @param h Pointer to the hash table [khash_t(name)*]
+ @param kvar Variable to which key will be assigned
+ @param vvar Variable to which value will be assigned
+ @param code Block of code to execute
+ */
+#define kh_foreach(h, kvar, vvar, code) { khint_t __i; \
+ for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \
+ if (!kh_exist(h,__i)) continue; \
+ (kvar) = kh_key(h,__i); \
+ (vvar) = kh_val(h,__i); \
+ code; \
+ } }
+
+/*! @function
+ @abstract Iterate over the values in the hash table
+ @param h Pointer to the hash table [khash_t(name)*]
+ @param vvar Variable to which value will be assigned
+ @param code Block of code to execute
+ */
+#define kh_foreach_value(h, vvar, code) { khint_t __i; \
+ for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \
+ if (!kh_exist(h,__i)) continue; \
+ (vvar) = kh_val(h,__i); \
+ code; \
+ } }
+
+static inline khint_t __kh_oid_hash(const unsigned char *oid)
+{
+ khint_t hash;
+ memcpy(&hash, oid, sizeof(hash));
+ return hash;
+}
+
+#define __kh_oid_cmp(a, b) (hashcmp(a, b) == 0)
+
+KHASH_INIT(sha1, const unsigned char *, void *, 1, __kh_oid_hash, __kh_oid_cmp)
+typedef kh_sha1_t khash_sha1;
+
+KHASH_INIT(sha1_pos, const unsigned char *, int, 1, __kh_oid_hash, __kh_oid_cmp)
+typedef kh_sha1_pos_t khash_sha1_pos;
+
+#endif /* __AC_KHASH_H */
diff --git a/line-log.c b/line-log.c
index 717638b33..150010105 100644
--- a/line-log.c
+++ b/line-log.c
@@ -766,16 +766,6 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_list
}
}
-static void load_tree_desc(struct tree_desc *desc, void **tree,
- const unsigned char *sha1)
-{
- unsigned long size;
- *tree = read_object_with_reference(sha1, tree_type, &size, NULL);
- if (!*tree)
- die("Unable to read tree (%s)", sha1_to_hex(sha1));
- init_tree_desc(desc, *tree, size);
-}
-
static int count_parents(struct commit *commit)
{
struct commit_list *parents = commit->parents;
@@ -842,18 +832,11 @@ static void queue_diffs(struct line_log_data *range,
struct diff_queue_struct *queue,
struct commit *commit, struct commit *parent)
{
- void *tree1 = NULL, *tree2 = NULL;
- struct tree_desc desc1, desc2;
-
assert(commit);
- load_tree_desc(&desc2, &tree2, commit->tree->object.sha1);
- if (parent)
- load_tree_desc(&desc1, &tree1, parent->tree->object.sha1);
- else
- init_tree_desc(&desc1, "", 0);
DIFF_QUEUE_CLEAR(&diff_queued_diff);
- diff_tree(&desc1, &desc2, "", opt);
+ diff_tree_sha1(parent ? parent->tree->object.sha1 : NULL,
+ commit->tree->object.sha1, "", opt);
if (opt->detect_rename) {
filter_diffs_for_paths(range, 1);
if (diff_might_be_rename())
@@ -861,11 +844,6 @@ static void queue_diffs(struct line_log_data *range,
filter_diffs_for_paths(range, 0);
}
move_diff_queue(queue, &diff_queued_diff);
-
- if (tree1)
- free(tree1);
- if (tree2)
- free(tree2);
}
static char *get_nth_line(long line, unsigned long *ends, void *data)
diff --git a/list-objects.c b/list-objects.c
index 6cbedf028..206816fa9 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -162,15 +162,17 @@ void mark_edges_uninteresting(struct rev_info *revs, show_edge_fn show_edge)
}
mark_edge_parents_uninteresting(commit, revs, show_edge);
}
- for (i = 0; i < revs->cmdline.nr; i++) {
- struct object *obj = revs->cmdline.rev[i].item;
- struct commit *commit = (struct commit *)obj;
- if (obj->type != OBJ_COMMIT || !(obj->flags & UNINTERESTING))
- continue;
- mark_tree_uninteresting(commit->tree);
- if (revs->edge_hint && !(obj->flags & SHOWN)) {
- obj->flags |= SHOWN;
- show_edge(commit);
+ if (revs->edge_hint) {
+ for (i = 0; i < revs->cmdline.nr; i++) {
+ struct object *obj = revs->cmdline.rev[i].item;
+ struct commit *commit = (struct commit *)obj;
+ if (obj->type != OBJ_COMMIT || !(obj->flags & UNINTERESTING))
+ continue;
+ mark_tree_uninteresting(commit->tree);
+ if (!(obj->flags & SHOWN)) {
+ obj->flags |= SHOWN;
+ show_edge(commit);
+ }
}
}
}
diff --git a/log-tree.c b/log-tree.c
index 08970bf46..5ce217d5e 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -100,7 +100,7 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
if (starts_with(refname, "refs/replace/")) {
unsigned char original_sha1[20];
- if (!read_replace_refs)
+ if (!check_replace_refs)
return 0;
if (get_sha1_hex(refname + 13, original_sha1)) {
warning("invalid replace ref %s", refname);
diff --git a/match-trees.c b/match-trees.c
index 7873cdec5..e80b4af35 100644
--- a/match-trees.c
+++ b/match-trees.c
@@ -182,13 +182,10 @@ static int splice_tree(const unsigned char *hash1,
enum object_type type;
int status;
- subpath = strchr(prefix, '/');
- if (!subpath)
- toplen = strlen(prefix);
- else {
- toplen = subpath - prefix;
+ subpath = strchrnul(prefix, '/');
+ toplen = subpath - prefix;
+ if (*subpath)
subpath++;
- }
buf = read_sha1_file(hash1, &type, &sz);
if (!buf)
@@ -215,7 +212,7 @@ static int splice_tree(const unsigned char *hash1,
if (!rewrite_here)
die("entry %.*s not found in tree %s",
toplen, prefix, sha1_to_hex(hash1));
- if (subpath) {
+ if (*subpath) {
status = splice_tree(rewrite_here, subpath, hash2, subtree);
if (status)
return status;
diff --git a/merge-recursive.c b/merge-recursive.c
index a18bd15dd..417709294 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -201,7 +201,9 @@ static int add_cacheinfo(unsigned int mode, const unsigned char *sha1,
const char *path, int stage, int refresh, int options)
{
struct cache_entry *ce;
- ce = make_cache_entry(mode, sha1 ? sha1 : null_sha1, path, stage, refresh);
+ ce = make_cache_entry(mode, sha1 ? sha1 : null_sha1, path, stage,
+ (refresh ? (CE_MATCH_REFRESH |
+ CE_MATCH_IGNORE_MISSING) : 0 ));
if (!ce)
return error(_("addinfo_cache failed for path '%s'"), path);
return add_cache_entry(ce, options);
@@ -693,7 +695,7 @@ static int make_room_for_path(struct merge_options *o, const char *path)
/* Make sure leading directories are created */
status = safe_create_leading_directories_const(path);
if (status) {
- if (status == -3) {
+ if (status == SCLD_EXISTS) {
/* something else exists */
error(msg, path, _(": perhaps a D/F conflict?"));
return -1;
diff --git a/name-hash.c b/name-hash.c
index e5b6e1ad2..97444d020 100644
--- a/name-hash.c
+++ b/name-hash.c
@@ -8,49 +8,28 @@
#define NO_THE_INDEX_COMPATIBILITY_MACROS
#include "cache.h"
-/*
- * This removes bit 5 if bit 6 is set.
- *
- * That will make US-ASCII characters hash to their upper-case
- * equivalent. We could easily do this one whole word at a time,
- * but that's for future worries.
- */
-static inline unsigned char icase_hash(unsigned char c)
-{
- return c & ~((c & 0x40) >> 1);
-}
-
-static unsigned int hash_name(const char *name, int namelen)
-{
- unsigned int hash = 0x123;
-
- while (namelen--) {
- unsigned char c = *name++;
- c = icase_hash(c);
- hash = hash*101 + c;
- }
- return hash;
-}
-
struct dir_entry {
- struct dir_entry *next;
+ struct hashmap_entry ent;
struct dir_entry *parent;
struct cache_entry *ce;
int nr;
unsigned int namelen;
};
+static int dir_entry_cmp(const struct dir_entry *e1,
+ const struct dir_entry *e2, const char *name)
+{
+ return e1->namelen != e2->namelen || strncasecmp(e1->ce->name,
+ name ? name : e2->ce->name, e1->namelen);
+}
+
static struct dir_entry *find_dir_entry(struct index_state *istate,
const char *name, unsigned int namelen)
{
- unsigned int hash = hash_name(name, namelen);
- struct dir_entry *dir;
-
- for (dir = lookup_hash(hash, &istate->dir_hash); dir; dir = dir->next)
- if (dir->namelen == namelen &&
- !strncasecmp(dir->ce->name, name, namelen))
- return dir;
- return NULL;
+ struct dir_entry key;
+ hashmap_entry_init(&key, memihash(name, namelen));
+ key.namelen = namelen;
+ return hashmap_get(&istate->dir_hash, &key, name);
}
static struct dir_entry *hash_dir_entry(struct index_state *istate,
@@ -84,18 +63,11 @@ static struct dir_entry *hash_dir_entry(struct index_state *istate,
dir = find_dir_entry(istate, ce->name, namelen);
if (!dir) {
/* not found, create it and add to hash table */
- void **pdir;
- unsigned int hash = hash_name(ce->name, namelen);
-
dir = xcalloc(1, sizeof(struct dir_entry));
+ hashmap_entry_init(dir, memihash(ce->name, namelen));
dir->namelen = namelen;
dir->ce = ce;
-
- pdir = insert_hash(hash, dir, &istate->dir_hash);
- if (pdir) {
- dir->next = *pdir;
- *pdir = dir;
- }
+ hashmap_add(&istate->dir_hash, dir);
/* recursively add missing parent directories */
dir->parent = hash_dir_entry(istate, ce, namelen);
@@ -114,45 +86,50 @@ static void add_dir_entry(struct index_state *istate, struct cache_entry *ce)
static void remove_dir_entry(struct index_state *istate, struct cache_entry *ce)
{
/*
- * Release reference to the directory entry (and parents if 0).
- *
- * Note: we do not remove / free the entry because there's no
- * hash.[ch]::remove_hash and dir->next may point to other entries
- * that are still valid, so we must not free the memory.
+ * Release reference to the directory entry. If 0, remove and continue
+ * with parent directory.
*/
struct dir_entry *dir = hash_dir_entry(istate, ce, ce_namelen(ce));
- while (dir && dir->nr && !(--dir->nr))
- dir = dir->parent;
+ while (dir && !(--dir->nr)) {
+ struct dir_entry *parent = dir->parent;
+ hashmap_remove(&istate->dir_hash, dir, NULL);
+ free(dir);
+ dir = parent;
+ }
}
static void hash_index_entry(struct index_state *istate, struct cache_entry *ce)
{
- void **pos;
- unsigned int hash;
-
if (ce->ce_flags & CE_HASHED)
return;
ce->ce_flags |= CE_HASHED;
- ce->next = NULL;
- hash = hash_name(ce->name, ce_namelen(ce));
- pos = insert_hash(hash, ce, &istate->name_hash);
- if (pos) {
- ce->next = *pos;
- *pos = ce;
- }
+ hashmap_entry_init(ce, memihash(ce->name, ce_namelen(ce)));
+ hashmap_add(&istate->name_hash, ce);
- if (ignore_case && !(ce->ce_flags & CE_UNHASHED))
+ if (ignore_case)
add_dir_entry(istate, ce);
}
+static int cache_entry_cmp(const struct cache_entry *ce1,
+ const struct cache_entry *ce2, const void *remove)
+{
+ /*
+ * For remove_name_hash, find the exact entry (pointer equality); for
+ * index_file_exists, find all entries with matching hash code and
+ * decide whether the entry matches in same_name.
+ */
+ return remove ? !(ce1 == ce2) : 0;
+}
+
static void lazy_init_name_hash(struct index_state *istate)
{
int nr;
if (istate->name_hash_initialized)
return;
- if (istate->cache_nr)
- preallocate_hash(&istate->name_hash, istate->cache_nr);
+ hashmap_init(&istate->name_hash, (hashmap_cmp_fn) cache_entry_cmp,
+ istate->cache_nr);
+ hashmap_init(&istate->dir_hash, (hashmap_cmp_fn) dir_entry_cmp, 0);
for (nr = 0; nr < istate->cache_nr; nr++)
hash_index_entry(istate, istate->cache[nr]);
istate->name_hash_initialized = 1;
@@ -160,31 +137,19 @@ static void lazy_init_name_hash(struct index_state *istate)
void add_name_hash(struct index_state *istate, struct cache_entry *ce)
{
- /* if already hashed, add reference to directory entries */
- if (ignore_case && (ce->ce_flags & CE_STATE_MASK) == CE_STATE_MASK)
- add_dir_entry(istate, ce);
-
- ce->ce_flags &= ~CE_UNHASHED;
if (istate->name_hash_initialized)
hash_index_entry(istate, ce);
}
-/*
- * We don't actually *remove* it, we can just mark it invalid so that
- * we won't find it in lookups.
- *
- * Not only would we have to search the lists (simple enough), but
- * we'd also have to rehash other hash buckets in case this makes the
- * hash bucket empty (common). So it's much better to just mark
- * it.
- */
void remove_name_hash(struct index_state *istate, struct cache_entry *ce)
{
- /* if already hashed, release reference to directory entries */
- if (ignore_case && (ce->ce_flags & CE_STATE_MASK) == CE_HASHED)
- remove_dir_entry(istate, ce);
+ if (!istate->name_hash_initialized || !(ce->ce_flags & CE_HASHED))
+ return;
+ ce->ce_flags &= ~CE_HASHED;
+ hashmap_remove(&istate->name_hash, ce, ce);
- ce->ce_flags |= CE_UNHASHED;
+ if (ignore_case)
+ remove_dir_entry(istate, ce);
}
static int slow_same_name(const char *name1, int len1, const char *name2, int len2)
@@ -247,49 +212,27 @@ struct cache_entry *index_dir_exists(struct index_state *istate, const char *nam
struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int icase)
{
- unsigned int hash = hash_name(name, namelen);
struct cache_entry *ce;
+ struct hashmap_entry key;
lazy_init_name_hash(istate);
- ce = lookup_hash(hash, &istate->name_hash);
+ hashmap_entry_init(&key, memihash(name, namelen));
+ ce = hashmap_get(&istate->name_hash, &key, NULL);
while (ce) {
- if (!(ce->ce_flags & CE_UNHASHED)) {
- if (same_name(ce, name, namelen, icase))
- return ce;
- }
- ce = ce->next;
+ if (same_name(ce, name, namelen, icase))
+ return ce;
+ ce = hashmap_get_next(&istate->name_hash, ce);
}
return NULL;
}
-struct cache_entry *index_name_exists(struct index_state *istate, const char *name, int namelen, int icase)
-{
- if (namelen > 0 && name[namelen - 1] == '/')
- return index_dir_exists(istate, name, namelen - 1);
- return index_file_exists(istate, name, namelen, icase);
-}
-
-static int free_dir_entry(void *entry, void *unused)
-{
- struct dir_entry *dir = entry;
- while (dir) {
- struct dir_entry *next = dir->next;
- free(dir);
- dir = next;
- }
- return 0;
-}
-
void free_name_hash(struct index_state *istate)
{
if (!istate->name_hash_initialized)
return;
istate->name_hash_initialized = 0;
- if (ignore_case)
- /* free directory entries */
- for_each_hash(&istate->dir_hash, free_dir_entry, NULL);
- free_hash(&istate->name_hash);
- free_hash(&istate->dir_hash);
+ hashmap_free(&istate->name_hash, 0);
+ hashmap_free(&istate->dir_hash, 1);
}
diff --git a/notes-utils.c b/notes-utils.c
index 2975dcd58..4aa702390 100644
--- a/notes-utils.c
+++ b/notes-utils.c
@@ -75,7 +75,7 @@ static int notes_rewrite_config(const char *k, const char *v, void *cb)
return 0;
} else if (!c->mode_from_env && !strcmp(k, "notes.rewritemode")) {
if (!v)
- config_error_nonbool(k);
+ return config_error_nonbool(k);
c->combine = parse_combine_notes_fn(v);
if (!c->combine) {
error(_("Bad notes.rewriteMode value: '%s'"), v);
diff --git a/object.c b/object.c
index 584f7acb3..57a0890a8 100644
--- a/object.c
+++ b/object.c
@@ -43,14 +43,32 @@ int type_from_string(const char *str)
die("invalid object type \"%s\"", str);
}
+/*
+ * Return a numerical hash value between 0 and n-1 for the object with
+ * the specified sha1. n must be a power of 2. Please note that the
+ * return value is *not* consistent across computer architectures.
+ */
static unsigned int hash_obj(const unsigned char *sha1, unsigned int n)
{
unsigned int hash;
+
+ /*
+ * Since the sha1 is essentially random, we just take the
+ * required number of bits directly from the first
+ * sizeof(unsigned int) bytes of sha1. First we have to copy
+ * the bytes into a properly aligned integer. If we cared
+ * about getting consistent results across architectures, we
+ * would have to call ntohl() here, too.
+ */
memcpy(&hash, sha1, sizeof(unsigned int));
- /* Assumes power-of-2 hash sizes in grow_object_hash */
return hash & (n - 1);
}
+/*
+ * Insert obj into the hash table hash, which has length size (which
+ * must be a power of 2). On collisions, simply overflow to the next
+ * empty bucket.
+ */
static void insert_obj_hash(struct object *obj, struct object **hash, unsigned int size)
{
unsigned int j = hash_obj(obj->sha1, size);
@@ -63,6 +81,10 @@ static void insert_obj_hash(struct object *obj, struct object **hash, unsigned i
hash[j] = obj;
}
+/*
+ * Look up the record for the given sha1 in the hash map stored in
+ * obj_hash. Return NULL if it was not found.
+ */
struct object *lookup_object(const unsigned char *sha1)
{
unsigned int i, first;
@@ -92,6 +114,11 @@ struct object *lookup_object(const unsigned char *sha1)
return obj;
}
+/*
+ * Increase the size of the hash map stored in obj_hash to the next
+ * power of 2 (but at least 32). Copy the existing values to the new
+ * hash map.
+ */
static void grow_object_hash(void)
{
int i;
diff --git a/object.h b/object.h
index dc5df8ce1..732bf4d7e 100644
--- a/object.h
+++ b/object.h
@@ -42,7 +42,14 @@ struct object {
extern const char *typename(unsigned int type);
extern int type_from_string(const char *str);
+/*
+ * Return the current number of buckets in the object hashmap.
+ */
extern unsigned int get_max_object_index(void);
+
+/*
+ * Return the object from the specified bucket in the object hashmap.
+ */
extern struct object *get_indexed_object(unsigned int);
/*
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
new file mode 100644
index 000000000..5f1791a59
--- /dev/null
+++ b/pack-bitmap-write.c
@@ -0,0 +1,552 @@
+#include "cache.h"
+#include "commit.h"
+#include "tag.h"
+#include "diff.h"
+#include "revision.h"
+#include "list-objects.h"
+#include "progress.h"
+#include "pack-revindex.h"
+#include "pack.h"
+#include "pack-bitmap.h"
+#include "sha1-lookup.h"
+#include "pack-objects.h"
+
+struct bitmapped_commit {
+ struct commit *commit;
+ struct ewah_bitmap *bitmap;
+ struct ewah_bitmap *write_as;
+ int flags;
+ int xor_offset;
+ uint32_t commit_pos;
+};
+
+struct bitmap_writer {
+ struct ewah_bitmap *commits;
+ struct ewah_bitmap *trees;
+ struct ewah_bitmap *blobs;
+ struct ewah_bitmap *tags;
+
+ khash_sha1 *bitmaps;
+ khash_sha1 *reused;
+ struct packing_data *to_pack;
+
+ struct bitmapped_commit *selected;
+ unsigned int selected_nr, selected_alloc;
+
+ struct progress *progress;
+ int show_progress;
+ unsigned char pack_checksum[20];
+};
+
+static struct bitmap_writer writer;
+
+void bitmap_writer_show_progress(int show)
+{
+ writer.show_progress = show;
+}
+
+/**
+ * Build the initial type index for the packfile
+ */
+void bitmap_writer_build_type_index(struct pack_idx_entry **index,
+ uint32_t index_nr)
+{
+ uint32_t i;
+
+ writer.commits = ewah_new();
+ writer.trees = ewah_new();
+ writer.blobs = ewah_new();
+ writer.tags = ewah_new();
+
+ for (i = 0; i < index_nr; ++i) {
+ struct object_entry *entry = (struct object_entry *)index[i];
+ enum object_type real_type;
+
+ entry->in_pack_pos = i;
+
+ switch (entry->type) {
+ case OBJ_COMMIT:
+ case OBJ_TREE:
+ case OBJ_BLOB:
+ case OBJ_TAG:
+ real_type = entry->type;
+ break;
+
+ default:
+ real_type = sha1_object_info(entry->idx.sha1, NULL);
+ break;
+ }
+
+ switch (real_type) {
+ case OBJ_COMMIT:
+ ewah_set(writer.commits, i);
+ break;
+
+ case OBJ_TREE:
+ ewah_set(writer.trees, i);
+ break;
+
+ case OBJ_BLOB:
+ ewah_set(writer.blobs, i);
+ break;
+
+ case OBJ_TAG:
+ ewah_set(writer.tags, i);
+ break;
+
+ default:
+ die("Missing type information for %s (%d/%d)",
+ sha1_to_hex(entry->idx.sha1), real_type, entry->type);
+ }
+ }
+}
+
+/**
+ * Compute the actual bitmaps
+ */
+static struct object **seen_objects;
+static unsigned int seen_objects_nr, seen_objects_alloc;
+
+static inline void push_bitmapped_commit(struct commit *commit, struct ewah_bitmap *reused)
+{
+ if (writer.selected_nr >= writer.selected_alloc) {
+ writer.selected_alloc = (writer.selected_alloc + 32) * 2;
+ writer.selected = xrealloc(writer.selected,
+ writer.selected_alloc * sizeof(struct bitmapped_commit));
+ }
+
+ writer.selected[writer.selected_nr].commit = commit;
+ writer.selected[writer.selected_nr].bitmap = reused;
+ writer.selected[writer.selected_nr].flags = 0;
+
+ writer.selected_nr++;
+}
+
+static inline void mark_as_seen(struct object *object)
+{
+ ALLOC_GROW(seen_objects, seen_objects_nr + 1, seen_objects_alloc);
+ seen_objects[seen_objects_nr++] = object;
+}
+
+static inline void reset_all_seen(void)
+{
+ unsigned int i;
+ for (i = 0; i < seen_objects_nr; ++i) {
+ seen_objects[i]->flags &= ~(SEEN | ADDED | SHOWN);
+ }
+ seen_objects_nr = 0;
+}
+
+static uint32_t find_object_pos(const unsigned char *sha1)
+{
+ struct object_entry *entry = packlist_find(writer.to_pack, sha1, NULL);
+
+ if (!entry) {
+ die("Failed to write bitmap index. Packfile doesn't have full closure "
+ "(object %s is missing)", sha1_to_hex(sha1));
+ }
+
+ return entry->in_pack_pos;
+}
+
+static void show_object(struct object *object, const struct name_path *path,
+ const char *last, void *data)
+{
+ struct bitmap *base = data;
+ bitmap_set(base, find_object_pos(object->sha1));
+ mark_as_seen(object);
+}
+
+static void show_commit(struct commit *commit, void *data)
+{
+ mark_as_seen((struct object *)commit);
+}
+
+static int
+add_to_include_set(struct bitmap *base, struct commit *commit)
+{
+ khiter_t hash_pos;
+ uint32_t bitmap_pos = find_object_pos(commit->object.sha1);
+
+ if (bitmap_get(base, bitmap_pos))
+ return 0;
+
+ hash_pos = kh_get_sha1(writer.bitmaps, commit->object.sha1);
+ if (hash_pos < kh_end(writer.bitmaps)) {
+ struct bitmapped_commit *bc = kh_value(writer.bitmaps, hash_pos);
+ bitmap_or_ewah(base, bc->bitmap);
+ return 0;
+ }
+
+ bitmap_set(base, bitmap_pos);
+ return 1;
+}
+
+static int
+should_include(struct commit *commit, void *_data)
+{
+ struct bitmap *base = _data;
+
+ if (!add_to_include_set(base, commit)) {
+ struct commit_list *parent = commit->parents;
+
+ mark_as_seen((struct object *)commit);
+
+ while (parent) {
+ parent->item->object.flags |= SEEN;
+ mark_as_seen((struct object *)parent->item);
+ parent = parent->next;
+ }
+
+ return 0;
+ }
+
+ return 1;
+}
+
+static void compute_xor_offsets(void)
+{
+ static const int MAX_XOR_OFFSET_SEARCH = 10;
+
+ int i, next = 0;
+
+ while (next < writer.selected_nr) {
+ struct bitmapped_commit *stored = &writer.selected[next];
+
+ int best_offset = 0;
+ struct ewah_bitmap *best_bitmap = stored->bitmap;
+ struct ewah_bitmap *test_xor;
+
+ for (i = 1; i <= MAX_XOR_OFFSET_SEARCH; ++i) {
+ int curr = next - i;
+
+ if (curr < 0)
+ break;
+
+ test_xor = ewah_pool_new();
+ ewah_xor(writer.selected[curr].bitmap, stored->bitmap, test_xor);
+
+ if (test_xor->buffer_size < best_bitmap->buffer_size) {
+ if (best_bitmap != stored->bitmap)
+ ewah_pool_free(best_bitmap);
+
+ best_bitmap = test_xor;
+ best_offset = i;
+ } else {
+ ewah_pool_free(test_xor);
+ }
+ }
+
+ stored->xor_offset = best_offset;
+ stored->write_as = best_bitmap;
+
+ next++;
+ }
+}
+
+void bitmap_writer_build(struct packing_data *to_pack)
+{
+ static const double REUSE_BITMAP_THRESHOLD = 0.2;
+
+ int i, reuse_after, need_reset;
+ struct bitmap *base = bitmap_new();
+ struct rev_info revs;
+
+ writer.bitmaps = kh_init_sha1();
+ writer.to_pack = to_pack;
+
+ if (writer.show_progress)
+ writer.progress = start_progress("Building bitmaps", writer.selected_nr);
+
+ init_revisions(&revs, NULL);
+ revs.tag_objects = 1;
+ revs.tree_objects = 1;
+ revs.blob_objects = 1;
+ revs.no_walk = 0;
+
+ revs.include_check = should_include;
+ reset_revision_walk();
+
+ reuse_after = writer.selected_nr * REUSE_BITMAP_THRESHOLD;
+ need_reset = 0;
+
+ for (i = writer.selected_nr - 1; i >= 0; --i) {
+ struct bitmapped_commit *stored;
+ struct object *object;
+
+ khiter_t hash_pos;
+ int hash_ret;
+
+ stored = &writer.selected[i];
+ object = (struct object *)stored->commit;
+
+ if (stored->bitmap == NULL) {
+ if (i < writer.selected_nr - 1 &&
+ (need_reset ||
+ !in_merge_bases(writer.selected[i + 1].commit,
+ stored->commit))) {
+ bitmap_reset(base);
+ reset_all_seen();
+ }
+
+ add_pending_object(&revs, object, "");
+ revs.include_check_data = base;
+
+ if (prepare_revision_walk(&revs))
+ die("revision walk setup failed");
+
+ traverse_commit_list(&revs, show_commit, show_object, base);
+
+ revs.pending.nr = 0;
+ revs.pending.alloc = 0;
+ revs.pending.objects = NULL;
+
+ stored->bitmap = bitmap_to_ewah(base);
+ need_reset = 0;
+ } else
+ need_reset = 1;
+
+ if (i >= reuse_after)
+ stored->flags |= BITMAP_FLAG_REUSE;
+
+ hash_pos = kh_put_sha1(writer.bitmaps, object->sha1, &hash_ret);
+ if (hash_ret == 0)
+ die("Duplicate entry when writing index: %s",
+ sha1_to_hex(object->sha1));
+
+ kh_value(writer.bitmaps, hash_pos) = stored;
+ display_progress(writer.progress, writer.selected_nr - i);
+ }
+
+ bitmap_free(base);
+ stop_progress(&writer.progress);
+
+ compute_xor_offsets();
+}
+
+/**
+ * Select the commits that will be bitmapped
+ */
+static inline unsigned int next_commit_index(unsigned int idx)
+{
+ static const unsigned int MIN_COMMITS = 100;
+ static const unsigned int MAX_COMMITS = 5000;
+
+ static const unsigned int MUST_REGION = 100;
+ static const unsigned int MIN_REGION = 20000;
+
+ unsigned int offset, next;
+
+ if (idx <= MUST_REGION)
+ return 0;
+
+ if (idx <= MIN_REGION) {
+ offset = idx - MUST_REGION;
+ return (offset < MIN_COMMITS) ? offset : MIN_COMMITS;
+ }
+
+ offset = idx - MIN_REGION;
+ next = (offset < MAX_COMMITS) ? offset : MAX_COMMITS;
+
+ return (next > MIN_COMMITS) ? next : MIN_COMMITS;
+}
+
+static int date_compare(const void *_a, const void *_b)
+{
+ struct commit *a = *(struct commit **)_a;
+ struct commit *b = *(struct commit **)_b;
+ return (long)b->date - (long)a->date;
+}
+
+void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack)
+{
+ if (prepare_bitmap_git() < 0)
+ return;
+
+ writer.reused = kh_init_sha1();
+ rebuild_existing_bitmaps(to_pack, writer.reused, writer.show_progress);
+}
+
+static struct ewah_bitmap *find_reused_bitmap(const unsigned char *sha1)
+{
+ khiter_t hash_pos;
+
+ if (!writer.reused)
+ return NULL;
+
+ hash_pos = kh_get_sha1(writer.reused, sha1);
+ if (hash_pos >= kh_end(writer.reused))
+ return NULL;
+
+ return kh_value(writer.reused, hash_pos);
+}
+
+void bitmap_writer_select_commits(struct commit **indexed_commits,
+ unsigned int indexed_commits_nr,
+ int max_bitmaps)
+{
+ unsigned int i = 0, j, next;
+
+ qsort(indexed_commits, indexed_commits_nr, sizeof(indexed_commits[0]),
+ date_compare);
+
+ if (writer.show_progress)
+ writer.progress = start_progress("Selecting bitmap commits", 0);
+
+ if (indexed_commits_nr < 100) {
+ for (i = 0; i < indexed_commits_nr; ++i)
+ push_bitmapped_commit(indexed_commits[i], NULL);
+ return;
+ }
+
+ for (;;) {
+ struct ewah_bitmap *reused_bitmap = NULL;
+ struct commit *chosen = NULL;
+
+ next = next_commit_index(i);
+
+ if (i + next >= indexed_commits_nr)
+ break;
+
+ if (max_bitmaps > 0 && writer.selected_nr >= max_bitmaps) {
+ writer.selected_nr = max_bitmaps;
+ break;
+ }
+
+ if (next == 0) {
+ chosen = indexed_commits[i];
+ reused_bitmap = find_reused_bitmap(chosen->object.sha1);
+ } else {
+ chosen = indexed_commits[i + next];
+
+ for (j = 0; j <= next; ++j) {
+ struct commit *cm = indexed_commits[i + j];
+
+ reused_bitmap = find_reused_bitmap(cm->object.sha1);
+ if (reused_bitmap || (cm->object.flags & NEEDS_BITMAP) != 0) {
+ chosen = cm;
+ break;
+ }
+
+ if (cm->parents && cm->parents->next)
+ chosen = cm;
+ }
+ }
+
+ push_bitmapped_commit(chosen, reused_bitmap);
+
+ i += next + 1;
+ display_progress(writer.progress, i);
+ }
+
+ stop_progress(&writer.progress);
+}
+
+
+static int sha1write_ewah_helper(void *f, const void *buf, size_t len)
+{
+ /* sha1write will die on error */
+ sha1write(f, buf, len);
+ return len;
+}
+
+/**
+ * Write the bitmap index to disk
+ */
+static inline void dump_bitmap(struct sha1file *f, struct ewah_bitmap *bitmap)
+{
+ if (ewah_serialize_to(bitmap, sha1write_ewah_helper, f) < 0)
+ die("Failed to write bitmap index");
+}
+
+static const unsigned char *sha1_access(size_t pos, void *table)
+{
+ struct pack_idx_entry **index = table;
+ return index[pos]->sha1;
+}
+
+static void write_selected_commits_v1(struct sha1file *f,
+ struct pack_idx_entry **index,
+ uint32_t index_nr)
+{
+ int i;
+
+ for (i = 0; i < writer.selected_nr; ++i) {
+ struct bitmapped_commit *stored = &writer.selected[i];
+ struct bitmap_disk_entry on_disk;
+
+ int commit_pos =
+ sha1_pos(stored->commit->object.sha1, index, index_nr, sha1_access);
+
+ if (commit_pos < 0)
+ die("BUG: trying to write commit not in index");
+
+ on_disk.object_pos = htonl(commit_pos);
+ on_disk.xor_offset = stored->xor_offset;
+ on_disk.flags = stored->flags;
+
+ sha1write(f, &on_disk, sizeof(on_disk));
+ dump_bitmap(f, stored->write_as);
+ }
+}
+
+static void write_hash_cache(struct sha1file *f,
+ struct pack_idx_entry **index,
+ uint32_t index_nr)
+{
+ uint32_t i;
+
+ for (i = 0; i < index_nr; ++i) {
+ struct object_entry *entry = (struct object_entry *)index[i];
+ uint32_t hash_value = htonl(entry->hash);
+ sha1write(f, &hash_value, sizeof(hash_value));
+ }
+}
+
+void bitmap_writer_set_checksum(unsigned char *sha1)
+{
+ hashcpy(writer.pack_checksum, sha1);
+}
+
+void bitmap_writer_finish(struct pack_idx_entry **index,
+ uint32_t index_nr,
+ const char *filename,
+ uint16_t options)
+{
+ static char tmp_file[PATH_MAX];
+ static uint16_t default_version = 1;
+ static uint16_t flags = BITMAP_OPT_FULL_DAG;
+ struct sha1file *f;
+
+ struct bitmap_disk_header header;
+
+ int fd = odb_mkstemp(tmp_file, sizeof(tmp_file), "pack/tmp_bitmap_XXXXXX");
+
+ if (fd < 0)
+ die_errno("unable to create '%s'", tmp_file);
+ f = sha1fd(fd, tmp_file);
+
+ memcpy(header.magic, BITMAP_IDX_SIGNATURE, sizeof(BITMAP_IDX_SIGNATURE));
+ header.version = htons(default_version);
+ header.options = htons(flags | options);
+ header.entry_count = htonl(writer.selected_nr);
+ hashcpy(header.checksum, writer.pack_checksum);
+
+ sha1write(f, &header, sizeof(header));
+ dump_bitmap(f, writer.commits);
+ dump_bitmap(f, writer.trees);
+ dump_bitmap(f, writer.blobs);
+ dump_bitmap(f, writer.tags);
+ write_selected_commits_v1(f, index, index_nr);
+
+ if (options & BITMAP_OPT_HASH_CACHE)
+ write_hash_cache(f, index, index_nr);
+
+ sha1close(f, NULL, CSUM_FSYNC);
+
+ if (adjust_shared_perm(tmp_file))
+ die_errno("unable to make temporary bitmap file readable");
+
+ if (rename(tmp_file, filename))
+ die_errno("unable to rename temporary bitmap file to '%s'", filename);
+}
diff --git a/pack-bitmap.c b/pack-bitmap.c
new file mode 100644
index 000000000..ae0b57b95
--- /dev/null
+++ b/pack-bitmap.c
@@ -0,0 +1,1073 @@
+#include "cache.h"
+#include "commit.h"
+#include "tag.h"
+#include "diff.h"
+#include "revision.h"
+#include "progress.h"
+#include "list-objects.h"
+#include "pack.h"
+#include "pack-bitmap.h"
+#include "pack-revindex.h"
+#include "pack-objects.h"
+
+/*
+ * An entry on the bitmap index, representing the bitmap for a given
+ * commit.
+ */
+struct stored_bitmap {
+ unsigned char sha1[20];
+ struct ewah_bitmap *root;
+ struct stored_bitmap *xor;
+ int flags;
+};
+
+/*
+ * The currently active bitmap index. By design, repositories only have
+ * a single bitmap index available (the index for the biggest packfile in
+ * the repository), since bitmap indexes need full closure.
+ *
+ * If there is more than one bitmap index available (e.g. because of alternates),
+ * the active bitmap index is the largest one.
+ */
+static struct bitmap_index {
+ /* Packfile to which this bitmap index belongs to */
+ struct packed_git *pack;
+
+ /* reverse index for the packfile */
+ struct pack_revindex *reverse_index;
+
+ /*
+ * Mark the first `reuse_objects` in the packfile as reused:
+ * they will be sent as-is without using them for repacking
+ * calculations
+ */
+ uint32_t reuse_objects;
+
+ /* mmapped buffer of the whole bitmap index */
+ unsigned char *map;
+ size_t map_size; /* size of the mmaped buffer */
+ size_t map_pos; /* current position when loading the index */
+
+ /*
+ * Type indexes.
+ *
+ * Each bitmap marks which objects in the packfile are of the given
+ * type. This provides type information when yielding the objects from
+ * the packfile during a walk, which allows for better delta bases.
+ */
+ struct ewah_bitmap *commits;
+ struct ewah_bitmap *trees;
+ struct ewah_bitmap *blobs;
+ struct ewah_bitmap *tags;
+
+ /* Map from SHA1 -> `stored_bitmap` for all the bitmapped comits */
+ khash_sha1 *bitmaps;
+
+ /* Number of bitmapped commits */
+ uint32_t entry_count;
+
+ /* Name-hash cache (or NULL if not present). */
+ uint32_t *hashes;
+
+ /*
+ * Extended index.
+ *
+ * When trying to perform bitmap operations with objects that are not
+ * packed in `pack`, these objects are added to this "fake index" and
+ * are assumed to appear at the end of the packfile for all operations
+ */
+ struct eindex {
+ struct object **objects;
+ uint32_t *hashes;
+ uint32_t count, alloc;
+ khash_sha1_pos *positions;
+ } ext_index;
+
+ /* Bitmap result of the last performed walk */
+ struct bitmap *result;
+
+ /* Version of the bitmap index */
+ unsigned int version;
+
+ unsigned loaded : 1;
+
+} bitmap_git;
+
+static struct ewah_bitmap *lookup_stored_bitmap(struct stored_bitmap *st)
+{
+ struct ewah_bitmap *parent;
+ struct ewah_bitmap *composed;
+
+ if (st->xor == NULL)
+ return st->root;
+
+ composed = ewah_pool_new();
+ parent = lookup_stored_bitmap(st->xor);
+ ewah_xor(st->root, parent, composed);
+
+ ewah_pool_free(st->root);
+ st->root = composed;
+ st->xor = NULL;
+
+ return composed;
+}
+
+/*
+ * Read a bitmap from the current read position on the mmaped
+ * index, and increase the read position accordingly
+ */
+static struct ewah_bitmap *read_bitmap_1(struct bitmap_index *index)
+{
+ struct ewah_bitmap *b = ewah_pool_new();
+
+ int bitmap_size = ewah_read_mmap(b,
+ index->map + index->map_pos,
+ index->map_size - index->map_pos);
+
+ if (bitmap_size < 0) {
+ error("Failed to load bitmap index (corrupted?)");
+ ewah_pool_free(b);
+ return NULL;
+ }
+
+ index->map_pos += bitmap_size;
+ return b;
+}
+
+static int load_bitmap_header(struct bitmap_index *index)
+{
+ struct bitmap_disk_header *header = (void *)index->map;
+
+ if (index->map_size < sizeof(*header) + 20)
+ return error("Corrupted bitmap index (missing header data)");
+
+ if (memcmp(header->magic, BITMAP_IDX_SIGNATURE, sizeof(BITMAP_IDX_SIGNATURE)) != 0)
+ return error("Corrupted bitmap index file (wrong header)");
+
+ index->version = ntohs(header->version);
+ if (index->version != 1)
+ return error("Unsupported version for bitmap index file (%d)", index->version);
+
+ /* Parse known bitmap format options */
+ {
+ uint32_t flags = ntohs(header->options);
+
+ if ((flags & BITMAP_OPT_FULL_DAG) == 0)
+ return error("Unsupported options for bitmap index file "
+ "(Git requires BITMAP_OPT_FULL_DAG)");
+
+ if (flags & BITMAP_OPT_HASH_CACHE) {
+ unsigned char *end = index->map + index->map_size - 20;
+ index->hashes = ((uint32_t *)end) - index->pack->num_objects;
+ }
+ }
+
+ index->entry_count = ntohl(header->entry_count);
+ index->map_pos += sizeof(*header);
+ return 0;
+}
+
+static struct stored_bitmap *store_bitmap(struct bitmap_index *index,
+ struct ewah_bitmap *root,
+ const unsigned char *sha1,
+ struct stored_bitmap *xor_with,
+ int flags)
+{
+ struct stored_bitmap *stored;
+ khiter_t hash_pos;
+ int ret;
+
+ stored = xmalloc(sizeof(struct stored_bitmap));
+ stored->root = root;
+ stored->xor = xor_with;
+ stored->flags = flags;
+ hashcpy(stored->sha1, sha1);
+
+ hash_pos = kh_put_sha1(index->bitmaps, stored->sha1, &ret);
+
+ /* a 0 return code means the insertion succeeded with no changes,
+ * because the SHA1 already existed on the map. this is bad, there
+ * shouldn't be duplicated commits in the index */
+ if (ret == 0) {
+ error("Duplicate entry in bitmap index: %s", sha1_to_hex(sha1));
+ return NULL;
+ }
+
+ kh_value(index->bitmaps, hash_pos) = stored;
+ return stored;
+}
+
+static int load_bitmap_entries_v1(struct bitmap_index *index)
+{
+ static const size_t MAX_XOR_OFFSET = 160;
+
+ uint32_t i;
+ struct stored_bitmap **recent_bitmaps;
+ struct bitmap_disk_entry *entry;
+
+ recent_bitmaps = xcalloc(MAX_XOR_OFFSET, sizeof(struct stored_bitmap));
+
+ for (i = 0; i < index->entry_count; ++i) {
+ int xor_offset, flags;
+ struct ewah_bitmap *bitmap = NULL;
+ struct stored_bitmap *xor_bitmap = NULL;
+ uint32_t commit_idx_pos;
+ const unsigned char *sha1;
+
+ entry = (struct bitmap_disk_entry *)(index->map + index->map_pos);
+ index->map_pos += sizeof(struct bitmap_disk_entry);
+
+ commit_idx_pos = ntohl(entry->object_pos);
+ sha1 = nth_packed_object_sha1(index->pack, commit_idx_pos);
+
+ xor_offset = (int)entry->xor_offset;
+ flags = (int)entry->flags;
+
+ bitmap = read_bitmap_1(index);
+ if (!bitmap)
+ return -1;
+
+ if (xor_offset > MAX_XOR_OFFSET || xor_offset > i)
+ return error("Corrupted bitmap pack index");
+
+ if (xor_offset > 0) {
+ xor_bitmap = recent_bitmaps[(i - xor_offset) % MAX_XOR_OFFSET];
+
+ if (xor_bitmap == NULL)
+ return error("Invalid XOR offset in bitmap pack index");
+ }
+
+ recent_bitmaps[i % MAX_XOR_OFFSET] = store_bitmap(
+ index, bitmap, sha1, xor_bitmap, flags);
+ }
+
+ return 0;
+}
+
+static int open_pack_bitmap_1(struct packed_git *packfile)
+{
+ int fd;
+ struct stat st;
+ char *idx_name;
+
+ if (open_pack_index(packfile))
+ return -1;
+
+ idx_name = pack_bitmap_filename(packfile);
+ fd = git_open_noatime(idx_name);
+ free(idx_name);
+
+ if (fd < 0)
+ return -1;
+
+ if (fstat(fd, &st)) {
+ close(fd);
+ return -1;
+ }
+
+ if (bitmap_git.pack) {
+ warning("ignoring extra bitmap file: %s", packfile->pack_name);
+ close(fd);
+ return -1;
+ }
+
+ bitmap_git.pack = packfile;
+ bitmap_git.map_size = xsize_t(st.st_size);
+ bitmap_git.map = xmmap(NULL, bitmap_git.map_size, PROT_READ, MAP_PRIVATE, fd, 0);
+ bitmap_git.map_pos = 0;
+ close(fd);
+
+ if (load_bitmap_header(&bitmap_git) < 0) {
+ munmap(bitmap_git.map, bitmap_git.map_size);
+ bitmap_git.map = NULL;
+ bitmap_git.map_size = 0;
+ return -1;
+ }
+
+ return 0;
+}
+
+static int load_pack_bitmap(void)
+{
+ assert(bitmap_git.map && !bitmap_git.loaded);
+
+ bitmap_git.bitmaps = kh_init_sha1();
+ bitmap_git.ext_index.positions = kh_init_sha1_pos();
+ bitmap_git.reverse_index = revindex_for_pack(bitmap_git.pack);
+
+ if (!(bitmap_git.commits = read_bitmap_1(&bitmap_git)) ||
+ !(bitmap_git.trees = read_bitmap_1(&bitmap_git)) ||
+ !(bitmap_git.blobs = read_bitmap_1(&bitmap_git)) ||
+ !(bitmap_git.tags = read_bitmap_1(&bitmap_git)))
+ goto failed;
+
+ if (load_bitmap_entries_v1(&bitmap_git) < 0)
+ goto failed;
+
+ bitmap_git.loaded = 1;
+ return 0;
+
+failed:
+ munmap(bitmap_git.map, bitmap_git.map_size);
+ bitmap_git.map = NULL;
+ bitmap_git.map_size = 0;
+ return -1;
+}
+
+char *pack_bitmap_filename(struct packed_git *p)
+{
+ char *idx_name;
+ int len;
+
+ len = strlen(p->pack_name) - strlen(".pack");
+ idx_name = xmalloc(len + strlen(".bitmap") + 1);
+
+ memcpy(idx_name, p->pack_name, len);
+ memcpy(idx_name + len, ".bitmap", strlen(".bitmap") + 1);
+
+ return idx_name;
+}
+
+static int open_pack_bitmap(void)
+{
+ struct packed_git *p;
+ int ret = -1;
+
+ assert(!bitmap_git.map && !bitmap_git.loaded);
+
+ prepare_packed_git();
+ for (p = packed_git; p; p = p->next) {
+ if (open_pack_bitmap_1(p) == 0)
+ ret = 0;
+ }
+
+ return ret;
+}
+
+int prepare_bitmap_git(void)
+{
+ if (bitmap_git.loaded)
+ return 0;
+
+ if (!open_pack_bitmap())
+ return load_pack_bitmap();
+
+ return -1;
+}
+
+struct include_data {
+ struct bitmap *base;
+ struct bitmap *seen;
+};
+
+static inline int bitmap_position_extended(const unsigned char *sha1)
+{
+ khash_sha1_pos *positions = bitmap_git.ext_index.positions;
+ khiter_t pos = kh_get_sha1_pos(positions, sha1);
+
+ if (pos < kh_end(positions)) {
+ int bitmap_pos = kh_value(positions, pos);
+ return bitmap_pos + bitmap_git.pack->num_objects;
+ }
+
+ return -1;
+}
+
+static inline int bitmap_position_packfile(const unsigned char *sha1)
+{
+ off_t offset = find_pack_entry_one(sha1, bitmap_git.pack);
+ if (!offset)
+ return -1;
+
+ return find_revindex_position(bitmap_git.reverse_index, offset);
+}
+
+static int bitmap_position(const unsigned char *sha1)
+{
+ int pos = bitmap_position_packfile(sha1);
+ return (pos >= 0) ? pos : bitmap_position_extended(sha1);
+}
+
+static int ext_index_add_object(struct object *object, const char *name)
+{
+ struct eindex *eindex = &bitmap_git.ext_index;
+
+ khiter_t hash_pos;
+ int hash_ret;
+ int bitmap_pos;
+
+ hash_pos = kh_put_sha1_pos(eindex->positions, object->sha1, &hash_ret);
+ if (hash_ret > 0) {
+ if (eindex->count >= eindex->alloc) {
+ eindex->alloc = (eindex->alloc + 16) * 3 / 2;
+ eindex->objects = xrealloc(eindex->objects,
+ eindex->alloc * sizeof(struct object *));
+ eindex->hashes = xrealloc(eindex->hashes,
+ eindex->alloc * sizeof(uint32_t));
+ }
+
+ bitmap_pos = eindex->count;
+ eindex->objects[eindex->count] = object;
+ eindex->hashes[eindex->count] = pack_name_hash(name);
+ kh_value(eindex->positions, hash_pos) = bitmap_pos;
+ eindex->count++;
+ } else {
+ bitmap_pos = kh_value(eindex->positions, hash_pos);
+ }
+
+ return bitmap_pos + bitmap_git.pack->num_objects;
+}
+
+static void show_object(struct object *object, const struct name_path *path,
+ const char *last, void *data)
+{
+ struct bitmap *base = data;
+ int bitmap_pos;
+
+ bitmap_pos = bitmap_position(object->sha1);
+
+ if (bitmap_pos < 0) {
+ char *name = path_name(path, last);
+ bitmap_pos = ext_index_add_object(object, name);
+ free(name);
+ }
+
+ bitmap_set(base, bitmap_pos);
+}
+
+static void show_commit(struct commit *commit, void *data)
+{
+}
+
+static int add_to_include_set(struct include_data *data,
+ const unsigned char *sha1,
+ int bitmap_pos)
+{
+ khiter_t hash_pos;
+
+ if (data->seen && bitmap_get(data->seen, bitmap_pos))
+ return 0;
+
+ if (bitmap_get(data->base, bitmap_pos))
+ return 0;
+
+ hash_pos = kh_get_sha1(bitmap_git.bitmaps, sha1);
+ if (hash_pos < kh_end(bitmap_git.bitmaps)) {
+ struct stored_bitmap *st = kh_value(bitmap_git.bitmaps, hash_pos);
+ bitmap_or_ewah(data->base, lookup_stored_bitmap(st));
+ return 0;
+ }
+
+ bitmap_set(data->base, bitmap_pos);
+ return 1;
+}
+
+static int should_include(struct commit *commit, void *_data)
+{
+ struct include_data *data = _data;
+ int bitmap_pos;
+
+ bitmap_pos = bitmap_position(commit->object.sha1);
+ if (bitmap_pos < 0)
+ bitmap_pos = ext_index_add_object((struct object *)commit, NULL);
+
+ if (!add_to_include_set(data, commit->object.sha1, bitmap_pos)) {
+ struct commit_list *parent = commit->parents;
+
+ while (parent) {
+ parent->item->object.flags |= SEEN;
+ parent = parent->next;
+ }
+
+ return 0;
+ }
+
+ return 1;
+}
+
+static struct bitmap *find_objects(struct rev_info *revs,
+ struct object_list *roots,
+ struct bitmap *seen)
+{
+ struct bitmap *base = NULL;
+ int needs_walk = 0;
+
+ struct object_list *not_mapped = NULL;
+
+ /*
+ * Go through all the roots for the walk. The ones that have bitmaps
+ * on the bitmap index will be `or`ed together to form an initial
+ * global reachability analysis.
+ *
+ * The ones without bitmaps in the index will be stored in the
+ * `not_mapped_list` for further processing.
+ */
+ while (roots) {
+ struct object *object = roots->item;
+ roots = roots->next;
+
+ if (object->type == OBJ_COMMIT) {
+ khiter_t pos = kh_get_sha1(bitmap_git.bitmaps, object->sha1);
+
+ if (pos < kh_end(bitmap_git.bitmaps)) {
+ struct stored_bitmap *st = kh_value(bitmap_git.bitmaps, pos);
+ struct ewah_bitmap *or_with = lookup_stored_bitmap(st);
+
+ if (base == NULL)
+ base = ewah_to_bitmap(or_with);
+ else
+ bitmap_or_ewah(base, or_with);
+
+ object->flags |= SEEN;
+ continue;
+ }
+ }
+
+ object_list_insert(object, &not_mapped);
+ }
+
+ /*
+ * Best case scenario: We found bitmaps for all the roots,
+ * so the resulting `or` bitmap has the full reachability analysis
+ */
+ if (not_mapped == NULL)
+ return base;
+
+ roots = not_mapped;
+
+ /*
+ * Let's iterate through all the roots that don't have bitmaps to
+ * check if we can determine them to be reachable from the existing
+ * global bitmap.
+ *
+ * If we cannot find them in the existing global bitmap, we'll need
+ * to push them to an actual walk and run it until we can confirm
+ * they are reachable
+ */
+ while (roots) {
+ struct object *object = roots->item;
+ int pos;
+
+ roots = roots->next;
+ pos = bitmap_position(object->sha1);
+
+ if (pos < 0 || base == NULL || !bitmap_get(base, pos)) {
+ object->flags &= ~UNINTERESTING;
+ add_pending_object(revs, object, "");
+ needs_walk = 1;
+ } else {
+ object->flags |= SEEN;
+ }
+ }
+
+ if (needs_walk) {
+ struct include_data incdata;
+
+ if (base == NULL)
+ base = bitmap_new();
+
+ incdata.base = base;
+ incdata.seen = seen;
+
+ revs->include_check = should_include;
+ revs->include_check_data = &incdata;
+
+ if (prepare_revision_walk(revs))
+ die("revision walk setup failed");
+
+ traverse_commit_list(revs, show_commit, show_object, base);
+ }
+
+ return base;
+}
+
+static void show_extended_objects(struct bitmap *objects,
+ show_reachable_fn show_reach)
+{
+ struct eindex *eindex = &bitmap_git.ext_index;
+ uint32_t i;
+
+ for (i = 0; i < eindex->count; ++i) {
+ struct object *obj;
+
+ if (!bitmap_get(objects, bitmap_git.pack->num_objects + i))
+ continue;
+
+ obj = eindex->objects[i];
+ show_reach(obj->sha1, obj->type, 0, eindex->hashes[i], NULL, 0);
+ }
+}
+
+static void show_objects_for_type(
+ struct bitmap *objects,
+ struct ewah_bitmap *type_filter,
+ enum object_type object_type,
+ show_reachable_fn show_reach)
+{
+ size_t pos = 0, i = 0;
+ uint32_t offset;
+
+ struct ewah_iterator it;
+ eword_t filter;
+
+ if (bitmap_git.reuse_objects == bitmap_git.pack->num_objects)
+ return;
+
+ ewah_iterator_init(&it, type_filter);
+
+ while (i < objects->word_alloc && ewah_iterator_next(&filter, &it)) {
+ eword_t word = objects->words[i] & filter;
+
+ for (offset = 0; offset < BITS_IN_WORD; ++offset) {
+ const unsigned char *sha1;
+ struct revindex_entry *entry;
+ uint32_t hash = 0;
+
+ if ((word >> offset) == 0)
+ break;
+
+ offset += ewah_bit_ctz64(word >> offset);
+
+ if (pos + offset < bitmap_git.reuse_objects)
+ continue;
+
+ entry = &bitmap_git.reverse_index->revindex[pos + offset];
+ sha1 = nth_packed_object_sha1(bitmap_git.pack, entry->nr);
+
+ if (bitmap_git.hashes)
+ hash = ntohl(bitmap_git.hashes[entry->nr]);
+
+ show_reach(sha1, object_type, 0, hash, bitmap_git.pack, entry->offset);
+ }
+
+ pos += BITS_IN_WORD;
+ i++;
+ }
+}
+
+static int in_bitmapped_pack(struct object_list *roots)
+{
+ while (roots) {
+ struct object *object = roots->item;
+ roots = roots->next;
+
+ if (find_pack_entry_one(object->sha1, bitmap_git.pack) > 0)
+ return 1;
+ }
+
+ return 0;
+}
+
+int prepare_bitmap_walk(struct rev_info *revs)
+{
+ unsigned int i;
+ unsigned int pending_nr = revs->pending.nr;
+ struct object_array_entry *pending_e = revs->pending.objects;
+
+ struct object_list *wants = NULL;
+ struct object_list *haves = NULL;
+
+ struct bitmap *wants_bitmap = NULL;
+ struct bitmap *haves_bitmap = NULL;
+
+ if (!bitmap_git.loaded) {
+ /* try to open a bitmapped pack, but don't parse it yet
+ * because we may not need to use it */
+ if (open_pack_bitmap() < 0)
+ return -1;
+ }
+
+ for (i = 0; i < pending_nr; ++i) {
+ struct object *object = pending_e[i].item;
+
+ if (object->type == OBJ_NONE)
+ parse_object_or_die(object->sha1, NULL);
+
+ while (object->type == OBJ_TAG) {
+ struct tag *tag = (struct tag *) object;
+
+ if (object->flags & UNINTERESTING)
+ object_list_insert(object, &haves);
+ else
+ object_list_insert(object, &wants);
+
+ if (!tag->tagged)
+ die("bad tag");
+ object = parse_object_or_die(tag->tagged->sha1, NULL);
+ }
+
+ if (object->flags & UNINTERESTING)
+ object_list_insert(object, &haves);
+ else
+ object_list_insert(object, &wants);
+ }
+
+ /*
+ * if we have a HAVES list, but none of those haves is contained
+ * in the packfile that has a bitmap, we don't have anything to
+ * optimize here
+ */
+ if (haves && !in_bitmapped_pack(haves))
+ return -1;
+
+ /* if we don't want anything, we're done here */
+ if (!wants)
+ return -1;
+
+ /*
+ * now we're going to use bitmaps, so load the actual bitmap entries
+ * from disk. this is the point of no return; after this the rev_list
+ * becomes invalidated and we must perform the revwalk through bitmaps
+ */
+ if (!bitmap_git.loaded && load_pack_bitmap() < 0)
+ return -1;
+
+ revs->pending.nr = 0;
+ revs->pending.alloc = 0;
+ revs->pending.objects = NULL;
+
+ if (haves) {
+ haves_bitmap = find_objects(revs, haves, NULL);
+ reset_revision_walk();
+
+ if (haves_bitmap == NULL)
+ die("BUG: failed to perform bitmap walk");
+ }
+
+ wants_bitmap = find_objects(revs, wants, haves_bitmap);
+
+ if (!wants_bitmap)
+ die("BUG: failed to perform bitmap walk");
+
+ if (haves_bitmap)
+ bitmap_and_not(wants_bitmap, haves_bitmap);
+
+ bitmap_git.result = wants_bitmap;
+
+ bitmap_free(haves_bitmap);
+ return 0;
+}
+
+int reuse_partial_packfile_from_bitmap(struct packed_git **packfile,
+ uint32_t *entries,
+ off_t *up_to)
+{
+ /*
+ * Reuse the packfile content if we need more than
+ * 90% of its objects
+ */
+ static const double REUSE_PERCENT = 0.9;
+
+ struct bitmap *result = bitmap_git.result;
+ uint32_t reuse_threshold;
+ uint32_t i, reuse_objects = 0;
+
+ assert(result);
+
+ for (i = 0; i < result->word_alloc; ++i) {
+ if (result->words[i] != (eword_t)~0) {
+ reuse_objects += ewah_bit_ctz64(~result->words[i]);
+ break;
+ }
+
+ reuse_objects += BITS_IN_WORD;
+ }
+
+#ifdef GIT_BITMAP_DEBUG
+ {
+ const unsigned char *sha1;
+ struct revindex_entry *entry;
+
+ entry = &bitmap_git.reverse_index->revindex[reuse_objects];
+ sha1 = nth_packed_object_sha1(bitmap_git.pack, entry->nr);
+
+ fprintf(stderr, "Failed to reuse at %d (%016llx)\n",
+ reuse_objects, result->words[i]);
+ fprintf(stderr, " %s\n", sha1_to_hex(sha1));
+ }
+#endif
+
+ if (!reuse_objects)
+ return -1;
+
+ if (reuse_objects >= bitmap_git.pack->num_objects) {
+ bitmap_git.reuse_objects = *entries = bitmap_git.pack->num_objects;
+ *up_to = -1; /* reuse the full pack */
+ *packfile = bitmap_git.pack;
+ return 0;
+ }
+
+ reuse_threshold = bitmap_popcount(bitmap_git.result) * REUSE_PERCENT;
+
+ if (reuse_objects < reuse_threshold)
+ return -1;
+
+ bitmap_git.reuse_objects = *entries = reuse_objects;
+ *up_to = bitmap_git.reverse_index->revindex[reuse_objects].offset;
+ *packfile = bitmap_git.pack;
+
+ return 0;
+}
+
+void traverse_bitmap_commit_list(show_reachable_fn show_reachable)
+{
+ assert(bitmap_git.result);
+
+ show_objects_for_type(bitmap_git.result, bitmap_git.commits,
+ OBJ_COMMIT, show_reachable);
+ show_objects_for_type(bitmap_git.result, bitmap_git.trees,
+ OBJ_TREE, show_reachable);
+ show_objects_for_type(bitmap_git.result, bitmap_git.blobs,
+ OBJ_BLOB, show_reachable);
+ show_objects_for_type(bitmap_git.result, bitmap_git.tags,
+ OBJ_TAG, show_reachable);
+
+ show_extended_objects(bitmap_git.result, show_reachable);
+
+ bitmap_free(bitmap_git.result);
+ bitmap_git.result = NULL;
+}
+
+static uint32_t count_object_type(struct bitmap *objects,
+ enum object_type type)
+{
+ struct eindex *eindex = &bitmap_git.ext_index;
+
+ uint32_t i = 0, count = 0;
+ struct ewah_iterator it;
+ eword_t filter;
+
+ switch (type) {
+ case OBJ_COMMIT:
+ ewah_iterator_init(&it, bitmap_git.commits);
+ break;
+
+ case OBJ_TREE:
+ ewah_iterator_init(&it, bitmap_git.trees);
+ break;
+
+ case OBJ_BLOB:
+ ewah_iterator_init(&it, bitmap_git.blobs);
+ break;
+
+ case OBJ_TAG:
+ ewah_iterator_init(&it, bitmap_git.tags);
+ break;
+
+ default:
+ return 0;
+ }
+
+ while (i < objects->word_alloc && ewah_iterator_next(&filter, &it)) {
+ eword_t word = objects->words[i++] & filter;
+ count += ewah_bit_popcount64(word);
+ }
+
+ for (i = 0; i < eindex->count; ++i) {
+ if (eindex->objects[i]->type == type &&
+ bitmap_get(objects, bitmap_git.pack->num_objects + i))
+ count++;
+ }
+
+ return count;
+}
+
+void count_bitmap_commit_list(uint32_t *commits, uint32_t *trees,
+ uint32_t *blobs, uint32_t *tags)
+{
+ assert(bitmap_git.result);
+
+ if (commits)
+ *commits = count_object_type(bitmap_git.result, OBJ_COMMIT);
+
+ if (trees)
+ *trees = count_object_type(bitmap_git.result, OBJ_TREE);
+
+ if (blobs)
+ *blobs = count_object_type(bitmap_git.result, OBJ_BLOB);
+
+ if (tags)
+ *tags = count_object_type(bitmap_git.result, OBJ_TAG);
+}
+
+struct bitmap_test_data {
+ struct bitmap *base;
+ struct progress *prg;
+ size_t seen;
+};
+
+static void test_show_object(struct object *object,
+ const struct name_path *path,
+ const char *last, void *data)
+{
+ struct bitmap_test_data *tdata = data;
+ int bitmap_pos;
+
+ bitmap_pos = bitmap_position(object->sha1);
+ if (bitmap_pos < 0)
+ die("Object not in bitmap: %s\n", sha1_to_hex(object->sha1));
+
+ bitmap_set(tdata->base, bitmap_pos);
+ display_progress(tdata->prg, ++tdata->seen);
+}
+
+static void test_show_commit(struct commit *commit, void *data)
+{
+ struct bitmap_test_data *tdata = data;
+ int bitmap_pos;
+
+ bitmap_pos = bitmap_position(commit->object.sha1);
+ if (bitmap_pos < 0)
+ die("Object not in bitmap: %s\n", sha1_to_hex(commit->object.sha1));
+
+ bitmap_set(tdata->base, bitmap_pos);
+ display_progress(tdata->prg, ++tdata->seen);
+}
+
+void test_bitmap_walk(struct rev_info *revs)
+{
+ struct object *root;
+ struct bitmap *result = NULL;
+ khiter_t pos;
+ size_t result_popcnt;
+ struct bitmap_test_data tdata;
+
+ if (prepare_bitmap_git())
+ die("failed to load bitmap indexes");
+
+ if (revs->pending.nr != 1)
+ die("you must specify exactly one commit to test");
+
+ fprintf(stderr, "Bitmap v%d test (%d entries loaded)\n",
+ bitmap_git.version, bitmap_git.entry_count);
+
+ root = revs->pending.objects[0].item;
+ pos = kh_get_sha1(bitmap_git.bitmaps, root->sha1);
+
+ if (pos < kh_end(bitmap_git.bitmaps)) {
+ struct stored_bitmap *st = kh_value(bitmap_git.bitmaps, pos);
+ struct ewah_bitmap *bm = lookup_stored_bitmap(st);
+
+ fprintf(stderr, "Found bitmap for %s. %d bits / %08x checksum\n",
+ sha1_to_hex(root->sha1), (int)bm->bit_size, ewah_checksum(bm));
+
+ result = ewah_to_bitmap(bm);
+ }
+
+ if (result == NULL)
+ die("Commit %s doesn't have an indexed bitmap", sha1_to_hex(root->sha1));
+
+ revs->tag_objects = 1;
+ revs->tree_objects = 1;
+ revs->blob_objects = 1;
+
+ result_popcnt = bitmap_popcount(result);
+
+ if (prepare_revision_walk(revs))
+ die("revision walk setup failed");
+
+ tdata.base = bitmap_new();
+ tdata.prg = start_progress("Verifying bitmap entries", result_popcnt);
+ tdata.seen = 0;
+
+ traverse_commit_list(revs, &test_show_commit, &test_show_object, &tdata);
+
+ stop_progress(&tdata.prg);
+
+ if (bitmap_equals(result, tdata.base))
+ fprintf(stderr, "OK!\n");
+ else
+ fprintf(stderr, "Mismatch!\n");
+}
+
+static int rebuild_bitmap(uint32_t *reposition,
+ struct ewah_bitmap *source,
+ struct bitmap *dest)
+{
+ uint32_t pos = 0;
+ struct ewah_iterator it;
+ eword_t word;
+
+ ewah_iterator_init(&it, source);
+
+ while (ewah_iterator_next(&word, &it)) {
+ uint32_t offset, bit_pos;
+
+ for (offset = 0; offset < BITS_IN_WORD; ++offset) {
+ if ((word >> offset) == 0)
+ break;
+
+ offset += ewah_bit_ctz64(word >> offset);
+
+ bit_pos = reposition[pos + offset];
+ if (bit_pos > 0)
+ bitmap_set(dest, bit_pos - 1);
+ else /* can't reuse, we don't have the object */
+ return -1;
+ }
+
+ pos += BITS_IN_WORD;
+ }
+ return 0;
+}
+
+int rebuild_existing_bitmaps(struct packing_data *mapping,
+ khash_sha1 *reused_bitmaps,
+ int show_progress)
+{
+ uint32_t i, num_objects;
+ uint32_t *reposition;
+ struct bitmap *rebuild;
+ struct stored_bitmap *stored;
+ struct progress *progress = NULL;
+
+ khiter_t hash_pos;
+ int hash_ret;
+
+ if (prepare_bitmap_git() < 0)
+ return -1;
+
+ num_objects = bitmap_git.pack->num_objects;
+ reposition = xcalloc(num_objects, sizeof(uint32_t));
+
+ for (i = 0; i < num_objects; ++i) {
+ const unsigned char *sha1;
+ struct revindex_entry *entry;
+ struct object_entry *oe;
+
+ entry = &bitmap_git.reverse_index->revindex[i];
+ sha1 = nth_packed_object_sha1(bitmap_git.pack, entry->nr);
+ oe = packlist_find(mapping, sha1, NULL);
+
+ if (oe)
+ reposition[i] = oe->in_pack_pos + 1;
+ }
+
+ rebuild = bitmap_new();
+ i = 0;
+
+ if (show_progress)
+ progress = start_progress("Reusing bitmaps", 0);
+
+ kh_foreach_value(bitmap_git.bitmaps, stored, {
+ if (stored->flags & BITMAP_FLAG_REUSE) {
+ if (!rebuild_bitmap(reposition,
+ lookup_stored_bitmap(stored),
+ rebuild)) {
+ hash_pos = kh_put_sha1(reused_bitmaps,
+ stored->sha1,
+ &hash_ret);
+ kh_value(reused_bitmaps, hash_pos) =
+ bitmap_to_ewah(rebuild);
+ }
+ bitmap_reset(rebuild);
+ display_progress(progress, ++i);
+ }
+ });
+
+ stop_progress(&progress);
+
+ free(reposition);
+ bitmap_free(rebuild);
+ return 0;
+}
diff --git a/pack-bitmap.h b/pack-bitmap.h
new file mode 100644
index 000000000..8b7f4e9f0
--- /dev/null
+++ b/pack-bitmap.h
@@ -0,0 +1,64 @@
+#ifndef PACK_BITMAP_H
+#define PACK_BITMAP_H
+
+#include "ewah/ewok.h"
+#include "khash.h"
+#include "pack-objects.h"
+
+struct bitmap_disk_entry {
+ uint32_t object_pos;
+ uint8_t xor_offset;
+ uint8_t flags;
+} __attribute__((packed));
+
+struct bitmap_disk_header {
+ char magic[4];
+ uint16_t version;
+ uint16_t options;
+ uint32_t entry_count;
+ unsigned char checksum[20];
+};
+
+static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'};
+
+#define NEEDS_BITMAP (1u<<22)
+
+enum pack_bitmap_opts {
+ BITMAP_OPT_FULL_DAG = 1,
+ BITMAP_OPT_HASH_CACHE = 4,
+};
+
+enum pack_bitmap_flags {
+ BITMAP_FLAG_REUSE = 0x1
+};
+
+typedef int (*show_reachable_fn)(
+ const unsigned char *sha1,
+ enum object_type type,
+ int flags,
+ uint32_t hash,
+ struct packed_git *found_pack,
+ off_t found_offset);
+
+int prepare_bitmap_git(void);
+void count_bitmap_commit_list(uint32_t *commits, uint32_t *trees, uint32_t *blobs, uint32_t *tags);
+void traverse_bitmap_commit_list(show_reachable_fn show_reachable);
+void test_bitmap_walk(struct rev_info *revs);
+char *pack_bitmap_filename(struct packed_git *p);
+int prepare_bitmap_walk(struct rev_info *revs);
+int reuse_partial_packfile_from_bitmap(struct packed_git **packfile, uint32_t *entries, off_t *up_to);
+int rebuild_existing_bitmaps(struct packing_data *mapping, khash_sha1 *reused_bitmaps, int show_progress);
+
+void bitmap_writer_show_progress(int show);
+void bitmap_writer_set_checksum(unsigned char *sha1);
+void bitmap_writer_build_type_index(struct pack_idx_entry **index, uint32_t index_nr);
+void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack);
+void bitmap_writer_select_commits(struct commit **indexed_commits,
+ unsigned int indexed_commits_nr, int max_bitmaps);
+void bitmap_writer_build(struct packing_data *to_pack);
+void bitmap_writer_finish(struct pack_idx_entry **index,
+ uint32_t index_nr,
+ const char *filename,
+ uint16_t options);
+
+#endif
diff --git a/pack-objects.c b/pack-objects.c
new file mode 100644
index 000000000..d01d851ce
--- /dev/null
+++ b/pack-objects.c
@@ -0,0 +1,111 @@
+#include "cache.h"
+#include "object.h"
+#include "pack.h"
+#include "pack-objects.h"
+
+static uint32_t locate_object_entry_hash(struct packing_data *pdata,
+ const unsigned char *sha1,
+ int *found)
+{
+ uint32_t i, hash, mask = (pdata->index_size - 1);
+
+ memcpy(&hash, sha1, sizeof(uint32_t));
+ i = hash & mask;
+
+ while (pdata->index[i] > 0) {
+ uint32_t pos = pdata->index[i] - 1;
+
+ if (!hashcmp(sha1, pdata->objects[pos].idx.sha1)) {
+ *found = 1;
+ return i;
+ }
+
+ i = (i + 1) & mask;
+ }
+
+ *found = 0;
+ return i;
+}
+
+static inline uint32_t closest_pow2(uint32_t v)
+{
+ v = v - 1;
+ v |= v >> 1;
+ v |= v >> 2;
+ v |= v >> 4;
+ v |= v >> 8;
+ v |= v >> 16;
+ return v + 1;
+}
+
+static void rehash_objects(struct packing_data *pdata)
+{
+ uint32_t i;
+ struct object_entry *entry;
+
+ pdata->index_size = closest_pow2(pdata->nr_objects * 3);
+ if (pdata->index_size < 1024)
+ pdata->index_size = 1024;
+
+ pdata->index = xrealloc(pdata->index, sizeof(uint32_t) * pdata->index_size);
+ memset(pdata->index, 0, sizeof(int) * pdata->index_size);
+
+ entry = pdata->objects;
+
+ for (i = 0; i < pdata->nr_objects; i++) {
+ int found;
+ uint32_t ix = locate_object_entry_hash(pdata, entry->idx.sha1, &found);
+
+ if (found)
+ die("BUG: Duplicate object in hash");
+
+ pdata->index[ix] = i + 1;
+ entry++;
+ }
+}
+
+struct object_entry *packlist_find(struct packing_data *pdata,
+ const unsigned char *sha1,
+ uint32_t *index_pos)
+{
+ uint32_t i;
+ int found;
+
+ if (!pdata->index_size)
+ return NULL;
+
+ i = locate_object_entry_hash(pdata, sha1, &found);
+
+ if (index_pos)
+ *index_pos = i;
+
+ if (!found)
+ return NULL;
+
+ return &pdata->objects[pdata->index[i] - 1];
+}
+
+struct object_entry *packlist_alloc(struct packing_data *pdata,
+ const unsigned char *sha1,
+ uint32_t index_pos)
+{
+ struct object_entry *new_entry;
+
+ if (pdata->nr_objects >= pdata->nr_alloc) {
+ pdata->nr_alloc = (pdata->nr_alloc + 1024) * 3 / 2;
+ pdata->objects = xrealloc(pdata->objects,
+ pdata->nr_alloc * sizeof(*new_entry));
+ }
+
+ new_entry = pdata->objects + pdata->nr_objects++;
+
+ memset(new_entry, 0, sizeof(*new_entry));
+ hashcpy(new_entry->idx.sha1, sha1);
+
+ if (pdata->index_size * 3 <= pdata->nr_objects * 4)
+ rehash_objects(pdata);
+ else
+ pdata->index[index_pos] = pdata->nr_objects;
+
+ return new_entry;
+}
diff --git a/pack-objects.h b/pack-objects.h
new file mode 100644
index 000000000..d1b98b30f
--- /dev/null
+++ b/pack-objects.h
@@ -0,0 +1,68 @@
+#ifndef PACK_OBJECTS_H
+#define PACK_OBJECTS_H
+
+struct object_entry {
+ struct pack_idx_entry idx;
+ unsigned long size; /* uncompressed size */
+ struct packed_git *in_pack; /* already in pack */
+ off_t in_pack_offset;
+ struct object_entry *delta; /* delta base object */
+ struct object_entry *delta_child; /* deltified objects who bases me */
+ struct object_entry *delta_sibling; /* other deltified objects who
+ * uses the same base as me
+ */
+ void *delta_data; /* cached delta (uncompressed) */
+ unsigned long delta_size; /* delta data size (uncompressed) */
+ unsigned long z_delta_size; /* delta data size (compressed) */
+ enum object_type type;
+ enum object_type in_pack_type; /* could be delta */
+ uint32_t hash; /* name hint hash */
+ unsigned int in_pack_pos;
+ unsigned char in_pack_header_size;
+ unsigned preferred_base:1; /*
+ * we do not pack this, but is available
+ * to be used as the base object to delta
+ * objects against.
+ */
+ unsigned no_try_delta:1;
+ unsigned tagged:1; /* near the very tip of refs */
+ unsigned filled:1; /* assigned write-order */
+};
+
+struct packing_data {
+ struct object_entry *objects;
+ uint32_t nr_objects, nr_alloc;
+
+ int32_t *index;
+ uint32_t index_size;
+};
+
+struct object_entry *packlist_alloc(struct packing_data *pdata,
+ const unsigned char *sha1,
+ uint32_t index_pos);
+
+struct object_entry *packlist_find(struct packing_data *pdata,
+ const unsigned char *sha1,
+ uint32_t *index_pos);
+
+static inline uint32_t pack_name_hash(const char *name)
+{
+ uint32_t c, hash = 0;
+
+ if (!name)
+ return 0;
+
+ /*
+ * This effectively just creates a sortable number from the
+ * last sixteen non-whitespace characters. Last characters
+ * count "most", so things that end in ".c" sort together.
+ */
+ while ((c = *name++) != 0) {
+ if (isspace(c))
+ continue;
+ hash = (hash >> 2) + (c << 24);
+ }
+ return hash;
+}
+
+#endif
diff --git a/pack-revindex.c b/pack-revindex.c
index b4d2b35bb..5bd7c6198 100644
--- a/pack-revindex.c
+++ b/pack-revindex.c
@@ -16,11 +16,6 @@
* get the object sha1 from the main index.
*/
-struct pack_revindex {
- struct packed_git *p;
- struct revindex_entry *revindex;
-};
-
static struct pack_revindex *pack_revindex;
static int pack_revindex_hashsz;
@@ -201,15 +196,14 @@ static void create_pack_revindex(struct pack_revindex *rix)
sort_revindex(rix->revindex, num_ent, p->pack_size);
}
-struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs)
+struct pack_revindex *revindex_for_pack(struct packed_git *p)
{
int num;
- unsigned lo, hi;
struct pack_revindex *rix;
- struct revindex_entry *revindex;
if (!pack_revindex_hashsz)
init_pack_revindex();
+
num = pack_revindex_ix(p);
if (num < 0)
die("internal error: pack revindex fubar");
@@ -217,30 +211,37 @@ struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs)
rix = &pack_revindex[num];
if (!rix->revindex)
create_pack_revindex(rix);
- revindex = rix->revindex;
- lo = 0;
- hi = p->num_objects + 1;
+ return rix;
+}
+
+int find_revindex_position(struct pack_revindex *pridx, off_t ofs)
+{
+ int lo = 0;
+ int hi = pridx->p->num_objects + 1;
+ struct revindex_entry *revindex = pridx->revindex;
+
do {
unsigned mi = lo + (hi - lo) / 2;
if (revindex[mi].offset == ofs) {
- return revindex + mi;
+ return mi;
} else if (ofs < revindex[mi].offset)
hi = mi;
else
lo = mi + 1;
} while (lo < hi);
+
error("bad offset for revindex");
- return NULL;
+ return -1;
}
-void discard_revindex(void)
+struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs)
{
- if (pack_revindex_hashsz) {
- int i;
- for (i = 0; i < pack_revindex_hashsz; i++)
- free(pack_revindex[i].revindex);
- free(pack_revindex);
- pack_revindex_hashsz = 0;
- }
+ struct pack_revindex *pridx = revindex_for_pack(p);
+ int pos = find_revindex_position(pridx, ofs);
+
+ if (pos < 0)
+ return NULL;
+
+ return pridx->revindex + pos;
}
diff --git a/pack-revindex.h b/pack-revindex.h
index 8d5027ad9..d737f9896 100644
--- a/pack-revindex.h
+++ b/pack-revindex.h
@@ -6,7 +6,14 @@ struct revindex_entry {
unsigned int nr;
};
+struct pack_revindex {
+ struct packed_git *p;
+ struct revindex_entry *revindex;
+};
+
+struct pack_revindex *revindex_for_pack(struct packed_git *p);
+int find_revindex_position(struct pack_revindex *pridx, off_t ofs);
+
struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs);
-void discard_revindex(void);
#endif
diff --git a/pack-write.c b/pack-write.c
index 605d01b25..9ccf80419 100644
--- a/pack-write.c
+++ b/pack-write.c
@@ -336,7 +336,7 @@ struct sha1file *create_tmp_packfile(char **pack_tmp_name)
return sha1fd(fd, *pack_tmp_name);
}
-void finish_tmp_packfile(char *name_buffer,
+void finish_tmp_packfile(struct strbuf *name_buffer,
const char *pack_tmp_name,
struct pack_idx_entry **written_list,
uint32_t nr_written,
@@ -344,7 +344,7 @@ void finish_tmp_packfile(char *name_buffer,
unsigned char sha1[])
{
const char *idx_tmp_name;
- char *end_of_name_prefix = strrchr(name_buffer, 0);
+ int basename_len = name_buffer->len;
if (adjust_shared_perm(pack_tmp_name))
die_errno("unable to make temporary pack file readable");
@@ -354,15 +354,19 @@ void finish_tmp_packfile(char *name_buffer,
if (adjust_shared_perm(idx_tmp_name))
die_errno("unable to make temporary index file readable");
- sprintf(end_of_name_prefix, "%s.pack", sha1_to_hex(sha1));
- free_pack_by_name(name_buffer);
+ strbuf_addf(name_buffer, "%s.pack", sha1_to_hex(sha1));
+ free_pack_by_name(name_buffer->buf);
- if (rename(pack_tmp_name, name_buffer))
+ if (rename(pack_tmp_name, name_buffer->buf))
die_errno("unable to rename temporary pack file");
- sprintf(end_of_name_prefix, "%s.idx", sha1_to_hex(sha1));
- if (rename(idx_tmp_name, name_buffer))
+ strbuf_setlen(name_buffer, basename_len);
+
+ strbuf_addf(name_buffer, "%s.idx", sha1_to_hex(sha1));
+ if (rename(idx_tmp_name, name_buffer->buf))
die_errno("unable to rename temporary index file");
+ strbuf_setlen(name_buffer, basename_len);
+
free((void *)idx_tmp_name);
}
diff --git a/pack.h b/pack.h
index 12d951659..3223f5a03 100644
--- a/pack.h
+++ b/pack.h
@@ -91,6 +91,6 @@ extern int encode_in_pack_object_header(enum object_type, uintmax_t, unsigned ch
extern int read_pack_header(int fd, struct pack_header *);
extern struct sha1file *create_tmp_packfile(char **pack_tmp_name);
-extern void finish_tmp_packfile(char *name_buffer, const char *pack_tmp_name, struct pack_idx_entry **written_list, uint32_t nr_written, struct pack_idx_option *pack_idx_opts, unsigned char sha1[]);
+extern void finish_tmp_packfile(struct strbuf *name_buffer, const char *pack_tmp_name, struct pack_idx_entry **written_list, uint32_t nr_written, struct pack_idx_option *pack_idx_opts, unsigned char sha1[]);
#endif
diff --git a/parse-options.c b/parse-options.c
index 7b8d3faa1..a5fa0b893 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -223,13 +223,10 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
const struct option *options)
{
const struct option *all_opts = options;
- const char *arg_end = strchr(arg, '=');
+ const char *arg_end = strchrnul(arg, '=');
const struct option *abbrev_option = NULL, *ambiguous_option = NULL;
int abbrev_flags = 0, ambiguous_flags = 0;
- if (!arg_end)
- arg_end = arg + strlen(arg);
-
for (; options->type != OPTION_END; options++) {
const char *rest, *long_name = options->long_name;
int flags = 0, opt_flags = 0;
diff --git a/patch-ids.c b/patch-ids.c
index bc8a28fdd..bf81b9236 100644
--- a/patch-ids.c
+++ b/patch-ids.c
@@ -83,10 +83,7 @@ static struct patch_id *add_commit(struct commit *commit,
ent = &bucket->bucket[bucket->nr++];
hashcpy(ent->patch_id, sha1);
- if (ids->alloc <= ids->nr) {
- ids->alloc = alloc_nr(ids->nr);
- ids->table = xrealloc(ids->table, sizeof(ent) * ids->alloc);
- }
+ ALLOC_GROW(ids->table, ids->nr + 1, ids->alloc);
if (pos < ids->nr)
memmove(ids->table + pos + 1, ids->table + pos,
sizeof(ent) * (ids->nr - pos));
diff --git a/path.c b/path.c
index 24594c411..f9c506242 100644
--- a/path.c
+++ b/path.c
@@ -265,12 +265,12 @@ static struct passwd *getpw_str(const char *username, size_t len)
char *expand_user_path(const char *path)
{
struct strbuf user_path = STRBUF_INIT;
- const char *first_slash = strchrnul(path, '/');
const char *to_copy = path;
if (path == NULL)
goto return_null;
if (path[0] == '~') {
+ const char *first_slash = strchrnul(path, '/');
const char *username = path + 1;
size_t username_len = first_slash - username;
if (username_len == 0) {
diff --git a/pathspec.c b/pathspec.c
index 6cb9fd301..804309995 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -33,7 +33,7 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec,
return;
for (i = 0; i < active_nr; i++) {
const struct cache_entry *ce = active_cache[i];
- match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, seen);
+ ce_path_match(ce, pathspec, seen);
}
}
diff --git a/po/TEAMS b/po/TEAMS
index f9a99ed32..f75a1743e 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -1,9 +1,9 @@
Core Git translation language teams
(please keep the list sorted alphabetically on language field)
-Language: da (Danish)
-Repository: https://github.com/git-da/git-po/
-Leader: Byrial Jensen <byrial@vip.cybercity.dk>
+Language: bg (Bulgarian)
+Repository: https://github.com/git-l10n/git-po
+Leader: Alexander Shopov <ash@kambanaria.org>
Language: de (German)
Repository: https://github.com/ralfth/git-po-de
@@ -25,10 +25,6 @@ Repository: https://github.com/quizzlo/git-po-it/
Leader: Marco Paolone <marcopaolone AT gmail.com>
Members: Stefano Lattarini <stefano.lattarini AT gmail.com>
-Language: nl (Dutch)
-Repository: https://github.com/vfr-nl/git-po/
-Leader: Vincent van Ravesteijn <vfr@lyx.org>
-
Language: pt_PT (Portuguese - Portugal)
Repository: https://github.com/marcomsousa/git-l10n-pt_PT/
Leader: Marco Sousa <marcomsousa AT gmail.com>
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 000000000..fb450b241
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,10404 @@
+# Bulgarian translation of git po-file.
+# Copyright (C) 2014 Alexander Shopov <ash@kambanaria.org>.
+# This file is distributed under the same license as the git package.
+# Alexander Shopov <ash@kambanaria.org>, 2014.
+#
+# ========================
+# DICTIONARY TO MERGE IN GIT GUI
+# ------------------------
+# range интервал
+# unreachable object недоÑтижим обект
+# dangling objects обект извън клон
+# fast-forward тривиално Ñливане
+# stale remote Ñтаро хранилище
+# rebase пребазирам
+# force (push) принудително изтлаÑквам
+# stash/index индекÑ
+# ========================
+# RECHECK
+# ------------------------
+# HEAD as a reference vs head of a branch
+#
+# ========================
+# GENERATE STATS
+# ------------------------
+# grep ^#: bg.po | cut -c4- |tr ' ' '\n'| sed -e 's/:[0-9][0-9]*//' -e 's%.*/%%' -e 's/[.][^.]*$//' > OUT
+# sort -u OUT > UNIQUE
+# for i in `cat UNIQUE`; do echo `grep "^$i$" OUT | wc -l` $i ; done | sort -nr > STATS
+# ========================
+# DONE strings
+# ------------------------
+# 222
+# ========================
+# REMAINING strings
+# ------------------------
+# 1988
+# ========================
+# DONE alphabetical ordering
+# ------------------------
+#
+# advice, fsck, gc, help, parse-options, reflog, remote, rm, run-command
+#
+# ========================
+# REMAINING alphabetical ordering
+# ------------------------
+#
+# add, apply, archive, attr, bisect--helper, blame, branch, bundle, cat-file, check-attr, check-ignore, check-mailmap,
+# checkout, checkout-index, clean, clone, column, commit, common-cmds, config, connected, count-objects, date, describe,
+# diff, diffcore-order, fast-export, fetch, fmt-merge-msg, for-each-ref, git, git-am, git-bisect, git-pull, git-rebase,
+# git-stash, git-submodule, gpg-interface, grep, hash-object, index-pack, init-db, log, ls-files, ls-tree, merge,
+# merge-base, merge-file, merge-recursive, mktree, mv, name-rev, notes, notes-utils, object, obstack, pack-objects,
+# pack-refs, pathspec, precompose_utf8, prune, prune-packed, push, read-tree, repack, replace, rerere, reset, revert,
+# rev-parse, sequencer, sha1_name, shortlog, show-branch, show-ref, submodule, symbolic-ref, tag, update-index,
+# update-ref, update-server-info, urlmatch, verify-pack, verify-tag, wrapper, write-tree, wt-status
+#
+#
+# ========================
+# MOST IMPORTANT strings ordering
+# ------------------------
+# 144 [remote] 68 fetch 28 blame 16 [parse-options]
+# 137 commit 64 grep 27 git-rebase 12 [gc]
+# 115 branch 46 push 24 revert 12 [fsck]
+# 102 wt-status 38 add 21 common-cmds 3 reflog
+# 78 checkout 34 config 21 [rm]
+# 77 log 33 reset 21 mv
+# 69 clone 29 git-stash 13 diff
+#
+# ========================
+# WHOLE STATISTICS strings ordering
+# ------------------------
+# 144 remote 54 git-submodule 27 ls-files 12 pathspec 8 replace 3 prune-packed
+# 137 commit 48 push 27 git-rebase 12 name-rev 8 git-pull 3 pack-refs
+# 115 branch 41 help 24 revert 12 gc 8 fmt-merge-msg 3 count-objects
+# 111 apply 40 pack-objects 24 mv 12 fsck 7 symbolic-ref 3 connected
+# 102 wt-status 39 init-db 21 rm 12 checkout-index 6 gpg-interface 3 bisect--helper
+# 100 notes 38 add 21 common-cmds 11 date 6 check-attr 2 verify-tag
+# 97 merge 35 archive 19 show-branch 11 column 5 write-tree 2 update-server-info
+# 78 checkout 34 config 19 read-tree 10 urlmatch 5 sha1_name 2 run-command
+# 77 log 33 reset 19 bundle 10 shortlog 5 rev-parse 2 rerere
+# 69 clone 32 clean 17 repack 10 merge-file 5 prune 2 obstack
+# 68 index-pack 30 git-am 16 parse-options 10 merge-base 4 wrapper 2 advice
+# 68 fetch 30 describe 14 submodule 10 ls-tree 4 notes-utils 1 precompose_utf8
+# 64 grep 29 git-stash 14 show-ref 10 hash-object 4 mktree 1 object
+# 58 tag 29 git-bisect 14 fast-export 10 for-each-ref 4 check-mailmap 1 git
+# 56 sequencer 28 update-index 13 diff 10 cat-file 3 verify-pack 1 diffcore-order
+# 55 merge-recursive 28 blame 13 check-ignore 9 update-ref 3 reflog 1 attr
+msgid ""
+msgstr ""
+"Project-Id-Version: git master\n"
+"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
+"POT-Creation-Date: 2014-01-18 07:42+0800\n"
+"PO-Revision-Date: 2014-01-28 19:05+0200\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: advice.c:57
+#, c-format
+msgid "hint: %.*s\n"
+msgstr "ПодÑказка: %.*s\n"
+
+#.
+#. * Message used both when 'git commit' fails and when
+#. * other commands doing a merge do.
+#.
+#: advice.c:87
+msgid ""
+"Fix them up in the work tree,\n"
+"and then use 'git add/rm <file>' as\n"
+"appropriate to mark resolution and make a commit,\n"
+"or use 'git commit -a'."
+msgstr ""
+"Редактирайте ги в работното дърво,\n"
+"и тогава ползвайте „git add/rm <file>“,\n"
+"за да отбележите коригирането им и ги\n"
+"подадете или проÑто ползвайте „git commit -a“."
+
+#: archive.c:10
+msgid "git archive [options] <tree-ish> [<path>...]"
+msgstr ""
+
+#: archive.c:11
+msgid "git archive --list"
+msgstr ""
+
+#: archive.c:12
+msgid ""
+"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]"
+msgstr ""
+
+#: archive.c:13
+msgid "git archive --remote <repo> [--exec <cmd>] --list"
+msgstr ""
+
+#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328
+#, c-format
+msgid "pathspec '%s' did not match any files"
+msgstr "пътÑÑ‚ „%s“ не Ñъвпада Ñ Ð½Ð¸ÐºÐ¾Ð¹ файл"
+
+#: archive.c:327
+msgid "fmt"
+msgstr ""
+
+#: archive.c:327
+msgid "archive format"
+msgstr ""
+
+#: archive.c:328 builtin/log.c:1193
+msgid "prefix"
+msgstr ""
+
+#: archive.c:329
+msgid "prepend prefix to each pathname in the archive"
+msgstr ""
+
+#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265
+#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680
+#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77
+#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408
+#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154
+msgid "file"
+msgstr "файл"
+
+#: archive.c:331 builtin/archive.c:89
+msgid "write the archive to this file"
+msgstr ""
+
+#: archive.c:333
+msgid "read .gitattributes in working directory"
+msgstr ""
+
+#: archive.c:334
+msgid "report archived files on stderr"
+msgstr ""
+
+#: archive.c:335
+msgid "store only"
+msgstr ""
+
+#: archive.c:336
+msgid "compress faster"
+msgstr ""
+
+#: archive.c:344
+msgid "compress better"
+msgstr ""
+
+#: archive.c:347
+msgid "list supported archive formats"
+msgstr ""
+
+#: archive.c:349 builtin/archive.c:90 builtin/clone.c:84
+msgid "repo"
+msgstr ""
+
+#: archive.c:350 builtin/archive.c:91
+msgid "retrieve the archive from remote repository <repo>"
+msgstr ""
+
+#: archive.c:351 builtin/archive.c:92 builtin/notes.c:487
+msgid "command"
+msgstr ""
+
+#: archive.c:352 builtin/archive.c:93
+msgid "path to the remote git-upload-archive command"
+msgstr ""
+
+#: attr.c:259
+msgid ""
+"Negative patterns are ignored in git attributes\n"
+"Use '\\!' for literal leading exclamation."
+msgstr ""
+
+#: branch.c:60
+#, c-format
+msgid "Not setting branch %s as its own upstream."
+msgstr ""
+
+#: branch.c:82
+#, c-format
+msgid "Branch %s set up to track remote branch %s from %s by rebasing."
+msgstr ""
+
+#: branch.c:83
+#, c-format
+msgid "Branch %s set up to track remote branch %s from %s."
+msgstr ""
+
+#: branch.c:87
+#, c-format
+msgid "Branch %s set up to track local branch %s by rebasing."
+msgstr ""
+
+#: branch.c:88
+#, c-format
+msgid "Branch %s set up to track local branch %s."
+msgstr ""
+
+#: branch.c:92
+#, c-format
+msgid "Branch %s set up to track remote ref %s by rebasing."
+msgstr ""
+
+#: branch.c:93
+#, c-format
+msgid "Branch %s set up to track remote ref %s."
+msgstr ""
+
+#: branch.c:97
+#, c-format
+msgid "Branch %s set up to track local ref %s by rebasing."
+msgstr ""
+
+#: branch.c:98
+#, c-format
+msgid "Branch %s set up to track local ref %s."
+msgstr ""
+
+#: branch.c:118
+#, c-format
+msgid "Tracking not set up: name too long: %s"
+msgstr ""
+
+#: branch.c:137
+#, c-format
+msgid "Not tracking: ambiguous information for ref %s"
+msgstr ""
+
+#: branch.c:182
+#, c-format
+msgid "'%s' is not a valid branch name."
+msgstr ""
+
+#: branch.c:187
+#, c-format
+msgid "A branch named '%s' already exists."
+msgstr ""
+
+#: branch.c:195
+msgid "Cannot force update the current branch."
+msgstr ""
+
+#: branch.c:215
+#, c-format
+msgid "Cannot setup tracking information; starting point '%s' is not a branch."
+msgstr ""
+
+#: branch.c:217
+#, c-format
+msgid "the requested upstream branch '%s' does not exist"
+msgstr ""
+
+#: branch.c:219
+msgid ""
+"\n"
+"If you are planning on basing your work on an upstream\n"
+"branch that already exists at the remote, you may need to\n"
+"run \"git fetch\" to retrieve it.\n"
+"\n"
+"If you are planning to push out a new local branch that\n"
+"will track its remote counterpart, you may want to use\n"
+"\"git push -u\" to set the upstream config as you push."
+msgstr ""
+
+#: branch.c:264
+#, c-format
+msgid "Not a valid object name: '%s'."
+msgstr ""
+
+#: branch.c:284
+#, c-format
+msgid "Ambiguous object name: '%s'."
+msgstr ""
+
+#: branch.c:289
+#, c-format
+msgid "Not a valid branch point: '%s'."
+msgstr ""
+
+#: branch.c:295
+msgid "Failed to lock ref for update"
+msgstr ""
+
+#: branch.c:313
+msgid "Failed to write ref"
+msgstr ""
+
+#: bundle.c:37
+#, c-format
+msgid "'%s' does not look like a v2 bundle file"
+msgstr ""
+
+#: bundle.c:64
+#, c-format
+msgid "unrecognized header: %s%s (%d)"
+msgstr ""
+
+#: bundle.c:90 builtin/commit.c:706
+#, c-format
+msgid "could not open '%s'"
+msgstr ""
+
+#: bundle.c:141
+msgid "Repository lacks these prerequisite commits:"
+msgstr ""
+
+#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
+#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357
+#: builtin/shortlog.c:158
+msgid "revision walk setup failed"
+msgstr ""
+
+#: bundle.c:187
+#, c-format
+msgid "The bundle contains this ref:"
+msgid_plural "The bundle contains these %d refs:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bundle.c:194
+msgid "The bundle records a complete history."
+msgstr ""
+
+#: bundle.c:196
+#, c-format
+msgid "The bundle requires this ref:"
+msgid_plural "The bundle requires these %d refs:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bundle.c:296
+msgid "rev-list died"
+msgstr ""
+
+#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr ""
+
+#: bundle.c:337
+#, c-format
+msgid "ref '%s' is excluded by the rev-list options"
+msgstr ""
+
+#: bundle.c:382
+msgid "Refusing to create empty bundle."
+msgstr ""
+
+#: bundle.c:398
+msgid "Could not spawn pack-objects"
+msgstr ""
+
+#: bundle.c:416
+msgid "pack-objects died"
+msgstr ""
+
+#: bundle.c:419
+#, c-format
+msgid "cannot create '%s'"
+msgstr ""
+
+#: bundle.c:441
+msgid "index-pack died"
+msgstr ""
+
+#: commit.c:53
+#, c-format
+msgid "could not parse %s"
+msgstr ""
+
+#: commit.c:55
+#, c-format
+msgid "%s %s is not a commit!"
+msgstr ""
+
+#: compat/obstack.c:406 compat/obstack.c:408
+msgid "memory exhausted"
+msgstr ""
+
+#: connected.c:70
+msgid "Could not run 'git rev-list'"
+msgstr ""
+
+#: connected.c:90
+#, c-format
+msgid "failed write to rev-list: %s"
+msgstr ""
+
+#: connected.c:98
+#, c-format
+msgid "failed to close rev-list's stdin: %s"
+msgstr ""
+
+#: date.c:95
+msgid "in the future"
+msgstr ""
+
+#: date.c:101
+#, c-format
+msgid "%lu second ago"
+msgid_plural "%lu seconds ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:108
+#, c-format
+msgid "%lu minute ago"
+msgid_plural "%lu minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:115
+#, c-format
+msgid "%lu hour ago"
+msgid_plural "%lu hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:122
+#, c-format
+msgid "%lu day ago"
+msgid_plural "%lu days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:128
+#, c-format
+msgid "%lu week ago"
+msgid_plural "%lu weeks ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:135
+#, c-format
+msgid "%lu month ago"
+msgid_plural "%lu months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:146
+#, c-format
+msgid "%lu year"
+msgid_plural "%lu years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:149
+#, c-format
+msgid "%s, %lu month ago"
+msgid_plural "%s, %lu months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:154 date.c:159
+#, c-format
+msgid "%lu year ago"
+msgid_plural "%lu years ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr ""
+
+#: diff.c:113
+#, c-format
+msgid " Failed to parse dirstat cut-off percentage '%s'\n"
+msgstr ""
+
+#: diff.c:118
+#, c-format
+msgid " Unknown dirstat parameter '%s'\n"
+msgstr ""
+
+#: diff.c:213
+#, c-format
+msgid "Unknown value for 'diff.submodule' config variable: '%s'"
+msgstr ""
+
+#: diff.c:263
+#, c-format
+msgid ""
+"Found errors in 'diff.dirstat' config variable:\n"
+"%s"
+msgstr ""
+
+#: diff.c:3509
+#, c-format
+msgid ""
+"Failed to parse --dirstat/-X option parameter:\n"
+"%s"
+msgstr ""
+
+#: diff.c:3523
+#, c-format
+msgid "Failed to parse --submodule option parameter: '%s'"
+msgstr ""
+
+#: gpg-interface.c:59 gpg-interface.c:131
+msgid "could not run gpg."
+msgstr ""
+
+#: gpg-interface.c:71
+msgid "gpg did not accept the data"
+msgstr ""
+
+#: gpg-interface.c:82
+msgid "gpg failed to sign the data"
+msgstr ""
+
+#: gpg-interface.c:115
+#, c-format
+msgid "could not create temporary file '%s': %s"
+msgstr ""
+
+#: gpg-interface.c:118
+#, c-format
+msgid "failed writing detached signature to '%s': %s"
+msgstr ""
+
+#: grep.c:1695
+#, c-format
+msgid "'%s': unable to read %s"
+msgstr ""
+
+#: grep.c:1712
+#, c-format
+msgid "'%s': %s"
+msgstr ""
+
+#: grep.c:1723
+#, c-format
+msgid "'%s': short read %s"
+msgstr ""
+
+#: help.c:210
+#, c-format
+msgid "available git commands in '%s'"
+msgstr "налични команди на git от „%s“"
+
+#: help.c:217
+msgid "git commands available from elsewhere on your $PATH"
+msgstr "команди на git от други директории от Ð¿ÑŠÑ‚Ñ â€ž$PATH“"
+
+#: help.c:233
+msgid "The most commonly used git commands are:"
+msgstr "Ðай-чеÑто употребÑваните команди на git Ñа:"
+
+#: help.c:290
+#, c-format
+msgid ""
+"'%s' appears to be a git command, but we were not\n"
+"able to execute it. Maybe git-%s is broken?"
+msgstr ""
+"Изглежда, че „%s“ е команда на git, но Ñ‚Ñ Ð½Ðµ може да\n"
+"бъде изпълнена. ВероÑтно пакетът „git-%s“ е повреден."
+
+#: help.c:347
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr "Странно, изглежда, че на ÑиÑтемата ви нÑма нито една команда на git."
+
+#: help.c:369
+#, c-format
+msgid ""
+"WARNING: You called a Git command named '%s', which does not exist.\n"
+"Continuing under the assumption that you meant '%s'"
+msgstr ""
+"ПРЕДУПРЕЖДЕÐИЕ: Пробвахте да изпълните команда на Git на име „%s“, а такава "
+"не\n"
+"ÑъщеÑтвува. Изпълнението автоматично продължава, като Ñе Ñчита, че имате "
+"предвид „%s“"
+
+#: help.c:374
+#, c-format
+msgid "in %0.1f seconds automatically..."
+msgstr "Ñлед %0.1f Ñекунди…"
+
+#: help.c:381
+#, c-format
+msgid "git: '%s' is not a git command. See 'git --help'."
+msgstr "git: „%s“ не е команда на git. Вижте изхода от „git --help“."
+
+#: help.c:385 help.c:444
+msgid ""
+"\n"
+"Did you mean this?"
+msgid_plural ""
+"\n"
+"Did you mean one of these?"
+msgstr[0] ""
+"\n"
+"Команда Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ име е:"
+msgstr[1] ""
+"\n"
+"Команди Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ име Ñа:"
+
+#: help.c:440
+#, c-format
+msgid "%s: %s - %s"
+msgstr "%s: %s — %s"
+
+#: merge.c:56
+msgid "failed to read the cache"
+msgstr ""
+
+#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559
+#: builtin/clone.c:661
+msgid "unable to write new index file"
+msgstr ""
+
+#: merge-recursive.c:190
+#, c-format
+msgid "(bad commit)\n"
+msgstr ""
+
+#: merge-recursive.c:206
+#, c-format
+msgid "addinfo_cache failed for path '%s'"
+msgstr ""
+
+#: merge-recursive.c:269
+msgid "error building trees"
+msgstr ""
+
+#: merge-recursive.c:673
+#, c-format
+msgid "failed to create path '%s'%s"
+msgstr ""
+
+#: merge-recursive.c:684
+#, c-format
+msgid "Removing %s to make room for subdirectory\n"
+msgstr ""
+
+#. something else exists
+#. .. but not some other error (who really cares what?)
+#: merge-recursive.c:698 merge-recursive.c:719
+msgid ": perhaps a D/F conflict?"
+msgstr ""
+
+#: merge-recursive.c:709
+#, c-format
+msgid "refusing to lose untracked file at '%s'"
+msgstr ""
+
+#: merge-recursive.c:749
+#, c-format
+msgid "cannot read object %s '%s'"
+msgstr ""
+
+#: merge-recursive.c:751
+#, c-format
+msgid "blob expected for %s '%s'"
+msgstr ""
+
+#: merge-recursive.c:774 builtin/clone.c:317
+#, c-format
+msgid "failed to open '%s'"
+msgstr ""
+
+#: merge-recursive.c:782
+#, c-format
+msgid "failed to symlink '%s'"
+msgstr ""
+
+#: merge-recursive.c:785
+#, c-format
+msgid "do not know what to do with %06o %s '%s'"
+msgstr ""
+
+#: merge-recursive.c:923
+msgid "Failed to execute internal merge"
+msgstr ""
+
+#: merge-recursive.c:927
+#, c-format
+msgid "Unable to add %s to database"
+msgstr ""
+
+#: merge-recursive.c:943
+msgid "unsupported object type in the tree"
+msgstr ""
+
+#: merge-recursive.c:1022 merge-recursive.c:1036
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree."
+msgstr ""
+
+#: merge-recursive.c:1028 merge-recursive.c:1041
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree at %s."
+msgstr ""
+
+#: merge-recursive.c:1082
+msgid "rename"
+msgstr ""
+
+#: merge-recursive.c:1082 wt-status.c:283
+msgid "renamed"
+msgstr ""
+
+#: merge-recursive.c:1138
+#, c-format
+msgid "%s is a directory in %s adding as %s instead"
+msgstr ""
+
+#: merge-recursive.c:1160
+#, c-format
+msgid ""
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
+"\"->\"%s\" in \"%s\"%s"
+msgstr ""
+
+#: merge-recursive.c:1165
+msgid " (left unresolved)"
+msgstr ""
+
+#: merge-recursive.c:1219
+#, c-format
+msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
+msgstr ""
+
+#: merge-recursive.c:1249
+#, c-format
+msgid "Renaming %s to %s and %s to %s instead"
+msgstr ""
+
+#: merge-recursive.c:1448
+#, c-format
+msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
+msgstr ""
+
+#: merge-recursive.c:1458
+#, c-format
+msgid "Adding merged %s"
+msgstr ""
+
+#: merge-recursive.c:1463 merge-recursive.c:1661
+#, c-format
+msgid "Adding as %s instead"
+msgstr ""
+
+#: merge-recursive.c:1514
+#, c-format
+msgid "cannot read object %s"
+msgstr ""
+
+#: merge-recursive.c:1517
+#, c-format
+msgid "object %s is not a blob"
+msgstr ""
+
+#: merge-recursive.c:1565
+msgid "modify"
+msgstr ""
+
+#: merge-recursive.c:1565 wt-status.c:281
+msgid "modified"
+msgstr ""
+
+#: merge-recursive.c:1575
+msgid "content"
+msgstr ""
+
+#: merge-recursive.c:1582
+msgid "add/add"
+msgstr ""
+
+#: merge-recursive.c:1616
+#, c-format
+msgid "Skipped %s (merged same as existing)"
+msgstr ""
+
+#: merge-recursive.c:1630
+#, c-format
+msgid "Auto-merging %s"
+msgstr ""
+
+#: merge-recursive.c:1634 git-submodule.sh:1148
+msgid "submodule"
+msgstr ""
+
+#: merge-recursive.c:1635
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr ""
+
+#: merge-recursive.c:1725
+#, c-format
+msgid "Removing %s"
+msgstr ""
+
+#: merge-recursive.c:1750
+msgid "file/directory"
+msgstr ""
+
+#: merge-recursive.c:1756
+msgid "directory/file"
+msgstr ""
+
+#: merge-recursive.c:1761
+#, c-format
+msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
+msgstr ""
+
+#: merge-recursive.c:1771
+#, c-format
+msgid "Adding %s"
+msgstr ""
+
+#: merge-recursive.c:1788
+msgid "Fatal merge failure, shouldn't happen."
+msgstr ""
+
+#: merge-recursive.c:1807
+msgid "Already up-to-date!"
+msgstr ""
+
+#: merge-recursive.c:1816
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr ""
+
+#: merge-recursive.c:1846
+#, c-format
+msgid "Unprocessed path??? %s"
+msgstr ""
+
+#: merge-recursive.c:1891
+msgid "Merging:"
+msgstr ""
+
+#: merge-recursive.c:1904
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: merge-recursive.c:1941
+msgid "merge returned no commit"
+msgstr ""
+
+#: merge-recursive.c:1998
+#, c-format
+msgid "Could not parse object '%s'"
+msgstr ""
+
+#: merge-recursive.c:2010 builtin/merge.c:665
+msgid "Unable to write index."
+msgstr ""
+
+#: notes-utils.c:40
+msgid "Cannot commit uninitialized/unreferenced notes tree"
+msgstr ""
+
+#: notes-utils.c:81
+#, c-format
+msgid "Bad notes.rewriteMode value: '%s'"
+msgstr ""
+
+#: notes-utils.c:91
+#, c-format
+msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
+msgstr ""
+
+#. TRANSLATORS: The first %s is the name of the
+#. environment variable, the second %s is its value
+#: notes-utils.c:118
+#, c-format
+msgid "Bad %s value: '%s'"
+msgstr ""
+
+#: object.c:202
+#, c-format
+msgid "unable to parse object: %s"
+msgstr ""
+
+#: parse-options.c:537
+msgid "..."
+msgstr "…"
+
+#: parse-options.c:555
+#, c-format
+msgid "usage: %s"
+msgstr "употреба: %s"
+
+#. TRANSLATORS: the colon here should align with the
+#. one in "usage: %s" translation
+#: parse-options.c:559
+#, c-format
+msgid " or: %s"
+msgstr " или: %s"
+
+#: parse-options.c:562
+#, c-format
+msgid " %s"
+msgstr " %s"
+
+#: parse-options.c:596
+msgid "-NUM"
+msgstr "-ЧИСЛО"
+
+#: pathspec.c:133
+msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
+msgstr ""
+
+#: pathspec.c:143
+msgid ""
+"global 'literal' pathspec setting is incompatible with all other global "
+"pathspec settings"
+msgstr ""
+
+#: pathspec.c:177
+msgid "invalid parameter for pathspec magic 'prefix'"
+msgstr ""
+
+#: pathspec.c:183
+#, c-format
+msgid "Invalid pathspec magic '%.*s' in '%s'"
+msgstr ""
+
+#: pathspec.c:187
+#, c-format
+msgid "Missing ')' at the end of pathspec magic in '%s'"
+msgstr ""
+
+#: pathspec.c:205
+#, c-format
+msgid "Unimplemented pathspec magic '%c' in '%s'"
+msgstr ""
+
+#: pathspec.c:230
+#, c-format
+msgid "%s: 'literal' and 'glob' are incompatible"
+msgstr ""
+
+#: pathspec.c:241
+#, c-format
+msgid "%s: '%s' is outside repository"
+msgstr ""
+
+#: pathspec.c:291
+#, c-format
+msgid "Pathspec '%s' is in submodule '%.*s'"
+msgstr ""
+
+#.
+#. * We may want to substitute "this command" with a command
+#. * name. E.g. when add--interactive dies when running
+#. * "checkout -p"
+#.
+#: pathspec.c:353
+#, c-format
+msgid "%s: pathspec magic not supported by this command: %s"
+msgstr ""
+
+#: pathspec.c:433
+#, c-format
+msgid "pathspec '%s' is beyond a symbolic link"
+msgstr ""
+
+#: pathspec.c:442
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr ""
+
+#: remote.c:753
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "Ðевъзможно е да Ñе доÑтавÑÑ‚ едновременно и „%s“, и „%s“ към „%s“"
+
+#: remote.c:757
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "„%s“ обикновено Ñледи „%s“, а не „%s“"
+
+#: remote.c:761
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "„%s“ Ñледи както „%s“, така и „%s“"
+
+#.
+#. * This last possibility doesn't occur because
+#. * FETCH_HEAD_IGNORE entries always appear at
+#. * the end of the list.
+#.
+#: remote.c:769
+msgid "Internal error"
+msgstr "Вътрешна грешка"
+
+#: remote.c:1871
+#, c-format
+msgid "Your branch is based on '%s', but the upstream is gone.\n"
+msgstr "Този клон Ñледи „%s“, но ÑледениÑÑ‚ клон е изтрит.\n"
+
+#: remote.c:1875
+msgid " (use \"git branch --unset-upstream\" to fixup)\n"
+msgstr " (за да коригирате това използвайте „git branch --unset-upstream“)\n"
+
+#: remote.c:1878
+#, c-format
+msgid "Your branch is up-to-date with '%s'.\n"
+msgstr "Клонът е актуализиран както „%s“.\n"
+
+#: remote.c:1882
+#, c-format
+msgid "Your branch is ahead of '%s' by %d commit.\n"
+msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
+msgstr[0] "Клонът ви е Ñ %2$d подаване пред „%1$s“.\n"
+msgstr[1] "Клонът ви е Ñ %2$d Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ´ „%1$s“.\n"
+
+#: remote.c:1888
+msgid " (use \"git push\" to publish your local commits)\n"
+msgstr " (публикувайте локалните Ñи промени чрез „git push“)\n"
+
+#: remote.c:1891
+#, c-format
+msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
+msgid_plural ""
+"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
+msgstr[0] ""
+"Клонът ви е Ñ %2$d подаване Ñлед „%1$s“ и може да бъде тривиално ÑлÑÑ‚.\n"
+msgstr[1] ""
+"Клонът ви е Ñ %2$d Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ñлед „%1$s“ и може да бъде тривиално ÑлÑÑ‚.\n"
+
+#: remote.c:1899
+msgid " (use \"git pull\" to update your local branch)\n"
+msgstr " (обновете Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ Ñи клон чрез „git pull“)\n"
+
+#: remote.c:1902
+#, c-format
+msgid ""
+"Your branch and '%s' have diverged,\n"
+"and have %d and %d different commit each, respectively.\n"
+msgid_plural ""
+"Your branch and '%s' have diverged,\n"
+"and have %d and %d different commits each, respectively.\n"
+msgstr[0] ""
+"ТекущиÑÑ‚ клон Ñе е отделил от „%s“,\n"
+"двата имат Ñъответно по %d и %d неÑъвпадащи подаваниÑ.\n"
+msgstr[1] ""
+"ТекущиÑÑ‚ клон Ñе е отделил от „%s“,\n"
+"двата имат Ñъответно по %d и %d неÑъвпадащи подаваниÑ.\n"
+
+#: remote.c:1912
+msgid " (use \"git pull\" to merge the remote branch into yours)\n"
+msgstr " (Ñлейте Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½ в Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ Ñ‡Ñ€ÐµÐ· „git pull“)\n"
+
+#: run-command.c:80
+msgid "open /dev/null failed"
+msgstr "неуÑпешно отварÑне на „/dev/null“"
+
+#: run-command.c:82
+#, c-format
+msgid "dup2(%d,%d) failed"
+msgstr "неуÑпешно изпълнение на dup2(%d,%d)"
+
+#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896
+#: builtin/merge.c:1006 builtin/merge.c:1016
+#, c-format
+msgid "Could not open '%s' for writing"
+msgstr ""
+
+#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786
+#: builtin/merge.c:1008 builtin/merge.c:1021
+#, c-format
+msgid "Could not write to '%s'"
+msgstr ""
+
+#: sequencer.c:229
+msgid ""
+"after resolving the conflicts, mark the corrected paths\n"
+"with 'git add <paths>' or 'git rm <paths>'"
+msgstr ""
+
+#: sequencer.c:232
+msgid ""
+"after resolving the conflicts, mark the corrected paths\n"
+"with 'git add <paths>' or 'git rm <paths>'\n"
+"and commit the result with 'git commit'"
+msgstr ""
+
+#: sequencer.c:245 sequencer.c:870 sequencer.c:953
+#, c-format
+msgid "Could not write to %s"
+msgstr ""
+
+#: sequencer.c:248
+#, c-format
+msgid "Error wrapping up %s"
+msgstr ""
+
+#: sequencer.c:263
+msgid "Your local changes would be overwritten by cherry-pick."
+msgstr ""
+
+#: sequencer.c:265
+msgid "Your local changes would be overwritten by revert."
+msgstr ""
+
+#: sequencer.c:268
+msgid "Commit your changes or stash them to proceed."
+msgstr ""
+
+#. TRANSLATORS: %s will be "revert" or "cherry-pick"
+#: sequencer.c:325
+#, c-format
+msgid "%s: Unable to write new index file"
+msgstr ""
+
+#: sequencer.c:356
+msgid "Could not resolve HEAD commit\n"
+msgstr ""
+
+#: sequencer.c:378
+msgid "Unable to update cache tree\n"
+msgstr ""
+
+#: sequencer.c:423
+#, c-format
+msgid "Could not parse commit %s\n"
+msgstr ""
+
+#: sequencer.c:428
+#, c-format
+msgid "Could not parse parent commit %s\n"
+msgstr ""
+
+#: sequencer.c:494
+msgid "Your index file is unmerged."
+msgstr ""
+
+#: sequencer.c:513
+#, c-format
+msgid "Commit %s is a merge but no -m option was given."
+msgstr ""
+
+#: sequencer.c:521
+#, c-format
+msgid "Commit %s does not have parent %d"
+msgstr ""
+
+#: sequencer.c:525
+#, c-format
+msgid "Mainline was specified but commit %s is not a merge."
+msgstr ""
+
+#. TRANSLATORS: The first %s will be "revert" or
+#. "cherry-pick", the second %s a SHA1
+#: sequencer.c:538
+#, c-format
+msgid "%s: cannot parse parent commit %s"
+msgstr ""
+
+#: sequencer.c:542
+#, c-format
+msgid "Cannot get commit message for %s"
+msgstr ""
+
+#: sequencer.c:628
+#, c-format
+msgid "could not revert %s... %s"
+msgstr ""
+
+#: sequencer.c:629
+#, c-format
+msgid "could not apply %s... %s"
+msgstr ""
+
+#: sequencer.c:665
+msgid "empty commit set passed"
+msgstr ""
+
+#: sequencer.c:673
+#, c-format
+msgid "git %s: failed to read the index"
+msgstr ""
+
+#: sequencer.c:678
+#, c-format
+msgid "git %s: failed to refresh the index"
+msgstr ""
+
+#: sequencer.c:736
+#, c-format
+msgid "Cannot %s during a %s"
+msgstr ""
+
+#: sequencer.c:758
+#, c-format
+msgid "Could not parse line %d."
+msgstr ""
+
+#: sequencer.c:763
+msgid "No commits parsed."
+msgstr ""
+
+#: sequencer.c:776
+#, c-format
+msgid "Could not open %s"
+msgstr ""
+
+#: sequencer.c:780
+#, c-format
+msgid "Could not read %s."
+msgstr ""
+
+#: sequencer.c:787
+#, c-format
+msgid "Unusable instruction sheet: %s"
+msgstr ""
+
+#: sequencer.c:815
+#, c-format
+msgid "Invalid key: %s"
+msgstr ""
+
+#: sequencer.c:818
+#, c-format
+msgid "Invalid value for %s: %s"
+msgstr ""
+
+#: sequencer.c:830
+#, c-format
+msgid "Malformed options sheet: %s"
+msgstr ""
+
+#: sequencer.c:851
+msgid "a cherry-pick or revert is already in progress"
+msgstr ""
+
+#: sequencer.c:852
+msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
+msgstr ""
+
+#: sequencer.c:856
+#, c-format
+msgid "Could not create sequencer directory %s"
+msgstr ""
+
+#: sequencer.c:872 sequencer.c:957
+#, c-format
+msgid "Error wrapping up %s."
+msgstr ""
+
+#: sequencer.c:891 sequencer.c:1025
+msgid "no cherry-pick or revert in progress"
+msgstr ""
+
+#: sequencer.c:893
+msgid "cannot resolve HEAD"
+msgstr ""
+
+#: sequencer.c:895
+msgid "cannot abort from a branch yet to be born"
+msgstr ""
+
+#: sequencer.c:917 builtin/apply.c:4061
+#, c-format
+msgid "cannot open %s: %s"
+msgstr ""
+
+#: sequencer.c:920
+#, c-format
+msgid "cannot read %s: %s"
+msgstr ""
+
+#: sequencer.c:921
+msgid "unexpected end of file"
+msgstr ""
+
+#: sequencer.c:927
+#, c-format
+msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
+msgstr ""
+
+#: sequencer.c:950
+#, c-format
+msgid "Could not format %s."
+msgstr ""
+
+#: sequencer.c:1093
+#, c-format
+msgid "%s: can't cherry-pick a %s"
+msgstr ""
+
+#: sequencer.c:1096
+#, c-format
+msgid "%s: bad revision"
+msgstr ""
+
+#: sequencer.c:1130
+msgid "Can't revert as initial commit"
+msgstr ""
+
+#: sequencer.c:1131
+msgid "Can't cherry-pick into empty head"
+msgstr ""
+
+#: sha1_name.c:439
+msgid ""
+"Git normally never creates a ref that ends with 40 hex characters\n"
+"because it will be ignored when you just specify 40-hex. These refs\n"
+"may be created by mistake. For example,\n"
+"\n"
+" git checkout -b $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+
+#: sha1_name.c:1109
+msgid "HEAD does not point to a branch"
+msgstr ""
+
+#: sha1_name.c:1112
+#, c-format
+msgid "No such branch: '%s'"
+msgstr ""
+
+#: sha1_name.c:1114
+#, c-format
+msgid "No upstream configured for branch '%s'"
+msgstr ""
+
+#: sha1_name.c:1118
+#, c-format
+msgid "Upstream branch '%s' not stored as a remote-tracking branch"
+msgstr ""
+
+#: submodule.c:64 submodule.c:98
+msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
+msgstr ""
+
+#: submodule.c:68 submodule.c:102
+#, c-format
+msgid "Could not find section in .gitmodules where path=%s"
+msgstr ""
+
+#. Maybe the user already did that, don't error out here
+#: submodule.c:76
+#, c-format
+msgid "Could not update .gitmodules entry %s"
+msgstr ""
+
+#. Maybe the user already did that, don't error out here
+#: submodule.c:109
+#, c-format
+msgid "Could not remove .gitmodules entry for %s"
+msgstr ""
+
+#: submodule.c:127
+msgid "could not find .gitmodules in index"
+msgstr ""
+
+#: submodule.c:133
+msgid "reading updated .gitmodules failed"
+msgstr ""
+
+#: submodule.c:135
+msgid "unable to stat updated .gitmodules"
+msgstr ""
+
+#: submodule.c:139
+msgid "unable to remove .gitmodules from index"
+msgstr ""
+
+#: submodule.c:141
+msgid "adding updated .gitmodules failed"
+msgstr ""
+
+#: submodule.c:143
+msgid "staging updated .gitmodules failed"
+msgstr ""
+
+#: submodule.c:1144 builtin/init-db.c:363
+#, c-format
+msgid "Could not create git link %s"
+msgstr ""
+
+#: submodule.c:1155
+#, c-format
+msgid "Could not set core.worktree in %s"
+msgstr ""
+
+#: urlmatch.c:120
+msgid "invalid URL scheme name or missing '://' suffix"
+msgstr ""
+
+#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
+#, c-format
+msgid "invalid %XX escape sequence"
+msgstr ""
+
+#: urlmatch.c:172
+msgid "missing host and scheme is not 'file:'"
+msgstr ""
+
+#: urlmatch.c:189
+msgid "a 'file:' URL may not have a port number"
+msgstr ""
+
+#: urlmatch.c:199
+msgid "invalid characters in host name"
+msgstr ""
+
+#: urlmatch.c:244 urlmatch.c:255
+msgid "invalid port number"
+msgstr ""
+
+#: urlmatch.c:322
+msgid "invalid '..' path segment"
+msgstr ""
+
+#: wrapper.c:422
+#, c-format
+msgid "unable to access '%s': %s"
+msgstr ""
+
+#: wrapper.c:443
+#, c-format
+msgid "unable to access '%s'"
+msgstr ""
+
+#: wrapper.c:454
+#, c-format
+msgid "unable to look up current user in the passwd file: %s"
+msgstr ""
+
+#: wrapper.c:455
+msgid "no such user"
+msgstr ""
+
+#: wt-status.c:150
+msgid "Unmerged paths:"
+msgstr ""
+
+#: wt-status.c:177 wt-status.c:204
+#, c-format
+msgid " (use \"git reset %s <file>...\" to unstage)"
+msgstr ""
+
+#: wt-status.c:179 wt-status.c:206
+msgid " (use \"git rm --cached <file>...\" to unstage)"
+msgstr ""
+
+#: wt-status.c:183
+msgid " (use \"git add <file>...\" to mark resolution)"
+msgstr ""
+
+#: wt-status.c:185 wt-status.c:189
+msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
+msgstr ""
+
+#: wt-status.c:187
+msgid " (use \"git rm <file>...\" to mark resolution)"
+msgstr ""
+
+#: wt-status.c:198
+msgid "Changes to be committed:"
+msgstr ""
+
+#: wt-status.c:216
+msgid "Changes not staged for commit:"
+msgstr ""
+
+#: wt-status.c:220
+msgid " (use \"git add <file>...\" to update what will be committed)"
+msgstr ""
+
+#: wt-status.c:222
+msgid " (use \"git add/rm <file>...\" to update what will be committed)"
+msgstr ""
+
+#: wt-status.c:223
+msgid ""
+" (use \"git checkout -- <file>...\" to discard changes in working directory)"
+msgstr ""
+
+#: wt-status.c:225
+msgid " (commit or discard the untracked or modified content in submodules)"
+msgstr ""
+
+#: wt-status.c:237
+#, c-format
+msgid " (use \"git %s <file>...\" to include in what will be committed)"
+msgstr ""
+
+#: wt-status.c:254
+msgid "bug"
+msgstr ""
+
+#: wt-status.c:259
+msgid "both deleted:"
+msgstr ""
+
+#: wt-status.c:260
+msgid "added by us:"
+msgstr ""
+
+#: wt-status.c:261
+msgid "deleted by them:"
+msgstr ""
+
+#: wt-status.c:262
+msgid "added by them:"
+msgstr ""
+
+#: wt-status.c:263
+msgid "deleted by us:"
+msgstr ""
+
+#: wt-status.c:264
+msgid "both added:"
+msgstr ""
+
+#: wt-status.c:265
+msgid "both modified:"
+msgstr ""
+
+#: wt-status.c:275
+msgid "new file"
+msgstr ""
+
+#: wt-status.c:277
+msgid "copied"
+msgstr ""
+
+#: wt-status.c:279
+msgid "deleted"
+msgstr ""
+
+#: wt-status.c:285
+msgid "typechange"
+msgstr ""
+
+#: wt-status.c:287
+msgid "unknown"
+msgstr ""
+
+#: wt-status.c:289
+msgid "unmerged"
+msgstr ""
+
+#: wt-status.c:336
+msgid "new commits, "
+msgstr ""
+
+#: wt-status.c:338
+msgid "modified content, "
+msgstr ""
+
+#: wt-status.c:340
+msgid "untracked content, "
+msgstr ""
+
+#: wt-status.c:357
+#, c-format
+msgid "bug: unhandled diff status %c"
+msgstr ""
+
+#: wt-status.c:732
+msgid "Submodules changed but not updated:"
+msgstr ""
+
+#: wt-status.c:734
+msgid "Submodule changes to be committed:"
+msgstr ""
+
+#: wt-status.c:836
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr ""
+
+#: wt-status.c:899
+msgid "You have unmerged paths."
+msgstr ""
+
+#: wt-status.c:902
+msgid " (fix conflicts and run \"git commit\")"
+msgstr ""
+
+#: wt-status.c:905
+msgid "All conflicts fixed but you are still merging."
+msgstr ""
+
+#: wt-status.c:908
+msgid " (use \"git commit\" to conclude merge)"
+msgstr ""
+
+#: wt-status.c:918
+msgid "You are in the middle of an am session."
+msgstr ""
+
+#: wt-status.c:921
+msgid "The current patch is empty."
+msgstr ""
+
+#: wt-status.c:925
+msgid " (fix conflicts and then run \"git am --continue\")"
+msgstr ""
+
+#: wt-status.c:927
+msgid " (use \"git am --skip\" to skip this patch)"
+msgstr ""
+
+#: wt-status.c:929
+msgid " (use \"git am --abort\" to restore the original branch)"
+msgstr ""
+
+#: wt-status.c:989 wt-status.c:1006
+#, c-format
+msgid "You are currently rebasing branch '%s' on '%s'."
+msgstr ""
+
+#: wt-status.c:994 wt-status.c:1011
+msgid "You are currently rebasing."
+msgstr ""
+
+#: wt-status.c:997
+msgid " (fix conflicts and then run \"git rebase --continue\")"
+msgstr ""
+
+#: wt-status.c:999
+msgid " (use \"git rebase --skip\" to skip this patch)"
+msgstr ""
+
+#: wt-status.c:1001
+msgid " (use \"git rebase --abort\" to check out the original branch)"
+msgstr ""
+
+#: wt-status.c:1014
+msgid " (all conflicts fixed: run \"git rebase --continue\")"
+msgstr ""
+
+#: wt-status.c:1018
+#, c-format
+msgid ""
+"You are currently splitting a commit while rebasing branch '%s' on '%s'."
+msgstr ""
+
+#: wt-status.c:1023
+msgid "You are currently splitting a commit during a rebase."
+msgstr ""
+
+#: wt-status.c:1026
+msgid " (Once your working directory is clean, run \"git rebase --continue\")"
+msgstr ""
+
+#: wt-status.c:1030
+#, c-format
+msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
+msgstr ""
+
+#: wt-status.c:1035
+msgid "You are currently editing a commit during a rebase."
+msgstr ""
+
+#: wt-status.c:1038
+msgid " (use \"git commit --amend\" to amend the current commit)"
+msgstr ""
+
+#: wt-status.c:1040
+msgid ""
+" (use \"git rebase --continue\" once you are satisfied with your changes)"
+msgstr ""
+
+#: wt-status.c:1050
+#, c-format
+msgid "You are currently cherry-picking commit %s."
+msgstr ""
+
+#: wt-status.c:1055
+msgid " (fix conflicts and run \"git cherry-pick --continue\")"
+msgstr ""
+
+#: wt-status.c:1058
+msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
+msgstr ""
+
+#: wt-status.c:1060
+msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
+msgstr ""
+
+#: wt-status.c:1069
+#, c-format
+msgid "You are currently reverting commit %s."
+msgstr ""
+
+#: wt-status.c:1074
+msgid " (fix conflicts and run \"git revert --continue\")"
+msgstr ""
+
+#: wt-status.c:1077
+msgid " (all conflicts fixed: run \"git revert --continue\")"
+msgstr ""
+
+#: wt-status.c:1079
+msgid " (use \"git revert --abort\" to cancel the revert operation)"
+msgstr ""
+
+#: wt-status.c:1090
+#, c-format
+msgid "You are currently bisecting, started from branch '%s'."
+msgstr ""
+
+#: wt-status.c:1094
+msgid "You are currently bisecting."
+msgstr ""
+
+#: wt-status.c:1097
+msgid " (use \"git bisect reset\" to get back to the original branch)"
+msgstr ""
+
+#: wt-status.c:1272
+msgid "On branch "
+msgstr ""
+
+#: wt-status.c:1279
+msgid "rebase in progress; onto "
+msgstr ""
+
+#: wt-status.c:1286
+msgid "HEAD detached at "
+msgstr ""
+
+#: wt-status.c:1288
+msgid "HEAD detached from "
+msgstr ""
+
+#: wt-status.c:1291
+msgid "Not currently on any branch."
+msgstr ""
+
+#: wt-status.c:1308
+msgid "Initial commit"
+msgstr ""
+
+#: wt-status.c:1322
+msgid "Untracked files"
+msgstr ""
+
+#: wt-status.c:1324
+msgid "Ignored files"
+msgstr ""
+
+#: wt-status.c:1328
+#, c-format
+msgid ""
+"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
+"may speed it up, but you have to be careful not to forget to add\n"
+"new files yourself (see 'git help status')."
+msgstr ""
+
+#: wt-status.c:1334
+#, c-format
+msgid "Untracked files not listed%s"
+msgstr ""
+
+#: wt-status.c:1336
+msgid " (use -u option to show untracked files)"
+msgstr ""
+
+#: wt-status.c:1342
+msgid "No changes"
+msgstr ""
+
+#: wt-status.c:1347
+#, c-format
+msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+msgstr ""
+
+#: wt-status.c:1350
+#, c-format
+msgid "no changes added to commit\n"
+msgstr ""
+
+#: wt-status.c:1353
+#, c-format
+msgid ""
+"nothing added to commit but untracked files present (use \"git add\" to "
+"track)\n"
+msgstr ""
+
+#: wt-status.c:1356
+#, c-format
+msgid "nothing added to commit but untracked files present\n"
+msgstr ""
+
+#: wt-status.c:1359
+#, c-format
+msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
+msgstr ""
+
+#: wt-status.c:1362 wt-status.c:1367
+#, c-format
+msgid "nothing to commit\n"
+msgstr ""
+
+#: wt-status.c:1365
+#, c-format
+msgid "nothing to commit (use -u to show untracked files)\n"
+msgstr ""
+
+#: wt-status.c:1369
+#, c-format
+msgid "nothing to commit, working directory clean\n"
+msgstr ""
+
+#: wt-status.c:1478
+msgid "HEAD (no branch)"
+msgstr ""
+
+#: wt-status.c:1484
+msgid "Initial commit on "
+msgstr ""
+
+#: wt-status.c:1514
+msgid "gone"
+msgstr ""
+
+#: wt-status.c:1516
+msgid "behind "
+msgstr ""
+
+#: wt-status.c:1519 wt-status.c:1522
+msgid "ahead "
+msgstr ""
+
+#: wt-status.c:1524
+msgid ", behind "
+msgstr ""
+
+#: compat/precompose_utf8.c:55 builtin/clone.c:356
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr ""
+
+#: builtin/add.c:20
+msgid "git add [options] [--] <pathspec>..."
+msgstr ""
+
+#.
+#. * To be consistent with "git add -p" and most Git
+#. * commands, we should default to being tree-wide, but
+#. * this is not the original behavior and can't be
+#. * changed until users trained themselves not to type
+#. * "git add -u" or "git add -A". For now, we warn and
+#. * keep the old behavior. Later, the behavior can be changed
+#. * to tree-wide, keeping the warning for a while, and
+#. * eventually we can drop the warning.
+#.
+#: builtin/add.c:58
+#, c-format
+msgid ""
+"The behavior of 'git add %s (or %s)' with no path argument from a\n"
+"subdirectory of the tree will change in Git 2.0 and should not be used "
+"anymore.\n"
+"To add content for the whole tree, run:\n"
+"\n"
+" git add %s :/\n"
+" (or git add %s :/)\n"
+"\n"
+"To restrict the command to the current directory, run:\n"
+"\n"
+" git add %s .\n"
+" (or git add %s .)\n"
+"\n"
+"With the current Git version, the command is restricted to the current "
+"directory.\n"
+msgstr ""
+
+#: builtin/add.c:100
+#, c-format
+msgid ""
+"You ran 'git add' with neither '-A (--all)' or '--ignore-removal',\n"
+"whose behaviour will change in Git 2.0 with respect to paths you removed.\n"
+"Paths like '%s' that are\n"
+"removed from your working tree are ignored with this version of Git.\n"
+"\n"
+"* 'git add --ignore-removal <pathspec>', which is the current default,\n"
+" ignores paths you removed from your working tree.\n"
+"\n"
+"* 'git add --all <pathspec>' will let you also record the removals.\n"
+"\n"
+"Run 'git status' to check the paths you removed from your working tree.\n"
+msgstr ""
+
+#: builtin/add.c:144
+#, c-format
+msgid "unexpected diff status %c"
+msgstr ""
+
+#: builtin/add.c:149 builtin/commit.c:260
+msgid "updating files failed"
+msgstr ""
+
+#: builtin/add.c:163
+#, c-format
+msgid "remove '%s'\n"
+msgstr ""
+
+#: builtin/add.c:237
+msgid "Unstaged changes after refreshing the index:"
+msgstr ""
+
+#: builtin/add.c:299
+msgid "Could not read the index"
+msgstr ""
+
+#: builtin/add.c:310
+#, c-format
+msgid "Could not open '%s' for writing."
+msgstr ""
+
+#: builtin/add.c:314
+msgid "Could not write patch"
+msgstr ""
+
+#: builtin/add.c:319
+#, c-format
+msgid "Could not stat '%s'"
+msgstr ""
+
+#: builtin/add.c:321
+msgid "Empty patch. Aborted."
+msgstr ""
+
+#: builtin/add.c:327
+#, c-format
+msgid "Could not apply '%s'"
+msgstr ""
+
+#: builtin/add.c:337
+msgid "The following paths are ignored by one of your .gitignore files:\n"
+msgstr ""
+
+#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70
+#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344
+#: builtin/rm.c:269
+msgid "dry run"
+msgstr "пробно изпълнeние"
+
+#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19
+#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612
+#: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113
+msgid "be verbose"
+msgstr "повече подробноÑти"
+
+#: builtin/add.c:357
+msgid "interactive picking"
+msgstr ""
+
+#: builtin/add.c:358 builtin/checkout.c:1109 builtin/reset.c:272
+msgid "select hunks interactively"
+msgstr ""
+
+#: builtin/add.c:359
+msgid "edit current diff and apply"
+msgstr ""
+
+#: builtin/add.c:360
+msgid "allow adding otherwise ignored files"
+msgstr ""
+
+#: builtin/add.c:361
+msgid "update tracked files"
+msgstr ""
+
+#: builtin/add.c:362
+msgid "record only the fact that the path will be added later"
+msgstr ""
+
+#: builtin/add.c:363
+msgid "add changes from all tracked and untracked files"
+msgstr ""
+
+#. takes no arguments
+#: builtin/add.c:366
+msgid "ignore paths removed in the working tree (same as --no-all)"
+msgstr ""
+
+#: builtin/add.c:368
+msgid "don't add, only refresh the index"
+msgstr ""
+
+#: builtin/add.c:369
+msgid "just skip files which cannot be added because of errors"
+msgstr ""
+
+#: builtin/add.c:370
+msgid "check if - even missing - files are ignored in dry run"
+msgstr ""
+
+#: builtin/add.c:392
+#, c-format
+msgid "Use -f if you really want to add them.\n"
+msgstr ""
+
+#: builtin/add.c:393
+msgid "no files added"
+msgstr ""
+
+#: builtin/add.c:399
+msgid "adding files failed"
+msgstr ""
+
+#: builtin/add.c:438
+msgid "-A and -u are mutually incompatible"
+msgstr ""
+
+#: builtin/add.c:456
+msgid "Option --ignore-missing can only be used together with --dry-run"
+msgstr ""
+
+#: builtin/add.c:486
+#, c-format
+msgid "Nothing specified, nothing added.\n"
+msgstr ""
+
+#: builtin/add.c:487
+#, c-format
+msgid "Maybe you wanted to say 'git add .'?\n"
+msgstr ""
+
+#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919
+#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299
+msgid "index file corrupt"
+msgstr "файлът Ñ Ð¸Ð½Ð´ÐµÐºÑа е повреден"
+
+#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432
+msgid "Unable to write new index file"
+msgstr "ÐовиÑÑ‚ файл Ñ Ð¸Ð½Ð´ÐµÐºÑа не може да бъде запиÑан"
+
+#: builtin/apply.c:57
+msgid "git apply [options] [<patch>...]"
+msgstr ""
+
+#: builtin/apply.c:110
+#, c-format
+msgid "unrecognized whitespace option '%s'"
+msgstr ""
+
+#: builtin/apply.c:125
+#, c-format
+msgid "unrecognized whitespace ignore option '%s'"
+msgstr ""
+
+#: builtin/apply.c:823
+#, c-format
+msgid "Cannot prepare timestamp regexp %s"
+msgstr ""
+
+#: builtin/apply.c:832
+#, c-format
+msgid "regexec returned %d for input: %s"
+msgstr ""
+
+#: builtin/apply.c:913
+#, c-format
+msgid "unable to find filename in patch at line %d"
+msgstr ""
+
+#: builtin/apply.c:945
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
+msgstr ""
+
+#: builtin/apply.c:949
+#, c-format
+msgid "git apply: bad git-diff - inconsistent new filename on line %d"
+msgstr ""
+
+#: builtin/apply.c:950
+#, c-format
+msgid "git apply: bad git-diff - inconsistent old filename on line %d"
+msgstr ""
+
+#: builtin/apply.c:957
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null on line %d"
+msgstr ""
+
+#: builtin/apply.c:1422
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr ""
+
+#: builtin/apply.c:1479
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr ""
+
+#: builtin/apply.c:1496
+#, c-format
+msgid ""
+"git diff header lacks filename information when removing %d leading pathname "
+"component (line %d)"
+msgid_plural ""
+"git diff header lacks filename information when removing %d leading pathname "
+"components (line %d)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/apply.c:1656
+msgid "new file depends on old contents"
+msgstr ""
+
+#: builtin/apply.c:1658
+msgid "deleted file still has contents"
+msgstr ""
+
+#: builtin/apply.c:1684
+#, c-format
+msgid "corrupt patch at line %d"
+msgstr ""
+
+#: builtin/apply.c:1720
+#, c-format
+msgid "new file %s depends on old contents"
+msgstr ""
+
+#: builtin/apply.c:1722
+#, c-format
+msgid "deleted file %s still has contents"
+msgstr ""
+
+#: builtin/apply.c:1725
+#, c-format
+msgid "** warning: file %s becomes empty but is not deleted"
+msgstr ""
+
+#: builtin/apply.c:1871
+#, c-format
+msgid "corrupt binary patch at line %d: %.*s"
+msgstr ""
+
+#. there has to be one hunk (forward hunk)
+#: builtin/apply.c:1900
+#, c-format
+msgid "unrecognized binary patch at line %d"
+msgstr ""
+
+#: builtin/apply.c:1986
+#, c-format
+msgid "patch with only garbage at line %d"
+msgstr ""
+
+#: builtin/apply.c:2076
+#, c-format
+msgid "unable to read symlink %s"
+msgstr ""
+
+#: builtin/apply.c:2080
+#, c-format
+msgid "unable to open or read %s"
+msgstr ""
+
+#: builtin/apply.c:2688
+#, c-format
+msgid "invalid start of line: '%c'"
+msgstr ""
+
+#: builtin/apply.c:2806
+#, c-format
+msgid "Hunk #%d succeeded at %d (offset %d line)."
+msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/apply.c:2818
+#, c-format
+msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
+msgstr ""
+
+#: builtin/apply.c:2824
+#, c-format
+msgid ""
+"while searching for:\n"
+"%.*s"
+msgstr ""
+
+#: builtin/apply.c:2843
+#, c-format
+msgid "missing binary patch data for '%s'"
+msgstr ""
+
+#: builtin/apply.c:2946
+#, c-format
+msgid "binary patch does not apply to '%s'"
+msgstr ""
+
+#: builtin/apply.c:2952
+#, c-format
+msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
+msgstr ""
+
+#: builtin/apply.c:2973
+#, c-format
+msgid "patch failed: %s:%ld"
+msgstr ""
+
+#: builtin/apply.c:3095
+#, c-format
+msgid "cannot checkout %s"
+msgstr ""
+
+#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194
+#, c-format
+msgid "read of %s failed"
+msgstr ""
+
+#: builtin/apply.c:3174 builtin/apply.c:3396
+#, c-format
+msgid "path %s has been renamed/deleted"
+msgstr ""
+
+#: builtin/apply.c:3255 builtin/apply.c:3410
+#, c-format
+msgid "%s: does not exist in index"
+msgstr ""
+
+#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424
+#, c-format
+msgid "%s: %s"
+msgstr ""
+
+#: builtin/apply.c:3264 builtin/apply.c:3418
+#, c-format
+msgid "%s: does not match index"
+msgstr ""
+
+#: builtin/apply.c:3366
+msgid "removal patch leaves file contents"
+msgstr ""
+
+#: builtin/apply.c:3435
+#, c-format
+msgid "%s: wrong type"
+msgstr ""
+
+#: builtin/apply.c:3437
+#, c-format
+msgid "%s has type %o, expected %o"
+msgstr ""
+
+#: builtin/apply.c:3538
+#, c-format
+msgid "%s: already exists in index"
+msgstr ""
+
+#: builtin/apply.c:3541
+#, c-format
+msgid "%s: already exists in working directory"
+msgstr ""
+
+#: builtin/apply.c:3561
+#, c-format
+msgid "new mode (%o) of %s does not match old mode (%o)"
+msgstr ""
+
+#: builtin/apply.c:3566
+#, c-format
+msgid "new mode (%o) of %s does not match old mode (%o) of %s"
+msgstr ""
+
+#: builtin/apply.c:3574
+#, c-format
+msgid "%s: patch does not apply"
+msgstr ""
+
+#: builtin/apply.c:3587
+#, c-format
+msgid "Checking patch %s..."
+msgstr ""
+
+#: builtin/apply.c:3680 builtin/checkout.c:213 builtin/reset.c:127
+#, c-format
+msgid "make_cache_entry failed for path '%s'"
+msgstr ""
+
+#: builtin/apply.c:3823
+#, c-format
+msgid "unable to remove %s from index"
+msgstr ""
+
+#: builtin/apply.c:3851
+#, c-format
+msgid "corrupt patch for submodule %s"
+msgstr ""
+
+#: builtin/apply.c:3855
+#, c-format
+msgid "unable to stat newly created file '%s'"
+msgstr ""
+
+#: builtin/apply.c:3860
+#, c-format
+msgid "unable to create backing store for newly created file %s"
+msgstr ""
+
+#: builtin/apply.c:3863 builtin/apply.c:3971
+#, c-format
+msgid "unable to add cache entry for %s"
+msgstr ""
+
+#: builtin/apply.c:3896
+#, c-format
+msgid "closing file '%s'"
+msgstr ""
+
+#: builtin/apply.c:3945
+#, c-format
+msgid "unable to write file '%s' mode %o"
+msgstr ""
+
+#: builtin/apply.c:4032
+#, c-format
+msgid "Applied patch %s cleanly."
+msgstr ""
+
+#: builtin/apply.c:4040
+msgid "internal error"
+msgstr ""
+
+#. Say this even without --verbose
+#: builtin/apply.c:4043
+#, c-format
+msgid "Applying patch %%s with %d reject..."
+msgid_plural "Applying patch %%s with %d rejects..."
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/apply.c:4053
+#, c-format
+msgid "truncating .rej filename to %.*s.rej"
+msgstr ""
+
+#: builtin/apply.c:4074
+#, c-format
+msgid "Hunk #%d applied cleanly."
+msgstr ""
+
+#: builtin/apply.c:4077
+#, c-format
+msgid "Rejected hunk #%d."
+msgstr ""
+
+#: builtin/apply.c:4227
+msgid "unrecognized input"
+msgstr ""
+
+#: builtin/apply.c:4238
+msgid "unable to read index file"
+msgstr ""
+
+#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90
+#: builtin/fetch.c:78
+msgid "path"
+msgstr ""
+
+#: builtin/apply.c:4358
+msgid "don't apply changes matching the given path"
+msgstr ""
+
+#: builtin/apply.c:4361
+msgid "apply changes matching the given path"
+msgstr ""
+
+#: builtin/apply.c:4363
+msgid "num"
+msgstr ""
+
+#: builtin/apply.c:4364
+msgid "remove <num> leading slashes from traditional diff paths"
+msgstr ""
+
+#: builtin/apply.c:4367
+msgid "ignore additions made by the patch"
+msgstr ""
+
+#: builtin/apply.c:4369
+msgid "instead of applying the patch, output diffstat for the input"
+msgstr ""
+
+#: builtin/apply.c:4373
+msgid "show number of added and deleted lines in decimal notation"
+msgstr ""
+
+#: builtin/apply.c:4375
+msgid "instead of applying the patch, output a summary for the input"
+msgstr ""
+
+#: builtin/apply.c:4377
+msgid "instead of applying the patch, see if the patch is applicable"
+msgstr ""
+
+#: builtin/apply.c:4379
+msgid "make sure the patch is applicable to the current index"
+msgstr ""
+
+#: builtin/apply.c:4381
+msgid "apply a patch without touching the working tree"
+msgstr ""
+
+#: builtin/apply.c:4383
+msgid "also apply the patch (use with --stat/--summary/--check)"
+msgstr ""
+
+#: builtin/apply.c:4385
+msgid "attempt three-way merge if a patch does not apply"
+msgstr ""
+
+#: builtin/apply.c:4387
+msgid "build a temporary index based on embedded index information"
+msgstr ""
+
+#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:452
+msgid "paths are separated with NUL character"
+msgstr ""
+
+#: builtin/apply.c:4392
+#, fuzzy
+msgid "ensure at least <n> lines of context match"
+msgstr "<брой>"
+
+#: builtin/apply.c:4393
+msgid "action"
+msgstr ""
+
+#: builtin/apply.c:4394
+msgid "detect new or modified lines that have whitespace errors"
+msgstr ""
+
+#: builtin/apply.c:4397 builtin/apply.c:4400
+msgid "ignore changes in whitespace when finding context"
+msgstr ""
+
+#: builtin/apply.c:4403
+msgid "apply the patch in reverse"
+msgstr ""
+
+#: builtin/apply.c:4405
+msgid "don't expect at least one line of context"
+msgstr ""
+
+#: builtin/apply.c:4407
+msgid "leave the rejected hunks in corresponding *.rej files"
+msgstr ""
+
+#: builtin/apply.c:4409
+msgid "allow overlapping hunks"
+msgstr ""
+
+#: builtin/apply.c:4412
+msgid "tolerate incorrectly detected missing new-line at the end of file"
+msgstr ""
+
+#: builtin/apply.c:4415
+msgid "do not trust the line counts in the hunk headers"
+msgstr ""
+
+#: builtin/apply.c:4417
+msgid "root"
+msgstr ""
+
+#: builtin/apply.c:4418
+msgid "prepend <root> to all filenames"
+msgstr ""
+
+#: builtin/apply.c:4440
+msgid "--3way outside a repository"
+msgstr ""
+
+#: builtin/apply.c:4448
+msgid "--index outside a repository"
+msgstr ""
+
+#: builtin/apply.c:4451
+msgid "--cached outside a repository"
+msgstr ""
+
+#: builtin/apply.c:4467
+#, c-format
+msgid "can't open patch '%s'"
+msgstr ""
+
+#: builtin/apply.c:4481
+#, c-format
+msgid "squelched %d whitespace error"
+msgid_plural "squelched %d whitespace errors"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/apply.c:4487 builtin/apply.c:4497
+#, c-format
+msgid "%d line adds whitespace errors."
+msgid_plural "%d lines add whitespace errors."
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/archive.c:17
+#, c-format
+msgid "could not create archive file '%s'"
+msgstr ""
+
+#: builtin/archive.c:20
+msgid "could not redirect output"
+msgstr ""
+
+#: builtin/archive.c:37
+msgid "git archive: Remote with no URL"
+msgstr ""
+
+#: builtin/archive.c:58
+msgid "git archive: expected ACK/NAK, got EOF"
+msgstr ""
+
+#: builtin/archive.c:61
+#, c-format
+msgid "git archive: NACK %s"
+msgstr ""
+
+#: builtin/archive.c:63
+#, c-format
+msgid "remote error: %s"
+msgstr ""
+
+#: builtin/archive.c:64
+msgid "git archive: protocol error"
+msgstr ""
+
+#: builtin/archive.c:68
+msgid "git archive: expected a flush"
+msgstr ""
+
+#: builtin/bisect--helper.c:7
+msgid "git bisect--helper --next-all [--no-checkout]"
+msgstr ""
+
+#: builtin/bisect--helper.c:17
+msgid "perform 'git bisect next'"
+msgstr ""
+
+#: builtin/bisect--helper.c:19
+msgid "update BISECT_HEAD instead of checking out the current commit"
+msgstr ""
+
+#: builtin/blame.c:27
+msgid "git blame [options] [rev-opts] [rev] [--] file"
+msgstr ""
+
+#: builtin/blame.c:32
+msgid "[rev-opts] are documented in git-rev-list(1)"
+msgstr ""
+
+#: builtin/blame.c:2249
+msgid "Show blame entries as we find them, incrementally"
+msgstr ""
+
+# FIXME
+#: builtin/blame.c:2250
+msgid "Show blank SHA-1 for boundary commits (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2251
+msgid "Do not treat root commits as boundaries (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2252
+msgid "Show work cost statistics"
+msgstr ""
+
+#: builtin/blame.c:2253
+msgid "Show output score for blame entries"
+msgstr ""
+
+#: builtin/blame.c:2254
+msgid "Show original filename (Default: auto)"
+msgstr ""
+
+#: builtin/blame.c:2255
+msgid "Show original linenumber (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2256
+msgid "Show in a format designed for machine consumption"
+msgstr ""
+
+#: builtin/blame.c:2257
+msgid "Show porcelain format with per-line commit information"
+msgstr ""
+
+#: builtin/blame.c:2258
+msgid "Use the same output mode as git-annotate (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2259
+msgid "Show raw timestamp (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2260
+msgid "Show long commit SHA1 (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2261
+msgid "Suppress author name and timestamp (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2262
+msgid "Show author email instead of name (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:2263
+msgid "Ignore whitespace differences"
+msgstr ""
+
+#: builtin/blame.c:2264
+msgid "Spend extra cycles to find better match"
+msgstr ""
+
+#: builtin/blame.c:2265
+msgid "Use revisions from <file> instead of calling git-rev-list"
+msgstr ""
+
+#: builtin/blame.c:2266
+msgid "Use <file>'s contents as the final image"
+msgstr ""
+
+#: builtin/blame.c:2267 builtin/blame.c:2268
+msgid "score"
+msgstr ""
+
+#: builtin/blame.c:2267
+msgid "Find line copies within and across files"
+msgstr ""
+
+#: builtin/blame.c:2268
+msgid "Find line movements within and across files"
+msgstr ""
+
+#: builtin/blame.c:2269
+msgid "n,m"
+msgstr ""
+
+#: builtin/blame.c:2269
+msgid "Process only line range n,m, counting from 1"
+msgstr ""
+
+#: builtin/branch.c:24
+msgid "git branch [options] [-r | -a] [--merged | --no-merged]"
+msgstr ""
+
+#: builtin/branch.c:25
+msgid "git branch [options] [-l] [-f] <branchname> [<start-point>]"
+msgstr ""
+
+#: builtin/branch.c:26
+msgid "git branch [options] [-r] (-d | -D) <branchname>..."
+msgstr ""
+
+#: builtin/branch.c:27
+msgid "git branch [options] (-m | -M) [<oldbranch>] <newbranch>"
+msgstr ""
+
+#: builtin/branch.c:150
+#, c-format
+msgid ""
+"deleting branch '%s' that has been merged to\n"
+" '%s', but not yet merged to HEAD."
+msgstr ""
+
+#: builtin/branch.c:154
+#, c-format
+msgid ""
+"not deleting branch '%s' that is not yet merged to\n"
+" '%s', even though it is merged to HEAD."
+msgstr ""
+
+#: builtin/branch.c:168
+#, c-format
+msgid "Couldn't look up commit object for '%s'"
+msgstr ""
+
+#: builtin/branch.c:172
+#, c-format
+msgid ""
+"The branch '%s' is not fully merged.\n"
+"If you are sure you want to delete it, run 'git branch -D %s'."
+msgstr ""
+
+#: builtin/branch.c:185
+msgid "Update of config-file failed"
+msgstr ""
+
+#: builtin/branch.c:213
+msgid "cannot use -a with -d"
+msgstr ""
+
+#: builtin/branch.c:219
+msgid "Couldn't look up commit object for HEAD"
+msgstr ""
+
+#: builtin/branch.c:227
+#, c-format
+msgid "Cannot delete the branch '%s' which you are currently on."
+msgstr ""
+
+#: builtin/branch.c:240
+#, c-format
+msgid "remote branch '%s' not found."
+msgstr ""
+
+#: builtin/branch.c:241
+#, c-format
+msgid "branch '%s' not found."
+msgstr ""
+
+#: builtin/branch.c:255
+#, c-format
+msgid "Error deleting remote branch '%s'"
+msgstr ""
+
+#: builtin/branch.c:256
+#, c-format
+msgid "Error deleting branch '%s'"
+msgstr ""
+
+#: builtin/branch.c:263
+#, c-format
+msgid "Deleted remote branch %s (was %s).\n"
+msgstr ""
+
+#: builtin/branch.c:264
+#, c-format
+msgid "Deleted branch %s (was %s).\n"
+msgstr ""
+
+#: builtin/branch.c:366
+#, c-format
+msgid "branch '%s' does not point at a commit"
+msgstr ""
+
+#: builtin/branch.c:454
+#, c-format
+msgid "[%s: gone]"
+msgstr ""
+
+#: builtin/branch.c:459
+#, c-format
+msgid "[%s]"
+msgstr ""
+
+#: builtin/branch.c:464
+#, c-format
+msgid "[%s: behind %d]"
+msgstr ""
+
+#: builtin/branch.c:466
+#, c-format
+msgid "[behind %d]"
+msgstr ""
+
+#: builtin/branch.c:470
+#, c-format
+msgid "[%s: ahead %d]"
+msgstr ""
+
+#: builtin/branch.c:472
+#, c-format
+msgid "[ahead %d]"
+msgstr ""
+
+#: builtin/branch.c:475
+#, c-format
+msgid "[%s: ahead %d, behind %d]"
+msgstr ""
+
+#: builtin/branch.c:478
+#, c-format
+msgid "[ahead %d, behind %d]"
+msgstr ""
+
+#: builtin/branch.c:502
+msgid " **** invalid ref ****"
+msgstr ""
+
+#: builtin/branch.c:594
+#, c-format
+msgid "(no branch, rebasing %s)"
+msgstr ""
+
+#: builtin/branch.c:597
+#, c-format
+msgid "(no branch, bisect started on %s)"
+msgstr ""
+
+#: builtin/branch.c:600
+#, c-format
+msgid "(detached from %s)"
+msgstr ""
+
+#: builtin/branch.c:603
+msgid "(no branch)"
+msgstr ""
+
+#: builtin/branch.c:649
+#, c-format
+msgid "object '%s' does not point to a commit"
+msgstr ""
+
+#: builtin/branch.c:681
+msgid "some refs could not be read"
+msgstr ""
+
+#: builtin/branch.c:694
+msgid "cannot rename the current branch while not on any."
+msgstr ""
+
+#: builtin/branch.c:704
+#, c-format
+msgid "Invalid branch name: '%s'"
+msgstr ""
+
+#: builtin/branch.c:719
+msgid "Branch rename failed"
+msgstr ""
+
+#: builtin/branch.c:723
+#, c-format
+msgid "Renamed a misnamed branch '%s' away"
+msgstr ""
+
+#: builtin/branch.c:727
+#, c-format
+msgid "Branch renamed to %s, but HEAD is not updated!"
+msgstr ""
+
+#: builtin/branch.c:734
+msgid "Branch is renamed, but update of config-file failed"
+msgstr ""
+
+#: builtin/branch.c:749
+#, c-format
+msgid "malformed object name %s"
+msgstr ""
+
+#: builtin/branch.c:773
+#, c-format
+msgid "could not write branch description template: %s"
+msgstr ""
+
+#: builtin/branch.c:803
+msgid "Generic options"
+msgstr ""
+
+#: builtin/branch.c:805
+msgid "show hash and subject, give twice for upstream branch"
+msgstr ""
+
+#: builtin/branch.c:806
+msgid "suppress informational messages"
+msgstr ""
+
+#: builtin/branch.c:807
+msgid "set up tracking mode (see git-pull(1))"
+msgstr ""
+
+#: builtin/branch.c:809
+msgid "change upstream info"
+msgstr ""
+
+#: builtin/branch.c:813
+msgid "use colored output"
+msgstr ""
+
+#: builtin/branch.c:814
+msgid "act on remote-tracking branches"
+msgstr ""
+
+#: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844
+#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461
+#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468
+msgid "commit"
+msgstr ""
+
+#: builtin/branch.c:818 builtin/branch.c:824
+msgid "print only branches that contain the commit"
+msgstr ""
+
+#: builtin/branch.c:830
+msgid "Specific git-branch actions:"
+msgstr ""
+
+#: builtin/branch.c:831
+msgid "list both remote-tracking and local branches"
+msgstr ""
+
+#: builtin/branch.c:833
+msgid "delete fully merged branch"
+msgstr ""
+
+#: builtin/branch.c:834
+msgid "delete branch (even if not merged)"
+msgstr ""
+
+#: builtin/branch.c:835
+msgid "move/rename a branch and its reflog"
+msgstr ""
+
+#: builtin/branch.c:836
+msgid "move/rename a branch, even if target exists"
+msgstr ""
+
+#: builtin/branch.c:837
+msgid "list branch names"
+msgstr ""
+
+#: builtin/branch.c:838
+msgid "create the branch's reflog"
+msgstr ""
+
+#: builtin/branch.c:840
+msgid "edit the description for the branch"
+msgstr ""
+
+#: builtin/branch.c:841
+msgid "force creation (when already exists)"
+msgstr ""
+
+#: builtin/branch.c:844
+msgid "print only not merged branches"
+msgstr ""
+
+#: builtin/branch.c:850
+msgid "print only merged branches"
+msgstr ""
+
+#: builtin/branch.c:854
+msgid "list branches in columns"
+msgstr ""
+
+#: builtin/branch.c:867
+msgid "Failed to resolve HEAD as a valid ref."
+msgstr ""
+
+#: builtin/branch.c:872 builtin/clone.c:635
+msgid "HEAD not found below refs/heads!"
+msgstr ""
+
+#: builtin/branch.c:896
+msgid "--column and --verbose are incompatible"
+msgstr ""
+
+#: builtin/branch.c:902 builtin/branch.c:941
+msgid "branch name required"
+msgstr ""
+
+#: builtin/branch.c:917
+msgid "Cannot give description to detached HEAD"
+msgstr ""
+
+#: builtin/branch.c:922
+msgid "cannot edit description of more than one branch"
+msgstr ""
+
+#: builtin/branch.c:929
+#, c-format
+msgid "No commit on branch '%s' yet."
+msgstr ""
+
+#: builtin/branch.c:932
+#, c-format
+msgid "No branch named '%s'."
+msgstr ""
+
+#: builtin/branch.c:947
+msgid "too many branches for a rename operation"
+msgstr ""
+
+#: builtin/branch.c:952
+msgid "too many branches to set new upstream"
+msgstr ""
+
+#: builtin/branch.c:956
+#, c-format
+msgid ""
+"could not set upstream of HEAD to %s when it does not point to any branch."
+msgstr ""
+
+#: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002
+#, c-format
+msgid "no such branch '%s'"
+msgstr ""
+
+#: builtin/branch.c:963
+#, c-format
+msgid "branch '%s' does not exist"
+msgstr ""
+
+#: builtin/branch.c:975
+msgid "too many branches to unset upstream"
+msgstr ""
+
+#: builtin/branch.c:979
+msgid "could not unset upstream of HEAD when it does not point to any branch."
+msgstr ""
+
+#: builtin/branch.c:985
+#, c-format
+msgid "Branch '%s' has no upstream information"
+msgstr ""
+
+#: builtin/branch.c:999
+msgid "it does not make sense to create 'HEAD' manually"
+msgstr ""
+
+#: builtin/branch.c:1005
+msgid "-a and -r options to 'git branch' do not make sense with a branch name"
+msgstr ""
+
+#: builtin/branch.c:1008
+#, c-format
+msgid ""
+"The --set-upstream flag is deprecated and will be removed. Consider using --"
+"track or --set-upstream-to\n"
+msgstr ""
+
+#: builtin/branch.c:1025
+#, c-format
+msgid ""
+"\n"
+"If you wanted to make '%s' track '%s', do this:\n"
+"\n"
+msgstr ""
+
+#: builtin/branch.c:1026
+#, c-format
+msgid " git branch -d %s\n"
+msgstr ""
+
+#: builtin/branch.c:1027
+#, c-format
+msgid " git branch --set-upstream-to %s\n"
+msgstr ""
+
+#: builtin/bundle.c:47
+#, c-format
+msgid "%s is okay\n"
+msgstr ""
+
+#: builtin/bundle.c:56
+msgid "Need a repository to create a bundle."
+msgstr ""
+
+#: builtin/bundle.c:60
+msgid "Need a repository to unbundle."
+msgstr ""
+
+#: builtin/cat-file.c:328
+msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
+msgstr ""
+
+#: builtin/cat-file.c:329
+msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
+msgstr ""
+
+#: builtin/cat-file.c:366
+msgid "<type> can be one of: blob, tree, commit, tag"
+msgstr ""
+
+#: builtin/cat-file.c:367
+msgid "show object type"
+msgstr ""
+
+#: builtin/cat-file.c:368
+msgid "show object size"
+msgstr ""
+
+#: builtin/cat-file.c:370
+msgid "exit with zero when there's no error"
+msgstr ""
+
+#: builtin/cat-file.c:371
+msgid "pretty-print object's content"
+msgstr ""
+
+#: builtin/cat-file.c:373
+msgid "for blob objects, run textconv on object's content"
+msgstr ""
+
+#: builtin/cat-file.c:375
+msgid "show info and content of objects fed from the standard input"
+msgstr ""
+
+#: builtin/cat-file.c:378
+msgid "show info about objects fed from the standard input"
+msgstr ""
+
+#: builtin/check-attr.c:11
+msgid "git check-attr [-a | --all | attr...] [--] pathname..."
+msgstr ""
+
+#: builtin/check-attr.c:12
+msgid "git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>"
+msgstr ""
+
+#: builtin/check-attr.c:19
+msgid "report all attributes set on file"
+msgstr ""
+
+#: builtin/check-attr.c:20
+msgid "use .gitattributes only from the index"
+msgstr ""
+
+#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75
+msgid "read file names from stdin"
+msgstr ""
+
+#: builtin/check-attr.c:23 builtin/check-ignore.c:24
+msgid "terminate input and output records by a NUL character"
+msgstr ""
+
+#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260
+msgid "suppress progress reporting"
+msgstr "без показване на напредъка"
+
+#: builtin/check-ignore.c:26
+msgid "show non-matching input paths"
+msgstr ""
+
+#: builtin/check-ignore.c:28
+msgid "ignore index when checking"
+msgstr ""
+
+#: builtin/check-ignore.c:154
+msgid "cannot specify pathnames with --stdin"
+msgstr ""
+
+#: builtin/check-ignore.c:157
+msgid "-z only makes sense with --stdin"
+msgstr ""
+
+#: builtin/check-ignore.c:159
+msgid "no path specified"
+msgstr ""
+
+#: builtin/check-ignore.c:163
+msgid "--quiet is only valid with a single pathname"
+msgstr ""
+
+#: builtin/check-ignore.c:165
+msgid "cannot have both --quiet and --verbose"
+msgstr ""
+
+#: builtin/check-ignore.c:168
+msgid "--non-matching is only valid with --verbose"
+msgstr ""
+
+#: builtin/check-mailmap.c:8
+msgid "git check-mailmap [options] <contact>..."
+msgstr ""
+
+#: builtin/check-mailmap.c:13
+msgid "also read contacts from stdin"
+msgstr ""
+
+#: builtin/check-mailmap.c:24
+#, c-format
+msgid "unable to parse contact: %s"
+msgstr ""
+
+#: builtin/check-mailmap.c:47
+msgid "no contacts specified"
+msgstr ""
+
+#: builtin/checkout-index.c:126
+msgid "git checkout-index [options] [--] [<file>...]"
+msgstr ""
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr ""
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr ""
+
+#: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr ""
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr ""
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr ""
+
+#: builtin/checkout-index.c:200
+msgid "read list of paths from the standard input"
+msgstr ""
+
+#: builtin/checkout-index.c:202
+msgid "write the content to temporary files"
+msgstr ""
+
+#: builtin/checkout-index.c:203 builtin/column.c:30
+msgid "string"
+msgstr ""
+
+#: builtin/checkout-index.c:204
+msgid "when creating files, prepend <string>"
+msgstr ""
+
+#: builtin/checkout-index.c:207
+msgid "copy out the files from named stage"
+msgstr ""
+
+#: builtin/checkout.c:25
+msgid "git checkout [options] <branch>"
+msgstr ""
+
+#: builtin/checkout.c:26
+msgid "git checkout [options] [<branch>] -- <file>..."
+msgstr ""
+
+#: builtin/checkout.c:114 builtin/checkout.c:147
+#, c-format
+msgid "path '%s' does not have our version"
+msgstr ""
+
+#: builtin/checkout.c:116 builtin/checkout.c:149
+#, c-format
+msgid "path '%s' does not have their version"
+msgstr ""
+
+#: builtin/checkout.c:132
+#, c-format
+msgid "path '%s' does not have all necessary versions"
+msgstr ""
+
+#: builtin/checkout.c:176
+#, c-format
+msgid "path '%s' does not have necessary versions"
+msgstr ""
+
+#: builtin/checkout.c:193
+#, c-format
+msgid "path '%s': cannot merge"
+msgstr ""
+
+#: builtin/checkout.c:210
+#, c-format
+msgid "Unable to add merge result for '%s'"
+msgstr ""
+
+#: builtin/checkout.c:232 builtin/checkout.c:235 builtin/checkout.c:238
+#: builtin/checkout.c:241
+#, c-format
+msgid "'%s' cannot be used with updating paths"
+msgstr ""
+
+#: builtin/checkout.c:244 builtin/checkout.c:247
+#, c-format
+msgid "'%s' cannot be used with %s"
+msgstr ""
+
+#: builtin/checkout.c:250
+#, c-format
+msgid "Cannot update paths and switch to branch '%s' at the same time."
+msgstr ""
+
+#: builtin/checkout.c:261 builtin/checkout.c:451
+msgid "corrupt index file"
+msgstr ""
+
+#: builtin/checkout.c:322 builtin/checkout.c:329
+#, c-format
+msgid "path '%s' is unmerged"
+msgstr ""
+
+#: builtin/checkout.c:473
+msgid "you need to resolve your current index first"
+msgstr ""
+
+#: builtin/checkout.c:594
+#, c-format
+msgid "Can not do reflog for '%s'\n"
+msgstr ""
+
+#: builtin/checkout.c:632
+msgid "HEAD is now at"
+msgstr ""
+
+#: builtin/checkout.c:639
+#, c-format
+msgid "Reset branch '%s'\n"
+msgstr ""
+
+#: builtin/checkout.c:642
+#, c-format
+msgid "Already on '%s'\n"
+msgstr ""
+
+#: builtin/checkout.c:646
+#, c-format
+msgid "Switched to and reset branch '%s'\n"
+msgstr ""
+
+#: builtin/checkout.c:648 builtin/checkout.c:1033
+#, c-format
+msgid "Switched to a new branch '%s'\n"
+msgstr ""
+
+#: builtin/checkout.c:650
+#, c-format
+msgid "Switched to branch '%s'\n"
+msgstr ""
+
+#: builtin/checkout.c:706
+#, c-format
+msgid " ... and %d more.\n"
+msgstr ""
+
+#. The singular version
+#: builtin/checkout.c:712
+#, c-format
+msgid ""
+"Warning: you are leaving %d commit behind, not connected to\n"
+"any of your branches:\n"
+"\n"
+"%s\n"
+msgid_plural ""
+"Warning: you are leaving %d commits behind, not connected to\n"
+"any of your branches:\n"
+"\n"
+"%s\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/checkout.c:730
+#, c-format
+msgid ""
+"If you want to keep them by creating a new branch, this may be a good time\n"
+"to do so with:\n"
+"\n"
+" git branch new_branch_name %s\n"
+"\n"
+msgstr ""
+
+#: builtin/checkout.c:760
+msgid "internal error in revision walk"
+msgstr ""
+
+#: builtin/checkout.c:764
+msgid "Previous HEAD position was"
+msgstr ""
+
+#: builtin/checkout.c:791 builtin/checkout.c:1028
+msgid "You are on a branch yet to be born"
+msgstr ""
+
+#: builtin/checkout.c:935
+#, c-format
+msgid "only one reference expected, %d given."
+msgstr ""
+
+#: builtin/checkout.c:974
+#, c-format
+msgid "invalid reference: %s"
+msgstr ""
+
+#. case (1): want a tree
+#: builtin/checkout.c:1003
+#, c-format
+msgid "reference is not a tree: %s"
+msgstr ""
+
+#: builtin/checkout.c:1042
+msgid "paths cannot be used with switching branches"
+msgstr ""
+
+#: builtin/checkout.c:1045 builtin/checkout.c:1049
+#, c-format
+msgid "'%s' cannot be used with switching branches"
+msgstr ""
+
+#: builtin/checkout.c:1053 builtin/checkout.c:1056 builtin/checkout.c:1061
+#: builtin/checkout.c:1064
+#, c-format
+msgid "'%s' cannot be used with '%s'"
+msgstr ""
+
+#: builtin/checkout.c:1069
+#, c-format
+msgid "Cannot switch branch to a non-commit '%s'"
+msgstr ""
+
+#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88
+#: builtin/remote.c:159 builtin/remote.c:161
+msgid "branch"
+msgstr "клон"
+
+#: builtin/checkout.c:1092
+msgid "create and checkout a new branch"
+msgstr ""
+
+#: builtin/checkout.c:1094
+msgid "create/reset and checkout a branch"
+msgstr ""
+
+#: builtin/checkout.c:1095
+msgid "create reflog for new branch"
+msgstr ""
+
+#: builtin/checkout.c:1096
+msgid "detach the HEAD at named commit"
+msgstr ""
+
+#: builtin/checkout.c:1097
+msgid "set upstream info for new branch"
+msgstr ""
+
+#: builtin/checkout.c:1099
+msgid "new branch"
+msgstr ""
+
+#: builtin/checkout.c:1099
+msgid "new unparented branch"
+msgstr ""
+
+#: builtin/checkout.c:1100
+msgid "checkout our version for unmerged files"
+msgstr ""
+
+#: builtin/checkout.c:1102
+msgid "checkout their version for unmerged files"
+msgstr ""
+
+#: builtin/checkout.c:1104
+msgid "force checkout (throw away local modifications)"
+msgstr ""
+
+#: builtin/checkout.c:1105
+msgid "perform a 3-way merge with the new branch"
+msgstr ""
+
+#: builtin/checkout.c:1106 builtin/merge.c:225
+msgid "update ignored files (default)"
+msgstr ""
+
+#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248
+msgid "style"
+msgstr "Ñтил"
+
+#: builtin/checkout.c:1108
+msgid "conflict style (merge or diff3)"
+msgstr ""
+
+#: builtin/checkout.c:1111
+msgid "do not limit pathspecs to sparse entries only"
+msgstr ""
+
+#: builtin/checkout.c:1113
+msgid "second guess 'git checkout no-such-branch'"
+msgstr ""
+
+#: builtin/checkout.c:1136
+msgid "-b, -B and --orphan are mutually exclusive"
+msgstr ""
+
+#: builtin/checkout.c:1153
+msgid "--track needs a branch name"
+msgstr ""
+
+#: builtin/checkout.c:1160
+msgid "Missing branch name; try -b"
+msgstr ""
+
+#: builtin/checkout.c:1197
+msgid "invalid path specification"
+msgstr ""
+
+#: builtin/checkout.c:1204
+#, c-format
+msgid ""
+"Cannot update paths and switch to branch '%s' at the same time.\n"
+"Did you intend to checkout '%s' which can not be resolved as commit?"
+msgstr ""
+
+#: builtin/checkout.c:1209
+#, c-format
+msgid "git checkout: --detach does not take a path argument '%s'"
+msgstr ""
+
+#: builtin/checkout.c:1213
+msgid ""
+"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
+"checking out of the index."
+msgstr ""
+
+#: builtin/clean.c:26
+msgid ""
+"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
+msgstr ""
+
+#: builtin/clean.c:30
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: builtin/clean.c:31
+#, c-format
+msgid "Would remove %s\n"
+msgstr ""
+
+#: builtin/clean.c:32
+#, c-format
+msgid "Skipping repository %s\n"
+msgstr ""
+
+#: builtin/clean.c:33
+#, c-format
+msgid "Would skip repository %s\n"
+msgstr ""
+
+#: builtin/clean.c:34
+#, c-format
+msgid "failed to remove %s"
+msgstr ""
+
+#: builtin/clean.c:294
+msgid ""
+"Prompt help:\n"
+"1 - select a numbered item\n"
+"foo - select item based on unique prefix\n"
+" - (empty) select nothing"
+msgstr ""
+
+#: builtin/clean.c:298
+msgid ""
+"Prompt help:\n"
+"1 - select a single item\n"
+"3-5 - select a range of items\n"
+"2-3,6-9 - select multiple ranges\n"
+"foo - select item based on unique prefix\n"
+"-... - unselect specified items\n"
+"* - choose all items\n"
+" - (empty) finish selecting"
+msgstr ""
+
+#: builtin/clean.c:516
+#, c-format
+msgid "Huh (%s)?"
+msgstr ""
+
+#: builtin/clean.c:659
+#, c-format
+msgid "Input ignore patterns>> "
+msgstr ""
+
+#: builtin/clean.c:696
+#, c-format
+msgid "WARNING: Cannot find items matched by: %s"
+msgstr ""
+
+#: builtin/clean.c:717
+msgid "Select items to delete"
+msgstr ""
+
+#: builtin/clean.c:757
+#, c-format
+msgid "remove %s? "
+msgstr ""
+
+#: builtin/clean.c:782
+msgid "Bye."
+msgstr ""
+
+#: builtin/clean.c:790
+msgid ""
+"clean - start cleaning\n"
+"filter by pattern - exclude items from deletion\n"
+"select by numbers - select items to be deleted by numbers\n"
+"ask each - confirm each deletion (like \"rm -i\")\n"
+"quit - stop cleaning\n"
+"help - this screen\n"
+"? - help for prompt selection"
+msgstr ""
+
+#: builtin/clean.c:817
+msgid "*** Commands ***"
+msgstr ""
+
+#: builtin/clean.c:818
+msgid "What now"
+msgstr ""
+
+#: builtin/clean.c:826
+msgid "Would remove the following item:"
+msgid_plural "Would remove the following items:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/clean.c:843
+msgid "No more files to clean, exiting."
+msgstr ""
+
+#: builtin/clean.c:874
+msgid "do not print names of files removed"
+msgstr ""
+
+#: builtin/clean.c:876
+msgid "force"
+msgstr ""
+
+#: builtin/clean.c:877
+msgid "interactive cleaning"
+msgstr ""
+
+#: builtin/clean.c:879
+msgid "remove whole directories"
+msgstr ""
+
+#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718
+#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185
+msgid "pattern"
+msgstr ""
+
+#: builtin/clean.c:881
+msgid "add <pattern> to ignore rules"
+msgstr ""
+
+#: builtin/clean.c:882
+msgid "remove ignored files, too"
+msgstr ""
+
+#: builtin/clean.c:884
+msgid "remove only ignored files"
+msgstr ""
+
+#: builtin/clean.c:902
+msgid "-x and -X cannot be used together"
+msgstr ""
+
+#: builtin/clean.c:906
+msgid ""
+"clean.requireForce set to true and neither -i, -n nor -f given; refusing to "
+"clean"
+msgstr ""
+
+#: builtin/clean.c:909
+msgid ""
+"clean.requireForce defaults to true and neither -i, -n nor -f given; "
+"refusing to clean"
+msgstr ""
+
+#: builtin/clone.c:36
+msgid "git clone [options] [--] <repo> [<dir>]"
+msgstr ""
+
+#: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222
+#: builtin/push.c:521
+msgid "force progress reporting"
+msgstr ""
+
+#: builtin/clone.c:66
+msgid "don't create a checkout"
+msgstr ""
+
+#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488
+msgid "create a bare repository"
+msgstr ""
+
+#: builtin/clone.c:71
+msgid "create a mirror repository (implies bare)"
+msgstr ""
+
+#: builtin/clone.c:73
+msgid "to clone from a local repository"
+msgstr ""
+
+#: builtin/clone.c:75
+msgid "don't use local hardlinks, always copy"
+msgstr ""
+
+#: builtin/clone.c:77
+msgid "setup as shared repository"
+msgstr ""
+
+#: builtin/clone.c:79 builtin/clone.c:81
+msgid "initialize submodules in the clone"
+msgstr ""
+
+#: builtin/clone.c:82 builtin/init-db.c:485
+msgid "template-directory"
+msgstr ""
+
+#: builtin/clone.c:83 builtin/init-db.c:486
+msgid "directory from which templates will be used"
+msgstr ""
+
+#: builtin/clone.c:85
+msgid "reference repository"
+msgstr ""
+
+#: builtin/clone.c:86 builtin/column.c:26 builtin/merge-file.c:44
+msgid "name"
+msgstr ""
+
+#: builtin/clone.c:87
+msgid "use <name> instead of 'origin' to track upstream"
+msgstr ""
+
+#: builtin/clone.c:89
+msgid "checkout <branch> instead of the remote's HEAD"
+msgstr ""
+
+#: builtin/clone.c:91
+msgid "path to git-upload-pack on the remote"
+msgstr ""
+
+#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663
+msgid "depth"
+msgstr ""
+
+#: builtin/clone.c:93
+msgid "create a shallow clone of that depth"
+msgstr ""
+
+#: builtin/clone.c:95
+msgid "clone only one branch, HEAD or --branch"
+msgstr ""
+
+#: builtin/clone.c:96 builtin/init-db.c:494
+msgid "gitdir"
+msgstr ""
+
+#: builtin/clone.c:97 builtin/init-db.c:495
+msgid "separate git dir from working tree"
+msgstr ""
+
+#: builtin/clone.c:98
+msgid "key=value"
+msgstr ""
+
+#: builtin/clone.c:99
+msgid "set config inside the new repository"
+msgstr ""
+
+#: builtin/clone.c:252
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr ""
+
+#: builtin/clone.c:256
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr ""
+
+#: builtin/clone.c:259
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr ""
+
+#: builtin/clone.c:321
+#, c-format
+msgid "failed to create directory '%s'"
+msgstr ""
+
+#: builtin/clone.c:323 builtin/diff.c:83
+#, c-format
+msgid "failed to stat '%s'"
+msgstr ""
+
+#: builtin/clone.c:325
+#, c-format
+msgid "%s exists and is not a directory"
+msgstr ""
+
+#: builtin/clone.c:339
+#, c-format
+msgid "failed to stat %s\n"
+msgstr ""
+
+#: builtin/clone.c:361
+#, c-format
+msgid "failed to create link '%s'"
+msgstr ""
+
+#: builtin/clone.c:365
+#, c-format
+msgid "failed to copy file to '%s'"
+msgstr ""
+
+#: builtin/clone.c:388 builtin/clone.c:565
+#, c-format
+msgid "done.\n"
+msgstr ""
+
+#: builtin/clone.c:401
+msgid ""
+"Clone succeeded, but checkout failed.\n"
+"You can inspect what was checked out with 'git status'\n"
+"and retry the checkout with 'git checkout -f HEAD'\n"
+msgstr ""
+
+#: builtin/clone.c:480
+#, c-format
+msgid "Could not find remote branch %s to clone."
+msgstr ""
+
+#: builtin/clone.c:560
+#, c-format
+msgid "Checking connectivity... "
+msgstr ""
+
+#: builtin/clone.c:563
+msgid "remote did not send all necessary objects"
+msgstr ""
+
+#: builtin/clone.c:626
+msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
+msgstr ""
+
+#: builtin/clone.c:657
+msgid "unable to checkout working tree"
+msgstr ""
+
+#: builtin/clone.c:765
+msgid "Too many arguments."
+msgstr ""
+
+#: builtin/clone.c:769
+msgid "You must specify a repository to clone."
+msgstr ""
+
+#: builtin/clone.c:780
+#, c-format
+msgid "--bare and --origin %s options are incompatible."
+msgstr ""
+
+#: builtin/clone.c:783
+msgid "--bare and --separate-git-dir are incompatible."
+msgstr ""
+
+#: builtin/clone.c:796
+#, c-format
+msgid "repository '%s' does not exist"
+msgstr ""
+
+#: builtin/clone.c:802
+msgid "--depth is ignored in local clones; use file:// instead."
+msgstr ""
+
+#: builtin/clone.c:805
+msgid "source repository is shallow, ignoring --local"
+msgstr ""
+
+#: builtin/clone.c:810
+msgid "--local is ignored"
+msgstr ""
+
+#: builtin/clone.c:814 builtin/fetch.c:1119
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr ""
+
+#: builtin/clone.c:824
+#, c-format
+msgid "destination path '%s' already exists and is not an empty directory."
+msgstr ""
+
+#: builtin/clone.c:834
+#, c-format
+msgid "working tree '%s' already exists."
+msgstr ""
+
+#: builtin/clone.c:847 builtin/clone.c:859
+#, c-format
+msgid "could not create leading directories of '%s'"
+msgstr ""
+
+#: builtin/clone.c:850
+#, c-format
+msgid "could not create work tree dir '%s'."
+msgstr ""
+
+#: builtin/clone.c:869
+#, c-format
+msgid "Cloning into bare repository '%s'...\n"
+msgstr ""
+
+#: builtin/clone.c:871
+#, c-format
+msgid "Cloning into '%s'...\n"
+msgstr ""
+
+#: builtin/clone.c:906
+#, c-format
+msgid "Don't know how to clone %s"
+msgstr ""
+
+#: builtin/clone.c:957 builtin/clone.c:965
+#, c-format
+msgid "Remote branch %s not found in upstream %s"
+msgstr ""
+
+#: builtin/clone.c:968
+msgid "You appear to have cloned an empty repository."
+msgstr ""
+
+#: builtin/column.c:9
+msgid "git column [options]"
+msgstr ""
+
+#: builtin/column.c:26
+msgid "lookup config vars"
+msgstr ""
+
+#: builtin/column.c:27 builtin/column.c:28
+msgid "layout to use"
+msgstr ""
+
+#: builtin/column.c:29
+msgid "Maximum width"
+msgstr ""
+
+#: builtin/column.c:30
+msgid "Padding space on left border"
+msgstr ""
+
+#: builtin/column.c:31
+msgid "Padding space on right border"
+msgstr ""
+
+#: builtin/column.c:32
+msgid "Padding space between columns"
+msgstr ""
+
+#: builtin/column.c:51
+msgid "--command must be the first argument"
+msgstr ""
+
+#: builtin/commit.c:36
+msgid "git commit [options] [--] <pathspec>..."
+msgstr ""
+
+#: builtin/commit.c:41
+msgid "git status [options] [--] <pathspec>..."
+msgstr ""
+
+#: builtin/commit.c:46
+msgid ""
+"Your name and email address were configured automatically based\n"
+"on your username and hostname. Please check that they are accurate.\n"
+"You can suppress this message by setting them explicitly:\n"
+"\n"
+" git config --global user.name \"Your Name\"\n"
+" git config --global user.email you@example.com\n"
+"\n"
+"After doing this, you may fix the identity used for this commit with:\n"
+"\n"
+" git commit --amend --reset-author\n"
+msgstr ""
+
+#: builtin/commit.c:58
+msgid ""
+"You asked to amend the most recent commit, but doing so would make\n"
+"it empty. You can repeat your command with --allow-empty, or you can\n"
+"remove the commit entirely with \"git reset HEAD^\".\n"
+msgstr ""
+
+#: builtin/commit.c:63
+msgid ""
+"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
+"If you wish to commit it anyway, use:\n"
+"\n"
+" git commit --allow-empty\n"
+"\n"
+msgstr ""
+
+#: builtin/commit.c:70
+msgid "Otherwise, please use 'git reset'\n"
+msgstr ""
+
+#: builtin/commit.c:73
+msgid ""
+"If you wish to skip this commit, use:\n"
+"\n"
+" git reset\n"
+"\n"
+"Then \"git cherry-pick --continue\" will resume cherry-picking\n"
+"the remaining commits.\n"
+msgstr ""
+
+#: builtin/commit.c:287
+msgid "failed to unpack HEAD tree object"
+msgstr ""
+
+#: builtin/commit.c:329
+msgid "unable to create temporary index"
+msgstr ""
+
+#: builtin/commit.c:335
+msgid "interactive add failed"
+msgstr ""
+
+#: builtin/commit.c:368 builtin/commit.c:389 builtin/commit.c:439
+msgid "unable to write new_index file"
+msgstr ""
+
+#: builtin/commit.c:420
+msgid "cannot do a partial commit during a merge."
+msgstr ""
+
+#: builtin/commit.c:422
+msgid "cannot do a partial commit during a cherry-pick."
+msgstr ""
+
+#: builtin/commit.c:432
+msgid "cannot read the index"
+msgstr ""
+
+#: builtin/commit.c:452
+msgid "unable to write temporary index file"
+msgstr ""
+
+#: builtin/commit.c:543 builtin/commit.c:549
+#, c-format
+msgid "invalid commit: %s"
+msgstr ""
+
+#: builtin/commit.c:571
+msgid "malformed --author parameter"
+msgstr ""
+
+#: builtin/commit.c:591
+#, c-format
+msgid "Malformed ident string: '%s'"
+msgstr ""
+
+#: builtin/commit.c:630 builtin/commit.c:663 builtin/commit.c:1007
+#, c-format
+msgid "could not lookup commit %s"
+msgstr ""
+
+#: builtin/commit.c:642 builtin/shortlog.c:273
+#, c-format
+msgid "(reading log message from standard input)\n"
+msgstr ""
+
+#: builtin/commit.c:644
+msgid "could not read log from standard input"
+msgstr ""
+
+#: builtin/commit.c:648
+#, c-format
+msgid "could not read log file '%s'"
+msgstr ""
+
+#: builtin/commit.c:654
+msgid "commit has empty message"
+msgstr ""
+
+#: builtin/commit.c:670
+msgid "could not read MERGE_MSG"
+msgstr ""
+
+#: builtin/commit.c:674
+msgid "could not read SQUASH_MSG"
+msgstr ""
+
+#: builtin/commit.c:678
+#, c-format
+msgid "could not read '%s'"
+msgstr ""
+
+#: builtin/commit.c:749
+msgid "could not write commit template"
+msgstr ""
+
+# FIXME
+#: builtin/commit.c:760
+#, c-format
+msgid ""
+"\n"
+"It looks like you may be committing a merge.\n"
+"If this is not correct, please remove the file\n"
+"\t%s\n"
+"and try again.\n"
+msgstr ""
+
+# FIXME
+#: builtin/commit.c:765
+#, c-format
+msgid ""
+"\n"
+"It looks like you may be committing a cherry-pick.\n"
+"If this is not correct, please remove the file\n"
+"\t%s\n"
+"and try again.\n"
+msgstr ""
+
+#: builtin/commit.c:777
+#, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be ignored, and an empty message aborts the commit.\n"
+msgstr ""
+
+#: builtin/commit.c:782
+#, c-format
+msgid ""
+"Please enter the commit message for your changes. Lines starting\n"
+"with '%c' will be kept; you may remove them yourself if you want to.\n"
+"An empty message aborts the commit.\n"
+msgstr ""
+
+#: builtin/commit.c:795
+#, c-format
+msgid "%sAuthor: %s"
+msgstr ""
+
+#: builtin/commit.c:802
+#, c-format
+msgid "%sCommitter: %s"
+msgstr ""
+
+#: builtin/commit.c:822
+msgid "Cannot read index"
+msgstr ""
+
+#: builtin/commit.c:865
+msgid "Error building trees"
+msgstr ""
+
+#: builtin/commit.c:880 builtin/tag.c:359
+#, c-format
+msgid "Please supply the message using either -m or -F option.\n"
+msgstr ""
+
+#: builtin/commit.c:982
+#, c-format
+msgid "No existing author found with '%s'"
+msgstr ""
+
+#: builtin/commit.c:997 builtin/commit.c:1237
+#, c-format
+msgid "Invalid untracked files mode '%s'"
+msgstr ""
+
+#: builtin/commit.c:1034
+msgid "--long and -z are incompatible"
+msgstr ""
+
+#: builtin/commit.c:1064
+msgid "Using both --reset-author and --author does not make sense"
+msgstr ""
+
+#: builtin/commit.c:1075
+msgid "You have nothing to amend."
+msgstr ""
+
+#: builtin/commit.c:1078
+msgid "You are in the middle of a merge -- cannot amend."
+msgstr ""
+
+#: builtin/commit.c:1080
+msgid "You are in the middle of a cherry-pick -- cannot amend."
+msgstr ""
+
+#: builtin/commit.c:1083
+msgid "Options --squash and --fixup cannot be used together"
+msgstr ""
+
+#: builtin/commit.c:1093
+msgid "Only one of -c/-C/-F/--fixup can be used."
+msgstr ""
+
+#: builtin/commit.c:1095
+msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
+msgstr ""
+
+#: builtin/commit.c:1103
+msgid "--reset-author can be used only with -C, -c or --amend."
+msgstr ""
+
+#: builtin/commit.c:1120
+msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
+msgstr ""
+
+#: builtin/commit.c:1122
+msgid "No paths with --include/--only does not make sense."
+msgstr ""
+
+#: builtin/commit.c:1124
+msgid "Clever... amending the last one with dirty index."
+msgstr ""
+
+#: builtin/commit.c:1126
+msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
+msgstr ""
+
+#: builtin/commit.c:1136 builtin/tag.c:572
+#, c-format
+msgid "Invalid cleanup mode %s"
+msgstr ""
+
+#: builtin/commit.c:1141
+msgid "Paths with -a does not make sense."
+msgstr ""
+
+#: builtin/commit.c:1251 builtin/commit.c:1482
+msgid "show status concisely"
+msgstr ""
+
+#: builtin/commit.c:1253 builtin/commit.c:1484
+msgid "show branch information"
+msgstr ""
+
+#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507
+msgid "machine-readable output"
+msgstr ""
+
+#: builtin/commit.c:1258 builtin/commit.c:1488
+msgid "show status in long format (default)"
+msgstr ""
+
+#: builtin/commit.c:1261 builtin/commit.c:1491
+msgid "terminate entries with NUL"
+msgstr ""
+
+#: builtin/commit.c:1263 builtin/commit.c:1494 builtin/fast-export.c:674
+#: builtin/fast-export.c:677 builtin/tag.c:459
+msgid "mode"
+msgstr ""
+
+#: builtin/commit.c:1264 builtin/commit.c:1494
+msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
+msgstr ""
+
+#: builtin/commit.c:1267
+msgid "show ignored files"
+msgstr ""
+
+#: builtin/commit.c:1268 parse-options.h:156
+msgid "when"
+msgstr "кога"
+
+#: builtin/commit.c:1269
+msgid ""
+"ignore changes to submodules, optional when: all, dirty, untracked. "
+"(Default: all)"
+msgstr ""
+
+#: builtin/commit.c:1271
+msgid "list untracked files in columns"
+msgstr ""
+
+#: builtin/commit.c:1340
+msgid "couldn't look up newly created commit"
+msgstr ""
+
+#: builtin/commit.c:1342
+msgid "could not parse newly created commit"
+msgstr ""
+
+#: builtin/commit.c:1383
+msgid "detached HEAD"
+msgstr ""
+
+#: builtin/commit.c:1385
+msgid " (root-commit)"
+msgstr ""
+
+#: builtin/commit.c:1452
+msgid "suppress summary after successful commit"
+msgstr ""
+
+#: builtin/commit.c:1453
+msgid "show diff in commit message template"
+msgstr ""
+
+#: builtin/commit.c:1455
+msgid "Commit message options"
+msgstr ""
+
+#: builtin/commit.c:1456 builtin/tag.c:457
+msgid "read message from file"
+msgstr ""
+
+#: builtin/commit.c:1457
+msgid "author"
+msgstr ""
+
+#: builtin/commit.c:1457
+msgid "override author for commit"
+msgstr ""
+
+#: builtin/commit.c:1458 builtin/gc.c:261
+msgid "date"
+msgstr "дата"
+
+#: builtin/commit.c:1458
+msgid "override date for commit"
+msgstr ""
+
+#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405
+#: builtin/notes.c:562 builtin/tag.c:455
+msgid "message"
+msgstr ""
+
+#: builtin/commit.c:1459
+msgid "commit message"
+msgstr ""
+
+#: builtin/commit.c:1460
+msgid "reuse and edit message from specified commit"
+msgstr ""
+
+#: builtin/commit.c:1461
+msgid "reuse message from specified commit"
+msgstr ""
+
+#: builtin/commit.c:1462
+msgid "use autosquash formatted message to fixup specified commit"
+msgstr ""
+
+#: builtin/commit.c:1463
+msgid "use autosquash formatted message to squash specified commit"
+msgstr ""
+
+#: builtin/commit.c:1464
+msgid "the commit is authored by me now (used with -C/-c/--amend)"
+msgstr ""
+
+#: builtin/commit.c:1465 builtin/log.c:1180 builtin/revert.c:86
+msgid "add Signed-off-by:"
+msgstr ""
+
+#: builtin/commit.c:1466
+msgid "use specified template file"
+msgstr ""
+
+#: builtin/commit.c:1467
+msgid "force edit of commit"
+msgstr ""
+
+#: builtin/commit.c:1468
+msgid "default"
+msgstr ""
+
+#: builtin/commit.c:1468 builtin/tag.c:460
+msgid "how to strip spaces and #comments from message"
+msgstr ""
+
+#: builtin/commit.c:1469
+msgid "include status in commit message template"
+msgstr ""
+
+#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461
+msgid "key id"
+msgstr ""
+
+#: builtin/commit.c:1471 builtin/merge.c:224
+msgid "GPG sign commit"
+msgstr ""
+
+#. end commit message options
+#: builtin/commit.c:1474
+msgid "Commit contents options"
+msgstr ""
+
+#: builtin/commit.c:1475
+msgid "commit all changed files"
+msgstr ""
+
+#: builtin/commit.c:1476
+msgid "add specified files to index for commit"
+msgstr ""
+
+#: builtin/commit.c:1477
+msgid "interactively add files"
+msgstr ""
+
+#: builtin/commit.c:1478
+msgid "interactively add changes"
+msgstr ""
+
+#: builtin/commit.c:1479
+msgid "commit only specified files"
+msgstr ""
+
+#: builtin/commit.c:1480
+msgid "bypass pre-commit hook"
+msgstr ""
+
+#: builtin/commit.c:1481
+msgid "show what would be committed"
+msgstr ""
+
+#: builtin/commit.c:1492
+msgid "amend previous commit"
+msgstr ""
+
+#: builtin/commit.c:1493
+msgid "bypass post-rewrite hook"
+msgstr ""
+
+#: builtin/commit.c:1498
+msgid "ok to record an empty change"
+msgstr ""
+
+#: builtin/commit.c:1500
+msgid "ok to record a change with an empty message"
+msgstr ""
+
+#: builtin/commit.c:1529
+msgid "could not parse HEAD commit"
+msgstr ""
+
+#: builtin/commit.c:1567 builtin/merge.c:518
+#, c-format
+msgid "could not open '%s' for reading"
+msgstr ""
+
+#: builtin/commit.c:1574
+#, c-format
+msgid "Corrupt MERGE_HEAD file (%s)"
+msgstr ""
+
+#: builtin/commit.c:1581
+msgid "could not read MERGE_MODE"
+msgstr ""
+
+#: builtin/commit.c:1600
+#, c-format
+msgid "could not read commit message: %s"
+msgstr ""
+
+#: builtin/commit.c:1611
+#, c-format
+msgid "Aborting commit; you did not edit the message.\n"
+msgstr ""
+
+#: builtin/commit.c:1616
+#, c-format
+msgid "Aborting commit due to empty commit message.\n"
+msgstr ""
+
+#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879
+msgid "failed to write commit object"
+msgstr ""
+
+#: builtin/commit.c:1652
+msgid "cannot lock HEAD ref"
+msgstr ""
+
+#: builtin/commit.c:1656
+msgid "cannot update HEAD ref"
+msgstr ""
+
+#: builtin/commit.c:1667
+msgid ""
+"Repository has been updated, but unable to write\n"
+"new_index file. Check that disk is not full or quota is\n"
+"not exceeded, and then \"git reset HEAD\" to recover."
+msgstr ""
+
+#: builtin/config.c:8
+msgid "git config [options]"
+msgstr ""
+
+#: builtin/config.c:54
+msgid "Config file location"
+msgstr ""
+
+#: builtin/config.c:55
+msgid "use global config file"
+msgstr ""
+
+#: builtin/config.c:56
+msgid "use system config file"
+msgstr ""
+
+#: builtin/config.c:57
+msgid "use repository config file"
+msgstr ""
+
+#: builtin/config.c:58
+msgid "use given config file"
+msgstr ""
+
+#: builtin/config.c:59
+msgid "blob-id"
+msgstr ""
+
+#: builtin/config.c:59
+msgid "read config from given blob object"
+msgstr ""
+
+#: builtin/config.c:60
+msgid "Action"
+msgstr ""
+
+#: builtin/config.c:61
+msgid "get value: name [value-regex]"
+msgstr ""
+
+#: builtin/config.c:62
+msgid "get all values: key [value-regex]"
+msgstr ""
+
+#: builtin/config.c:63
+msgid "get values for regexp: name-regex [value-regex]"
+msgstr ""
+
+#: builtin/config.c:64
+msgid "get value specific for the URL: section[.var] URL"
+msgstr ""
+
+#: builtin/config.c:65
+msgid "replace all matching variables: name value [value_regex]"
+msgstr ""
+
+#: builtin/config.c:66
+msgid "add a new variable: name value"
+msgstr ""
+
+#: builtin/config.c:67
+msgid "remove a variable: name [value-regex]"
+msgstr ""
+
+#: builtin/config.c:68
+msgid "remove all matches: name [value-regex]"
+msgstr ""
+
+#: builtin/config.c:69
+msgid "rename section: old-name new-name"
+msgstr ""
+
+#: builtin/config.c:70
+msgid "remove a section: name"
+msgstr ""
+
+#: builtin/config.c:71
+msgid "list all"
+msgstr ""
+
+#: builtin/config.c:72
+msgid "open an editor"
+msgstr ""
+
+#: builtin/config.c:73 builtin/config.c:74
+msgid "slot"
+msgstr ""
+
+#: builtin/config.c:73
+msgid "find the color configured: [default]"
+msgstr ""
+
+#: builtin/config.c:74
+msgid "find the color setting: [stdout-is-tty]"
+msgstr ""
+
+#: builtin/config.c:75
+msgid "Type"
+msgstr ""
+
+#: builtin/config.c:76
+msgid "value is \"true\" or \"false\""
+msgstr ""
+
+#: builtin/config.c:77
+msgid "value is decimal number"
+msgstr ""
+
+#: builtin/config.c:78
+msgid "value is --bool or --int"
+msgstr ""
+
+#: builtin/config.c:79
+msgid "value is a path (file or directory name)"
+msgstr ""
+
+#: builtin/config.c:80
+msgid "Other"
+msgstr ""
+
+#: builtin/config.c:81
+msgid "terminate values with NUL byte"
+msgstr ""
+
+#: builtin/config.c:82
+msgid "respect include directives on lookup"
+msgstr ""
+
+#: builtin/count-objects.c:82
+msgid "git count-objects [-v] [-H | --human-readable]"
+msgstr ""
+
+#: builtin/count-objects.c:97
+msgid "print sizes in human readable format"
+msgstr ""
+
+#: builtin/describe.c:16
+msgid "git describe [options] <commit-ish>*"
+msgstr ""
+
+#: builtin/describe.c:17
+msgid "git describe [options] --dirty"
+msgstr ""
+
+#: builtin/describe.c:237
+#, c-format
+msgid "annotated tag %s not available"
+msgstr ""
+
+#: builtin/describe.c:241
+#, c-format
+msgid "annotated tag %s has no embedded name"
+msgstr ""
+
+#: builtin/describe.c:243
+#, c-format
+msgid "tag '%s' is really '%s' here"
+msgstr ""
+
+#: builtin/describe.c:270
+#, c-format
+msgid "Not a valid object name %s"
+msgstr ""
+
+#: builtin/describe.c:273
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr ""
+
+#: builtin/describe.c:290
+#, c-format
+msgid "no tag exactly matches '%s'"
+msgstr ""
+
+#: builtin/describe.c:292
+#, c-format
+msgid "searching to describe %s\n"
+msgstr ""
+
+#: builtin/describe.c:332
+#, c-format
+msgid "finished search at %s\n"
+msgstr ""
+
+#: builtin/describe.c:359
+#, c-format
+msgid ""
+"No annotated tags can describe '%s'.\n"
+"However, there were unannotated tags: try --tags."
+msgstr ""
+
+#: builtin/describe.c:363
+#, c-format
+msgid ""
+"No tags can describe '%s'.\n"
+"Try --always, or create some tags."
+msgstr ""
+
+#: builtin/describe.c:384
+#, c-format
+msgid "traversed %lu commits\n"
+msgstr ""
+
+#: builtin/describe.c:387
+#, c-format
+msgid ""
+"more than %i tags found; listed %i most recent\n"
+"gave up search at %s\n"
+msgstr ""
+
+#: builtin/describe.c:409
+msgid "find the tag that comes after the commit"
+msgstr ""
+
+#: builtin/describe.c:410
+msgid "debug search strategy on stderr"
+msgstr ""
+
+#: builtin/describe.c:411
+msgid "use any ref"
+msgstr ""
+
+#: builtin/describe.c:412
+msgid "use any tag, even unannotated"
+msgstr ""
+
+#: builtin/describe.c:413
+msgid "always use long format"
+msgstr ""
+
+#: builtin/describe.c:414
+msgid "only follow first parent"
+msgstr ""
+
+#: builtin/describe.c:417
+msgid "only output exact matches"
+msgstr ""
+
+#: builtin/describe.c:419
+#, fuzzy
+msgid "consider <n> most recent tags (default: 10)"
+msgstr "<брой>"
+
+#: builtin/describe.c:421
+msgid "only consider tags matching <pattern>"
+msgstr ""
+
+#: builtin/describe.c:423 builtin/name-rev.c:321
+msgid "show abbreviated commit object as fallback"
+msgstr ""
+
+#: builtin/describe.c:424
+msgid "mark"
+msgstr ""
+
+#: builtin/describe.c:425
+msgid "append <mark> on dirty working tree (default: \"-dirty\")"
+msgstr ""
+
+#: builtin/describe.c:443
+msgid "--long is incompatible with --abbrev=0"
+msgstr ""
+
+#: builtin/describe.c:469
+msgid "No names found, cannot describe anything."
+msgstr ""
+
+#: builtin/describe.c:489
+msgid "--dirty is incompatible with commit-ishes"
+msgstr ""
+
+#: builtin/diff.c:85
+#, c-format
+msgid "'%s': not a regular file or symlink"
+msgstr ""
+
+#: builtin/diff.c:236
+#, c-format
+msgid "invalid option: %s"
+msgstr ""
+
+#: builtin/diff.c:357
+msgid "Not a git repository"
+msgstr ""
+
+#: builtin/diff.c:400
+#, c-format
+msgid "invalid object '%s' given."
+msgstr ""
+
+#: builtin/diff.c:409
+#, c-format
+msgid "more than two blobs given: '%s'"
+msgstr ""
+
+#: builtin/diff.c:416
+#, c-format
+msgid "unhandled object '%s' given."
+msgstr ""
+
+#: builtin/fast-export.c:22
+msgid "git fast-export [rev-list-opts]"
+msgstr ""
+
+#: builtin/fast-export.c:673
+#, fuzzy
+msgid "show progress after <n> objects"
+msgstr "<брой>"
+
+#: builtin/fast-export.c:675
+msgid "select handling of signed tags"
+msgstr ""
+
+#: builtin/fast-export.c:678
+msgid "select handling of tags that tag filtered objects"
+msgstr ""
+
+#: builtin/fast-export.c:681
+msgid "Dump marks to this file"
+msgstr ""
+
+#: builtin/fast-export.c:683
+msgid "Import marks from this file"
+msgstr ""
+
+#: builtin/fast-export.c:685
+msgid "Fake a tagger when tags lack one"
+msgstr ""
+
+#: builtin/fast-export.c:687
+msgid "Output full tree for each commit"
+msgstr ""
+
+#: builtin/fast-export.c:689
+msgid "Use the done feature to terminate the stream"
+msgstr ""
+
+#: builtin/fast-export.c:690
+msgid "Skip output of blob data"
+msgstr ""
+
+#: builtin/fetch.c:20
+msgid "git fetch [<options>] [<repository> [<refspec>...]]"
+msgstr ""
+
+#: builtin/fetch.c:21
+msgid "git fetch [<options>] <group>"
+msgstr ""
+
+#: builtin/fetch.c:22
+msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
+msgstr ""
+
+#: builtin/fetch.c:23
+msgid "git fetch --all [<options>]"
+msgstr ""
+
+#: builtin/fetch.c:75
+msgid "fetch from all remotes"
+msgstr ""
+
+#: builtin/fetch.c:77
+msgid "append to .git/FETCH_HEAD instead of overwriting"
+msgstr ""
+
+#: builtin/fetch.c:79
+msgid "path to upload pack on remote end"
+msgstr ""
+
+#: builtin/fetch.c:80
+msgid "force overwrite of local branch"
+msgstr ""
+
+#: builtin/fetch.c:82
+msgid "fetch from multiple remotes"
+msgstr ""
+
+#: builtin/fetch.c:84
+msgid "fetch all tags and associated objects"
+msgstr ""
+
+#: builtin/fetch.c:86
+msgid "do not fetch all tags (--no-tags)"
+msgstr ""
+
+#: builtin/fetch.c:88
+msgid "prune remote-tracking branches no longer on remote"
+msgstr ""
+
+#: builtin/fetch.c:89
+msgid "on-demand"
+msgstr ""
+
+#: builtin/fetch.c:90
+msgid "control recursive fetching of submodules"
+msgstr ""
+
+#: builtin/fetch.c:94
+msgid "keep downloaded pack"
+msgstr ""
+
+#: builtin/fetch.c:96
+msgid "allow updating of HEAD ref"
+msgstr ""
+
+#: builtin/fetch.c:99
+msgid "deepen history of shallow clone"
+msgstr ""
+
+#: builtin/fetch.c:101
+msgid "convert to a complete repository"
+msgstr ""
+
+#: builtin/fetch.c:103 builtin/log.c:1197
+msgid "dir"
+msgstr ""
+
+#: builtin/fetch.c:104
+msgid "prepend this to submodule path output"
+msgstr ""
+
+#: builtin/fetch.c:107
+msgid "default mode for recursion"
+msgstr ""
+
+#: builtin/fetch.c:109
+msgid "accept refs that update .git/shallow"
+msgstr ""
+
+#: builtin/fetch.c:347
+msgid "Couldn't find remote ref HEAD"
+msgstr ""
+
+#: builtin/fetch.c:411
+#, c-format
+msgid "object %s not found"
+msgstr ""
+
+#: builtin/fetch.c:416
+msgid "[up to date]"
+msgstr ""
+
+#: builtin/fetch.c:430
+#, c-format
+msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
+msgstr ""
+
+#: builtin/fetch.c:431 builtin/fetch.c:517
+msgid "[rejected]"
+msgstr ""
+
+#: builtin/fetch.c:442
+msgid "[tag update]"
+msgstr ""
+
+#: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497
+msgid " (unable to update local ref)"
+msgstr ""
+
+#: builtin/fetch.c:462
+msgid "[new tag]"
+msgstr ""
+
+#: builtin/fetch.c:465
+msgid "[new branch]"
+msgstr ""
+
+#: builtin/fetch.c:468
+msgid "[new ref]"
+msgstr ""
+
+#: builtin/fetch.c:513
+msgid "unable to update local ref"
+msgstr ""
+
+#: builtin/fetch.c:513
+msgid "forced update"
+msgstr ""
+
+#: builtin/fetch.c:519
+msgid "(non-fast-forward)"
+msgstr ""
+
+#: builtin/fetch.c:552 builtin/fetch.c:785
+#, c-format
+msgid "cannot open %s: %s\n"
+msgstr ""
+
+#: builtin/fetch.c:561
+#, c-format
+msgid "%s did not send all necessary objects\n"
+msgstr ""
+
+#: builtin/fetch.c:579
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr ""
+
+#: builtin/fetch.c:667 builtin/fetch.c:750
+#, c-format
+msgid "From %.*s\n"
+msgstr ""
+
+#: builtin/fetch.c:678
+#, c-format
+msgid ""
+"some local refs could not be updated; try running\n"
+" 'git remote prune %s' to remove any old, conflicting branches"
+msgstr ""
+
+#: builtin/fetch.c:730
+#, c-format
+msgid " (%s will become dangling)"
+msgstr ""
+
+#: builtin/fetch.c:731
+#, c-format
+msgid " (%s has become dangling)"
+msgstr ""
+
+#: builtin/fetch.c:755
+msgid "[deleted]"
+msgstr ""
+
+#: builtin/fetch.c:756 builtin/remote.c:1050
+msgid "(none)"
+msgstr "(нищо)"
+
+#: builtin/fetch.c:775
+#, c-format
+msgid "Refusing to fetch into current branch %s of non-bare repository"
+msgstr ""
+
+#: builtin/fetch.c:794
+#, c-format
+msgid "Option \"%s\" value \"%s\" is not valid for %s"
+msgstr ""
+
+#: builtin/fetch.c:797
+#, c-format
+msgid "Option \"%s\" is ignored for %s\n"
+msgstr ""
+
+#: builtin/fetch.c:853
+#, c-format
+msgid "Don't know how to fetch from %s"
+msgstr ""
+
+#: builtin/fetch.c:1015
+#, c-format
+msgid "Fetching %s\n"
+msgstr ""
+
+#: builtin/fetch.c:1017 builtin/remote.c:90
+#, c-format
+msgid "Could not fetch %s"
+msgstr "„%s“ не може да Ñе доÑтави"
+
+#: builtin/fetch.c:1036
+msgid ""
+"No remote repository specified. Please, specify either a URL or a\n"
+"remote name from which new revisions should be fetched."
+msgstr ""
+
+#: builtin/fetch.c:1059
+msgid "You need to specify a tag name."
+msgstr ""
+
+#: builtin/fetch.c:1107
+msgid "--depth and --unshallow cannot be used together"
+msgstr ""
+
+#: builtin/fetch.c:1109
+msgid "--unshallow on a complete repository does not make sense"
+msgstr ""
+
+#: builtin/fetch.c:1132
+msgid "fetch --all does not take a repository argument"
+msgstr ""
+
+#: builtin/fetch.c:1134
+msgid "fetch --all does not make sense with refspecs"
+msgstr ""
+
+#: builtin/fetch.c:1145
+#, c-format
+msgid "No such remote or remote group: %s"
+msgstr ""
+
+#: builtin/fetch.c:1153
+msgid "Fetching a group and specifying refspecs does not make sense"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:13
+#, fuzzy
+msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
+msgstr "<брой>"
+
+#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702
+#: builtin/merge.c:196 builtin/show-branch.c:654 builtin/show-ref.c:178
+#: builtin/tag.c:446 parse-options.h:135 parse-options.h:242
+msgid "n"
+msgstr "брой"
+
+#: builtin/fmt-merge-msg.c:664
+#, fuzzy
+msgid "populate log with at most <n> entries from shortlog"
+msgstr "<брой>"
+
+#: builtin/fmt-merge-msg.c:667
+msgid "alias for --log (deprecated)"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:670
+msgid "text"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:671
+msgid "use <text> as start of message"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:672
+msgid "file to read from"
+msgstr ""
+
+#: builtin/for-each-ref.c:1063
+msgid "git for-each-ref [options] [<pattern>]"
+msgstr ""
+
+#: builtin/for-each-ref.c:1078
+msgid "quote placeholders suitably for shells"
+msgstr ""
+
+#: builtin/for-each-ref.c:1080
+msgid "quote placeholders suitably for perl"
+msgstr ""
+
+#: builtin/for-each-ref.c:1082
+msgid "quote placeholders suitably for python"
+msgstr ""
+
+#: builtin/for-each-ref.c:1084
+msgid "quote placeholders suitably for tcl"
+msgstr ""
+
+#: builtin/for-each-ref.c:1087
+#, fuzzy
+msgid "show only <n> matched refs"
+msgstr "<брой>"
+
+#: builtin/for-each-ref.c:1088 builtin/replace.c:177
+msgid "format"
+msgstr ""
+
+#: builtin/for-each-ref.c:1088
+msgid "format to use for the output"
+msgstr ""
+
+#: builtin/for-each-ref.c:1089
+msgid "key"
+msgstr ""
+
+#: builtin/for-each-ref.c:1090
+msgid "field name to sort on"
+msgstr ""
+
+#: builtin/fsck.c:607
+msgid "git fsck [options] [<object>...]"
+msgstr "git fsck [ОПЦИИ] [<ОБЕКТ>…]"
+
+#: builtin/fsck.c:613
+msgid "show unreachable objects"
+msgstr "показване на недоÑтижимите обекти"
+
+#: builtin/fsck.c:614
+msgid "show dangling objects"
+msgstr "показване на обектите извън клоните"
+
+#: builtin/fsck.c:615
+msgid "report tags"
+msgstr "показване на етикетите"
+
+#: builtin/fsck.c:616
+msgid "report root nodes"
+msgstr "показване на кореновите възли"
+
+#: builtin/fsck.c:617
+msgid "make index objects head nodes"
+msgstr "задаване на обекти от индекÑа да Ñа коренови"
+
+#: builtin/fsck.c:618
+#, fuzzy
+msgid "make reflogs head nodes (default)"
+msgstr "проÑледÑване на указателите от журнала като глави (Ñтандартно)"
+
+#: builtin/fsck.c:619
+#, fuzzy
+msgid "also consider packs and alternate objects"
+msgstr "допълнително да Ñе проверÑват пакетите и алтернативните обекти"
+
+#: builtin/fsck.c:620
+msgid "enable more strict checking"
+msgstr "по-Ñтроги проверки"
+
+#: builtin/fsck.c:622
+msgid "write dangling objects in .git/lost-found"
+msgstr "запазване на обектите извън клоните в директориÑта „.git/lost-found“"
+
+#: builtin/fsck.c:623 builtin/prune.c:144
+msgid "show progress"
+msgstr "показване на напредъка"
+
+#: builtin/gc.c:24
+msgid "git gc [options]"
+msgstr "git gc [ОПЦИИ]"
+
+#: builtin/gc.c:80
+#, c-format
+msgid "Invalid %s: '%s'"
+msgstr "Ðеправилна ÑтойноÑÑ‚ за „%s“: „%s“"
+
+#: builtin/gc.c:107
+#, c-format
+msgid "insanely long object directory %.*s"
+msgstr "прекалено дълга Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ Ð¾Ð±ÐµÐºÑ‚Ð¸ „%.*s“"
+
+#: builtin/gc.c:262
+msgid "prune unreferenced objects"
+msgstr "окаÑÑ‚Ñ€Ñне на обектите, към които нищо не Ñочи"
+
+#: builtin/gc.c:264
+msgid "be more thorough (increased runtime)"
+msgstr "изчерпателно Ñ‚ÑŠÑ€Ñене на боклука (за Ñметка на повече време работа)"
+
+#: builtin/gc.c:265
+msgid "enable auto-gc mode"
+msgstr "включване на автоматичното Ñъбиране на боклука (auto-gc)"
+
+#: builtin/gc.c:266
+msgid "force running gc even if there may be another gc running"
+msgstr ""
+"изрично Ñтартиране на Ñъбирането на боклука, дори и ако вече работи друго "
+"Ñъбиране"
+
+#: builtin/gc.c:306
+#, c-format
+msgid ""
+"Auto packing the repository for optimum performance. You may also\n"
+"run \"git gc\" manually. See \"git help gc\" for more information.\n"
+msgstr ""
+"Ðвтоматично пакетиране на хранилището за най-добра производителноÑÑ‚. Можете "
+"и\n"
+"ръчно да Ñтартирате „git gc“. За подробноÑти погледнете помощта: „git help "
+"gc“.\n"
+
+#. be quiet on --auto
+#: builtin/gc.c:316
+#, c-format
+msgid ""
+"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
+msgstr ""
+"Ñъбирането на боклука вече е Ñтартирано на машината „%s“ Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ на\n"
+"процеÑа: %<PRIuMAX> (ако Ñте Ñигурни, че това не е вÑрно, това използвайте\n"
+"опциÑта „--force“)"
+
+#: builtin/gc.c:341
+msgid ""
+"There are too many unreachable loose objects; run 'git prune' to remove them."
+msgstr ""
+"Има прекалено много недоÑтижими, непакетирани обекти. Използвайте „git "
+"prune“, за да\n"
+"ги окаÑтрите."
+
+#: builtin/grep.c:23
+msgid "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]"
+msgstr ""
+
+#: builtin/grep.c:218
+#, c-format
+msgid "grep: failed to create thread: %s"
+msgstr ""
+
+#: builtin/grep.c:365
+#, c-format
+msgid "Failed to chdir: %s"
+msgstr ""
+
+#: builtin/grep.c:443 builtin/grep.c:478
+#, c-format
+msgid "unable to read tree (%s)"
+msgstr ""
+
+#: builtin/grep.c:493
+#, c-format
+msgid "unable to grep from object of type %s"
+msgstr ""
+
+#: builtin/grep.c:551
+#, c-format
+msgid "switch `%c' expects a numerical value"
+msgstr ""
+
+#: builtin/grep.c:568
+#, c-format
+msgid "cannot open '%s'"
+msgstr ""
+
+#: builtin/grep.c:642
+msgid "search in index instead of in the work tree"
+msgstr ""
+
+#: builtin/grep.c:644
+msgid "find in contents not managed by git"
+msgstr ""
+
+#: builtin/grep.c:646
+msgid "search in both tracked and untracked files"
+msgstr ""
+
+#: builtin/grep.c:648
+msgid "search also in ignored files"
+msgstr ""
+
+#: builtin/grep.c:651
+msgid "show non-matching lines"
+msgstr ""
+
+#: builtin/grep.c:653
+msgid "case insensitive matching"
+msgstr ""
+
+#: builtin/grep.c:655
+msgid "match patterns only at word boundaries"
+msgstr ""
+
+#: builtin/grep.c:657
+msgid "process binary files as text"
+msgstr ""
+
+#: builtin/grep.c:659
+msgid "don't match patterns in binary files"
+msgstr ""
+
+#: builtin/grep.c:662
+msgid "process binary files with textconv filters"
+msgstr ""
+
+#: builtin/grep.c:664
+msgid "descend at most <depth> levels"
+msgstr ""
+
+#: builtin/grep.c:668
+msgid "use extended POSIX regular expressions"
+msgstr ""
+
+#: builtin/grep.c:671
+msgid "use basic POSIX regular expressions (default)"
+msgstr ""
+
+#: builtin/grep.c:674
+msgid "interpret patterns as fixed strings"
+msgstr ""
+
+#: builtin/grep.c:677
+msgid "use Perl-compatible regular expressions"
+msgstr ""
+
+#: builtin/grep.c:680
+msgid "show line numbers"
+msgstr ""
+
+#: builtin/grep.c:681
+msgid "don't show filenames"
+msgstr ""
+
+#: builtin/grep.c:682
+msgid "show filenames"
+msgstr ""
+
+#: builtin/grep.c:684
+msgid "show filenames relative to top directory"
+msgstr ""
+
+#: builtin/grep.c:686
+msgid "show only filenames instead of matching lines"
+msgstr ""
+
+#: builtin/grep.c:688
+msgid "synonym for --files-with-matches"
+msgstr ""
+
+#: builtin/grep.c:691
+msgid "show only the names of files without match"
+msgstr ""
+
+#: builtin/grep.c:693
+msgid "print NUL after filenames"
+msgstr ""
+
+#: builtin/grep.c:695
+msgid "show the number of matches instead of matching lines"
+msgstr ""
+
+#: builtin/grep.c:696
+msgid "highlight matches"
+msgstr ""
+
+#: builtin/grep.c:698
+msgid "print empty line between matches from different files"
+msgstr ""
+
+#: builtin/grep.c:700
+msgid "show filename only once above matches from same file"
+msgstr ""
+
+#: builtin/grep.c:703
+#, fuzzy
+msgid "show <n> context lines before and after matches"
+msgstr "<брой>"
+
+#: builtin/grep.c:706
+#, fuzzy
+msgid "show <n> context lines before matches"
+msgstr "<брой>"
+
+#: builtin/grep.c:708
+#, fuzzy
+msgid "show <n> context lines after matches"
+msgstr "<брой>"
+
+#: builtin/grep.c:709
+msgid "shortcut for -C NUM"
+msgstr ""
+
+#: builtin/grep.c:712
+msgid "show a line with the function name before matches"
+msgstr ""
+
+#: builtin/grep.c:714
+msgid "show the surrounding function"
+msgstr ""
+
+#: builtin/grep.c:717
+msgid "read patterns from file"
+msgstr ""
+
+#: builtin/grep.c:719
+msgid "match <pattern>"
+msgstr ""
+
+#: builtin/grep.c:721
+msgid "combine patterns specified with -e"
+msgstr ""
+
+#: builtin/grep.c:733
+msgid "indicate hit with exit status without output"
+msgstr ""
+
+#: builtin/grep.c:735
+msgid "show only matches from files that match all patterns"
+msgstr ""
+
+#: builtin/grep.c:737
+msgid "show parse tree for grep expression"
+msgstr ""
+
+#: builtin/grep.c:741
+msgid "pager"
+msgstr ""
+
+#: builtin/grep.c:741
+msgid "show matching files in the pager"
+msgstr ""
+
+#: builtin/grep.c:744
+msgid "allow calling of grep(1) (ignored by this build)"
+msgstr ""
+
+#: builtin/grep.c:745 builtin/show-ref.c:187
+msgid "show usage"
+msgstr ""
+
+#: builtin/grep.c:812
+msgid "no pattern given."
+msgstr ""
+
+#: builtin/grep.c:870
+msgid "--open-files-in-pager only works on the worktree"
+msgstr ""
+
+#: builtin/grep.c:893
+msgid "--cached or --untracked cannot be used with --no-index."
+msgstr ""
+
+#: builtin/grep.c:898
+msgid "--no-index or --untracked cannot be used with revs."
+msgstr ""
+
+#: builtin/grep.c:901
+msgid "--[no-]exclude-standard cannot be used for tracked contents."
+msgstr ""
+
+#: builtin/grep.c:909
+msgid "both --cached and trees are given."
+msgstr ""
+
+#: builtin/hash-object.c:60
+msgid ""
+"git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin] [--] "
+"<file>..."
+msgstr ""
+
+#: builtin/hash-object.c:61
+msgid "git hash-object --stdin-paths < <list-of-paths>"
+msgstr ""
+
+#: builtin/hash-object.c:72
+msgid "type"
+msgstr ""
+
+#: builtin/hash-object.c:72
+msgid "object type"
+msgstr ""
+
+#: builtin/hash-object.c:73
+msgid "write the object into the object database"
+msgstr ""
+
+#: builtin/hash-object.c:74
+msgid "read the object from stdin"
+msgstr ""
+
+#: builtin/hash-object.c:76
+msgid "store file as is without filters"
+msgstr ""
+
+#: builtin/hash-object.c:77
+msgid "process file as it were from this path"
+msgstr ""
+
+#: builtin/help.c:41
+msgid "print all available commands"
+msgstr "показване на вÑички налични команди"
+
+#: builtin/help.c:42
+msgid "print list of useful guides"
+msgstr "показване на ÑпиÑък Ñ Ð¿ÑŠÑ‚ÐµÐ²Ð¾Ð´Ð¸Ñ‚ÐµÐ»Ð¸"
+
+#: builtin/help.c:43
+msgid "show man page"
+msgstr "показване на Ñтраница от ръководÑтвото"
+
+#: builtin/help.c:44
+msgid "show manual in web browser"
+msgstr "показване на Ñтраница от ръководÑтвото в уеб браузър"
+
+#: builtin/help.c:46
+msgid "show info page"
+msgstr "показване на информационна Ñтраница"
+
+#: builtin/help.c:52
+msgid "git help [--all] [--guides] [--man|--web|--info] [command]"
+msgstr "git help [--all] [--guides] [--man|--web|--info] [КОМÐÐДÐ]"
+
+#: builtin/help.c:64
+#, c-format
+msgid "unrecognized help format '%s'"
+msgstr "непознат формат на помощта „%s“"
+
+#: builtin/help.c:92
+msgid "Failed to start emacsclient."
+msgstr "ÐеуÑпешно Ñтартиране на „emacsclient“."
+
+#: builtin/help.c:105
+msgid "Failed to parse emacsclient version."
+msgstr "ВерÑиÑта на „emacsclient“ не може да Ñе анализира."
+
+#: builtin/help.c:113
+#, c-format
+msgid "emacsclient version '%d' too old (< 22)."
+msgstr "Прекалено Ñтара верÑÐ¸Ñ Ð½Ð° „emacsclient“ — %d (< 22)."
+
+#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176
+#, c-format
+msgid "failed to exec '%s': %s"
+msgstr "неуÑпешно изпълнение на „%s“: %s"
+
+#: builtin/help.c:216
+#, c-format
+msgid ""
+"'%s': path for unsupported man viewer.\n"
+"Please consider using 'man.<tool>.cmd' instead."
+msgstr ""
+"„%s“: път към неподдържана програма за разглеждане на\n"
+" ръководÑтвото. ВмеÑто Ð½ÐµÑ Ð¿Ñ€Ð¾Ð±Ð²Ð°Ð¹Ñ‚Ðµ „man.<tool>.cmd“."
+
+#: builtin/help.c:228
+#, c-format
+msgid ""
+"'%s': cmd for supported man viewer.\n"
+"Please consider using 'man.<tool>.path' instead."
+msgstr ""
+"„%s“: команда за поддържана програма за разглеждане на\n"
+" ръководÑтвото. ВмеÑто Ð½ÐµÑ Ð¿Ñ€Ð¾Ð±Ð²Ð°Ð¹Ñ‚Ðµ „man.<tool>.path“."
+
+#: builtin/help.c:353
+#, c-format
+msgid "'%s': unknown man viewer."
+msgstr "„%s“: непозната програма за преглед на ръководÑтвото."
+
+#: builtin/help.c:370
+msgid "no man viewer handled the request"
+msgstr "Ð½Ð¸ÐºÐ¾Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° за ръководÑтво не уÑÐ¿Ñ Ð´Ð° обработи заÑвката"
+
+#: builtin/help.c:378
+msgid "no info viewer handled the request"
+msgstr "Ð½Ð¸ÐºÐ¾Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° за информационни Ñтраници не уÑÐ¿Ñ Ð´Ð° обработи заÑвката"
+
+#: builtin/help.c:424
+msgid "Defining attributes per path"
+msgstr "Указване на атрибути към път"
+
+#: builtin/help.c:425
+msgid "A Git glossary"
+msgstr "Речник Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð¸Ñ‚Ðµ на Git"
+
+#: builtin/help.c:426
+msgid "Specifies intentionally untracked files to ignore"
+msgstr "Указване на неÑледени файлове, които да бъдат нарочно пренебрегвани"
+
+#: builtin/help.c:427
+msgid "Defining submodule properties"
+msgstr "Дефиниране на ÑвойÑтвата на подмодулите"
+
+#: builtin/help.c:428
+msgid "Specifying revisions and ranges for Git"
+msgstr "Указване на верÑии и интервали в Git"
+
+#: builtin/help.c:429
+msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
+msgstr "Въвеждащ урок за Git (верÑии поне 1.5.1)"
+
+#: builtin/help.c:430
+msgid "An overview of recommended workflows with Git"
+msgstr "Общ преглед на препоръчваните начини за работа Ñ Git"
+
+#: builtin/help.c:442
+msgid "The common Git guides are:\n"
+msgstr "ПопулÑрните пътеводители в Git Ñа:\n"
+
+#: builtin/help.c:463 builtin/help.c:480
+#, c-format
+msgid "usage: %s%s"
+msgstr "употреба: %s%s"
+
+#: builtin/help.c:496
+#, c-format
+msgid "`git %s' is aliased to `%s'"
+msgstr "„git %s“ е Ñиноним на „%s“"
+
+#: builtin/index-pack.c:184
+#, c-format
+msgid "object type mismatch at %s"
+msgstr ""
+
+#: builtin/index-pack.c:204
+msgid "object of unexpected type"
+msgstr ""
+
+#: builtin/index-pack.c:244
+#, c-format
+msgid "cannot fill %d byte"
+msgid_plural "cannot fill %d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:254
+msgid "early EOF"
+msgstr ""
+
+#: builtin/index-pack.c:255
+msgid "read error on input"
+msgstr ""
+
+#: builtin/index-pack.c:267
+msgid "used more bytes than were available"
+msgstr ""
+
+#: builtin/index-pack.c:274
+msgid "pack too large for current definition of off_t"
+msgstr ""
+
+#: builtin/index-pack.c:290
+#, c-format
+msgid "unable to create '%s'"
+msgstr ""
+
+#: builtin/index-pack.c:295
+#, c-format
+msgid "cannot open packfile '%s'"
+msgstr ""
+
+#: builtin/index-pack.c:309
+msgid "pack signature mismatch"
+msgstr ""
+
+#: builtin/index-pack.c:311
+#, c-format
+msgid "pack version %<PRIu32> unsupported"
+msgstr ""
+
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack has bad object at offset %lu: %s"
+msgstr ""
+
+#: builtin/index-pack.c:451
+#, c-format
+msgid "inflate returned %d"
+msgstr ""
+
+#: builtin/index-pack.c:500
+msgid "offset value overflow for delta base object"
+msgstr ""
+
+#: builtin/index-pack.c:508
+msgid "delta base offset is out of bound"
+msgstr ""
+
+#: builtin/index-pack.c:516
+#, c-format
+msgid "unknown object type %d"
+msgstr ""
+
+#: builtin/index-pack.c:547
+msgid "cannot pread pack file"
+msgstr ""
+
+#: builtin/index-pack.c:549
+#, c-format
+msgid "premature end of pack file, %lu byte missing"
+msgid_plural "premature end of pack file, %lu bytes missing"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:575
+msgid "serious inflate inconsistency"
+msgstr ""
+
+#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695
+#: builtin/index-pack.c:729 builtin/index-pack.c:738
+#, c-format
+msgid "SHA1 COLLISION FOUND WITH %s !"
+msgstr ""
+
+#: builtin/index-pack.c:669 builtin/pack-objects.c:171
+#: builtin/pack-objects.c:263
+#, c-format
+msgid "unable to read %s"
+msgstr ""
+
+#: builtin/index-pack.c:735
+#, c-format
+msgid "cannot read existing object %s"
+msgstr ""
+
+#: builtin/index-pack.c:749
+#, c-format
+msgid "invalid blob object %s"
+msgstr ""
+
+#: builtin/index-pack.c:763
+#, c-format
+msgid "invalid %s"
+msgstr ""
+
+#: builtin/index-pack.c:766
+msgid "Error in object"
+msgstr ""
+
+#: builtin/index-pack.c:768
+#, c-format
+msgid "Not all child objects of %s are reachable"
+msgstr ""
+
+#: builtin/index-pack.c:839 builtin/index-pack.c:869
+msgid "failed to apply delta"
+msgstr ""
+
+#: builtin/index-pack.c:1010
+msgid "Receiving objects"
+msgstr ""
+
+#: builtin/index-pack.c:1010
+msgid "Indexing objects"
+msgstr ""
+
+#: builtin/index-pack.c:1036
+msgid "pack is corrupted (SHA1 mismatch)"
+msgstr ""
+
+#: builtin/index-pack.c:1041
+msgid "cannot fstat packfile"
+msgstr ""
+
+#: builtin/index-pack.c:1044
+msgid "pack has junk at the end"
+msgstr ""
+
+#: builtin/index-pack.c:1055
+msgid "confusion beyond insanity in parse_pack_objects()"
+msgstr ""
+
+#: builtin/index-pack.c:1078
+msgid "Resolving deltas"
+msgstr ""
+
+#: builtin/index-pack.c:1088
+#, c-format
+msgid "unable to create thread: %s"
+msgstr ""
+
+#: builtin/index-pack.c:1130
+msgid "confusion beyond insanity"
+msgstr ""
+
+#: builtin/index-pack.c:1138
+#, c-format
+msgid "completed with %d local objects"
+msgstr ""
+
+#: builtin/index-pack.c:1148
+#, c-format
+msgid "Unexpected tail checksum for %s (disk corruption?)"
+msgstr ""
+
+#: builtin/index-pack.c:1152
+#, c-format
+msgid "pack has %d unresolved delta"
+msgid_plural "pack has %d unresolved deltas"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:1177
+#, c-format
+msgid "unable to deflate appended object (%d)"
+msgstr ""
+
+#: builtin/index-pack.c:1256
+#, c-format
+msgid "local object %s is corrupt"
+msgstr ""
+
+#: builtin/index-pack.c:1280
+msgid "error while closing pack file"
+msgstr ""
+
+#: builtin/index-pack.c:1293
+#, c-format
+msgid "cannot write keep file '%s'"
+msgstr ""
+
+#: builtin/index-pack.c:1301
+#, c-format
+msgid "cannot close written keep file '%s'"
+msgstr ""
+
+#: builtin/index-pack.c:1314
+msgid "cannot store pack file"
+msgstr ""
+
+#: builtin/index-pack.c:1325
+msgid "cannot store index file"
+msgstr ""
+
+#: builtin/index-pack.c:1358
+#, c-format
+msgid "bad pack.indexversion=%<PRIu32>"
+msgstr ""
+
+#: builtin/index-pack.c:1364
+#, c-format
+msgid "invalid number of threads specified (%d)"
+msgstr ""
+
+#: builtin/index-pack.c:1368 builtin/index-pack.c:1546
+#, c-format
+msgid "no threads support, ignoring %s"
+msgstr ""
+
+#: builtin/index-pack.c:1426
+#, c-format
+msgid "Cannot open existing pack file '%s'"
+msgstr ""
+
+#: builtin/index-pack.c:1428
+#, c-format
+msgid "Cannot open existing pack idx file for '%s'"
+msgstr ""
+
+#: builtin/index-pack.c:1475
+#, c-format
+msgid "non delta: %d object"
+msgid_plural "non delta: %d objects"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:1482
+#, c-format
+msgid "chain length = %d: %lu object"
+msgid_plural "chain length = %d: %lu objects"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:1510
+msgid "Cannot come back to cwd"
+msgstr ""
+
+#: builtin/index-pack.c:1558 builtin/index-pack.c:1561
+#: builtin/index-pack.c:1573 builtin/index-pack.c:1577
+#, c-format
+msgid "bad %s"
+msgstr ""
+
+#: builtin/index-pack.c:1591
+msgid "--fix-thin cannot be used without --stdin"
+msgstr ""
+
+#: builtin/index-pack.c:1595 builtin/index-pack.c:1605
+#, c-format
+msgid "packfile name '%s' does not end with '.pack'"
+msgstr ""
+
+#: builtin/index-pack.c:1614
+msgid "--verify with no packfile name given"
+msgstr ""
+
+#: builtin/init-db.c:35
+#, c-format
+msgid "Could not make %s writable by group"
+msgstr ""
+
+#: builtin/init-db.c:62
+#, c-format
+msgid "insanely long template name %s"
+msgstr ""
+
+#: builtin/init-db.c:67
+#, c-format
+msgid "cannot stat '%s'"
+msgstr ""
+
+#: builtin/init-db.c:73
+#, c-format
+msgid "cannot stat template '%s'"
+msgstr ""
+
+#: builtin/init-db.c:80
+#, c-format
+msgid "cannot opendir '%s'"
+msgstr ""
+
+#: builtin/init-db.c:97
+#, c-format
+msgid "cannot readlink '%s'"
+msgstr ""
+
+#: builtin/init-db.c:99
+#, c-format
+msgid "insanely long symlink %s"
+msgstr ""
+
+#: builtin/init-db.c:102
+#, c-format
+msgid "cannot symlink '%s' '%s'"
+msgstr ""
+
+#: builtin/init-db.c:106
+#, c-format
+msgid "cannot copy '%s' to '%s'"
+msgstr ""
+
+#: builtin/init-db.c:110
+#, c-format
+msgid "ignoring template %s"
+msgstr ""
+
+#: builtin/init-db.c:133
+#, c-format
+msgid "insanely long template path %s"
+msgstr ""
+
+#: builtin/init-db.c:141
+#, c-format
+msgid "templates not found %s"
+msgstr ""
+
+#: builtin/init-db.c:154
+#, c-format
+msgid "not copying templates of a wrong format version %d from '%s'"
+msgstr ""
+
+#: builtin/init-db.c:192
+#, c-format
+msgid "insane git directory %s"
+msgstr ""
+
+#: builtin/init-db.c:323 builtin/init-db.c:326
+#, c-format
+msgid "%s already exists"
+msgstr ""
+
+#: builtin/init-db.c:355
+#, c-format
+msgid "unable to handle file type %d"
+msgstr ""
+
+#: builtin/init-db.c:358
+#, c-format
+msgid "unable to move %s to %s"
+msgstr ""
+
+#.
+#. * TRANSLATORS: The first '%s' is either "Reinitialized
+#. * existing" or "Initialized empty", the second " shared" or
+#. * "", and the last '%s%s' is the verbatim directory name.
+#.
+#: builtin/init-db.c:420
+#, c-format
+msgid "%s%s Git repository in %s%s\n"
+msgstr ""
+
+#: builtin/init-db.c:421
+msgid "Reinitialized existing"
+msgstr ""
+
+#: builtin/init-db.c:421
+msgid "Initialized empty"
+msgstr ""
+
+#: builtin/init-db.c:422
+msgid " shared"
+msgstr ""
+
+#: builtin/init-db.c:441
+msgid "cannot tell cwd"
+msgstr ""
+
+#: builtin/init-db.c:467
+msgid ""
+"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
+"shared[=<permissions>]] [directory]"
+msgstr ""
+
+#: builtin/init-db.c:490
+msgid "permissions"
+msgstr ""
+
+#: builtin/init-db.c:491
+msgid "specify that the git repository is to be shared amongst several users"
+msgstr ""
+
+#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155
+msgid "be quiet"
+msgstr ""
+
+#: builtin/init-db.c:522 builtin/init-db.c:529
+#, c-format
+msgid "cannot mkdir %s"
+msgstr ""
+
+#: builtin/init-db.c:533
+#, c-format
+msgid "cannot chdir to %s"
+msgstr ""
+
+#: builtin/init-db.c:555
+#, c-format
+msgid ""
+"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
+"dir=<directory>)"
+msgstr ""
+
+#: builtin/init-db.c:579
+msgid "Cannot access current working directory"
+msgstr ""
+
+#: builtin/init-db.c:586
+#, c-format
+msgid "Cannot access work tree '%s'"
+msgstr ""
+
+#: builtin/log.c:41
+msgid "git log [<options>] [<revision range>] [[--] <path>...]\n"
+msgstr ""
+
+#: builtin/log.c:42
+msgid " or: git show [options] <object>..."
+msgstr ""
+
+#: builtin/log.c:125
+msgid "suppress diff output"
+msgstr ""
+
+#: builtin/log.c:126
+msgid "show source"
+msgstr ""
+
+#: builtin/log.c:127
+msgid "Use mail map file"
+msgstr ""
+
+#: builtin/log.c:128
+msgid "decorate options"
+msgstr ""
+
+#: builtin/log.c:231
+#, c-format
+msgid "Final output: %d %s\n"
+msgstr ""
+
+#: builtin/log.c:473 builtin/log.c:565
+#, c-format
+msgid "Could not read object %s"
+msgstr ""
+
+#: builtin/log.c:589
+#, c-format
+msgid "Unknown type: %d"
+msgstr ""
+
+#: builtin/log.c:689
+msgid "format.headers without value"
+msgstr ""
+
+#: builtin/log.c:771
+msgid "name of output directory is too long"
+msgstr ""
+
+#: builtin/log.c:787
+#, c-format
+msgid "Cannot open patch file %s"
+msgstr ""
+
+#: builtin/log.c:801
+msgid "Need exactly one range."
+msgstr ""
+
+#: builtin/log.c:809
+msgid "Not a range."
+msgstr ""
+
+#: builtin/log.c:911
+msgid "Cover letter needs email format"
+msgstr ""
+
+#: builtin/log.c:987
+#, c-format
+msgid "insane in-reply-to: %s"
+msgstr ""
+
+#: builtin/log.c:1015
+msgid "git format-patch [options] [<since> | <revision range>]"
+msgstr ""
+
+#: builtin/log.c:1060
+msgid "Two output directories?"
+msgstr ""
+
+#: builtin/log.c:1175
+msgid "use [PATCH n/m] even with a single patch"
+msgstr ""
+
+#: builtin/log.c:1178
+msgid "use [PATCH] even with multiple patches"
+msgstr ""
+
+#: builtin/log.c:1182
+msgid "print patches to standard out"
+msgstr ""
+
+#: builtin/log.c:1184
+msgid "generate a cover letter"
+msgstr ""
+
+#: builtin/log.c:1186
+msgid "use simple number sequence for output file names"
+msgstr ""
+
+#: builtin/log.c:1187
+msgid "sfx"
+msgstr ""
+
+#: builtin/log.c:1188
+msgid "use <sfx> instead of '.patch'"
+msgstr ""
+
+#: builtin/log.c:1190
+#, fuzzy
+msgid "start numbering patches at <n> instead of 1"
+msgstr "<брой>"
+
+#: builtin/log.c:1192
+msgid "mark the series as Nth re-roll"
+msgstr ""
+
+#: builtin/log.c:1194
+msgid "Use [<prefix>] instead of [PATCH]"
+msgstr ""
+
+#: builtin/log.c:1197
+msgid "store resulting files in <dir>"
+msgstr ""
+
+#: builtin/log.c:1200
+msgid "don't strip/add [PATCH]"
+msgstr ""
+
+#: builtin/log.c:1203
+msgid "don't output binary diffs"
+msgstr ""
+
+#: builtin/log.c:1205
+msgid "don't include a patch matching a commit upstream"
+msgstr ""
+
+#: builtin/log.c:1207
+msgid "show patch format instead of default (patch + stat)"
+msgstr ""
+
+#: builtin/log.c:1209
+msgid "Messaging"
+msgstr ""
+
+#: builtin/log.c:1210
+msgid "header"
+msgstr ""
+
+#: builtin/log.c:1211
+msgid "add email header"
+msgstr ""
+
+#: builtin/log.c:1212 builtin/log.c:1214
+msgid "email"
+msgstr ""
+
+#: builtin/log.c:1212
+msgid "add To: header"
+msgstr ""
+
+#: builtin/log.c:1214
+msgid "add Cc: header"
+msgstr ""
+
+#: builtin/log.c:1216
+msgid "ident"
+msgstr ""
+
+#: builtin/log.c:1217
+msgid "set From address to <ident> (or committer ident if absent)"
+msgstr ""
+
+#: builtin/log.c:1219
+msgid "message-id"
+msgstr ""
+
+#: builtin/log.c:1220
+msgid "make first mail a reply to <message-id>"
+msgstr ""
+
+#: builtin/log.c:1221 builtin/log.c:1224
+msgid "boundary"
+msgstr ""
+
+#: builtin/log.c:1222
+msgid "attach the patch"
+msgstr ""
+
+#: builtin/log.c:1225
+msgid "inline the patch"
+msgstr ""
+
+#: builtin/log.c:1229
+msgid "enable message threading, styles: shallow, deep"
+msgstr ""
+
+#: builtin/log.c:1231
+msgid "signature"
+msgstr ""
+
+#: builtin/log.c:1232
+msgid "add a signature"
+msgstr ""
+
+#: builtin/log.c:1233
+msgid "don't print the patch filenames"
+msgstr ""
+
+#: builtin/log.c:1307
+#, c-format
+msgid "invalid ident line: %s"
+msgstr ""
+
+#: builtin/log.c:1322
+msgid "-n and -k are mutually exclusive."
+msgstr ""
+
+#: builtin/log.c:1324
+msgid "--subject-prefix and -k are mutually exclusive."
+msgstr ""
+
+#: builtin/log.c:1332
+msgid "--name-only does not make sense"
+msgstr ""
+
+#: builtin/log.c:1334
+msgid "--name-status does not make sense"
+msgstr ""
+
+#: builtin/log.c:1336
+msgid "--check does not make sense"
+msgstr ""
+
+#: builtin/log.c:1359
+msgid "standard output, or directory, which one?"
+msgstr ""
+
+#: builtin/log.c:1361
+#, c-format
+msgid "Could not create directory '%s'"
+msgstr ""
+
+#: builtin/log.c:1509
+msgid "Failed to create output files"
+msgstr ""
+
+#: builtin/log.c:1558
+msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
+msgstr ""
+
+#: builtin/log.c:1613
+#, c-format
+msgid ""
+"Could not find a tracked remote branch, please specify <upstream> manually.\n"
+msgstr ""
+
+#: builtin/log.c:1626 builtin/log.c:1628 builtin/log.c:1640
+#, c-format
+msgid "Unknown commit %s"
+msgstr ""
+
+#: builtin/ls-files.c:398
+msgid "git ls-files [options] [<file>...]"
+msgstr ""
+
+#: builtin/ls-files.c:455
+msgid "identify the file status with tags"
+msgstr ""
+
+#: builtin/ls-files.c:457
+msgid "use lowercase letters for 'assume unchanged' files"
+msgstr ""
+
+#: builtin/ls-files.c:459
+msgid "show cached files in the output (default)"
+msgstr ""
+
+#: builtin/ls-files.c:461
+msgid "show deleted files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:463
+msgid "show modified files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:465
+msgid "show other files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:467
+msgid "show ignored files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:470
+msgid "show staged contents' object name in the output"
+msgstr ""
+
+#: builtin/ls-files.c:472
+msgid "show files on the filesystem that need to be removed"
+msgstr ""
+
+#: builtin/ls-files.c:474
+msgid "show 'other' directories' name only"
+msgstr ""
+
+#: builtin/ls-files.c:477
+msgid "don't show empty directories"
+msgstr ""
+
+#: builtin/ls-files.c:480
+msgid "show unmerged files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:482
+msgid "show resolve-undo information"
+msgstr ""
+
+#: builtin/ls-files.c:484
+msgid "skip files matching pattern"
+msgstr ""
+
+#: builtin/ls-files.c:487
+msgid "exclude patterns are read from <file>"
+msgstr ""
+
+#: builtin/ls-files.c:490
+msgid "read additional per-directory exclude patterns in <file>"
+msgstr ""
+
+#: builtin/ls-files.c:492
+msgid "add the standard git exclusions"
+msgstr ""
+
+#: builtin/ls-files.c:495
+msgid "make the output relative to the project top directory"
+msgstr ""
+
+#: builtin/ls-files.c:498
+msgid "if any <file> is not in the index, treat this as an error"
+msgstr ""
+
+#: builtin/ls-files.c:499
+msgid "tree-ish"
+msgstr ""
+
+#: builtin/ls-files.c:500
+msgid "pretend that paths removed since <tree-ish> are still present"
+msgstr ""
+
+#: builtin/ls-files.c:502
+msgid "show debugging data"
+msgstr ""
+
+#: builtin/ls-tree.c:28
+msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
+msgstr ""
+
+#: builtin/ls-tree.c:126
+msgid "only show trees"
+msgstr ""
+
+#: builtin/ls-tree.c:128
+msgid "recurse into subtrees"
+msgstr ""
+
+#: builtin/ls-tree.c:130
+msgid "show trees when recursing"
+msgstr ""
+
+#: builtin/ls-tree.c:133
+msgid "terminate entries with NUL byte"
+msgstr ""
+
+#: builtin/ls-tree.c:134
+msgid "include object size"
+msgstr ""
+
+#: builtin/ls-tree.c:136 builtin/ls-tree.c:138
+msgid "list only filenames"
+msgstr ""
+
+#: builtin/ls-tree.c:141
+msgid "use full path names"
+msgstr ""
+
+#: builtin/ls-tree.c:143
+msgid "list entire tree; not just current directory (implies --full-name)"
+msgstr ""
+
+#: builtin/merge.c:43
+msgid "git merge [options] [<commit>...]"
+msgstr ""
+
+#: builtin/merge.c:44
+msgid "git merge [options] <msg> HEAD <commit>"
+msgstr ""
+
+#: builtin/merge.c:45
+msgid "git merge --abort"
+msgstr ""
+
+#: builtin/merge.c:98
+msgid "switch `m' requires a value"
+msgstr ""
+
+#: builtin/merge.c:135
+#, c-format
+msgid "Could not find merge strategy '%s'.\n"
+msgstr ""
+
+#: builtin/merge.c:136
+#, c-format
+msgid "Available strategies are:"
+msgstr ""
+
+#: builtin/merge.c:141
+#, c-format
+msgid "Available custom strategies are:"
+msgstr ""
+
+#: builtin/merge.c:191
+msgid "do not show a diffstat at the end of the merge"
+msgstr ""
+
+#: builtin/merge.c:194
+msgid "show a diffstat at the end of the merge"
+msgstr ""
+
+#: builtin/merge.c:195
+msgid "(synonym to --stat)"
+msgstr ""
+
+#: builtin/merge.c:197
+#, fuzzy
+msgid "add (at most <n>) entries from shortlog to merge commit message"
+msgstr "<брой>"
+
+#: builtin/merge.c:200
+msgid "create a single commit instead of doing a merge"
+msgstr ""
+
+#: builtin/merge.c:202
+msgid "perform a commit if the merge succeeds (default)"
+msgstr ""
+
+#: builtin/merge.c:204
+msgid "edit message before committing"
+msgstr ""
+
+#: builtin/merge.c:205
+msgid "allow fast-forward (default)"
+msgstr ""
+
+#: builtin/merge.c:207
+msgid "abort if fast-forward is not possible"
+msgstr ""
+
+#: builtin/merge.c:211
+msgid "Verify that the named commit has a valid GPG signature"
+msgstr ""
+
+#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89
+msgid "strategy"
+msgstr ""
+
+#: builtin/merge.c:213
+msgid "merge strategy to use"
+msgstr ""
+
+#: builtin/merge.c:214
+msgid "option=value"
+msgstr ""
+
+#: builtin/merge.c:215
+msgid "option for selected merge strategy"
+msgstr ""
+
+#: builtin/merge.c:217
+msgid "merge commit message (for a non-fast-forward merge)"
+msgstr ""
+
+#: builtin/merge.c:221
+msgid "abort the current in-progress merge"
+msgstr ""
+
+#: builtin/merge.c:250
+msgid "could not run stash."
+msgstr ""
+
+#: builtin/merge.c:255
+msgid "stash failed"
+msgstr ""
+
+#: builtin/merge.c:260
+#, c-format
+msgid "not a valid object: %s"
+msgstr ""
+
+#: builtin/merge.c:279 builtin/merge.c:296
+msgid "read-tree failed"
+msgstr ""
+
+#: builtin/merge.c:326
+msgid " (nothing to squash)"
+msgstr ""
+
+#: builtin/merge.c:339
+#, c-format
+msgid "Squash commit -- not updating HEAD\n"
+msgstr ""
+
+#: builtin/merge.c:371
+msgid "Writing SQUASH_MSG"
+msgstr ""
+
+#: builtin/merge.c:373
+msgid "Finishing SQUASH_MSG"
+msgstr ""
+
+#: builtin/merge.c:396
+#, c-format
+msgid "No merge message -- not updating HEAD\n"
+msgstr ""
+
+#: builtin/merge.c:446
+#, c-format
+msgid "'%s' does not point to a commit"
+msgstr ""
+
+#: builtin/merge.c:558
+#, c-format
+msgid "Bad branch.%s.mergeoptions string: %s"
+msgstr ""
+
+#: builtin/merge.c:650
+msgid "git write-tree failed to write a tree"
+msgstr ""
+
+#: builtin/merge.c:678
+msgid "Not handling anything other than two heads merge."
+msgstr ""
+
+#: builtin/merge.c:692
+#, c-format
+msgid "Unknown option for merge-recursive: -X%s"
+msgstr ""
+
+#: builtin/merge.c:706
+#, c-format
+msgid "unable to write %s"
+msgstr ""
+
+#: builtin/merge.c:795
+#, c-format
+msgid "Could not read from '%s'"
+msgstr ""
+
+#: builtin/merge.c:804
+#, c-format
+msgid "Not committing merge; use 'git commit' to complete the merge.\n"
+msgstr ""
+
+#: builtin/merge.c:810
+#, c-format
+msgid ""
+"Please enter a commit message to explain why this merge is necessary,\n"
+"especially if it merges an updated upstream into a topic branch.\n"
+"\n"
+"Lines starting with '%c' will be ignored, and an empty message aborts\n"
+"the commit.\n"
+msgstr ""
+
+#: builtin/merge.c:834
+msgid "Empty commit message."
+msgstr ""
+
+#: builtin/merge.c:846
+#, c-format
+msgid "Wonderful.\n"
+msgstr ""
+
+#: builtin/merge.c:911
+#, c-format
+msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
+msgstr ""
+
+#: builtin/merge.c:927
+#, c-format
+msgid "'%s' is not a commit"
+msgstr ""
+
+#: builtin/merge.c:968
+msgid "No current branch."
+msgstr ""
+
+#: builtin/merge.c:970
+msgid "No remote for the current branch."
+msgstr ""
+
+#: builtin/merge.c:972
+msgid "No default upstream defined for the current branch."
+msgstr ""
+
+#: builtin/merge.c:977
+#, c-format
+msgid "No remote-tracking branch for %s from %s"
+msgstr ""
+
+#: builtin/merge.c:1133
+msgid "There is no merge to abort (MERGE_HEAD missing)."
+msgstr ""
+
+#: builtin/merge.c:1149 git-pull.sh:31
+msgid ""
+"You have not concluded your merge (MERGE_HEAD exists).\n"
+"Please, commit your changes before you can merge."
+msgstr ""
+
+#: builtin/merge.c:1152 git-pull.sh:34
+msgid "You have not concluded your merge (MERGE_HEAD exists)."
+msgstr ""
+
+#: builtin/merge.c:1156
+msgid ""
+"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
+"Please, commit your changes before you can merge."
+msgstr ""
+
+#: builtin/merge.c:1159
+msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
+msgstr ""
+
+#: builtin/merge.c:1168
+msgid "You cannot combine --squash with --no-ff."
+msgstr ""
+
+#: builtin/merge.c:1177
+msgid "No commit specified and merge.defaultToUpstream not set."
+msgstr ""
+
+#: builtin/merge.c:1209
+msgid "Can merge only exactly one commit into empty head"
+msgstr ""
+
+#: builtin/merge.c:1212
+msgid "Squash commit into empty head not supported yet"
+msgstr ""
+
+#: builtin/merge.c:1214
+msgid "Non-fast-forward commit does not make sense into an empty head"
+msgstr ""
+
+#: builtin/merge.c:1219
+#, c-format
+msgid "%s - not something we can merge"
+msgstr ""
+
+#: builtin/merge.c:1270
+#, c-format
+msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
+msgstr ""
+
+#: builtin/merge.c:1273
+#, c-format
+msgid "Commit %s has a bad GPG signature allegedly by %s."
+msgstr ""
+
+#. 'N'
+#: builtin/merge.c:1276
+#, c-format
+msgid "Commit %s does not have a GPG signature."
+msgstr ""
+
+#: builtin/merge.c:1279
+#, c-format
+msgid "Commit %s has a good GPG signature by %s\n"
+msgstr ""
+
+#: builtin/merge.c:1363
+#, c-format
+msgid "Updating %s..%s\n"
+msgstr ""
+
+#: builtin/merge.c:1402
+#, c-format
+msgid "Trying really trivial in-index merge...\n"
+msgstr ""
+
+#: builtin/merge.c:1409
+#, c-format
+msgid "Nope.\n"
+msgstr ""
+
+#: builtin/merge.c:1441
+msgid "Not possible to fast-forward, aborting."
+msgstr ""
+
+#: builtin/merge.c:1464 builtin/merge.c:1543
+#, c-format
+msgid "Rewinding the tree to pristine...\n"
+msgstr ""
+
+#: builtin/merge.c:1468
+#, c-format
+msgid "Trying merge strategy %s...\n"
+msgstr ""
+
+#: builtin/merge.c:1534
+#, c-format
+msgid "No merge strategy handled the merge.\n"
+msgstr ""
+
+#: builtin/merge.c:1536
+#, c-format
+msgid "Merge with strategy %s failed.\n"
+msgstr ""
+
+#: builtin/merge.c:1545
+#, c-format
+msgid "Using the %s to prepare resolving by hand.\n"
+msgstr ""
+
+#: builtin/merge.c:1557
+#, c-format
+msgid "Automatic merge went well; stopped before committing as requested\n"
+msgstr ""
+
+#: builtin/merge-base.c:29
+msgid "git merge-base [-a|--all] <commit> <commit>..."
+msgstr ""
+
+#: builtin/merge-base.c:30
+msgid "git merge-base [-a|--all] --octopus <commit>..."
+msgstr ""
+
+#: builtin/merge-base.c:31
+msgid "git merge-base --independent <commit>..."
+msgstr ""
+
+#: builtin/merge-base.c:32
+msgid "git merge-base --is-ancestor <commit> <commit>"
+msgstr ""
+
+#: builtin/merge-base.c:33
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr ""
+
+#: builtin/merge-base.c:214
+msgid "output all common ancestors"
+msgstr ""
+
+#: builtin/merge-base.c:216
+msgid "find ancestors for a single n-way merge"
+msgstr ""
+
+#: builtin/merge-base.c:218
+msgid "list revs not reachable from others"
+msgstr ""
+
+#: builtin/merge-base.c:220
+msgid "is the first one ancestor of the other?"
+msgstr ""
+
+#: builtin/merge-base.c:222
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr ""
+
+#: builtin/merge-file.c:8
+msgid ""
+"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
+"file2"
+msgstr ""
+
+#: builtin/merge-file.c:33
+msgid "send results to standard output"
+msgstr ""
+
+#: builtin/merge-file.c:34
+msgid "use a diff3 based merge"
+msgstr ""
+
+#: builtin/merge-file.c:35
+msgid "for conflicts, use our version"
+msgstr ""
+
+#: builtin/merge-file.c:37
+msgid "for conflicts, use their version"
+msgstr ""
+
+#: builtin/merge-file.c:39
+msgid "for conflicts, use a union version"
+msgstr ""
+
+#: builtin/merge-file.c:42
+msgid "for conflicts, use this marker size"
+msgstr ""
+
+#: builtin/merge-file.c:43
+msgid "do not warn about conflicts"
+msgstr ""
+
+#: builtin/merge-file.c:45
+msgid "set labels for file1/orig_file/file2"
+msgstr ""
+
+#: builtin/mktree.c:67
+msgid "git mktree [-z] [--missing] [--batch]"
+msgstr ""
+
+#: builtin/mktree.c:153
+msgid "input is NUL terminated"
+msgstr ""
+
+#: builtin/mktree.c:154 builtin/write-tree.c:24
+msgid "allow missing objects"
+msgstr ""
+
+#: builtin/mktree.c:155
+msgid "allow creation of more than one tree"
+msgstr ""
+
+#: builtin/mv.c:15
+msgid "git mv [options] <source>... <destination>"
+msgstr ""
+
+#: builtin/mv.c:71
+msgid "force move/rename even if target exists"
+msgstr ""
+
+#: builtin/mv.c:72
+msgid "skip move/rename errors"
+msgstr ""
+
+#: builtin/mv.c:122
+#, c-format
+msgid "Checking rename of '%s' to '%s'\n"
+msgstr ""
+
+#: builtin/mv.c:126
+msgid "bad source"
+msgstr ""
+
+#: builtin/mv.c:129
+msgid "can not move directory into itself"
+msgstr ""
+
+#: builtin/mv.c:132
+msgid "cannot move directory over file"
+msgstr ""
+
+#: builtin/mv.c:138
+#, c-format
+msgid "Huh? Directory %s is in index and no submodule?"
+msgstr ""
+
+#: builtin/mv.c:140 builtin/rm.c:318
+msgid "Please, stage your changes to .gitmodules or stash them to proceed"
+msgstr ""
+"За да продължите или вкарайте промените по файла „.gitmodules“ в индекÑа, "
+"или\n"
+"ги Ñкътайте"
+
+#: builtin/mv.c:156
+#, c-format
+msgid "Huh? %.*s is in index?"
+msgstr ""
+
+#: builtin/mv.c:168
+msgid "source directory is empty"
+msgstr ""
+
+#: builtin/mv.c:200
+msgid "not under version control"
+msgstr ""
+
+#: builtin/mv.c:202
+msgid "destination exists"
+msgstr ""
+
+#: builtin/mv.c:210
+#, c-format
+msgid "overwriting '%s'"
+msgstr ""
+
+#: builtin/mv.c:213
+msgid "Cannot overwrite"
+msgstr ""
+
+#: builtin/mv.c:216
+msgid "multiple sources for the same target"
+msgstr ""
+
+#: builtin/mv.c:218
+msgid "destination directory does not exist"
+msgstr ""
+
+#: builtin/mv.c:233
+#, c-format
+msgid "%s, source=%s, destination=%s"
+msgstr ""
+
+#: builtin/mv.c:243
+#, c-format
+msgid "Renaming %s to %s\n"
+msgstr ""
+
+#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328
+#, c-format
+msgid "renaming '%s' failed"
+msgstr "неуÑпешно преименуване на „%s“"
+
+#: builtin/name-rev.c:258
+msgid "git name-rev [options] <commit>..."
+msgstr ""
+
+#: builtin/name-rev.c:259
+msgid "git name-rev [options] --all"
+msgstr ""
+
+#: builtin/name-rev.c:260
+msgid "git name-rev [options] --stdin"
+msgstr ""
+
+# FIXME
+#: builtin/name-rev.c:312
+msgid "print only names (no SHA-1)"
+msgstr ""
+
+#: builtin/name-rev.c:313
+msgid "only use tags to name the commits"
+msgstr ""
+
+#: builtin/name-rev.c:315
+msgid "only use refs matching <pattern>"
+msgstr ""
+
+#: builtin/name-rev.c:317
+msgid "list all commits reachable from all refs"
+msgstr ""
+
+#: builtin/name-rev.c:318
+msgid "read from stdin"
+msgstr ""
+
+#: builtin/name-rev.c:319
+msgid "allow to print `undefined` names (default)"
+msgstr ""
+
+#: builtin/name-rev.c:325
+msgid "dereference tags in the input (internal use)"
+msgstr ""
+
+#: builtin/notes.c:24
+msgid "git notes [--ref <notes_ref>] [list [<object>]]"
+msgstr ""
+
+#: builtin/notes.c:25
+msgid ""
+"git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) "
+"<object>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:26
+msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>"
+msgstr ""
+
+#: builtin/notes.c:27
+msgid ""
+"git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) "
+"<object>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:28
+msgid "git notes [--ref <notes_ref>] edit [<object>]"
+msgstr ""
+
+#: builtin/notes.c:29
+msgid "git notes [--ref <notes_ref>] show [<object>]"
+msgstr ""
+
+#: builtin/notes.c:30
+msgid ""
+"git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>"
+msgstr ""
+
+#: builtin/notes.c:31
+msgid "git notes merge --commit [-v | -q]"
+msgstr ""
+
+#: builtin/notes.c:32
+msgid "git notes merge --abort [-v | -q]"
+msgstr ""
+
+#: builtin/notes.c:33
+msgid "git notes [--ref <notes_ref>] remove [<object>...]"
+msgstr ""
+
+#: builtin/notes.c:34
+msgid "git notes [--ref <notes_ref>] prune [-n | -v]"
+msgstr ""
+
+#: builtin/notes.c:35
+msgid "git notes [--ref <notes_ref>] get-ref"
+msgstr ""
+
+#: builtin/notes.c:40
+msgid "git notes [list [<object>]]"
+msgstr ""
+
+#: builtin/notes.c:45
+msgid "git notes add [<options>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:50
+msgid "git notes copy [<options>] <from-object> <to-object>"
+msgstr ""
+
+#: builtin/notes.c:51
+msgid "git notes copy --stdin [<from-object> <to-object>]..."
+msgstr ""
+
+#: builtin/notes.c:56
+msgid "git notes append [<options>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:61
+msgid "git notes edit [<object>]"
+msgstr ""
+
+#: builtin/notes.c:66
+msgid "git notes show [<object>]"
+msgstr ""
+
+#: builtin/notes.c:71
+msgid "git notes merge [<options>] <notes_ref>"
+msgstr ""
+
+#: builtin/notes.c:72
+msgid "git notes merge --commit [<options>]"
+msgstr ""
+
+#: builtin/notes.c:73
+msgid "git notes merge --abort [<options>]"
+msgstr ""
+
+#: builtin/notes.c:78
+msgid "git notes remove [<object>]"
+msgstr ""
+
+#: builtin/notes.c:83
+msgid "git notes prune [<options>]"
+msgstr ""
+
+#: builtin/notes.c:88
+msgid "git notes get-ref"
+msgstr ""
+
+#: builtin/notes.c:137
+#, c-format
+msgid "unable to start 'show' for object '%s'"
+msgstr ""
+
+#: builtin/notes.c:141
+msgid "could not read 'show' output"
+msgstr ""
+
+#: builtin/notes.c:149
+#, c-format
+msgid "failed to finish 'show' for object '%s'"
+msgstr ""
+
+#: builtin/notes.c:167 builtin/tag.c:341
+#, c-format
+msgid "could not create file '%s'"
+msgstr ""
+
+#: builtin/notes.c:186
+msgid "Please supply the note contents using either -m or -F option"
+msgstr ""
+
+#: builtin/notes.c:207 builtin/notes.c:844
+#, c-format
+msgid "Removing note for object %s\n"
+msgstr ""
+
+#: builtin/notes.c:212
+msgid "unable to write note object"
+msgstr ""
+
+#: builtin/notes.c:214
+#, c-format
+msgid "The note contents has been left in %s"
+msgstr ""
+
+#: builtin/notes.c:248 builtin/tag.c:537
+#, c-format
+msgid "cannot read '%s'"
+msgstr ""
+
+#: builtin/notes.c:250 builtin/tag.c:540
+#, c-format
+msgid "could not open or read '%s'"
+msgstr ""
+
+#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318
+#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515
+#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637
+#: builtin/notes.c:839 builtin/tag.c:553
+#, c-format
+msgid "Failed to resolve '%s' as a valid ref."
+msgstr ""
+
+#: builtin/notes.c:272
+#, c-format
+msgid "Failed to read object '%s'."
+msgstr ""
+
+#: builtin/notes.c:312
+#, c-format
+msgid "Malformed input line: '%s'."
+msgstr ""
+
+#: builtin/notes.c:327
+#, c-format
+msgid "Failed to copy notes from '%s' to '%s'"
+msgstr ""
+
+#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498
+#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630
+#: builtin/notes.c:904
+msgid "too many parameters"
+msgstr ""
+
+#: builtin/notes.c:384 builtin/notes.c:643
+#, c-format
+msgid "No note found for object %s."
+msgstr ""
+
+#: builtin/notes.c:406 builtin/notes.c:563
+msgid "note contents as a string"
+msgstr ""
+
+#: builtin/notes.c:409 builtin/notes.c:566
+msgid "note contents in a file"
+msgstr ""
+
+#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568
+#: builtin/notes.c:571 builtin/tag.c:474
+msgid "object"
+msgstr ""
+
+#: builtin/notes.c:412 builtin/notes.c:569
+msgid "reuse and edit specified note object"
+msgstr ""
+
+#: builtin/notes.c:415 builtin/notes.c:572
+msgid "reuse specified note object"
+msgstr ""
+
+#: builtin/notes.c:417 builtin/notes.c:485
+msgid "replace existing notes"
+msgstr ""
+
+#: builtin/notes.c:451
+#, c-format
+msgid ""
+"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
+"existing notes"
+msgstr ""
+
+#: builtin/notes.c:456 builtin/notes.c:533
+#, c-format
+msgid "Overwriting existing notes for object %s\n"
+msgstr ""
+
+#: builtin/notes.c:486
+msgid "read objects from stdin"
+msgstr ""
+
+#: builtin/notes.c:488
+msgid "load rewriting config for <command> (implies --stdin)"
+msgstr ""
+
+#: builtin/notes.c:506
+msgid "too few parameters"
+msgstr ""
+
+#: builtin/notes.c:527
+#, c-format
+msgid ""
+"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
+"existing notes"
+msgstr ""
+
+#: builtin/notes.c:539
+#, c-format
+msgid "Missing notes on source object %s. Cannot copy."
+msgstr ""
+
+#: builtin/notes.c:588
+#, c-format
+msgid ""
+"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
+"Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
+msgstr ""
+
+#: builtin/notes.c:735
+msgid "General options"
+msgstr ""
+
+#: builtin/notes.c:737
+msgid "Merge options"
+msgstr ""
+
+#: builtin/notes.c:739
+msgid ""
+"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
+"cat_sort_uniq)"
+msgstr ""
+
+#: builtin/notes.c:741
+msgid "Committing unmerged notes"
+msgstr ""
+
+#: builtin/notes.c:743
+msgid "finalize notes merge by committing unmerged notes"
+msgstr ""
+
+#: builtin/notes.c:745
+msgid "Aborting notes merge resolution"
+msgstr ""
+
+#: builtin/notes.c:747
+msgid "abort notes merge"
+msgstr ""
+
+#: builtin/notes.c:842
+#, c-format
+msgid "Object %s has no note\n"
+msgstr ""
+
+#: builtin/notes.c:854
+msgid "attempt to remove non-existent note is not an error"
+msgstr ""
+
+#: builtin/notes.c:857
+msgid "read object names from the standard input"
+msgstr ""
+
+#: builtin/notes.c:938
+msgid "notes_ref"
+msgstr ""
+
+#: builtin/notes.c:939
+msgid "use notes from <notes_ref>"
+msgstr ""
+
+#: builtin/notes.c:974 builtin/remote.c:1593
+#, c-format
+msgid "Unknown subcommand: %s"
+msgstr "Ðепозната подкоманда: %s"
+
+#: builtin/pack-objects.c:23
+msgid "git pack-objects --stdout [options...] [< ref-list | < object-list]"
+msgstr ""
+
+#: builtin/pack-objects.c:24
+msgid "git pack-objects [options...] base-name [< ref-list | < object-list]"
+msgstr ""
+
+#: builtin/pack-objects.c:184 builtin/pack-objects.c:187
+#, c-format
+msgid "deflate error (%d)"
+msgstr ""
+
+#: builtin/pack-objects.c:2396
+#, c-format
+msgid "unsupported index version %s"
+msgstr ""
+
+#: builtin/pack-objects.c:2400
+#, c-format
+msgid "bad index version '%s'"
+msgstr ""
+
+#: builtin/pack-objects.c:2423
+#, c-format
+msgid "option %s does not accept negative form"
+msgstr ""
+
+#: builtin/pack-objects.c:2427
+#, c-format
+msgid "unable to parse value '%s' for option %s"
+msgstr ""
+
+#: builtin/pack-objects.c:2446
+msgid "do not show progress meter"
+msgstr ""
+
+#: builtin/pack-objects.c:2448
+msgid "show progress meter"
+msgstr ""
+
+#: builtin/pack-objects.c:2450
+msgid "show progress meter during object writing phase"
+msgstr ""
+
+#: builtin/pack-objects.c:2453
+msgid "similar to --all-progress when progress meter is shown"
+msgstr ""
+
+#: builtin/pack-objects.c:2454
+msgid "version[,offset]"
+msgstr ""
+
+#: builtin/pack-objects.c:2455
+msgid "write the pack index file in the specified idx format version"
+msgstr ""
+
+#: builtin/pack-objects.c:2458
+msgid "maximum size of each output pack file"
+msgstr ""
+
+#: builtin/pack-objects.c:2460
+msgid "ignore borrowed objects from alternate object store"
+msgstr ""
+
+#: builtin/pack-objects.c:2462
+msgid "ignore packed objects"
+msgstr ""
+
+#: builtin/pack-objects.c:2464
+msgid "limit pack window by objects"
+msgstr ""
+
+#: builtin/pack-objects.c:2466
+msgid "limit pack window by memory in addition to object limit"
+msgstr ""
+
+#: builtin/pack-objects.c:2468
+msgid "maximum length of delta chain allowed in the resulting pack"
+msgstr ""
+
+#: builtin/pack-objects.c:2470
+msgid "reuse existing deltas"
+msgstr ""
+
+#: builtin/pack-objects.c:2472
+msgid "reuse existing objects"
+msgstr ""
+
+#: builtin/pack-objects.c:2474
+msgid "use OFS_DELTA objects"
+msgstr ""
+
+#: builtin/pack-objects.c:2476
+msgid "use threads when searching for best delta matches"
+msgstr ""
+
+#: builtin/pack-objects.c:2478
+msgid "do not create an empty pack output"
+msgstr ""
+
+#: builtin/pack-objects.c:2480
+msgid "read revision arguments from standard input"
+msgstr ""
+
+#: builtin/pack-objects.c:2482
+msgid "limit the objects to those that are not yet packed"
+msgstr ""
+
+#: builtin/pack-objects.c:2485
+msgid "include objects reachable from any reference"
+msgstr ""
+
+#: builtin/pack-objects.c:2488
+msgid "include objects referred by reflog entries"
+msgstr ""
+
+#: builtin/pack-objects.c:2491
+msgid "output pack to stdout"
+msgstr ""
+
+#: builtin/pack-objects.c:2493
+msgid "include tag objects that refer to objects to be packed"
+msgstr ""
+
+#: builtin/pack-objects.c:2495
+msgid "keep unreachable objects"
+msgstr ""
+
+#: builtin/pack-objects.c:2496 parse-options.h:143
+msgid "time"
+msgstr "време"
+
+#: builtin/pack-objects.c:2497
+msgid "unpack unreachable objects newer than <time>"
+msgstr ""
+
+#: builtin/pack-objects.c:2500
+msgid "create thin packs"
+msgstr ""
+
+#: builtin/pack-objects.c:2502
+msgid "ignore packs that have companion .keep file"
+msgstr ""
+
+#: builtin/pack-objects.c:2504
+msgid "pack compression level"
+msgstr ""
+
+#: builtin/pack-objects.c:2506
+msgid "do not hide commits by grafts"
+msgstr ""
+
+#: builtin/pack-refs.c:6
+msgid "git pack-refs [options]"
+msgstr ""
+
+#: builtin/pack-refs.c:14
+msgid "pack everything"
+msgstr ""
+
+#: builtin/pack-refs.c:15
+msgid "prune loose refs (default)"
+msgstr ""
+
+#: builtin/prune-packed.c:7
+msgid "git prune-packed [-n|--dry-run] [-q|--quiet]"
+msgstr ""
+
+#: builtin/prune.c:12
+msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
+msgstr ""
+
+#: builtin/prune.c:142
+msgid "do not remove, show only"
+msgstr ""
+
+#: builtin/prune.c:143
+msgid "report pruned objects"
+msgstr ""
+
+#: builtin/prune.c:146
+msgid "expire objects older than <time>"
+msgstr ""
+
+#: builtin/push.c:14
+msgid "git push [<options>] [<repository> [<refspec>...]]"
+msgstr ""
+
+#: builtin/push.c:86
+msgid "tag shorthand without <tag>"
+msgstr ""
+
+#: builtin/push.c:96
+msgid "--delete only accepts plain target ref names"
+msgstr ""
+
+#: builtin/push.c:141
+msgid ""
+"\n"
+"To choose either option permanently, see push.default in 'git help config'."
+msgstr ""
+
+#: builtin/push.c:144
+#, c-format
+msgid ""
+"The upstream branch of your current branch does not match\n"
+"the name of your current branch. To push to the upstream branch\n"
+"on the remote, use\n"
+"\n"
+" git push %s HEAD:%s\n"
+"\n"
+"To push to the branch of the same name on the remote, use\n"
+"\n"
+" git push %s %s\n"
+"%s"
+msgstr ""
+
+#: builtin/push.c:159
+#, c-format
+msgid ""
+"You are not currently on a branch.\n"
+"To push the history leading to the current (detached HEAD)\n"
+"state now, use\n"
+"\n"
+" git push %s HEAD:<name-of-remote-branch>\n"
+msgstr ""
+
+#: builtin/push.c:173
+#, c-format
+msgid ""
+"The current branch %s has no upstream branch.\n"
+"To push the current branch and set the remote as upstream, use\n"
+"\n"
+" git push --set-upstream %s %s\n"
+msgstr ""
+
+#: builtin/push.c:181
+#, c-format
+msgid "The current branch %s has multiple upstream branches, refusing to push."
+msgstr ""
+
+#: builtin/push.c:184
+#, c-format
+msgid ""
+"You are pushing to remote '%s', which is not the upstream of\n"
+"your current branch '%s', without telling me what to push\n"
+"to update which remote branch."
+msgstr ""
+
+#: builtin/push.c:207
+msgid ""
+"push.default is unset; its implicit value is changing in\n"
+"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
+"and maintain the current behavior after the default changes, use:\n"
+"\n"
+" git config --global push.default matching\n"
+"\n"
+"To squelch this message and adopt the new behavior now, use:\n"
+"\n"
+" git config --global push.default simple\n"
+"\n"
+"When push.default is set to 'matching', git will push local branches\n"
+"to the remote branches that already exist with the same name.\n"
+"\n"
+"In Git 2.0, Git will default to the more conservative 'simple'\n"
+"behavior, which only pushes the current branch to the corresponding\n"
+"remote branch that 'git pull' uses to update the current branch.\n"
+"\n"
+"See 'git help config' and search for 'push.default' for further "
+"information.\n"
+"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
+"'current' instead of 'simple' if you sometimes use older versions of Git)"
+msgstr ""
+
+#: builtin/push.c:274
+msgid ""
+"You didn't specify any refspecs to push, and push.default is \"nothing\"."
+msgstr ""
+
+#: builtin/push.c:281
+msgid ""
+"Updates were rejected because the tip of your current branch is behind\n"
+"its remote counterpart. Integrate the remote changes (e.g.\n"
+"'git pull ...') before pushing again.\n"
+"See the 'Note about fast-forwards' in 'git push --help' for details."
+msgstr ""
+
+#: builtin/push.c:287
+msgid ""
+"Updates were rejected because a pushed branch tip is behind its remote\n"
+"counterpart. If you did not intend to push that branch, you may want to\n"
+"specify branches to push or set the 'push.default' configuration variable\n"
+"to 'simple', 'current' or 'upstream' to push only the current branch."
+msgstr ""
+
+#: builtin/push.c:293
+msgid ""
+"Updates were rejected because a pushed branch tip is behind its remote\n"
+"counterpart. Check out this branch and integrate the remote changes\n"
+"(e.g. 'git pull ...') before pushing again.\n"
+"See the 'Note about fast-forwards' in 'git push --help' for details."
+msgstr ""
+
+#: builtin/push.c:299
+msgid ""
+"Updates were rejected because the remote contains work that you do\n"
+"not have locally. This is usually caused by another repository pushing\n"
+"to the same ref. You may want to first integrate the remote changes\n"
+"(e.g., 'git pull ...') before pushing again.\n"
+"See the 'Note about fast-forwards' in 'git push --help' for details."
+msgstr ""
+
+#: builtin/push.c:306
+msgid "Updates were rejected because the tag already exists in the remote."
+msgstr ""
+
+#: builtin/push.c:309
+msgid ""
+"You cannot update a remote ref that points at a non-commit object,\n"
+"or update a remote ref to make it point at a non-commit object,\n"
+"without using the '--force' option.\n"
+msgstr ""
+
+#: builtin/push.c:375
+#, c-format
+msgid "Pushing to %s\n"
+msgstr ""
+
+#: builtin/push.c:379
+#, c-format
+msgid "failed to push some refs to '%s'"
+msgstr ""
+
+#: builtin/push.c:412
+#, c-format
+msgid "bad repository '%s'"
+msgstr ""
+
+#: builtin/push.c:413
+msgid ""
+"No configured push destination.\n"
+"Either specify the URL from the command-line or configure a remote "
+"repository using\n"
+"\n"
+" git remote add <name> <url>\n"
+"\n"
+"and then push using the remote name\n"
+"\n"
+" git push <name>\n"
+msgstr ""
+
+#: builtin/push.c:428
+msgid "--all and --tags are incompatible"
+msgstr ""
+
+#: builtin/push.c:429
+msgid "--all can't be combined with refspecs"
+msgstr ""
+
+#: builtin/push.c:434
+msgid "--mirror and --tags are incompatible"
+msgstr ""
+
+#: builtin/push.c:435
+msgid "--mirror can't be combined with refspecs"
+msgstr ""
+
+#: builtin/push.c:440
+msgid "--all and --mirror are incompatible"
+msgstr ""
+
+#: builtin/push.c:500
+msgid "repository"
+msgstr ""
+
+#: builtin/push.c:501
+msgid "push all refs"
+msgstr ""
+
+#: builtin/push.c:502
+msgid "mirror all refs"
+msgstr ""
+
+#: builtin/push.c:504
+msgid "delete refs"
+msgstr ""
+
+#: builtin/push.c:505
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr ""
+
+#: builtin/push.c:508
+msgid "force updates"
+msgstr ""
+
+#: builtin/push.c:510
+msgid "refname>:<expect"
+msgstr ""
+
+#: builtin/push.c:511
+msgid "require old value of ref to be at this value"
+msgstr ""
+
+#: builtin/push.c:513
+msgid "check"
+msgstr ""
+
+#: builtin/push.c:514
+msgid "control recursive pushing of submodules"
+msgstr ""
+
+#: builtin/push.c:516
+msgid "use thin pack"
+msgstr ""
+
+#: builtin/push.c:517 builtin/push.c:518
+msgid "receive pack program"
+msgstr ""
+
+#: builtin/push.c:519
+msgid "set upstream for git pull/status"
+msgstr ""
+
+#: builtin/push.c:522
+msgid "prune locally removed refs"
+msgstr ""
+
+#: builtin/push.c:524
+msgid "bypass pre-push hook"
+msgstr ""
+
+#: builtin/push.c:525
+msgid "push missing but relevant tags"
+msgstr ""
+
+#: builtin/push.c:535
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr ""
+
+#: builtin/push.c:537
+msgid "--delete doesn't make sense without any refs"
+msgstr ""
+
+#: builtin/read-tree.c:36
+msgid ""
+"git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>] "
+"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
+"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"
+msgstr ""
+
+#: builtin/read-tree.c:109
+msgid "write resulting index to <file>"
+msgstr ""
+
+#: builtin/read-tree.c:112
+msgid "only empty the index"
+msgstr ""
+
+#: builtin/read-tree.c:114
+msgid "Merging"
+msgstr ""
+
+#: builtin/read-tree.c:116
+msgid "perform a merge in addition to a read"
+msgstr ""
+
+#: builtin/read-tree.c:118
+msgid "3-way merge if no file level merging required"
+msgstr ""
+
+#: builtin/read-tree.c:120
+msgid "3-way merge in presence of adds and removes"
+msgstr ""
+
+#: builtin/read-tree.c:122
+msgid "same as -m, but discard unmerged entries"
+msgstr ""
+
+#: builtin/read-tree.c:123
+msgid "<subdirectory>/"
+msgstr ""
+
+#: builtin/read-tree.c:124
+msgid "read the tree into the index under <subdirectory>/"
+msgstr ""
+
+#: builtin/read-tree.c:127
+msgid "update working tree with merge result"
+msgstr ""
+
+#: builtin/read-tree.c:129
+msgid "gitignore"
+msgstr ""
+
+#: builtin/read-tree.c:130
+msgid "allow explicitly ignored files to be overwritten"
+msgstr ""
+
+#: builtin/read-tree.c:133
+msgid "don't check the working tree after merging"
+msgstr ""
+
+#: builtin/read-tree.c:134
+msgid "don't update the index or the work tree"
+msgstr ""
+
+#: builtin/read-tree.c:136
+msgid "skip applying sparse checkout filter"
+msgstr ""
+
+#: builtin/read-tree.c:138
+msgid "debug unpack-trees"
+msgstr ""
+
+# FIXME
+#: builtin/reflog.c:499
+#, c-format
+msgid "%s' for '%s' is not a valid timestamp"
+msgstr "„%s“ не е правилна ÑтойноÑÑ‚ за време за „%s“"
+
+#: builtin/reflog.c:615 builtin/reflog.c:620
+#, c-format
+msgid "'%s' is not a valid timestamp"
+msgstr "„%s“ не е правилна ÑтойноÑÑ‚ за време"
+
+#: builtin/remote.c:12
+msgid "git remote [-v | --verbose]"
+msgstr "git remote [-v | --verbose]"
+
+#: builtin/remote.c:13
+msgid ""
+"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
+"mirror=<fetch|push>] <name> <url>"
+msgstr ""
+"git remote add [-t <КЛОÐ>] [-m <ОСÐОВЕÐ_КЛОÐ>] [-f] [--tags|--no-tags] [--"
+"mirror=<fetch|push>] <ИМЕ> <ÐДРЕС>"
+
+#: builtin/remote.c:14 builtin/remote.c:33
+msgid "git remote rename <old> <new>"
+msgstr "git remote rename <СТÐРО_ИМЕ> <ÐОВО_ИМЕ>"
+
+#: builtin/remote.c:15 builtin/remote.c:38
+msgid "git remote remove <name>"
+msgstr "git remote remove <ИМЕ>"
+
+#: builtin/remote.c:16
+msgid "git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"
+msgstr "git remote set-head <ИМЕ> (-a | --auto | -d | --delete |<КЛОÐ>)"
+
+#: builtin/remote.c:17
+msgid "git remote [-v | --verbose] show [-n] <name>"
+msgstr "git remote [-v | --verbose] show [-n] <ИМЕ>"
+
+#: builtin/remote.c:18
+msgid "git remote prune [-n | --dry-run] <name>"
+msgstr "git remote prune [-n | --dry-run] <ИМЕ>"
+
+#: builtin/remote.c:19
+msgid ""
+"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
+msgstr ""
+"git remote [-v | --verbose] update [-p | --prune] [(<ГРУПÐ> | "
+"<ОТДÐЛЕЧЕÐО_ХРÐÐИЛИЩЕ>)…]"
+
+#: builtin/remote.c:20
+msgid "git remote set-branches [--add] <name> <branch>..."
+msgstr "git remote set-branches [--add] <ИМЕ> <КЛОÐ>…"
+
+#: builtin/remote.c:21 builtin/remote.c:69
+msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
+msgstr "git remote set-url [--push] <ИМЕ> <ÐОВ_ÐДРЕС> [<СТÐР_ÐДРЕС>]"
+
+#: builtin/remote.c:22 builtin/remote.c:70
+msgid "git remote set-url --add <name> <newurl>"
+msgstr "git remote set-url --add <ИМЕ> <ÐОВ_ÐДРЕС>"
+
+#: builtin/remote.c:23 builtin/remote.c:71
+msgid "git remote set-url --delete <name> <url>"
+msgstr "git remote set-url --delete <ИМЕ> <ÐДРЕС>"
+
+#: builtin/remote.c:28
+msgid "git remote add [<options>] <name> <url>"
+msgstr "git remote add [<ОПЦИИ>] <ИМЕ> <ÐДРЕС>"
+
+#: builtin/remote.c:43
+msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
+msgstr "git remote set-head <ИМЕ> (-a | --auto | -d | --delete | <КЛОÐ>)"
+
+#: builtin/remote.c:48
+msgid "git remote set-branches <name> <branch>..."
+msgstr "git remote set-branches <ИМЕ> <КЛОÐ>…"
+
+#: builtin/remote.c:49
+msgid "git remote set-branches --add <name> <branch>..."
+msgstr "git remote set-branches --add <ИМЕ> <КЛОÐ>…"
+
+#: builtin/remote.c:54
+msgid "git remote show [<options>] <name>"
+msgstr "git remote show [<ОПЦИИ>] <ИМЕ>"
+
+#: builtin/remote.c:59
+msgid "git remote prune [<options>] <name>"
+msgstr "git remote prune [<ОПЦИИ>] <ИМЕ>"
+
+#: builtin/remote.c:64
+msgid "git remote update [<options>] [<group> | <remote>]..."
+msgstr "git remote update [<ОПЦИИ>] [<ГРУПÐ> | <ОТДÐЛЕЧЕÐО_ХРÐÐИЛИЩЕ>]…"
+
+#: builtin/remote.c:88
+#, c-format
+msgid "Updating %s"
+msgstr "ОбновÑване на „%s“"
+
+#: builtin/remote.c:120
+msgid ""
+"--mirror is dangerous and deprecated; please\n"
+"\t use --mirror=fetch or --mirror=push instead"
+msgstr ""
+"Използването Ñамо на „--mirror“ е опаÑно. ВмеÑто това\n"
+"\tползвайте „--mirror=fetch“ или „--mirror=push“"
+
+#: builtin/remote.c:137
+#, c-format
+msgid "unknown mirror argument: %s"
+msgstr "неправилна ÑтойноÑÑ‚ за „--mirror“: %s"
+
+#: builtin/remote.c:153
+msgid "fetch the remote branches"
+msgstr "отдалечените клони не могат да бъдат доÑтавени"
+
+#: builtin/remote.c:155
+msgid "import all tags and associated objects when fetching"
+msgstr "внаÑÑне на вÑички етикети и принадлежащите им обекти при доÑтавÑне"
+
+#: builtin/remote.c:158
+msgid "or do not fetch any tag at all (--no-tags)"
+msgstr "може и да не Ñе доÑтавÑÑ‚ никакви етикети (чрез опциÑта „--no-tags“)"
+
+#: builtin/remote.c:160
+msgid "branch(es) to track"
+msgstr "клон/и за Ñледене"
+
+#: builtin/remote.c:161
+msgid "master branch"
+msgstr "оÑновен клон"
+
+#: builtin/remote.c:162
+msgid "push|fetch"
+msgstr "издърпване|доÑтавÑне"
+
+#: builtin/remote.c:163
+msgid "set up remote as a mirror to push to or fetch from"
+msgstr ""
+"наÑтройване на отдалечено хранилище, от което да Ñе издърпва или доÑтавÑ"
+
+#: builtin/remote.c:175
+msgid "specifying a master branch makes no sense with --mirror"
+msgstr ""
+"нÑма ÑмиÑъл да Ñе указва оÑновен клон при използване на опциÑта „--mirror“"
+
+#: builtin/remote.c:177
+msgid "specifying branches to track makes sense only with fetch mirrors"
+msgstr ""
+"указването на Ñледени клони е ÑмиÑлено Ñамо за отдалечени хранилища, от "
+"които Ñе доÑтавÑ"
+
+#: builtin/remote.c:185 builtin/remote.c:641
+#, c-format
+msgid "remote %s already exists."
+msgstr "вече ÑъщеÑтвува отдалечено хранилище Ñ Ð¸Ð¼Ðµ „%s“."
+
+#: builtin/remote.c:189 builtin/remote.c:645
+#, c-format
+msgid "'%s' is not a valid remote name"
+msgstr "„%s“ е неправилно име за отдалечено хранилище"
+
+#: builtin/remote.c:233
+#, c-format
+msgid "Could not setup master '%s'"
+msgstr "ОÑновниÑÑ‚ клон „%s“ не може да бъде наÑтроен"
+
+#: builtin/remote.c:289
+#, c-format
+msgid "more than one %s"
+msgstr "повече от едно отдалечено хранилище на име „%s“"
+
+#: builtin/remote.c:334
+#, c-format
+msgid "Could not get fetch map for refspec %s"
+msgstr "Обектите за доÑтавÑне за ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€ž%s“ не могат да бъдат получени"
+
+#: builtin/remote.c:435 builtin/remote.c:443
+msgid "(matching)"
+msgstr "(Ñъвпадащи)"
+
+#: builtin/remote.c:447
+msgid "(delete)"
+msgstr "(за изтриване)"
+
+#: builtin/remote.c:590 builtin/remote.c:596 builtin/remote.c:602
+#, c-format
+msgid "Could not append '%s' to '%s'"
+msgstr "„%s“ не може да Ñе добави към „%s“"
+
+#: builtin/remote.c:634 builtin/remote.c:787 builtin/remote.c:885
+#, c-format
+msgid "No such remote: %s"
+msgstr "Такова отдалечено хранилище нÑма: %s"
+
+#: builtin/remote.c:651
+#, c-format
+msgid "Could not rename config section '%s' to '%s'"
+msgstr "СекциÑта в наÑтройките „%s“ не може да бъде преименувана на „%s“"
+
+#: builtin/remote.c:657 builtin/remote.c:794
+#, c-format
+msgid "Could not remove config section '%s'"
+msgstr "СекциÑта в наÑтройките „%s“ не може да бъде изтрита"
+
+# FIXME
+#: builtin/remote.c:672
+#, c-format
+msgid ""
+"Not updating non-default fetch refspec\n"
+"\t%s\n"
+"\tPlease update the configuration manually if necessary."
+msgstr ""
+"ÐеÑтандартните указатели за доÑтавÑне нÑма да бъдат обновени\n"
+" %s\n"
+" Променете наÑтройките ръчно, ако е необходимо."
+
+#: builtin/remote.c:678
+#, c-format
+msgid "Could not append '%s'"
+msgstr "СекциÑта „%s“ не може да бъде добавена в наÑтройките"
+
+#: builtin/remote.c:689
+#, c-format
+msgid "Could not set '%s'"
+msgstr "СекциÑта „%s“ не може да бъде зададена в наÑтройките"
+
+#: builtin/remote.c:711
+#, c-format
+msgid "deleting '%s' failed"
+msgstr "неуÑпешно изтриване на „%s“"
+
+#: builtin/remote.c:745
+#, c-format
+msgid "creating '%s' failed"
+msgstr "неуÑпешно Ñъздаване на „%s“"
+
+#: builtin/remote.c:759
+#, c-format
+msgid "Could not remove branch %s"
+msgstr "Клонът „%s“ не може да бъде изтрит"
+
+#: builtin/remote.c:829
+msgid ""
+"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
+"to delete it, use:"
+msgid_plural ""
+"Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n"
+"to delete them, use:"
+msgstr[0] ""
+"Бележка: Клон извън йерархиÑта „refs/remotes/“ не бе изтрит.\n"
+"Изтрийте го чрез командата:"
+msgstr[1] ""
+"Бележка: ÐÑколко клона извън йерархиÑта „refs/remotes/“ не бÑха изтрити.\n"
+"Изтрийте ги чрез командата:"
+
+#: builtin/remote.c:938
+#, c-format
+msgid " new (next fetch will store in remotes/%s)"
+msgstr " нов (Ñледващото доÑтавÑне ще го разположи в „remotes/%s“)"
+
+#: builtin/remote.c:941
+msgid " tracked"
+msgstr " Ñледен"
+
+#: builtin/remote.c:943
+msgid " stale (use 'git remote prune' to remove)"
+msgstr " Ñтар (изтрийте чрез „git remote prune“)"
+
+#: builtin/remote.c:945
+msgid " ???"
+msgstr " неÑÑно"
+
+# CHECK
+#: builtin/remote.c:986
+#, c-format
+msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
+msgstr ""
+"неправилен клон за Ñливане „%s“. Ðевъзможно е да пребазирате върху повече от "
+"1 клон"
+
+#: builtin/remote.c:993
+#, c-format
+msgid "rebases onto remote %s"
+msgstr "пребазиране върху Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½ „%s“"
+
+#: builtin/remote.c:996
+#, c-format
+msgid " merges with remote %s"
+msgstr " Ñливане Ñ Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½ „%s“"
+
+#: builtin/remote.c:997
+msgid " and with remote"
+msgstr " и Ñ Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: builtin/remote.c:999
+#, c-format
+msgid "merges with remote %s"
+msgstr "Ñливане Ñ Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½ „%s“"
+
+#: builtin/remote.c:1000
+msgid " and with remote"
+msgstr " и Ñ Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½"
+
+#: builtin/remote.c:1046
+msgid "create"
+msgstr "Ñъздаден"
+
+#: builtin/remote.c:1049
+msgid "delete"
+msgstr "изтрит"
+
+#: builtin/remote.c:1053
+msgid "up to date"
+msgstr "актуален"
+
+#: builtin/remote.c:1056
+msgid "fast-forwardable"
+msgstr "може да Ñе Ñлее тривиално"
+
+#: builtin/remote.c:1059
+msgid "local out of date"
+msgstr "локалниÑÑ‚ е оÑтарÑл"
+
+#: builtin/remote.c:1066
+#, c-format
+msgid " %-*s forces to %-*s (%s)"
+msgstr " %-*s принудително изтлаÑква към %-*s (%s)"
+
+#: builtin/remote.c:1069
+#, c-format
+msgid " %-*s pushes to %-*s (%s)"
+msgstr " %-*s изтлаÑква към %-*s (%s)"
+
+#: builtin/remote.c:1073
+#, c-format
+msgid " %-*s forces to %s"
+msgstr " %-*s принудително изтлаÑква към %s"
+
+#: builtin/remote.c:1076
+#, c-format
+msgid " %-*s pushes to %s"
+msgstr " %-*s изтлаÑква към %s"
+
+#: builtin/remote.c:1144
+msgid "do not query remotes"
+msgstr "без заÑвки към отдалечените хранилища"
+
+#: builtin/remote.c:1171
+#, c-format
+msgid "* remote %s"
+msgstr "* отдалечено хранилище „%s“"
+
+#: builtin/remote.c:1172
+#, c-format
+msgid " Fetch URL: %s"
+msgstr " ÐÐ´Ñ€ÐµÑ Ð·Ð° доÑтавÑне: %s"
+
+#: builtin/remote.c:1173 builtin/remote.c:1318
+msgid "(no URL)"
+msgstr "(без адреÑ)"
+
+#: builtin/remote.c:1182 builtin/remote.c:1184
+#, c-format
+msgid " Push URL: %s"
+msgstr " ÐÐ´Ñ€ÐµÑ Ð·Ð° изтлаÑкване: %s"
+
+#: builtin/remote.c:1186 builtin/remote.c:1188 builtin/remote.c:1190
+#, c-format
+msgid " HEAD branch: %s"
+msgstr " клон в HEAD: %s"
+
+#: builtin/remote.c:1192
+#, c-format
+msgid ""
+" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
+msgstr ""
+" клон в HEAD (клонът указан във файла HEAD от отдалеченото хранилище е\n"
+" нееднозначен и е нÑкой от Ñледните):\n"
+
+#: builtin/remote.c:1204
+#, c-format
+msgid " Remote branch:%s"
+msgid_plural " Remote branches:%s"
+msgstr[0] " Отдалечен клон: %s"
+msgstr[1] " Отдалечени клони: %s"
+
+#: builtin/remote.c:1207 builtin/remote.c:1234
+msgid " (status not queried)"
+msgstr " (ÑÑŠÑтоÑнието не бе проверено)"
+
+#: builtin/remote.c:1216
+msgid " Local branch configured for 'git pull':"
+msgid_plural " Local branches configured for 'git pull':"
+msgstr[0] " Локален клон наÑтроен за издърпване чрез „git pull“:"
+msgstr[1] " Локални клони наÑтроени за издърпване чрез „git pull“:"
+
+#: builtin/remote.c:1224
+msgid " Local refs will be mirrored by 'git push'"
+msgstr " Локалните указатели ще бъдат пренеÑени чрез „ push“"
+
+#: builtin/remote.c:1231
+#, c-format
+msgid " Local ref configured for 'git push'%s:"
+msgid_plural " Local refs configured for 'git push'%s:"
+msgstr[0] " ЛокалниÑÑ‚ указател, наÑтроен за „git push“%s:"
+msgstr[1] " Локалните указатели, наÑтроени за „git push“%s:"
+
+#: builtin/remote.c:1252
+msgid "set refs/remotes/<name>/HEAD according to remote"
+msgstr "задаване на refs/remotes/<ИМЕ>/HEAD Ñпоред отдалеченото хранилище"
+
+#: builtin/remote.c:1254
+msgid "delete refs/remotes/<name>/HEAD"
+msgstr "изтриване на refs/remotes/<ИМЕ>/HEAD"
+
+#: builtin/remote.c:1269
+msgid "Cannot determine remote HEAD"
+msgstr "Ðе може да Ñе уÑтанови отдалечениÑÑ‚ връх"
+
+#: builtin/remote.c:1271
+msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
+msgstr ""
+"МножеÑтво клони Ñ Ð²ÑŠÑ€Ñ…Ð¾Ð²Ðµ. Изберете изрично нÑкой от Ñ‚ÑÑ… чрез командата:"
+
+#: builtin/remote.c:1281
+#, c-format
+msgid "Could not delete %s"
+msgstr "„%s“ не може да бъде изтрит"
+
+#: builtin/remote.c:1289
+#, c-format
+msgid "Not a valid ref: %s"
+msgstr "Ðеправилен указател: %s"
+
+#: builtin/remote.c:1291
+#, c-format
+msgid "Could not setup %s"
+msgstr "„%s“ не може да Ñе наÑтрои"
+
+#: builtin/remote.c:1307
+#, c-format
+msgid " %s will become dangling!"
+msgstr "„%s“ ще Ñе превърне в обект извън клоните!"
+
+#: builtin/remote.c:1308
+#, c-format
+msgid " %s has become dangling!"
+msgstr "„%s“ Ñе превърна в обект извън клоните!"
+
+#: builtin/remote.c:1314
+#, c-format
+msgid "Pruning %s"
+msgstr "ОкаÑÑ‚Ñ€Ñне на „%s“"
+
+#: builtin/remote.c:1315
+#, c-format
+msgid "URL: %s"
+msgstr "адреÑ: %s"
+
+#: builtin/remote.c:1328
+#, c-format
+msgid " * [would prune] %s"
+msgstr " * [ще бъде окаÑтрено] %s"
+
+#: builtin/remote.c:1331
+#, c-format
+msgid " * [pruned] %s"
+msgstr " * [окаÑтрено] %s"
+
+#: builtin/remote.c:1374
+msgid "prune remotes after fetching"
+msgstr "окаÑÑ‚Ñ€Ñне на огледалата на отдалечените хранилища Ñлед доÑтавÑне"
+
+#: builtin/remote.c:1440 builtin/remote.c:1514
+#, c-format
+msgid "No such remote '%s'"
+msgstr "ÐÑма отдалечено хранилище на име „%s“"
+
+#: builtin/remote.c:1460
+msgid "add branch"
+msgstr "добавÑне на клон"
+
+#: builtin/remote.c:1467
+msgid "no remote specified"
+msgstr "не е указано отдалечено хранилище"
+
+#: builtin/remote.c:1489
+msgid "manipulate push URLs"
+msgstr "промÑна на адреÑите за изтлаÑкване"
+
+#: builtin/remote.c:1491
+msgid "add URL"
+msgstr "добавÑне на адреÑи"
+
+#: builtin/remote.c:1493
+msgid "delete URLs"
+msgstr "изтриване на адреÑи"
+
+#: builtin/remote.c:1500
+msgid "--add --delete doesn't make sense"
+msgstr "опциите „--add“ и „--delete“ не могат да Ñе използват заедно"
+
+#: builtin/remote.c:1540
+#, c-format
+msgid "Invalid old URL pattern: %s"
+msgstr "Ðеправилен (Ñтар) формат за адреÑ: %s"
+
+#: builtin/remote.c:1548
+#, c-format
+msgid "No such URL found: %s"
+msgstr "Такъв Ð°Ð´Ñ€ÐµÑ Ð½Ðµ е открит: %s"
+
+# MEANING
+#: builtin/remote.c:1550
+msgid "Will not delete all non-push URLs"
+msgstr "Ðикой от адреÑите, които не Ñа за изтлаÑкване, нÑма да Ñе изтрие"
+
+#: builtin/remote.c:1564
+msgid "be verbose; must be placed before a subcommand"
+msgstr "повече подробноÑти. ПоÑÑ‚Ð°Ð²Ñ Ñе пред подкоманда"
+
+#: builtin/repack.c:15
+msgid "git repack [options]"
+msgstr ""
+
+#: builtin/repack.c:143
+msgid "pack everything in a single pack"
+msgstr ""
+
+#: builtin/repack.c:145
+msgid "same as -a, and turn unreachable objects loose"
+msgstr ""
+
+#: builtin/repack.c:148
+msgid "remove redundant packs, and run git-prune-packed"
+msgstr ""
+
+#: builtin/repack.c:150
+msgid "pass --no-reuse-delta to git-pack-objects"
+msgstr ""
+
+#: builtin/repack.c:152
+msgid "pass --no-reuse-object to git-pack-objects"
+msgstr ""
+
+#: builtin/repack.c:154
+msgid "do not run git-update-server-info"
+msgstr ""
+
+#: builtin/repack.c:157
+msgid "pass --local to git-pack-objects"
+msgstr ""
+
+#: builtin/repack.c:158
+msgid "approxidate"
+msgstr ""
+
+#: builtin/repack.c:159
+msgid "with -A, do not loosen objects older than this"
+msgstr ""
+
+#: builtin/repack.c:161
+msgid "size of the window used for delta compression"
+msgstr ""
+
+#: builtin/repack.c:163
+msgid "same as the above, but limit memory size instead of entries count"
+msgstr ""
+
+#: builtin/repack.c:165
+msgid "limits the maximum delta depth"
+msgstr ""
+
+#: builtin/repack.c:167
+msgid "maximum size of each packfile"
+msgstr ""
+
+#: builtin/repack.c:343
+#, c-format
+msgid "removing '%s' failed"
+msgstr ""
+
+#: builtin/replace.c:17
+msgid "git replace [-f] <object> <replacement>"
+msgstr ""
+
+#: builtin/replace.c:18
+msgid "git replace -d <object>..."
+msgstr ""
+
+#: builtin/replace.c:19
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
+msgstr ""
+
+#: builtin/replace.c:174
+msgid "list replace refs"
+msgstr ""
+
+#: builtin/replace.c:175
+msgid "delete replace refs"
+msgstr ""
+
+#: builtin/replace.c:176
+msgid "replace the ref if it exists"
+msgstr ""
+
+#: builtin/replace.c:177
+msgid "use this format"
+msgstr ""
+
+#: builtin/rerere.c:12
+msgid "git rerere [clear | forget path... | status | remaining | diff | gc]"
+msgstr ""
+
+#: builtin/rerere.c:57
+msgid "register clean resolutions in index"
+msgstr ""
+
+#: builtin/reset.c:25
+msgid ""
+"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
+msgstr ""
+
+#: builtin/reset.c:26
+msgid "git reset [-q] <tree-ish> [--] <paths>..."
+msgstr ""
+
+#: builtin/reset.c:27
+msgid "git reset --patch [<tree-ish>] [--] [<paths>...]"
+msgstr ""
+
+#: builtin/reset.c:33
+msgid "mixed"
+msgstr ""
+
+#: builtin/reset.c:33
+msgid "soft"
+msgstr ""
+
+#: builtin/reset.c:33
+msgid "hard"
+msgstr ""
+
+#: builtin/reset.c:33
+msgid "merge"
+msgstr ""
+
+#: builtin/reset.c:33
+msgid "keep"
+msgstr ""
+
+#: builtin/reset.c:73
+msgid "You do not have a valid HEAD."
+msgstr ""
+
+#: builtin/reset.c:75
+msgid "Failed to find tree of HEAD."
+msgstr ""
+
+#: builtin/reset.c:81
+#, c-format
+msgid "Failed to find tree of %s."
+msgstr ""
+
+#: builtin/reset.c:99
+#, c-format
+msgid "HEAD is now at %s"
+msgstr ""
+
+#: builtin/reset.c:172
+#, c-format
+msgid "Cannot do a %s reset in the middle of a merge."
+msgstr ""
+
+#: builtin/reset.c:262
+msgid "be quiet, only report errors"
+msgstr ""
+
+#: builtin/reset.c:264
+msgid "reset HEAD and index"
+msgstr ""
+
+#: builtin/reset.c:265
+msgid "reset only HEAD"
+msgstr ""
+
+#: builtin/reset.c:267 builtin/reset.c:269
+msgid "reset HEAD, index and working tree"
+msgstr ""
+
+#: builtin/reset.c:271
+msgid "reset HEAD but keep local changes"
+msgstr ""
+
+#: builtin/reset.c:289
+#, c-format
+msgid "Failed to resolve '%s' as a valid revision."
+msgstr ""
+
+#: builtin/reset.c:292 builtin/reset.c:300
+#, c-format
+msgid "Could not parse object '%s'."
+msgstr ""
+
+#: builtin/reset.c:297
+#, c-format
+msgid "Failed to resolve '%s' as a valid tree."
+msgstr ""
+
+#: builtin/reset.c:306
+msgid "--patch is incompatible with --{hard,mixed,soft}"
+msgstr ""
+
+#: builtin/reset.c:315
+msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
+msgstr ""
+
+#: builtin/reset.c:317
+#, c-format
+msgid "Cannot do %s reset with paths."
+msgstr ""
+
+#: builtin/reset.c:327
+#, c-format
+msgid "%s reset is not allowed in a bare repository"
+msgstr ""
+
+#: builtin/reset.c:344
+msgid "Unstaged changes after reset:"
+msgstr ""
+
+#: builtin/reset.c:350
+#, c-format
+msgid "Could not reset index file to revision '%s'."
+msgstr ""
+
+#: builtin/reset.c:355
+msgid "Could not write new index file."
+msgstr ""
+
+#: builtin/rev-parse.c:359
+msgid "git rev-parse --parseopt [options] -- [<args>...]"
+msgstr ""
+
+#: builtin/rev-parse.c:364
+msgid "keep the `--` passed as an arg"
+msgstr ""
+
+#: builtin/rev-parse.c:366
+msgid "stop parsing after the first non-option argument"
+msgstr ""
+
+#: builtin/rev-parse.c:369
+msgid "output in stuck long form"
+msgstr ""
+
+#: builtin/rev-parse.c:486
+msgid ""
+"git rev-parse --parseopt [options] -- [<args>...]\n"
+" or: git rev-parse --sq-quote [<arg>...]\n"
+" or: git rev-parse [options] [<arg>...]\n"
+"\n"
+"Run \"git rev-parse --parseopt -h\" for more information on the first usage."
+msgstr ""
+
+#: builtin/revert.c:22
+msgid "git revert [options] <commit-ish>..."
+msgstr ""
+
+#: builtin/revert.c:23
+msgid "git revert <subcommand>"
+msgstr ""
+
+#: builtin/revert.c:28
+msgid "git cherry-pick [options] <commit-ish>..."
+msgstr ""
+
+#: builtin/revert.c:29
+msgid "git cherry-pick <subcommand>"
+msgstr ""
+
+#: builtin/revert.c:71
+#, c-format
+msgid "%s: %s cannot be used with %s"
+msgstr ""
+
+#: builtin/revert.c:80
+msgid "end revert or cherry-pick sequence"
+msgstr ""
+
+#: builtin/revert.c:81
+msgid "resume revert or cherry-pick sequence"
+msgstr ""
+
+#: builtin/revert.c:82
+msgid "cancel revert or cherry-pick sequence"
+msgstr ""
+
+#: builtin/revert.c:83
+msgid "don't automatically commit"
+msgstr ""
+
+#: builtin/revert.c:84
+msgid "edit the commit message"
+msgstr ""
+
+#: builtin/revert.c:87
+msgid "parent number"
+msgstr ""
+
+#: builtin/revert.c:89
+msgid "merge strategy"
+msgstr ""
+
+#: builtin/revert.c:90
+msgid "option"
+msgstr ""
+
+#: builtin/revert.c:91
+msgid "option for merge strategy"
+msgstr ""
+
+#: builtin/revert.c:102
+msgid "append commit name"
+msgstr ""
+
+#: builtin/revert.c:103
+msgid "allow fast-forward"
+msgstr ""
+
+#: builtin/revert.c:104
+msgid "preserve initially empty commits"
+msgstr ""
+
+#: builtin/revert.c:105
+msgid "allow commits with empty messages"
+msgstr ""
+
+#: builtin/revert.c:106
+msgid "keep redundant, empty commits"
+msgstr ""
+
+#: builtin/revert.c:110
+msgid "program error"
+msgstr ""
+
+#: builtin/revert.c:195
+msgid "revert failed"
+msgstr ""
+
+#: builtin/revert.c:210
+msgid "cherry-pick failed"
+msgstr ""
+
+#: builtin/rm.c:17
+msgid "git rm [options] [--] <file>..."
+msgstr "git rm [ОПЦИИ] [--] <ФÐЙЛ>…"
+
+#: builtin/rm.c:65
+msgid ""
+"the following submodule (or one of its nested submodules)\n"
+"uses a .git directory:"
+msgid_plural ""
+"the following submodules (or one of its nested submodules)\n"
+"use a .git directory:"
+msgstr[0] ""
+"ÑледниÑÑ‚ подмодул или нÑкой от неговите подмодули\n"
+"използват Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° име „.git“:"
+msgstr[1] ""
+"Ñледните подмодули или нÑкои от техните подмодули\n"
+"използват Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° име „.git“:"
+
+#: builtin/rm.c:71
+msgid ""
+"\n"
+"(use 'rm -rf' if you really want to remove it including all of its history)"
+msgstr ""
+"\n"
+"(ако иÑкате да ги изтриете заедно Ñ Ñ†Ñлата им иÑториÑ, използвайте „rm -rf“)"
+
+#: builtin/rm.c:231
+msgid ""
+"the following file has staged content different from both the\n"
+"file and the HEAD:"
+msgid_plural ""
+"the following files have staged content different from both the\n"
+"file and the HEAD:"
+msgstr[0] ""
+"ÑледниÑÑ‚ файл е ÑÑŠÑ Ñъдържание в индекÑа различно от текущото му Ñъдържание "
+"и\n"
+"различно от ÑъответÑтващото на HEAD:"
+msgstr[1] ""
+"Ñледните файлове Ñа ÑÑŠÑ Ñъдържание в индекÑа различно от текущото им "
+"Ñъдържание и\n"
+"различно от ÑъответÑтващото на HEAD:"
+
+#: builtin/rm.c:236
+msgid ""
+"\n"
+"(use -f to force removal)"
+msgstr ""
+"\n"
+"(за принудително изтриване използвайте опциÑта „-f“)"
+
+#: builtin/rm.c:240
+msgid "the following file has changes staged in the index:"
+msgid_plural "the following files have changes staged in the index:"
+msgstr[0] "ÑледниÑÑ‚ файл е Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñъдържание в индекÑа:"
+msgstr[1] "Ñледните файлове Ñа Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñъдържание в индекÑа:"
+
+#: builtin/rm.c:244 builtin/rm.c:255
+msgid ""
+"\n"
+"(use --cached to keep the file, or -f to force removal)"
+msgstr ""
+"\n"
+"(за запазване на файла използвайте опциÑта „--cached“, а за принудително\n"
+"изтриване — „-f“)"
+
+#: builtin/rm.c:252
+msgid "the following file has local modifications:"
+msgid_plural "the following files have local modifications:"
+msgstr[0] "ÑледниÑÑ‚ файл е Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñъдържание"
+msgstr[1] "Ñледните файлове Ñа Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñъдържание"
+
+#: builtin/rm.c:270
+msgid "do not list removed files"
+msgstr "да не Ñе извеждат изтритите файлове"
+
+#: builtin/rm.c:271
+msgid "only remove from the index"
+msgstr "изтриване Ñамо от индекÑа"
+
+#: builtin/rm.c:272
+msgid "override the up-to-date check"
+msgstr "въпреки проверката за актуалноÑтта на Ñъдържанието"
+
+#: builtin/rm.c:273
+msgid "allow recursive removal"
+msgstr "рекурÑивно изтриване"
+
+#: builtin/rm.c:275
+msgid "exit with a zero status even if nothing matched"
+msgstr ""
+"изходниÑÑ‚ код да е 0, дори ако никой файл нe e напаÑнал Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° за "
+"изтриване"
+
+#: builtin/rm.c:336
+#, c-format
+msgid "not removing '%s' recursively without -r"
+msgstr "без използването на опциÑта „-r“ „%s“ нÑма да Ñе изтрие рекурÑивно"
+
+#: builtin/rm.c:375
+#, c-format
+msgid "git rm: unable to remove %s"
+msgstr "git rm: „%s“ не може да Ñе изтрие"
+
+#: builtin/shortlog.c:13
+msgid "git shortlog [<options>] [<revision range>] [[--] [<path>...]]"
+msgstr ""
+
+#: builtin/shortlog.c:131
+#, c-format
+msgid "Missing author: %s"
+msgstr ""
+
+#: builtin/shortlog.c:230
+msgid "sort output according to the number of commits per author"
+msgstr ""
+
+#: builtin/shortlog.c:232
+msgid "Suppress commit descriptions, only provides commit count"
+msgstr ""
+
+#: builtin/shortlog.c:234
+msgid "Show the email address of each author"
+msgstr ""
+
+#: builtin/shortlog.c:235
+msgid "w[,i1[,i2]]"
+msgstr ""
+
+#: builtin/shortlog.c:236
+msgid "Linewrap output"
+msgstr ""
+
+#: builtin/show-branch.c:9
+#, fuzzy
+msgid ""
+"git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--"
+"current] [--color[=<when>] | --no-color] [--sparse] [--more=<n> | --list | --"
+"independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<rev> | "
+"<glob>)...]"
+msgstr "<брой>"
+
+#: builtin/show-branch.c:10
+#, fuzzy
+msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
+msgstr "<брой>"
+
+#: builtin/show-branch.c:649
+msgid "show remote-tracking and local branches"
+msgstr ""
+
+#: builtin/show-branch.c:651
+msgid "show remote-tracking branches"
+msgstr ""
+
+#: builtin/show-branch.c:653
+msgid "color '*!+-' corresponding to the branch"
+msgstr ""
+
+#: builtin/show-branch.c:655
+#, fuzzy
+msgid "show <n> more commits after the common ancestor"
+msgstr "<брой>"
+
+#: builtin/show-branch.c:657
+msgid "synonym to more=-1"
+msgstr ""
+
+#: builtin/show-branch.c:658
+msgid "suppress naming strings"
+msgstr ""
+
+#: builtin/show-branch.c:660
+msgid "include the current branch"
+msgstr ""
+
+#: builtin/show-branch.c:662
+msgid "name commits with their object names"
+msgstr ""
+
+#: builtin/show-branch.c:664
+msgid "show possible merge bases"
+msgstr ""
+
+#: builtin/show-branch.c:666
+msgid "show refs unreachable from any other ref"
+msgstr ""
+
+#: builtin/show-branch.c:668
+msgid "show commits in topological order"
+msgstr ""
+
+#: builtin/show-branch.c:671
+msgid "show only commits not on the first branch"
+msgstr ""
+
+#: builtin/show-branch.c:673
+msgid "show merges reachable from only one tip"
+msgstr ""
+
+#: builtin/show-branch.c:675
+msgid "topologically sort, maintaining date order where possible"
+msgstr ""
+
+#: builtin/show-branch.c:678
+#, fuzzy
+msgid "<n>[,<base>]"
+msgstr "<брой>"
+
+#: builtin/show-branch.c:679
+#, fuzzy
+msgid "show <n> most recent ref-log entries starting at base"
+msgstr "<брой>"
+
+#: builtin/show-ref.c:10
+#, fuzzy
+msgid ""
+"git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--"
+"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [pattern*] "
+msgstr "<брой>"
+
+#: builtin/show-ref.c:11
+msgid "git show-ref --exclude-existing[=pattern] < ref-list"
+msgstr ""
+
+#: builtin/show-ref.c:168
+msgid "only show tags (can be combined with heads)"
+msgstr ""
+
+#: builtin/show-ref.c:169
+msgid "only show heads (can be combined with tags)"
+msgstr ""
+
+#: builtin/show-ref.c:170
+msgid "stricter reference checking, requires exact ref path"
+msgstr ""
+
+#: builtin/show-ref.c:173 builtin/show-ref.c:175
+msgid "show the HEAD reference, even if it would be filtered out"
+msgstr ""
+
+#: builtin/show-ref.c:177
+msgid "dereference tags into object IDs"
+msgstr ""
+
+#: builtin/show-ref.c:179
+#, fuzzy
+msgid "only show SHA1 hash using <n> digits"
+msgstr "<брой>"
+
+#: builtin/show-ref.c:183
+msgid "do not print results to stdout (useful with --verify)"
+msgstr ""
+
+#: builtin/show-ref.c:185
+msgid "show refs from stdin that aren't in local repository"
+msgstr ""
+
+#: builtin/symbolic-ref.c:7
+msgid "git symbolic-ref [options] name [ref]"
+msgstr ""
+
+#: builtin/symbolic-ref.c:8
+msgid "git symbolic-ref -d [-q] name"
+msgstr ""
+
+#: builtin/symbolic-ref.c:40
+msgid "suppress error message for non-symbolic (detached) refs"
+msgstr ""
+
+#: builtin/symbolic-ref.c:41
+msgid "delete symbolic ref"
+msgstr ""
+
+#: builtin/symbolic-ref.c:42
+msgid "shorten ref output"
+msgstr ""
+
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:254
+msgid "reason"
+msgstr ""
+
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:254
+msgid "reason of the update"
+msgstr ""
+
+#: builtin/tag.c:22
+msgid ""
+"git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]"
+msgstr ""
+
+#: builtin/tag.c:23
+msgid "git tag -d <tagname>..."
+msgstr ""
+
+# FIXME
+#: builtin/tag.c:24
+msgid ""
+"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] \n"
+"\t\t[<pattern>...]"
+msgstr ""
+
+#: builtin/tag.c:26
+msgid "git tag -v <tagname>..."
+msgstr ""
+
+#: builtin/tag.c:60
+#, c-format
+msgid "malformed object at '%s'"
+msgstr ""
+
+#: builtin/tag.c:207
+#, c-format
+msgid "tag name too long: %.*s..."
+msgstr ""
+
+#: builtin/tag.c:212
+#, c-format
+msgid "tag '%s' not found."
+msgstr ""
+
+#: builtin/tag.c:227
+#, c-format
+msgid "Deleted tag '%s' (was %s)\n"
+msgstr ""
+
+#: builtin/tag.c:239
+#, c-format
+msgid "could not verify the tag '%s'"
+msgstr ""
+
+#: builtin/tag.c:249
+#, c-format
+msgid ""
+"\n"
+"Write a tag message\n"
+"Lines starting with '%c' will be ignored.\n"
+msgstr ""
+
+#: builtin/tag.c:253
+#, c-format
+msgid ""
+"\n"
+"Write a tag message\n"
+"Lines starting with '%c' will be kept; you may remove them yourself if you "
+"want to.\n"
+msgstr ""
+
+#: builtin/tag.c:292
+msgid "unable to sign the tag"
+msgstr ""
+
+#: builtin/tag.c:294
+msgid "unable to write tag file"
+msgstr ""
+
+#: builtin/tag.c:319
+msgid "bad object type."
+msgstr ""
+
+#: builtin/tag.c:332
+msgid "tag header too big."
+msgstr ""
+
+#: builtin/tag.c:368
+msgid "no tag message?"
+msgstr ""
+
+#: builtin/tag.c:374
+#, c-format
+msgid "The tag message has been left in %s\n"
+msgstr ""
+
+#: builtin/tag.c:423
+msgid "switch 'points-at' requires an object"
+msgstr ""
+
+#: builtin/tag.c:425
+#, c-format
+msgid "malformed object name '%s'"
+msgstr ""
+
+#: builtin/tag.c:445
+msgid "list tag names"
+msgstr ""
+
+#: builtin/tag.c:447
+#, fuzzy
+msgid "print <n> lines of each tag message"
+msgstr "<брой>"
+
+#: builtin/tag.c:449
+msgid "delete tags"
+msgstr ""
+
+#: builtin/tag.c:450
+msgid "verify tags"
+msgstr ""
+
+#: builtin/tag.c:452
+msgid "Tag creation options"
+msgstr ""
+
+#: builtin/tag.c:454
+msgid "annotated tag, needs a message"
+msgstr ""
+
+#: builtin/tag.c:456
+msgid "tag message"
+msgstr ""
+
+#: builtin/tag.c:458
+msgid "annotated and GPG-signed tag"
+msgstr ""
+
+#: builtin/tag.c:462
+msgid "use another key to sign the tag"
+msgstr ""
+
+#: builtin/tag.c:463
+msgid "replace the tag if exists"
+msgstr ""
+
+#: builtin/tag.c:464
+msgid "show tag list in columns"
+msgstr ""
+
+#: builtin/tag.c:466
+msgid "Tag listing options"
+msgstr ""
+
+#: builtin/tag.c:469
+msgid "print only tags that contain the commit"
+msgstr ""
+
+#: builtin/tag.c:475
+msgid "print only tags of the object"
+msgstr ""
+
+#: builtin/tag.c:501
+msgid "--column and -n are incompatible"
+msgstr ""
+
+#: builtin/tag.c:518
+msgid "-n option is only allowed with -l."
+msgstr ""
+
+#: builtin/tag.c:520
+msgid "--contains option is only allowed with -l."
+msgstr ""
+
+#: builtin/tag.c:522
+msgid "--points-at option is only allowed with -l."
+msgstr ""
+
+#: builtin/tag.c:530
+msgid "only one -F or -m option is allowed."
+msgstr ""
+
+#: builtin/tag.c:550
+msgid "too many params"
+msgstr ""
+
+#: builtin/tag.c:556
+#, c-format
+msgid "'%s' is not a valid tag name."
+msgstr ""
+
+#: builtin/tag.c:561
+#, c-format
+msgid "tag '%s' already exists"
+msgstr ""
+
+#: builtin/tag.c:579
+#, c-format
+msgid "%s: cannot lock the ref"
+msgstr ""
+
+#: builtin/tag.c:581
+#, c-format
+msgid "%s: cannot update the ref"
+msgstr ""
+
+#: builtin/tag.c:583
+#, c-format
+msgid "Updated tag '%s' (was %s)\n"
+msgstr ""
+
+#: builtin/update-index.c:402
+msgid "git update-index [options] [--] [<file>...]"
+msgstr ""
+
+#: builtin/update-index.c:720
+msgid "continue refresh even when index needs update"
+msgstr ""
+
+#: builtin/update-index.c:723
+msgid "refresh: ignore submodules"
+msgstr ""
+
+#: builtin/update-index.c:726
+msgid "do not ignore new files"
+msgstr ""
+
+#: builtin/update-index.c:728
+msgid "let files replace directories and vice-versa"
+msgstr ""
+
+#: builtin/update-index.c:730
+msgid "notice files missing from worktree"
+msgstr ""
+
+#: builtin/update-index.c:732
+msgid "refresh even if index contains unmerged entries"
+msgstr ""
+
+#: builtin/update-index.c:735
+msgid "refresh stat information"
+msgstr ""
+
+#: builtin/update-index.c:739
+msgid "like --refresh, but ignore assume-unchanged setting"
+msgstr ""
+
+#: builtin/update-index.c:743
+msgid "<mode> <object> <path>"
+msgstr ""
+
+#: builtin/update-index.c:744
+msgid "add the specified entry to the index"
+msgstr ""
+
+#: builtin/update-index.c:748
+msgid "(+/-)x"
+msgstr ""
+
+#: builtin/update-index.c:749
+msgid "override the executable bit of the listed files"
+msgstr ""
+
+#: builtin/update-index.c:753
+msgid "mark files as \"not changing\""
+msgstr ""
+
+#: builtin/update-index.c:756
+msgid "clear assumed-unchanged bit"
+msgstr ""
+
+#: builtin/update-index.c:759
+msgid "mark files as \"index-only\""
+msgstr ""
+
+#: builtin/update-index.c:762
+msgid "clear skip-worktree bit"
+msgstr ""
+
+#: builtin/update-index.c:765
+msgid "add to index only; do not add content to object database"
+msgstr ""
+
+#: builtin/update-index.c:767
+msgid "remove named paths even if present in worktree"
+msgstr ""
+
+#: builtin/update-index.c:769
+msgid "with --stdin: input lines are terminated by null bytes"
+msgstr ""
+
+#: builtin/update-index.c:771
+msgid "read list of paths to be updated from standard input"
+msgstr ""
+
+#: builtin/update-index.c:775
+msgid "add entries from standard input to the index"
+msgstr ""
+
+#: builtin/update-index.c:779
+msgid "repopulate stages #2 and #3 for the listed paths"
+msgstr ""
+
+#: builtin/update-index.c:783
+msgid "only update entries that differ from HEAD"
+msgstr ""
+
+#: builtin/update-index.c:787
+msgid "ignore files missing from worktree"
+msgstr ""
+
+#: builtin/update-index.c:790
+msgid "report actions to standard output"
+msgstr ""
+
+#: builtin/update-index.c:792
+msgid "(for porcelains) forget saved unresolved conflicts"
+msgstr ""
+
+#: builtin/update-index.c:796
+msgid "write index in this format"
+msgstr ""
+
+#: builtin/update-ref.c:9
+msgid "git update-ref [options] -d <refname> [<oldval>]"
+msgstr ""
+
+#: builtin/update-ref.c:10
+msgid "git update-ref [options] <refname> <newval> [<oldval>]"
+msgstr ""
+
+#: builtin/update-ref.c:11
+msgid "git update-ref [options] --stdin [-z]"
+msgstr ""
+
+#: builtin/update-ref.c:255
+msgid "delete the reference"
+msgstr ""
+
+#: builtin/update-ref.c:257
+msgid "update <refname> not the one it points to"
+msgstr ""
+
+#: builtin/update-ref.c:258
+msgid "stdin has NUL-terminated arguments"
+msgstr ""
+
+#: builtin/update-ref.c:259
+msgid "read updates from stdin"
+msgstr ""
+
+#: builtin/update-server-info.c:6
+msgid "git update-server-info [--force]"
+msgstr ""
+
+#: builtin/update-server-info.c:14
+msgid "update the info files from scratch"
+msgstr ""
+
+#: builtin/verify-pack.c:56
+msgid "git verify-pack [-v|--verbose] [-s|--stat-only] <pack>..."
+msgstr ""
+
+#: builtin/verify-pack.c:66
+msgid "verbose"
+msgstr ""
+
+#: builtin/verify-pack.c:68
+msgid "show statistics only"
+msgstr ""
+
+#: builtin/verify-tag.c:17
+msgid "git verify-tag [-v|--verbose] <tag>..."
+msgstr ""
+
+#: builtin/verify-tag.c:73
+msgid "print tag contents"
+msgstr ""
+
+#: builtin/write-tree.c:13
+msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]"
+msgstr ""
+
+#: builtin/write-tree.c:26
+msgid "<prefix>/"
+msgstr ""
+
+#: builtin/write-tree.c:27
+msgid "write tree object for a subdirectory <prefix>"
+msgstr ""
+
+#: builtin/write-tree.c:30
+msgid "only useful for debugging"
+msgstr ""
+
+#: git.c:17
+msgid ""
+"'git help -a' and 'git help -g' lists available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept."
+msgstr ""
+
+#: parse-options.h:146
+msgid "expiry date"
+msgstr "период на валидноÑÑ‚"
+
+#: parse-options.h:161
+msgid "no-op (backward compatibility)"
+msgstr "нулева Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ (за ÑъвмеÑтимоÑÑ‚ Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸ верÑии)"
+
+#: parse-options.h:235
+msgid "be more verbose"
+msgstr "повече подробноÑти"
+
+#: parse-options.h:237
+msgid "be more quiet"
+msgstr "по-малко подробноÑти"
+
+# FIXME
+#: parse-options.h:243
+msgid "use <n> digits to display SHA-1s"
+msgstr "да Ñе показват такъв <брой> цифри от Ñумите по SHA1"
+
+#: common-cmds.h:8
+msgid "Add file contents to the index"
+msgstr ""
+
+#: common-cmds.h:9
+msgid "Find by binary search the change that introduced a bug"
+msgstr ""
+
+#: common-cmds.h:10
+msgid "List, create, or delete branches"
+msgstr ""
+
+#: common-cmds.h:11
+msgid "Checkout a branch or paths to the working tree"
+msgstr ""
+
+#: common-cmds.h:12
+msgid "Clone a repository into a new directory"
+msgstr ""
+
+#: common-cmds.h:13
+msgid "Record changes to the repository"
+msgstr ""
+
+#: common-cmds.h:14
+msgid "Show changes between commits, commit and working tree, etc"
+msgstr ""
+
+#: common-cmds.h:15
+msgid "Download objects and refs from another repository"
+msgstr ""
+
+#: common-cmds.h:16
+msgid "Print lines matching a pattern"
+msgstr ""
+
+#: common-cmds.h:17
+msgid "Create an empty Git repository or reinitialize an existing one"
+msgstr ""
+
+#: common-cmds.h:18
+msgid "Show commit logs"
+msgstr ""
+
+#: common-cmds.h:19
+msgid "Join two or more development histories together"
+msgstr ""
+
+#: common-cmds.h:20
+msgid "Move or rename a file, a directory, or a symlink"
+msgstr ""
+
+#: common-cmds.h:21
+msgid "Fetch from and integrate with another repository or a local branch"
+msgstr ""
+
+#: common-cmds.h:22
+msgid "Update remote refs along with associated objects"
+msgstr ""
+
+#: common-cmds.h:23
+msgid "Forward-port local commits to the updated upstream head"
+msgstr ""
+
+#: common-cmds.h:24
+msgid "Reset current HEAD to the specified state"
+msgstr ""
+
+#: common-cmds.h:25
+msgid "Remove files from the working tree and from the index"
+msgstr ""
+
+#: common-cmds.h:26
+msgid "Show various types of objects"
+msgstr ""
+
+#: common-cmds.h:27
+msgid "Show the working tree status"
+msgstr ""
+
+#: common-cmds.h:28
+msgid "Create, list, delete or verify a tag object signed with GPG"
+msgstr ""
+
+#: git-am.sh:50
+msgid "You need to set your committer info first"
+msgstr ""
+
+#: git-am.sh:95
+msgid ""
+"You seem to have moved HEAD since the last 'am' failure.\n"
+"Not rewinding to ORIG_HEAD"
+msgstr ""
+
+#: git-am.sh:105
+#, sh-format
+msgid ""
+"When you have resolved this problem, run \"$cmdline --continue\".\n"
+"If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n"
+"To restore the original branch and stop patching, run \"$cmdline --abort\"."
+msgstr ""
+
+#: git-am.sh:121
+msgid "Cannot fall back to three-way merge."
+msgstr ""
+
+#: git-am.sh:137
+msgid "Repository lacks necessary blobs to fall back on 3-way merge."
+msgstr ""
+
+#: git-am.sh:139
+msgid "Using index info to reconstruct a base tree..."
+msgstr ""
+
+#: git-am.sh:154
+msgid ""
+"Did you hand edit your patch?\n"
+"It does not apply to blobs recorded in its index."
+msgstr ""
+
+#: git-am.sh:163
+msgid "Falling back to patching base and 3-way merge..."
+msgstr ""
+
+#: git-am.sh:179
+msgid "Failed to merge in the changes."
+msgstr ""
+
+#: git-am.sh:274
+msgid "Only one StGIT patch series can be applied at once"
+msgstr ""
+
+#: git-am.sh:361
+#, sh-format
+msgid "Patch format $patch_format is not supported."
+msgstr ""
+
+#: git-am.sh:363
+msgid "Patch format detection failed."
+msgstr ""
+
+#: git-am.sh:389
+msgid ""
+"The -b/--binary option has been a no-op for long time, and\n"
+"it will be removed. Please do not use it anymore."
+msgstr ""
+
+#: git-am.sh:479
+#, sh-format
+msgid "previous rebase directory $dotest still exists but mbox given."
+msgstr ""
+
+#: git-am.sh:484
+msgid "Please make up your mind. --skip or --abort?"
+msgstr ""
+
+#: git-am.sh:520
+#, sh-format
+msgid ""
+"Stray $dotest directory found.\n"
+"Use \"git am --abort\" to remove it."
+msgstr ""
+
+#: git-am.sh:528
+msgid "Resolve operation not in progress, we are not resuming."
+msgstr ""
+
+#: git-am.sh:594
+#, sh-format
+msgid "Dirty index: cannot apply patches (dirty: $files)"
+msgstr ""
+
+#: git-am.sh:698
+#, sh-format
+msgid ""
+"Patch is empty. Was it split wrong?\n"
+"If you would prefer to skip this patch, instead run \"$cmdline --skip\".\n"
+"To restore the original branch and stop patching run \"$cmdline --abort\"."
+msgstr ""
+
+#: git-am.sh:725
+msgid "Patch does not have a valid e-mail address."
+msgstr ""
+
+#: git-am.sh:772
+msgid "cannot be interactive without stdin connected to a terminal."
+msgstr ""
+
+#: git-am.sh:776
+msgid "Commit Body is:"
+msgstr ""
+
+#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
+#. in your translation. The program will only accept English
+#. input at this point.
+#: git-am.sh:783
+msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
+msgstr ""
+
+#: git-am.sh:819
+#, sh-format
+msgid "Applying: $FIRSTLINE"
+msgstr ""
+
+#: git-am.sh:840
+msgid ""
+"No changes - did you forget to use 'git add'?\n"
+"If there is nothing left to stage, chances are that something else\n"
+"already introduced the same changes; you might want to skip this patch."
+msgstr ""
+
+#: git-am.sh:848
+msgid ""
+"You still have unmerged paths in your index\n"
+"did you forget to use 'git add'?"
+msgstr ""
+
+#: git-am.sh:864
+msgid "No changes -- Patch already applied."
+msgstr ""
+
+#: git-am.sh:874
+#, sh-format
+msgid "Patch failed at $msgnum $FIRSTLINE"
+msgstr ""
+
+#: git-am.sh:877
+#, sh-format
+msgid ""
+"The copy of the patch that failed is found in:\n"
+" $dotest/patch"
+msgstr ""
+
+#: git-am.sh:895
+msgid "applying to an empty history"
+msgstr ""
+
+#: git-bisect.sh:48
+msgid "You need to start by \"git bisect start\""
+msgstr ""
+
+#. TRANSLATORS: Make sure to include [Y] and [n] in your
+#. translation. The program will only accept English input
+#. at this point.
+#: git-bisect.sh:54
+msgid "Do you want me to do it for you [Y/n]? "
+msgstr ""
+
+#: git-bisect.sh:95
+#, sh-format
+msgid "unrecognised option: '$arg'"
+msgstr ""
+
+#: git-bisect.sh:99
+#, sh-format
+msgid "'$arg' does not appear to be a valid revision"
+msgstr ""
+
+#: git-bisect.sh:117
+msgid "Bad HEAD - I need a HEAD"
+msgstr ""
+
+#: git-bisect.sh:130
+#, sh-format
+msgid ""
+"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'."
+msgstr ""
+
+#: git-bisect.sh:140
+msgid "won't bisect on cg-seek'ed tree"
+msgstr ""
+
+#: git-bisect.sh:144
+msgid "Bad HEAD - strange symbolic ref"
+msgstr ""
+
+#: git-bisect.sh:189
+#, sh-format
+msgid "Bad bisect_write argument: $state"
+msgstr ""
+
+#: git-bisect.sh:218
+#, sh-format
+msgid "Bad rev input: $arg"
+msgstr ""
+
+#: git-bisect.sh:232
+msgid "Please call 'bisect_state' with at least one argument."
+msgstr ""
+
+#: git-bisect.sh:244
+#, sh-format
+msgid "Bad rev input: $rev"
+msgstr ""
+
+#: git-bisect.sh:250
+msgid "'git bisect bad' can take only one argument."
+msgstr ""
+
+#. have bad but not good. we could bisect although
+#. this is less optimum.
+#: git-bisect.sh:273
+msgid "Warning: bisecting only with a bad commit."
+msgstr ""
+
+#. TRANSLATORS: Make sure to include [Y] and [n] in your
+#. translation. The program will only accept English input
+#. at this point.
+#: git-bisect.sh:279
+msgid "Are you sure [Y/n]? "
+msgstr ""
+
+#: git-bisect.sh:289
+msgid ""
+"You need to give me at least one good and one bad revisions.\n"
+"(You can use \"git bisect bad\" and \"git bisect good\" for that.)"
+msgstr ""
+
+#: git-bisect.sh:292
+msgid ""
+"You need to start by \"git bisect start\".\n"
+"You then need to give me at least one good and one bad revisions.\n"
+"(You can use \"git bisect bad\" and \"git bisect good\" for that.)"
+msgstr ""
+
+#: git-bisect.sh:363 git-bisect.sh:490
+msgid "We are not bisecting."
+msgstr ""
+
+#: git-bisect.sh:370
+#, sh-format
+msgid "'$invalid' is not a valid commit"
+msgstr ""
+
+#: git-bisect.sh:379
+#, sh-format
+msgid ""
+"Could not check out original HEAD '$branch'.\n"
+"Try 'git bisect reset <commit>'."
+msgstr ""
+
+#: git-bisect.sh:406
+msgid "No logfile given"
+msgstr ""
+
+#: git-bisect.sh:407
+#, sh-format
+msgid "cannot read $file for replaying"
+msgstr ""
+
+#: git-bisect.sh:424
+msgid "?? what are you talking about?"
+msgstr ""
+
+#: git-bisect.sh:436
+#, sh-format
+msgid "running $command"
+msgstr ""
+
+#: git-bisect.sh:443
+#, sh-format
+msgid ""
+"bisect run failed:\n"
+"exit code $res from '$command' is < 0 or >= 128"
+msgstr ""
+
+#: git-bisect.sh:469
+msgid "bisect run cannot continue any more"
+msgstr ""
+
+#: git-bisect.sh:475
+#, sh-format
+msgid ""
+"bisect run failed:\n"
+"'bisect_state $state' exited with error code $res"
+msgstr ""
+
+#: git-bisect.sh:482
+msgid "bisect run success"
+msgstr ""
+
+#: git-pull.sh:21
+msgid ""
+"Pull is not possible because you have unmerged files.\n"
+"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n"
+"as appropriate to mark resolution, or use 'git commit -a'."
+msgstr ""
+
+#: git-pull.sh:25
+msgid "Pull is not possible because you have unmerged files."
+msgstr ""
+
+#: git-pull.sh:223
+msgid "updating an unborn branch with changes added to the index"
+msgstr ""
+
+#. The fetch involved updating the current branch.
+#. The working tree and the index file is still based on the
+#. $orig_head commit, but we are merging into $curr_head.
+#. First update the working tree to match $curr_head.
+#: git-pull.sh:247
+#, sh-format
+msgid ""
+"Warning: fetch updated the current branch head.\n"
+"Warning: fast-forwarding your working tree from\n"
+"Warning: commit $orig_head."
+msgstr ""
+
+#: git-pull.sh:272
+msgid "Cannot merge multiple branches into empty head"
+msgstr ""
+
+#: git-pull.sh:276
+msgid "Cannot rebase onto multiple branches"
+msgstr ""
+
+#: git-rebase.sh:55
+msgid ""
+"When you have resolved this problem, run \"git rebase --continue\".\n"
+"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
+"To check out the original branch and stop rebasing, run \"git rebase --abort"
+"\"."
+msgstr ""
+
+#: git-rebase.sh:158
+msgid "Applied autostash."
+msgstr ""
+
+#: git-rebase.sh:161
+#, sh-format
+msgid "Cannot store $stash_sha1"
+msgstr ""
+
+#: git-rebase.sh:162
+msgid ""
+"Applying autostash resulted in conflicts.\n"
+"Your changes are safe in the stash.\n"
+"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
+msgstr ""
+
+#: git-rebase.sh:201
+msgid "The pre-rebase hook refused to rebase."
+msgstr ""
+
+#: git-rebase.sh:206
+msgid "It looks like git-am is in progress. Cannot rebase."
+msgstr ""
+
+#: git-rebase.sh:346
+msgid "The --exec option must be used with the --interactive option"
+msgstr ""
+
+#: git-rebase.sh:351
+msgid "No rebase in progress?"
+msgstr ""
+
+#: git-rebase.sh:362
+msgid "The --edit-todo action can only be used during interactive rebase."
+msgstr ""
+
+#: git-rebase.sh:369
+msgid "Cannot read HEAD"
+msgstr ""
+
+#: git-rebase.sh:372
+msgid ""
+"You must edit all merge conflicts and then\n"
+"mark them as resolved using git add"
+msgstr ""
+
+#: git-rebase.sh:390
+#, sh-format
+msgid "Could not move back to $head_name"
+msgstr ""
+
+# FIXME
+#: git-rebase.sh:409
+#, sh-format
+msgid ""
+"It seems that there is already a $state_dir_base directory, and\n"
+"I wonder if you are in the middle of another rebase. If that is the\n"
+"case, please try\n"
+"\t$cmd_live_rebase\n"
+"If that is not the case, please\n"
+"\t$cmd_clear_stale_rebase\n"
+"and run me again. I am stopping in case you still have something\n"
+"valuable there."
+msgstr ""
+
+#: git-rebase.sh:456
+#, sh-format
+msgid "invalid upstream $upstream_name"
+msgstr ""
+
+#: git-rebase.sh:480
+#, sh-format
+msgid "$onto_name: there are more than one merge bases"
+msgstr ""
+
+#: git-rebase.sh:483 git-rebase.sh:487
+#, sh-format
+msgid "$onto_name: there is no merge base"
+msgstr ""
+
+#: git-rebase.sh:492
+#, sh-format
+msgid "Does not point to a valid commit: $onto_name"
+msgstr ""
+
+#: git-rebase.sh:515
+#, sh-format
+msgid "fatal: no such branch: $branch_name"
+msgstr ""
+
+#: git-rebase.sh:548
+msgid "Cannot autostash"
+msgstr ""
+
+#: git-rebase.sh:553
+#, sh-format
+msgid "Created autostash: $stash_abbrev"
+msgstr ""
+
+#: git-rebase.sh:557
+msgid "Please commit or stash them."
+msgstr ""
+
+#: git-rebase.sh:577
+#, sh-format
+msgid "Current branch $branch_name is up to date."
+msgstr ""
+
+#: git-rebase.sh:581
+#, sh-format
+msgid "Current branch $branch_name is up to date, rebase forced."
+msgstr ""
+
+#: git-rebase.sh:592
+#, sh-format
+msgid "Changes from $mb to $onto:"
+msgstr ""
+
+#. Detach HEAD and reset the tree
+#: git-rebase.sh:601
+msgid "First, rewinding head to replay your work on top of it..."
+msgstr ""
+
+#: git-rebase.sh:611
+#, sh-format
+msgid "Fast-forwarded $branch_name to $onto_name."
+msgstr ""
+
+#: git-stash.sh:51
+msgid "git stash clear with parameters is unimplemented"
+msgstr ""
+
+#: git-stash.sh:74
+msgid "You do not have the initial commit yet"
+msgstr ""
+
+#: git-stash.sh:89
+msgid "Cannot save the current index state"
+msgstr ""
+
+#: git-stash.sh:123 git-stash.sh:136
+msgid "Cannot save the current worktree state"
+msgstr ""
+
+#: git-stash.sh:140
+msgid "No changes selected"
+msgstr ""
+
+#: git-stash.sh:143
+msgid "Cannot remove temporary index (can't happen)"
+msgstr ""
+
+#: git-stash.sh:156
+msgid "Cannot record working tree state"
+msgstr ""
+
+#: git-stash.sh:190
+#, sh-format
+msgid "Cannot update $ref_stash with $w_commit"
+msgstr ""
+
+#. TRANSLATORS: $option is an invalid option, like
+#. `--blah-blah'. The 7 spaces at the beginning of the
+#. second line correspond to "error: ". So you should line
+#. up the second line with however many characters the
+#. translation of "error: " takes in your language. E.g. in
+#. English this is:
+#.
+#. $ git stash save --blah-blah 2>&1 | head -n 2
+#. error: unknown option for 'stash save': --blah-blah
+#. To provide a message, use git stash save -- '--blah-blah'
+#: git-stash.sh:237
+#, sh-format
+msgid ""
+"error: unknown option for 'stash save': $option\n"
+" To provide a message, use git stash save -- '$option'"
+msgstr ""
+
+#: git-stash.sh:258
+msgid "No local changes to save"
+msgstr ""
+
+#: git-stash.sh:262
+msgid "Cannot initialize stash"
+msgstr ""
+
+#: git-stash.sh:266
+msgid "Cannot save the current status"
+msgstr ""
+
+#: git-stash.sh:284
+msgid "Cannot remove worktree changes"
+msgstr ""
+
+#: git-stash.sh:383
+msgid "No stash found."
+msgstr ""
+
+#: git-stash.sh:390
+#, sh-format
+msgid "Too many revisions specified: $REV"
+msgstr ""
+
+#: git-stash.sh:396
+#, sh-format
+msgid "$reference is not valid reference"
+msgstr ""
+
+#: git-stash.sh:424
+#, sh-format
+msgid "'$args' is not a stash-like commit"
+msgstr ""
+
+#: git-stash.sh:435
+#, sh-format
+msgid "'$args' is not a stash reference"
+msgstr ""
+
+#: git-stash.sh:443
+msgid "unable to refresh index"
+msgstr ""
+
+#: git-stash.sh:447
+msgid "Cannot apply a stash in the middle of a merge"
+msgstr ""
+
+#: git-stash.sh:455
+msgid "Conflicts in index. Try without --index."
+msgstr ""
+
+#: git-stash.sh:457
+msgid "Could not save index tree"
+msgstr ""
+
+#: git-stash.sh:491
+msgid "Cannot unstage modified files"
+msgstr ""
+
+#: git-stash.sh:506
+msgid "Index was not unstashed."
+msgstr ""
+
+#: git-stash.sh:523
+#, sh-format
+msgid "Dropped ${REV} ($s)"
+msgstr ""
+
+#: git-stash.sh:524
+#, sh-format
+msgid "${REV}: Could not drop stash entry"
+msgstr ""
+
+#: git-stash.sh:531
+msgid "No branch name specified"
+msgstr ""
+
+#: git-stash.sh:603
+msgid "(To restore them type \"git stash apply\")"
+msgstr ""
+
+#: git-submodule.sh:95
+#, sh-format
+msgid "cannot strip one component off url '$remoteurl'"
+msgstr ""
+
+#: git-submodule.sh:237
+#, sh-format
+msgid "No submodule mapping found in .gitmodules for path '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:281
+#, sh-format
+msgid "Clone of '$url' into submodule path '$sm_path' failed"
+msgstr ""
+
+#: git-submodule.sh:293
+#, sh-format
+msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa"
+msgstr ""
+
+#: git-submodule.sh:403
+msgid "Relative path can only be used from the toplevel of the working tree"
+msgstr ""
+
+#: git-submodule.sh:413
+#, sh-format
+msgid "repo URL: '$repo' must be absolute or begin with ./|../"
+msgstr ""
+
+#: git-submodule.sh:430
+#, sh-format
+msgid "'$sm_path' already exists in the index"
+msgstr ""
+
+#: git-submodule.sh:434
+#, sh-format
+msgid ""
+"The following path is ignored by one of your .gitignore files:\n"
+"$sm_path\n"
+"Use -f if you really want to add it."
+msgstr ""
+
+#: git-submodule.sh:452
+#, sh-format
+msgid "Adding existing repo at '$sm_path' to the index"
+msgstr ""
+
+#: git-submodule.sh:454
+#, sh-format
+msgid "'$sm_path' already exists and is not a valid git repo"
+msgstr ""
+
+#: git-submodule.sh:462
+#, sh-format
+msgid "A git directory for '$sm_name' is found locally with remote(s):"
+msgstr ""
+
+#: git-submodule.sh:464
+#, sh-format
+msgid ""
+"If you want to reuse this local git directory instead of cloning again from"
+msgstr ""
+
+#: git-submodule.sh:466
+#, sh-format
+msgid ""
+"use the '--force' option. If the local git directory is not the correct repo"
+msgstr ""
+
+#: git-submodule.sh:467
+#, sh-format
+msgid ""
+"or you are unsure what this means choose another name with the '--name' "
+"option."
+msgstr ""
+
+#: git-submodule.sh:469
+#, sh-format
+msgid "Reactivating local git directory for submodule '$sm_name'."
+msgstr ""
+
+#: git-submodule.sh:481
+#, sh-format
+msgid "Unable to checkout submodule '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:486
+#, sh-format
+msgid "Failed to add submodule '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:495
+#, sh-format
+msgid "Failed to register submodule '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:539
+#, sh-format
+msgid "Entering '$prefix$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:559
+#, sh-format
+msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
+msgstr ""
+
+#: git-submodule.sh:605
+#, sh-format
+msgid "No url found for submodule path '$displaypath' in .gitmodules"
+msgstr ""
+
+#: git-submodule.sh:614
+#, sh-format
+msgid "Failed to register url for submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:616
+#, sh-format
+msgid "Submodule '$name' ($url) registered for path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:633
+#, sh-format
+msgid "Failed to register update mode for submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:671
+#, sh-format
+msgid "Use '.' if you really want to deinitialize all submodules"
+msgstr ""
+
+#: git-submodule.sh:688
+#, sh-format
+msgid "Submodule work tree '$displaypath' contains a .git directory"
+msgstr ""
+
+#: git-submodule.sh:689
+#, sh-format
+msgid ""
+"(use 'rm -rf' if you really want to remove it including all of its history)"
+msgstr ""
+
+#: git-submodule.sh:695
+#, sh-format
+msgid ""
+"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
+"discard them"
+msgstr ""
+
+#: git-submodule.sh:698
+#, sh-format
+msgid "Cleared directory '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:699
+#, sh-format
+msgid "Could not remove submodule work tree '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:702
+#, sh-format
+msgid "Could not create empty submodule directory '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:711
+#, sh-format
+msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:834
+#, sh-format
+msgid ""
+"Submodule path '$displaypath' not initialized\n"
+"Maybe you want to use 'update --init'?"
+msgstr ""
+
+#: git-submodule.sh:847
+#, sh-format
+msgid "Unable to find current revision in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:856
+#, sh-format
+msgid "Unable to fetch in submodule path '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:880
+#, sh-format
+msgid "Unable to fetch in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:894
+#, sh-format
+msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:895
+#, sh-format
+msgid "Submodule path '$displaypath': rebased into '$sha1'"
+msgstr ""
+
+#: git-submodule.sh:900
+#, sh-format
+msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:901
+#, sh-format
+msgid "Submodule path '$displaypath': merged in '$sha1'"
+msgstr ""
+
+#: git-submodule.sh:906
+#, sh-format
+msgid ""
+"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:907
+#, sh-format
+msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
+msgstr ""
+
+#: git-submodule.sh:912
+#, sh-format
+msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:913
+#, sh-format
+msgid "Submodule path '$displaypath': checked out '$sha1'"
+msgstr ""
+
+#: git-submodule.sh:940
+#, sh-format
+msgid "Failed to recurse into submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:1048
+msgid "The --cached option cannot be used with the --files option"
+msgstr ""
+
+#. unexpected type
+#: git-submodule.sh:1096
+#, sh-format
+msgid "unexpected mode $mod_dst"
+msgstr ""
+
+#: git-submodule.sh:1116
+#, sh-format
+msgid " Warn: $display_name doesn't contain commit $sha1_src"
+msgstr ""
+
+#: git-submodule.sh:1119
+#, sh-format
+msgid " Warn: $display_name doesn't contain commit $sha1_dst"
+msgstr ""
+
+#: git-submodule.sh:1122
+#, sh-format
+msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
+msgstr ""
+
+#: git-submodule.sh:1147
+msgid "blob"
+msgstr ""
+
+#: git-submodule.sh:1261
+#, sh-format
+msgid "Failed to recurse into submodule path '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:1325
+#, sh-format
+msgid "Synchronizing submodule url for '$displaypath'"
+msgstr ""
diff --git a/po/da.po b/po/da.po
deleted file mode 100644
index 898b18d11..000000000
--- a/po/da.po
+++ /dev/null
@@ -1,3503 +0,0 @@
-# Danish translations for Git.
-# This file is distributed under the same license as the PACKAGE package.
-# Byrial Jensen <byrial@vip.cybercity.dk>, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Git\n"
-"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2012-03-16 20:18+0800\n"
-"PO-Revision-Date: 2012-04-10 18:41+0200\n"
-"Last-Translator: Byrial Jensen <byrial@vip.cybercity.dk>\n"
-"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
-"Language: da\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: advice.c:34
-#, c-format
-msgid "hint: %.*s\n"
-msgstr ""
-
-#.
-#. * Message used both when 'git commit' fails and when
-#. * other commands doing a merge do.
-#.
-#: advice.c:64
-msgid ""
-"Fix them up in the work tree,\n"
-"and then use 'git add/rm <file>' as\n"
-"appropriate to mark resolution and make a commit,\n"
-"or use 'git commit -a'."
-msgstr ""
-
-#: commit.c:47
-#, c-format
-msgid "could not parse %s"
-msgstr ""
-
-#: commit.c:49
-#, c-format
-msgid "%s %s is not a commit!"
-msgstr ""
-
-#: compat/obstack.c:406 compat/obstack.c:408
-msgid "memory exhausted"
-msgstr ""
-
-#: connected.c:39
-msgid "Could not run 'git rev-list'"
-msgstr ""
-
-#: connected.c:48
-#, c-format
-msgid "failed write to rev-list: %s"
-msgstr ""
-
-#: connected.c:56
-#, c-format
-msgid "failed to close rev-list's stdin: %s"
-msgstr ""
-
-#: diff.c:105
-#, c-format
-msgid " Failed to parse dirstat cut-off percentage '%.*s'\n"
-msgstr ""
-
-#: diff.c:110
-#, c-format
-msgid " Unknown dirstat parameter '%.*s'\n"
-msgstr ""
-
-#: diff.c:210
-#, c-format
-msgid ""
-"Found errors in 'diff.dirstat' config variable:\n"
-"%s"
-msgstr ""
-
-#: diff.c:1336
-msgid " 0 files changed\n"
-msgstr ""
-
-#: diff.c:1340
-#, c-format
-msgid " %d file changed"
-msgid_plural " %d files changed"
-msgstr[0] ""
-msgstr[1] ""
-
-#: diff.c:1357
-#, c-format
-msgid ", %d insertion(+)"
-msgid_plural ", %d insertions(+)"
-msgstr[0] ""
-msgstr[1] ""
-
-#: diff.c:1368
-#, c-format
-msgid ", %d deletion(-)"
-msgid_plural ", %d deletions(-)"
-msgstr[0] ""
-msgstr[1] ""
-
-#: diff.c:3424
-#, c-format
-msgid ""
-"Failed to parse --dirstat/-X option parameter:\n"
-"%s"
-msgstr ""
-
-#: gpg-interface.c:59
-msgid "could not run gpg."
-msgstr ""
-
-#: gpg-interface.c:71
-msgid "gpg did not accept the data"
-msgstr ""
-
-#: gpg-interface.c:82
-msgid "gpg failed to sign the data"
-msgstr ""
-
-#: grep.c:1280
-#, c-format
-msgid "'%s': unable to read %s"
-msgstr ""
-
-#: grep.c:1297
-#, c-format
-msgid "'%s': %s"
-msgstr ""
-
-#: grep.c:1308
-#, c-format
-msgid "'%s': short read %s"
-msgstr ""
-
-#: help.c:287
-#, c-format
-msgid ""
-"'%s' appears to be a git command, but we were not\n"
-"able to execute it. Maybe git-%s is broken?"
-msgstr ""
-
-#: remote.c:1607
-#, c-format
-msgid "Your branch is ahead of '%s' by %d commit.\n"
-msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: remote.c:1613
-#, c-format
-msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
-msgid_plural ""
-"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: remote.c:1621
-#, c-format
-msgid ""
-"Your branch and '%s' have diverged,\n"
-"and have %d and %d different commit each, respectively.\n"
-msgid_plural ""
-"Your branch and '%s' have diverged,\n"
-"and have %d and %d different commits each, respectively.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: sequencer.c:120 builtin/merge.c:864 builtin/merge.c:985
-#: builtin/merge.c:1095 builtin/merge.c:1105
-#, c-format
-msgid "Could not open '%s' for writing"
-msgstr ""
-
-#: sequencer.c:122 builtin/merge.c:334 builtin/merge.c:867
-#: builtin/merge.c:1097 builtin/merge.c:1110
-#, c-format
-msgid "Could not write to '%s'"
-msgstr ""
-
-#: sequencer.c:143
-msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'"
-msgstr ""
-
-#: sequencer.c:146
-msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
-msgstr ""
-
-#: sequencer.c:159 sequencer.c:685 sequencer.c:768
-#, c-format
-msgid "Could not write to %s"
-msgstr ""
-
-#: sequencer.c:162
-#, c-format
-msgid "Error wrapping up %s"
-msgstr ""
-
-#: sequencer.c:177
-msgid "Your local changes would be overwritten by cherry-pick."
-msgstr ""
-
-#: sequencer.c:179
-msgid "Your local changes would be overwritten by revert."
-msgstr ""
-
-#: sequencer.c:182
-msgid "Commit your changes or stash them to proceed."
-msgstr ""
-
-#. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:232
-#, c-format
-msgid "%s: Unable to write new index file"
-msgstr ""
-
-#: sequencer.c:298
-msgid "Your index file is unmerged."
-msgstr ""
-
-#: sequencer.c:301
-msgid "You do not have a valid HEAD"
-msgstr ""
-
-#: sequencer.c:316
-#, c-format
-msgid "Commit %s is a merge but no -m option was given."
-msgstr ""
-
-#: sequencer.c:324
-#, c-format
-msgid "Commit %s does not have parent %d"
-msgstr ""
-
-#: sequencer.c:328
-#, c-format
-msgid "Mainline was specified but commit %s is not a merge."
-msgstr ""
-
-#. TRANSLATORS: The first %s will be "revert" or
-#. "cherry-pick", the second %s a SHA1
-#: sequencer.c:339
-#, c-format
-msgid "%s: cannot parse parent commit %s"
-msgstr ""
-
-#: sequencer.c:343
-#, c-format
-msgid "Cannot get commit message for %s"
-msgstr ""
-
-#: sequencer.c:427
-#, c-format
-msgid "could not revert %s... %s"
-msgstr ""
-
-#: sequencer.c:428
-#, c-format
-msgid "could not apply %s... %s"
-msgstr ""
-
-#: sequencer.c:450 sequencer.c:909 builtin/log.c:288 builtin/log.c:713
-#: builtin/log.c:1329 builtin/log.c:1548 builtin/merge.c:348
-#: builtin/shortlog.c:181
-msgid "revision walk setup failed"
-msgstr ""
-
-#: sequencer.c:453
-msgid "empty commit set passed"
-msgstr ""
-
-#: sequencer.c:461
-#, c-format
-msgid "git %s: failed to read the index"
-msgstr ""
-
-#: sequencer.c:466
-#, c-format
-msgid "git %s: failed to refresh the index"
-msgstr ""
-
-#: sequencer.c:551
-#, c-format
-msgid "Cannot %s during a %s"
-msgstr ""
-
-#: sequencer.c:573
-#, c-format
-msgid "Could not parse line %d."
-msgstr ""
-
-#: sequencer.c:578
-msgid "No commits parsed."
-msgstr ""
-
-#: sequencer.c:591
-#, c-format
-msgid "Could not open %s"
-msgstr ""
-
-#: sequencer.c:595
-#, c-format
-msgid "Could not read %s."
-msgstr ""
-
-#: sequencer.c:602
-#, c-format
-msgid "Unusable instruction sheet: %s"
-msgstr ""
-
-#: sequencer.c:630
-#, c-format
-msgid "Invalid key: %s"
-msgstr ""
-
-#: sequencer.c:633
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr ""
-
-#: sequencer.c:645
-#, c-format
-msgid "Malformed options sheet: %s"
-msgstr ""
-
-#: sequencer.c:666
-msgid "a cherry-pick or revert is already in progress"
-msgstr ""
-
-#: sequencer.c:667
-msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
-msgstr ""
-
-#: sequencer.c:671
-#, c-format
-msgid "Could not create sequencer directory %s"
-msgstr ""
-
-#: sequencer.c:687 sequencer.c:772
-#, c-format
-msgid "Error wrapping up %s."
-msgstr ""
-
-#: sequencer.c:706 sequencer.c:840
-msgid "no cherry-pick or revert in progress"
-msgstr ""
-
-#: sequencer.c:708
-msgid "cannot resolve HEAD"
-msgstr ""
-
-#: sequencer.c:710
-msgid "cannot abort from a branch yet to be born"
-msgstr ""
-
-#: sequencer.c:732
-#, c-format
-msgid "cannot open %s: %s"
-msgstr ""
-
-#: sequencer.c:735
-#, c-format
-msgid "cannot read %s: %s"
-msgstr ""
-
-#: sequencer.c:736
-msgid "unexpected end of file"
-msgstr ""
-
-#: sequencer.c:742
-#, c-format
-msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
-msgstr ""
-
-#: sequencer.c:765
-#, c-format
-msgid "Could not format %s."
-msgstr ""
-
-#: sequencer.c:927
-msgid "Can't revert as initial commit"
-msgstr ""
-
-#: sequencer.c:928
-msgid "Can't cherry-pick into empty head"
-msgstr ""
-
-#: wt-status.c:134
-msgid "Unmerged paths:"
-msgstr ""
-
-#: wt-status.c:140 wt-status.c:157
-#, c-format
-msgid " (use \"git reset %s <file>...\" to unstage)"
-msgstr ""
-
-#: wt-status.c:142 wt-status.c:159
-msgid " (use \"git rm --cached <file>...\" to unstage)"
-msgstr ""
-
-#: wt-status.c:143
-msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
-msgstr ""
-
-#: wt-status.c:151
-msgid "Changes to be committed:"
-msgstr ""
-
-#: wt-status.c:169
-msgid "Changes not staged for commit:"
-msgstr ""
-
-#: wt-status.c:173
-msgid " (use \"git add <file>...\" to update what will be committed)"
-msgstr ""
-
-#: wt-status.c:175
-msgid " (use \"git add/rm <file>...\" to update what will be committed)"
-msgstr ""
-
-#: wt-status.c:176
-msgid ""
-" (use \"git checkout -- <file>...\" to discard changes in working directory)"
-msgstr ""
-
-#: wt-status.c:178
-msgid " (commit or discard the untracked or modified content in submodules)"
-msgstr ""
-
-#: wt-status.c:187
-#, c-format
-msgid "%s files:"
-msgstr ""
-
-#: wt-status.c:190
-#, c-format
-msgid " (use \"git %s <file>...\" to include in what will be committed)"
-msgstr ""
-
-#: wt-status.c:207
-msgid "bug"
-msgstr ""
-
-#: wt-status.c:212
-msgid "both deleted:"
-msgstr ""
-
-#: wt-status.c:213
-msgid "added by us:"
-msgstr ""
-
-#: wt-status.c:214
-msgid "deleted by them:"
-msgstr ""
-
-#: wt-status.c:215
-msgid "added by them:"
-msgstr ""
-
-#: wt-status.c:216
-msgid "deleted by us:"
-msgstr ""
-
-#: wt-status.c:217
-msgid "both added:"
-msgstr ""
-
-#: wt-status.c:218
-msgid "both modified:"
-msgstr ""
-
-#: wt-status.c:248
-msgid "new commits, "
-msgstr ""
-
-#: wt-status.c:250
-msgid "modified content, "
-msgstr ""
-
-#: wt-status.c:252
-msgid "untracked content, "
-msgstr ""
-
-#: wt-status.c:266
-#, c-format
-msgid "new file: %s"
-msgstr ""
-
-#: wt-status.c:269
-#, c-format
-msgid "copied: %s -> %s"
-msgstr ""
-
-#: wt-status.c:272
-#, c-format
-msgid "deleted: %s"
-msgstr ""
-
-#: wt-status.c:275
-#, c-format
-msgid "modified: %s"
-msgstr ""
-
-#: wt-status.c:278
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr ""
-
-#: wt-status.c:281
-#, c-format
-msgid "typechange: %s"
-msgstr ""
-
-#: wt-status.c:284
-#, c-format
-msgid "unknown: %s"
-msgstr ""
-
-#: wt-status.c:287
-#, c-format
-msgid "unmerged: %s"
-msgstr ""
-
-#: wt-status.c:290
-#, c-format
-msgid "bug: unhandled diff status %c"
-msgstr ""
-
-#: wt-status.c:713
-msgid "On branch "
-msgstr ""
-
-#: wt-status.c:720
-msgid "Not currently on any branch."
-msgstr ""
-
-#: wt-status.c:731
-msgid "Initial commit"
-msgstr ""
-
-#: wt-status.c:745
-msgid "Untracked"
-msgstr ""
-
-#: wt-status.c:747
-msgid "Ignored"
-msgstr ""
-
-#: wt-status.c:749
-#, c-format
-msgid "Untracked files not listed%s"
-msgstr ""
-
-#: wt-status.c:751
-msgid " (use -u option to show untracked files)"
-msgstr ""
-
-#: wt-status.c:757
-msgid "No changes"
-msgstr ""
-
-#: wt-status.c:761
-#, c-format
-msgid "no changes added to commit%s\n"
-msgstr ""
-
-#: wt-status.c:763
-msgid " (use \"git add\" and/or \"git commit -a\")"
-msgstr ""
-
-#: wt-status.c:765
-#, c-format
-msgid "nothing added to commit but untracked files present%s\n"
-msgstr ""
-
-#: wt-status.c:767
-msgid " (use \"git add\" to track)"
-msgstr ""
-
-#: wt-status.c:769 wt-status.c:772 wt-status.c:775
-#, c-format
-msgid "nothing to commit%s\n"
-msgstr ""
-
-#: wt-status.c:770
-msgid " (create/copy files and use \"git add\" to track)"
-msgstr ""
-
-#: wt-status.c:773
-msgid " (use -u to show untracked files)"
-msgstr ""
-
-#: wt-status.c:776
-msgid " (working directory clean)"
-msgstr ""
-
-#: wt-status.c:884
-msgid "HEAD (no branch)"
-msgstr ""
-
-#: wt-status.c:890
-msgid "Initial commit on "
-msgstr ""
-
-#: wt-status.c:905
-msgid "behind "
-msgstr ""
-
-#: wt-status.c:908 wt-status.c:911
-msgid "ahead "
-msgstr ""
-
-#: wt-status.c:913
-msgid ", behind "
-msgstr ""
-
-#: builtin/add.c:62
-#, c-format
-msgid "unexpected diff status %c"
-msgstr ""
-
-#: builtin/add.c:67 builtin/commit.c:298
-msgid "updating files failed"
-msgstr ""
-
-#: builtin/add.c:77
-#, c-format
-msgid "remove '%s'\n"
-msgstr ""
-
-#: builtin/add.c:176
-#, c-format
-msgid "Path '%s' is in submodule '%.*s'"
-msgstr ""
-
-#: builtin/add.c:192
-msgid "Unstaged changes after refreshing the index:"
-msgstr ""
-
-#: builtin/add.c:195 builtin/add.c:456 builtin/rm.c:186
-#, c-format
-msgid "pathspec '%s' did not match any files"
-msgstr ""
-
-#: builtin/add.c:209
-#, c-format
-msgid "'%s' is beyond a symbolic link"
-msgstr ""
-
-#: builtin/add.c:276
-msgid "Could not read the index"
-msgstr ""
-
-#: builtin/add.c:286
-#, c-format
-msgid "Could not open '%s' for writing."
-msgstr ""
-
-#: builtin/add.c:290
-msgid "Could not write patch"
-msgstr ""
-
-#: builtin/add.c:295
-#, c-format
-msgid "Could not stat '%s'"
-msgstr ""
-
-#: builtin/add.c:297
-msgid "Empty patch. Aborted."
-msgstr ""
-
-#: builtin/add.c:303
-#, c-format
-msgid "Could not apply '%s'"
-msgstr ""
-
-#: builtin/add.c:312
-msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr ""
-
-#: builtin/add.c:352
-#, c-format
-msgid "Use -f if you really want to add them.\n"
-msgstr ""
-
-#: builtin/add.c:353
-msgid "no files added"
-msgstr ""
-
-#: builtin/add.c:359
-msgid "adding files failed"
-msgstr ""
-
-#: builtin/add.c:391
-msgid "-A and -u are mutually incompatible"
-msgstr ""
-
-#: builtin/add.c:393
-msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr ""
-
-#: builtin/add.c:413
-#, c-format
-msgid "Nothing specified, nothing added.\n"
-msgstr ""
-
-#: builtin/add.c:414
-#, c-format
-msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr ""
-
-#: builtin/add.c:420 builtin/clean.c:95 builtin/commit.c:358 builtin/mv.c:82
-#: builtin/rm.c:162
-msgid "index file corrupt"
-msgstr ""
-
-#: builtin/add.c:476 builtin/mv.c:229 builtin/rm.c:260
-msgid "Unable to write new index file"
-msgstr ""
-
-#: builtin/archive.c:17
-#, c-format
-msgid "could not create archive file '%s'"
-msgstr ""
-
-#: builtin/archive.c:20
-msgid "could not redirect output"
-msgstr ""
-
-#: builtin/archive.c:37
-msgid "git archive: Remote with no URL"
-msgstr ""
-
-#: builtin/archive.c:58
-msgid "git archive: expected ACK/NAK, got EOF"
-msgstr ""
-
-#: builtin/archive.c:63
-#, c-format
-msgid "git archive: NACK %s"
-msgstr ""
-
-#: builtin/archive.c:65
-#, c-format
-msgid "remote error: %s"
-msgstr ""
-
-#: builtin/archive.c:66
-msgid "git archive: protocol error"
-msgstr ""
-
-#: builtin/archive.c:71
-msgid "git archive: expected a flush"
-msgstr ""
-
-#: builtin/branch.c:137
-#, c-format
-msgid ""
-"deleting branch '%s' that has been merged to\n"
-" '%s', but not yet merged to HEAD."
-msgstr ""
-
-#: builtin/branch.c:141
-#, c-format
-msgid ""
-"not deleting branch '%s' that is not yet merged to\n"
-" '%s', even though it is merged to HEAD."
-msgstr ""
-
-#. TRANSLATORS: This is "remote " in "remote branch '%s' not found"
-#: builtin/branch.c:163
-msgid "remote "
-msgstr ""
-
-#: builtin/branch.c:171
-msgid "cannot use -a with -d"
-msgstr ""
-
-#: builtin/branch.c:177
-msgid "Couldn't look up commit object for HEAD"
-msgstr ""
-
-#: builtin/branch.c:182
-#, c-format
-msgid "Cannot delete the branch '%s' which you are currently on."
-msgstr ""
-
-#: builtin/branch.c:192
-#, c-format
-msgid "%sbranch '%s' not found."
-msgstr ""
-
-#: builtin/branch.c:200
-#, c-format
-msgid "Couldn't look up commit object for '%s'"
-msgstr ""
-
-#: builtin/branch.c:206
-#, c-format
-msgid ""
-"The branch '%s' is not fully merged.\n"
-"If you are sure you want to delete it, run 'git branch -D %s'."
-msgstr ""
-
-#: builtin/branch.c:214
-#, c-format
-msgid "Error deleting %sbranch '%s'"
-msgstr ""
-
-#: builtin/branch.c:219
-#, c-format
-msgid "Deleted %sbranch %s (was %s).\n"
-msgstr ""
-
-#: builtin/branch.c:224
-msgid "Update of config-file failed"
-msgstr ""
-
-#: builtin/branch.c:322
-#, c-format
-msgid "branch '%s' does not point at a commit"
-msgstr ""
-
-#: builtin/branch.c:394
-#, c-format
-msgid "behind %d] "
-msgstr ""
-
-#: builtin/branch.c:396
-#, c-format
-msgid "ahead %d] "
-msgstr ""
-
-#: builtin/branch.c:398
-#, c-format
-msgid "ahead %d, behind %d] "
-msgstr ""
-
-#: builtin/branch.c:501
-msgid "(no branch)"
-msgstr ""
-
-#: builtin/branch.c:566
-msgid "some refs could not be read"
-msgstr ""
-
-#: builtin/branch.c:579
-msgid "cannot rename the current branch while not on any."
-msgstr ""
-
-#: builtin/branch.c:589
-#, c-format
-msgid "Invalid branch name: '%s'"
-msgstr ""
-
-#: builtin/branch.c:604
-msgid "Branch rename failed"
-msgstr ""
-
-#: builtin/branch.c:608
-#, c-format
-msgid "Renamed a misnamed branch '%s' away"
-msgstr ""
-
-#: builtin/branch.c:612
-#, c-format
-msgid "Branch renamed to %s, but HEAD is not updated!"
-msgstr ""
-
-#: builtin/branch.c:619
-msgid "Branch is renamed, but update of config-file failed"
-msgstr ""
-
-#: builtin/branch.c:634
-#, c-format
-msgid "malformed object name %s"
-msgstr ""
-
-#: builtin/branch.c:658
-#, c-format
-msgid "could not write branch description template: %s\n"
-msgstr ""
-
-#: builtin/branch.c:746
-msgid "Failed to resolve HEAD as a valid ref."
-msgstr ""
-
-#: builtin/branch.c:751 builtin/clone.c:558
-msgid "HEAD not found below refs/heads!"
-msgstr ""
-
-#: builtin/branch.c:809
-msgid "-a and -r options to 'git branch' do not make sense with a branch name"
-msgstr ""
-
-#: builtin/bundle.c:47
-#, c-format
-msgid "%s is okay\n"
-msgstr ""
-
-#: builtin/bundle.c:56
-msgid "Need a repository to create a bundle."
-msgstr ""
-
-#: builtin/bundle.c:60
-msgid "Need a repository to unbundle."
-msgstr ""
-
-#: builtin/checkout.c:113 builtin/checkout.c:146
-#, c-format
-msgid "path '%s' does not have our version"
-msgstr ""
-
-#: builtin/checkout.c:115 builtin/checkout.c:148
-#, c-format
-msgid "path '%s' does not have their version"
-msgstr ""
-
-#: builtin/checkout.c:131
-#, c-format
-msgid "path '%s' does not have all necessary versions"
-msgstr ""
-
-#: builtin/checkout.c:175
-#, c-format
-msgid "path '%s' does not have necessary versions"
-msgstr ""
-
-#: builtin/checkout.c:192
-#, c-format
-msgid "path '%s': cannot merge"
-msgstr ""
-
-#: builtin/checkout.c:209
-#, c-format
-msgid "Unable to add merge result for '%s'"
-msgstr ""
-
-#: builtin/checkout.c:212 builtin/reset.c:158
-#, c-format
-msgid "make_cache_entry failed for path '%s'"
-msgstr ""
-
-#: builtin/checkout.c:234 builtin/checkout.c:392
-msgid "corrupt index file"
-msgstr ""
-
-#: builtin/checkout.c:264 builtin/checkout.c:271
-#, c-format
-msgid "path '%s' is unmerged"
-msgstr ""
-
-#: builtin/checkout.c:302 builtin/checkout.c:498 builtin/clone.c:583
-#: builtin/merge.c:811
-msgid "unable to write new index file"
-msgstr ""
-
-#: builtin/checkout.c:319 builtin/diff.c:302 builtin/merge.c:408
-msgid "diff_setup_done failed"
-msgstr ""
-
-#: builtin/checkout.c:414
-msgid "you need to resolve your current index first"
-msgstr ""
-
-#: builtin/checkout.c:533
-#, c-format
-msgid "Can not do reflog for '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:565
-msgid "HEAD is now at"
-msgstr ""
-
-#: builtin/checkout.c:572
-#, c-format
-msgid "Reset branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:575
-#, c-format
-msgid "Already on '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:579
-#, c-format
-msgid "Switched to and reset branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:581
-#, c-format
-msgid "Switched to a new branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:583
-#, c-format
-msgid "Switched to branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:639
-#, c-format
-msgid " ... and %d more.\n"
-msgstr ""
-
-#. The singular version
-#: builtin/checkout.c:645
-#, c-format
-msgid ""
-"Warning: you are leaving %d commit behind, not connected to\n"
-"any of your branches:\n"
-"\n"
-"%s\n"
-msgid_plural ""
-"Warning: you are leaving %d commits behind, not connected to\n"
-"any of your branches:\n"
-"\n"
-"%s\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: builtin/checkout.c:663
-#, c-format
-msgid ""
-"If you want to keep them by creating a new branch, this may be a good time\n"
-"to do so with:\n"
-"\n"
-" git branch new_branch_name %s\n"
-"\n"
-msgstr ""
-
-#: builtin/checkout.c:692
-msgid "internal error in revision walk"
-msgstr ""
-
-#: builtin/checkout.c:696
-msgid "Previous HEAD position was"
-msgstr ""
-
-#: builtin/checkout.c:722
-msgid "You are on a branch yet to be born"
-msgstr ""
-
-#. case (1)
-#: builtin/checkout.c:853
-#, c-format
-msgid "invalid reference: %s"
-msgstr ""
-
-#. case (1): want a tree
-#: builtin/checkout.c:892
-#, c-format
-msgid "reference is not a tree: %s"
-msgstr ""
-
-#: builtin/checkout.c:972
-msgid "-B cannot be used with -b"
-msgstr ""
-
-#: builtin/checkout.c:981
-msgid "--patch is incompatible with all other options"
-msgstr ""
-
-#: builtin/checkout.c:984
-msgid "--detach cannot be used with -b/-B/--orphan"
-msgstr ""
-
-#: builtin/checkout.c:986
-msgid "--detach cannot be used with -t"
-msgstr ""
-
-#: builtin/checkout.c:992
-msgid "--track needs a branch name"
-msgstr ""
-
-#: builtin/checkout.c:999
-msgid "Missing branch name; try -b"
-msgstr ""
-
-#: builtin/checkout.c:1005
-msgid "--orphan and -b|-B are mutually exclusive"
-msgstr ""
-
-#: builtin/checkout.c:1007
-msgid "--orphan cannot be used with -t"
-msgstr ""
-
-#: builtin/checkout.c:1017
-msgid "git checkout: -f and -m are incompatible"
-msgstr ""
-
-#: builtin/checkout.c:1051
-msgid "invalid path specification"
-msgstr ""
-
-#: builtin/checkout.c:1059
-#, c-format
-msgid ""
-"git checkout: updating paths is incompatible with switching branches.\n"
-"Did you intend to checkout '%s' which can not be resolved as commit?"
-msgstr ""
-
-#: builtin/checkout.c:1061
-msgid "git checkout: updating paths is incompatible with switching branches."
-msgstr ""
-
-#: builtin/checkout.c:1066
-msgid "git checkout: --detach does not take a path argument"
-msgstr ""
-
-#: builtin/checkout.c:1069
-msgid ""
-"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
-"checking out of the index."
-msgstr ""
-
-#: builtin/checkout.c:1088
-msgid "Cannot switch branch to a non-commit."
-msgstr ""
-
-#: builtin/checkout.c:1091
-msgid "--ours/--theirs is incompatible with switching branches."
-msgstr ""
-
-#: builtin/clean.c:78
-msgid "-x and -X cannot be used together"
-msgstr ""
-
-#: builtin/clean.c:82
-msgid ""
-"clean.requireForce set to true and neither -n nor -f given; refusing to clean"
-msgstr ""
-
-#: builtin/clean.c:85
-msgid ""
-"clean.requireForce defaults to true and neither -n nor -f given; refusing to "
-"clean"
-msgstr ""
-
-#: builtin/clean.c:155 builtin/clean.c:176
-#, c-format
-msgid "Would remove %s\n"
-msgstr ""
-
-#: builtin/clean.c:159 builtin/clean.c:179
-#, c-format
-msgid "Removing %s\n"
-msgstr ""
-
-#: builtin/clean.c:162 builtin/clean.c:182
-#, c-format
-msgid "failed to remove %s"
-msgstr ""
-
-#: builtin/clean.c:166
-#, c-format
-msgid "Would not remove %s\n"
-msgstr ""
-
-#: builtin/clean.c:168
-#, c-format
-msgid "Not removing %s\n"
-msgstr ""
-
-#: builtin/clone.c:243
-#, c-format
-msgid "reference repository '%s' is not a local directory."
-msgstr ""
-
-#: builtin/clone.c:302
-#, c-format
-msgid "failed to open '%s'"
-msgstr ""
-
-#: builtin/clone.c:306
-#, c-format
-msgid "failed to create directory '%s'"
-msgstr ""
-
-#: builtin/clone.c:308 builtin/diff.c:75
-#, c-format
-msgid "failed to stat '%s'"
-msgstr ""
-
-#: builtin/clone.c:310
-#, c-format
-msgid "%s exists and is not a directory"
-msgstr ""
-
-#: builtin/clone.c:324
-#, c-format
-msgid "failed to stat %s\n"
-msgstr ""
-
-#: builtin/clone.c:341
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr ""
-
-#: builtin/clone.c:346
-#, c-format
-msgid "failed to create link '%s'"
-msgstr ""
-
-#: builtin/clone.c:350
-#, c-format
-msgid "failed to copy file to '%s'"
-msgstr ""
-
-#: builtin/clone.c:373
-#, c-format
-msgid "done.\n"
-msgstr ""
-
-#: builtin/clone.c:440
-#, c-format
-msgid "Could not find remote branch %s to clone."
-msgstr ""
-
-#: builtin/clone.c:549
-msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
-msgstr ""
-
-#: builtin/clone.c:639
-msgid "Too many arguments."
-msgstr ""
-
-#: builtin/clone.c:643
-msgid "You must specify a repository to clone."
-msgstr ""
-
-#: builtin/clone.c:654
-#, c-format
-msgid "--bare and --origin %s options are incompatible."
-msgstr ""
-
-#: builtin/clone.c:668
-#, c-format
-msgid "repository '%s' does not exist"
-msgstr ""
-
-#: builtin/clone.c:673
-msgid "--depth is ignored in local clones; use file:// instead."
-msgstr ""
-
-#: builtin/clone.c:683
-#, c-format
-msgid "destination path '%s' already exists and is not an empty directory."
-msgstr ""
-
-#: builtin/clone.c:693
-#, c-format
-msgid "working tree '%s' already exists."
-msgstr ""
-
-#: builtin/clone.c:706 builtin/clone.c:720
-#, c-format
-msgid "could not create leading directories of '%s'"
-msgstr ""
-
-#: builtin/clone.c:709
-#, c-format
-msgid "could not create work tree dir '%s'."
-msgstr ""
-
-#: builtin/clone.c:728
-#, c-format
-msgid "Cloning into bare repository '%s'...\n"
-msgstr ""
-
-#: builtin/clone.c:730
-#, c-format
-msgid "Cloning into '%s'...\n"
-msgstr ""
-
-#: builtin/clone.c:786
-#, c-format
-msgid "Don't know how to clone %s"
-msgstr ""
-
-#: builtin/clone.c:835
-#, c-format
-msgid "Remote branch %s not found in upstream %s"
-msgstr ""
-
-#: builtin/clone.c:842
-msgid "You appear to have cloned an empty repository."
-msgstr ""
-
-#: builtin/commit.c:42
-msgid ""
-"Your name and email address were configured automatically based\n"
-"on your username and hostname. Please check that they are accurate.\n"
-"You can suppress this message by setting them explicitly:\n"
-"\n"
-" git config --global user.name \"Your Name\"\n"
-" git config --global user.email you@example.com\n"
-"\n"
-"After doing this, you may fix the identity used for this commit with:\n"
-"\n"
-" git commit --amend --reset-author\n"
-msgstr ""
-
-#: builtin/commit.c:54
-msgid ""
-"You asked to amend the most recent commit, but doing so would make\n"
-"it empty. You can repeat your command with --allow-empty, or you can\n"
-"remove the commit entirely with \"git reset HEAD^\".\n"
-msgstr ""
-
-#: builtin/commit.c:59
-msgid ""
-"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
-"If you wish to commit it anyway, use:\n"
-"\n"
-" git commit --allow-empty\n"
-"\n"
-"Otherwise, please use 'git reset'\n"
-msgstr ""
-
-#: builtin/commit.c:205 builtin/reset.c:33
-msgid "merge"
-msgstr ""
-
-#: builtin/commit.c:208
-msgid "cherry-pick"
-msgstr ""
-
-#: builtin/commit.c:325
-msgid "failed to unpack HEAD tree object"
-msgstr ""
-
-#: builtin/commit.c:367
-msgid "unable to create temporary index"
-msgstr ""
-
-#: builtin/commit.c:373
-msgid "interactive add failed"
-msgstr ""
-
-#: builtin/commit.c:406 builtin/commit.c:427 builtin/commit.c:473
-msgid "unable to write new_index file"
-msgstr ""
-
-#: builtin/commit.c:457
-#, c-format
-msgid "cannot do a partial commit during a %s."
-msgstr ""
-
-#: builtin/commit.c:466
-msgid "cannot read the index"
-msgstr ""
-
-#: builtin/commit.c:486
-msgid "unable to write temporary index file"
-msgstr ""
-
-#: builtin/commit.c:550 builtin/commit.c:556
-#, c-format
-msgid "invalid commit: %s"
-msgstr ""
-
-#: builtin/commit.c:579
-msgid "malformed --author parameter"
-msgstr ""
-
-#: builtin/commit.c:635
-#, c-format
-msgid "Malformed ident string: '%s'"
-msgstr ""
-
-#: builtin/commit.c:670 builtin/commit.c:703 builtin/commit.c:1000
-#, c-format
-msgid "could not lookup commit %s"
-msgstr ""
-
-#: builtin/commit.c:682 builtin/shortlog.c:296
-#, c-format
-msgid "(reading log message from standard input)\n"
-msgstr ""
-
-#: builtin/commit.c:684
-msgid "could not read log from standard input"
-msgstr ""
-
-#: builtin/commit.c:688
-#, c-format
-msgid "could not read log file '%s'"
-msgstr ""
-
-#: builtin/commit.c:694
-msgid "commit has empty message"
-msgstr ""
-
-#: builtin/commit.c:710
-msgid "could not read MERGE_MSG"
-msgstr ""
-
-#: builtin/commit.c:714
-msgid "could not read SQUASH_MSG"
-msgstr ""
-
-#: builtin/commit.c:718
-#, c-format
-msgid "could not read '%s'"
-msgstr ""
-
-#: builtin/commit.c:746
-#, c-format
-msgid "could not open '%s'"
-msgstr ""
-
-#: builtin/commit.c:770
-msgid "could not write commit template"
-msgstr ""
-
-#: builtin/commit.c:783
-#, c-format
-msgid ""
-"\n"
-"It looks like you may be committing a %s.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
-"and try again.\n"
-msgstr ""
-
-#: builtin/commit.c:796
-msgid "Please enter the commit message for your changes."
-msgstr ""
-
-#: builtin/commit.c:799
-msgid ""
-" Lines starting\n"
-"with '#' will be ignored, and an empty message aborts the commit.\n"
-msgstr ""
-
-#: builtin/commit.c:804
-msgid ""
-" Lines starting\n"
-"with '#' will be kept; you may remove them yourself if you want to.\n"
-"An empty message aborts the commit.\n"
-msgstr ""
-
-#: builtin/commit.c:816
-#, c-format
-msgid "%sAuthor: %s"
-msgstr ""
-
-#: builtin/commit.c:823
-#, c-format
-msgid "%sCommitter: %s"
-msgstr ""
-
-#: builtin/commit.c:843
-msgid "Cannot read index"
-msgstr ""
-
-#: builtin/commit.c:880
-msgid "Error building trees"
-msgstr ""
-
-#: builtin/commit.c:895 builtin/tag.c:357
-#, c-format
-msgid "Please supply the message using either -m or -F option.\n"
-msgstr ""
-
-#: builtin/commit.c:975
-#, c-format
-msgid "No existing author found with '%s'"
-msgstr ""
-
-#: builtin/commit.c:990 builtin/commit.c:1182
-#, c-format
-msgid "Invalid untracked files mode '%s'"
-msgstr ""
-
-#: builtin/commit.c:1030
-msgid "Using both --reset-author and --author does not make sense"
-msgstr ""
-
-#: builtin/commit.c:1041
-msgid "You have nothing to amend."
-msgstr ""
-
-#: builtin/commit.c:1043
-#, c-format
-msgid "You are in the middle of a %s -- cannot amend."
-msgstr ""
-
-#: builtin/commit.c:1045
-msgid "Options --squash and --fixup cannot be used together"
-msgstr ""
-
-#: builtin/commit.c:1055
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr ""
-
-#: builtin/commit.c:1057
-msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
-msgstr ""
-
-#: builtin/commit.c:1063
-msgid "--reset-author can be used only with -C, -c or --amend."
-msgstr ""
-
-#: builtin/commit.c:1080
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-
-#: builtin/commit.c:1082
-msgid "No paths with --include/--only does not make sense."
-msgstr ""
-
-#: builtin/commit.c:1084
-msgid "Clever... amending the last one with dirty index."
-msgstr ""
-
-#: builtin/commit.c:1086
-msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
-msgstr ""
-
-#: builtin/commit.c:1096 builtin/tag.c:556
-#, c-format
-msgid "Invalid cleanup mode %s"
-msgstr ""
-
-#: builtin/commit.c:1101
-msgid "Paths with -a does not make sense."
-msgstr ""
-
-#: builtin/commit.c:1280
-msgid "couldn't look up newly created commit"
-msgstr ""
-
-#: builtin/commit.c:1282
-msgid "could not parse newly created commit"
-msgstr ""
-
-#: builtin/commit.c:1323
-msgid "detached HEAD"
-msgstr ""
-
-#: builtin/commit.c:1325
-msgid " (root-commit)"
-msgstr ""
-
-#: builtin/commit.c:1415
-msgid "could not parse HEAD commit"
-msgstr ""
-
-#: builtin/commit.c:1452 builtin/merge.c:509
-#, c-format
-msgid "could not open '%s' for reading"
-msgstr ""
-
-#: builtin/commit.c:1459
-#, c-format
-msgid "Corrupt MERGE_HEAD file (%s)"
-msgstr ""
-
-#: builtin/commit.c:1466
-msgid "could not read MERGE_MODE"
-msgstr ""
-
-#: builtin/commit.c:1485
-#, c-format
-msgid "could not read commit message: %s"
-msgstr ""
-
-#: builtin/commit.c:1499
-#, c-format
-msgid "Aborting commit due to empty commit message.\n"
-msgstr ""
-
-#: builtin/commit.c:1514 builtin/merge.c:935 builtin/merge.c:968
-msgid "failed to write commit object"
-msgstr ""
-
-#: builtin/commit.c:1535
-msgid "cannot lock HEAD ref"
-msgstr ""
-
-#: builtin/commit.c:1539
-msgid "cannot update HEAD ref"
-msgstr ""
-
-#: builtin/commit.c:1550
-msgid ""
-"Repository has been updated, but unable to write\n"
-"new_index file. Check that disk is not full or quota is\n"
-"not exceeded, and then \"git reset HEAD\" to recover."
-msgstr ""
-
-#: builtin/describe.c:234
-#, c-format
-msgid "annotated tag %s not available"
-msgstr ""
-
-#: builtin/describe.c:238
-#, c-format
-msgid "annotated tag %s has no embedded name"
-msgstr ""
-
-#: builtin/describe.c:240
-#, c-format
-msgid "tag '%s' is really '%s' here"
-msgstr ""
-
-#: builtin/describe.c:267
-#, c-format
-msgid "Not a valid object name %s"
-msgstr ""
-
-#: builtin/describe.c:270
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr ""
-
-#: builtin/describe.c:287
-#, c-format
-msgid "no tag exactly matches '%s'"
-msgstr ""
-
-#: builtin/describe.c:289
-#, c-format
-msgid "searching to describe %s\n"
-msgstr ""
-
-#: builtin/describe.c:329
-#, c-format
-msgid "finished search at %s\n"
-msgstr ""
-
-#: builtin/describe.c:353
-#, c-format
-msgid ""
-"No annotated tags can describe '%s'.\n"
-"However, there were unannotated tags: try --tags."
-msgstr ""
-
-#: builtin/describe.c:357
-#, c-format
-msgid ""
-"No tags can describe '%s'.\n"
-"Try --always, or create some tags."
-msgstr ""
-
-#: builtin/describe.c:378
-#, c-format
-msgid "traversed %lu commits\n"
-msgstr ""
-
-#: builtin/describe.c:381
-#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-
-#: builtin/describe.c:436
-msgid "--long is incompatible with --abbrev=0"
-msgstr ""
-
-#: builtin/describe.c:462
-msgid "No names found, cannot describe anything."
-msgstr ""
-
-#: builtin/describe.c:482
-msgid "--dirty is incompatible with commit-ishes"
-msgstr ""
-
-#: builtin/diff.c:77
-#, c-format
-msgid "'%s': not a regular file or symlink"
-msgstr ""
-
-#: builtin/diff.c:220
-#, c-format
-msgid "invalid option: %s"
-msgstr ""
-
-#: builtin/diff.c:297
-msgid "Not a git repository"
-msgstr ""
-
-#: builtin/diff.c:347
-#, c-format
-msgid "invalid object '%s' given."
-msgstr ""
-
-#: builtin/diff.c:352
-#, c-format
-msgid "more than %d trees given: '%s'"
-msgstr ""
-
-#: builtin/diff.c:362
-#, c-format
-msgid "more than two blobs given: '%s'"
-msgstr ""
-
-#: builtin/diff.c:370
-#, c-format
-msgid "unhandled object '%s' given."
-msgstr ""
-
-#: builtin/fetch.c:200
-msgid "Couldn't find remote ref HEAD"
-msgstr ""
-
-#: builtin/fetch.c:252
-#, c-format
-msgid "object %s not found"
-msgstr ""
-
-#: builtin/fetch.c:258
-msgid "[up to date]"
-msgstr ""
-
-#: builtin/fetch.c:272
-#, c-format
-msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
-msgstr ""
-
-#: builtin/fetch.c:273 builtin/fetch.c:351
-msgid "[rejected]"
-msgstr ""
-
-#: builtin/fetch.c:284
-msgid "[tag update]"
-msgstr ""
-
-#: builtin/fetch.c:286 builtin/fetch.c:313 builtin/fetch.c:331
-msgid " (unable to update local ref)"
-msgstr ""
-
-#: builtin/fetch.c:298
-msgid "[new tag]"
-msgstr ""
-
-#: builtin/fetch.c:302
-msgid "[new branch]"
-msgstr ""
-
-#: builtin/fetch.c:347
-msgid "unable to update local ref"
-msgstr ""
-
-#: builtin/fetch.c:347
-msgid "forced update"
-msgstr ""
-
-#: builtin/fetch.c:353
-msgid "(non-fast-forward)"
-msgstr ""
-
-#: builtin/fetch.c:384 builtin/fetch.c:676
-#, c-format
-msgid "cannot open %s: %s\n"
-msgstr ""
-
-#: builtin/fetch.c:393
-#, c-format
-msgid "%s did not send all necessary objects\n"
-msgstr ""
-
-#: builtin/fetch.c:479
-#, c-format
-msgid "From %.*s\n"
-msgstr ""
-
-#: builtin/fetch.c:490
-#, c-format
-msgid ""
-"some local refs could not be updated; try running\n"
-" 'git remote prune %s' to remove any old, conflicting branches"
-msgstr ""
-
-#: builtin/fetch.c:540
-#, c-format
-msgid " (%s will become dangling)\n"
-msgstr ""
-
-#: builtin/fetch.c:541
-#, c-format
-msgid " (%s has become dangling)\n"
-msgstr ""
-
-#: builtin/fetch.c:548
-msgid "[deleted]"
-msgstr ""
-
-#: builtin/fetch.c:549
-msgid "(none)"
-msgstr ""
-
-#: builtin/fetch.c:666
-#, c-format
-msgid "Refusing to fetch into current branch %s of non-bare repository"
-msgstr ""
-
-#: builtin/fetch.c:700
-#, c-format
-msgid "Don't know how to fetch from %s"
-msgstr ""
-
-#: builtin/fetch.c:777
-#, c-format
-msgid "Option \"%s\" value \"%s\" is not valid for %s"
-msgstr ""
-
-#: builtin/fetch.c:780
-#, c-format
-msgid "Option \"%s\" is ignored for %s\n"
-msgstr ""
-
-#: builtin/fetch.c:879
-#, c-format
-msgid "Fetching %s\n"
-msgstr ""
-
-#: builtin/fetch.c:881
-#, c-format
-msgid "Could not fetch %s"
-msgstr ""
-
-#: builtin/fetch.c:898
-msgid ""
-"No remote repository specified. Please, specify either a URL or a\n"
-"remote name from which new revisions should be fetched."
-msgstr ""
-
-#: builtin/fetch.c:918
-msgid "You need to specify a tag name."
-msgstr ""
-
-#: builtin/fetch.c:970
-msgid "fetch --all does not take a repository argument"
-msgstr ""
-
-#: builtin/fetch.c:972
-msgid "fetch --all does not make sense with refspecs"
-msgstr ""
-
-#: builtin/fetch.c:983
-#, c-format
-msgid "No such remote or remote group: %s"
-msgstr ""
-
-#: builtin/fetch.c:991
-msgid "Fetching a group and specifying refspecs does not make sense"
-msgstr ""
-
-#: builtin/gc.c:63
-#, c-format
-msgid "Invalid %s: '%s'"
-msgstr ""
-
-#: builtin/gc.c:78
-msgid "Too many options specified"
-msgstr ""
-
-#: builtin/gc.c:103
-#, c-format
-msgid "insanely long object directory %.*s"
-msgstr ""
-
-#: builtin/gc.c:223
-#, c-format
-msgid "Auto packing the repository for optimum performance.\n"
-msgstr ""
-
-#: builtin/gc.c:226
-#, c-format
-msgid ""
-"Auto packing the repository for optimum performance. You may also\n"
-"run \"git gc\" manually. See \"git help gc\" for more information.\n"
-msgstr ""
-
-#: builtin/gc.c:256
-msgid ""
-"There are too many unreachable loose objects; run 'git prune' to remove them."
-msgstr ""
-
-#: builtin/grep.c:216
-#, c-format
-msgid "grep: failed to create thread: %s"
-msgstr ""
-
-#: builtin/grep.c:402
-#, c-format
-msgid "Failed to chdir: %s"
-msgstr ""
-
-#: builtin/grep.c:478 builtin/grep.c:512
-#, c-format
-msgid "unable to read tree (%s)"
-msgstr ""
-
-#: builtin/grep.c:526
-#, c-format
-msgid "unable to grep from object of type %s"
-msgstr ""
-
-#: builtin/grep.c:584
-#, c-format
-msgid "switch `%c' expects a numerical value"
-msgstr ""
-
-#: builtin/grep.c:601
-#, c-format
-msgid "cannot open '%s'"
-msgstr ""
-
-#: builtin/grep.c:888
-msgid "no pattern given."
-msgstr ""
-
-#: builtin/grep.c:902
-#, c-format
-msgid "bad object %s"
-msgstr ""
-
-#: builtin/grep.c:943
-msgid "--open-files-in-pager only works on the worktree"
-msgstr ""
-
-#: builtin/grep.c:966
-msgid "--cached or --untracked cannot be used with --no-index."
-msgstr ""
-
-#: builtin/grep.c:971
-msgid "--no-index or --untracked cannot be used with revs."
-msgstr ""
-
-#: builtin/grep.c:974
-msgid "--[no-]exclude-standard cannot be used for tracked contents."
-msgstr ""
-
-#: builtin/grep.c:982
-msgid "both --cached and trees are given."
-msgstr ""
-
-#: builtin/init-db.c:35
-#, c-format
-msgid "Could not make %s writable by group"
-msgstr ""
-
-#: builtin/init-db.c:62
-#, c-format
-msgid "insanely long template name %s"
-msgstr ""
-
-#: builtin/init-db.c:67
-#, c-format
-msgid "cannot stat '%s'"
-msgstr ""
-
-#: builtin/init-db.c:73
-#, c-format
-msgid "cannot stat template '%s'"
-msgstr ""
-
-#: builtin/init-db.c:80
-#, c-format
-msgid "cannot opendir '%s'"
-msgstr ""
-
-#: builtin/init-db.c:97
-#, c-format
-msgid "cannot readlink '%s'"
-msgstr ""
-
-#: builtin/init-db.c:99
-#, c-format
-msgid "insanely long symlink %s"
-msgstr ""
-
-#: builtin/init-db.c:102
-#, c-format
-msgid "cannot symlink '%s' '%s'"
-msgstr ""
-
-#: builtin/init-db.c:106
-#, c-format
-msgid "cannot copy '%s' to '%s'"
-msgstr ""
-
-#: builtin/init-db.c:110
-#, c-format
-msgid "ignoring template %s"
-msgstr ""
-
-#: builtin/init-db.c:133
-#, c-format
-msgid "insanely long template path %s"
-msgstr ""
-
-#: builtin/init-db.c:141
-#, c-format
-msgid "templates not found %s"
-msgstr ""
-
-#: builtin/init-db.c:154
-#, c-format
-msgid "not copying templates of a wrong format version %d from '%s'"
-msgstr ""
-
-#: builtin/init-db.c:192
-#, c-format
-msgid "insane git directory %s"
-msgstr ""
-
-#: builtin/init-db.c:322 builtin/init-db.c:325
-#, c-format
-msgid "%s already exists"
-msgstr ""
-
-#: builtin/init-db.c:354
-#, c-format
-msgid "unable to handle file type %d"
-msgstr ""
-
-#: builtin/init-db.c:357
-#, c-format
-msgid "unable to move %s to %s"
-msgstr ""
-
-#: builtin/init-db.c:362
-#, c-format
-msgid "Could not create git link %s"
-msgstr ""
-
-#.
-#. * TRANSLATORS: The first '%s' is either "Reinitialized
-#. * existing" or "Initialized empty", the second " shared" or
-#. * "", and the last '%s%s' is the verbatim directory name.
-#.
-#: builtin/init-db.c:419
-#, c-format
-msgid "%s%s Git repository in %s%s\n"
-msgstr ""
-
-#: builtin/init-db.c:420
-msgid "Reinitialized existing"
-msgstr ""
-
-#: builtin/init-db.c:420
-msgid "Initialized empty"
-msgstr ""
-
-#: builtin/init-db.c:421
-msgid " shared"
-msgstr ""
-
-#: builtin/init-db.c:440
-msgid "cannot tell cwd"
-msgstr ""
-
-#: builtin/init-db.c:521 builtin/init-db.c:528
-#, c-format
-msgid "cannot mkdir %s"
-msgstr ""
-
-#: builtin/init-db.c:532
-#, c-format
-msgid "cannot chdir to %s"
-msgstr ""
-
-#: builtin/init-db.c:554
-#, c-format
-msgid ""
-"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
-"dir=<directory>)"
-msgstr ""
-
-#: builtin/init-db.c:578
-msgid "Cannot access current working directory"
-msgstr ""
-
-#: builtin/init-db.c:585
-#, c-format
-msgid "Cannot access work tree '%s'"
-msgstr ""
-
-#: builtin/log.c:187
-#, c-format
-msgid "Final output: %d %s\n"
-msgstr ""
-
-#: builtin/log.c:395 builtin/log.c:483
-#, c-format
-msgid "Could not read object %s"
-msgstr ""
-
-#: builtin/log.c:507
-#, c-format
-msgid "Unknown type: %d"
-msgstr ""
-
-#: builtin/log.c:596
-msgid "format.headers without value"
-msgstr ""
-
-#: builtin/log.c:669
-msgid "name of output directory is too long"
-msgstr ""
-
-#: builtin/log.c:680
-#, c-format
-msgid "Cannot open patch file %s"
-msgstr ""
-
-#: builtin/log.c:694
-msgid "Need exactly one range."
-msgstr ""
-
-#: builtin/log.c:702
-msgid "Not a range."
-msgstr ""
-
-#: builtin/log.c:739
-msgid "Could not extract email from committer identity."
-msgstr ""
-
-#: builtin/log.c:785
-msgid "Cover letter needs email format"
-msgstr ""
-
-#: builtin/log.c:879
-#, c-format
-msgid "insane in-reply-to: %s"
-msgstr ""
-
-#: builtin/log.c:952
-msgid "Two output directories?"
-msgstr ""
-
-#: builtin/log.c:1173
-#, c-format
-msgid "bogus committer info %s"
-msgstr ""
-
-#: builtin/log.c:1218
-msgid "-n and -k are mutually exclusive."
-msgstr ""
-
-#: builtin/log.c:1220
-msgid "--subject-prefix and -k are mutually exclusive."
-msgstr ""
-
-#: builtin/log.c:1225 builtin/shortlog.c:284
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr ""
-
-#: builtin/log.c:1228
-msgid "--name-only does not make sense"
-msgstr ""
-
-#: builtin/log.c:1230
-msgid "--name-status does not make sense"
-msgstr ""
-
-#: builtin/log.c:1232
-msgid "--check does not make sense"
-msgstr ""
-
-#: builtin/log.c:1255
-msgid "standard output, or directory, which one?"
-msgstr ""
-
-#: builtin/log.c:1257
-#, c-format
-msgid "Could not create directory '%s'"
-msgstr ""
-
-#: builtin/log.c:1410
-msgid "Failed to create output files"
-msgstr ""
-
-#: builtin/log.c:1514
-#, c-format
-msgid ""
-"Could not find a tracked remote branch, please specify <upstream> manually.\n"
-msgstr ""
-
-#: builtin/log.c:1530 builtin/log.c:1532 builtin/log.c:1544
-#, c-format
-msgid "Unknown commit %s"
-msgstr ""
-
-#: builtin/merge.c:91
-msgid "switch `m' requires a value"
-msgstr ""
-
-#: builtin/merge.c:128
-#, c-format
-msgid "Could not find merge strategy '%s'.\n"
-msgstr ""
-
-#: builtin/merge.c:129
-#, c-format
-msgid "Available strategies are:"
-msgstr ""
-
-#: builtin/merge.c:134
-#, c-format
-msgid "Available custom strategies are:"
-msgstr ""
-
-#: builtin/merge.c:241
-msgid "could not run stash."
-msgstr ""
-
-#: builtin/merge.c:246
-msgid "stash failed"
-msgstr ""
-
-#: builtin/merge.c:251
-#, c-format
-msgid "not a valid object: %s"
-msgstr ""
-
-#: builtin/merge.c:270 builtin/merge.c:287
-msgid "read-tree failed"
-msgstr ""
-
-#: builtin/merge.c:317
-msgid " (nothing to squash)"
-msgstr ""
-
-#: builtin/merge.c:330
-#, c-format
-msgid "Squash commit -- not updating HEAD\n"
-msgstr ""
-
-#: builtin/merge.c:362
-msgid "Writing SQUASH_MSG"
-msgstr ""
-
-#: builtin/merge.c:364
-msgid "Finishing SQUASH_MSG"
-msgstr ""
-
-#: builtin/merge.c:386
-#, c-format
-msgid "No merge message -- not updating HEAD\n"
-msgstr ""
-
-#: builtin/merge.c:437
-#, c-format
-msgid "'%s' does not point to a commit"
-msgstr ""
-
-#: builtin/merge.c:536
-#, c-format
-msgid "Bad branch.%s.mergeoptions string: %s"
-msgstr ""
-
-#: builtin/merge.c:629
-msgid "git write-tree failed to write a tree"
-msgstr ""
-
-#: builtin/merge.c:679
-msgid "failed to read the cache"
-msgstr ""
-
-#: builtin/merge.c:696
-msgid "Unable to write index."
-msgstr ""
-
-#: builtin/merge.c:709
-msgid "Not handling anything other than two heads merge."
-msgstr ""
-
-#: builtin/merge.c:723
-#, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr ""
-
-#: builtin/merge.c:737
-#, c-format
-msgid "unable to write %s"
-msgstr ""
-
-#: builtin/merge.c:876
-#, c-format
-msgid "Could not read from '%s'"
-msgstr ""
-
-#: builtin/merge.c:885
-#, c-format
-msgid "Not committing merge; use 'git commit' to complete the merge.\n"
-msgstr ""
-
-#: builtin/merge.c:891
-msgid ""
-"Please enter a commit message to explain why this merge is necessary,\n"
-"especially if it merges an updated upstream into a topic branch.\n"
-"\n"
-"Lines starting with '#' will be ignored, and an empty message aborts\n"
-"the commit.\n"
-msgstr ""
-
-#: builtin/merge.c:915
-msgid "Empty commit message."
-msgstr ""
-
-#: builtin/merge.c:927
-#, c-format
-msgid "Wonderful.\n"
-msgstr ""
-
-#: builtin/merge.c:1000
-#, c-format
-msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
-msgstr ""
-
-#: builtin/merge.c:1016
-#, c-format
-msgid "'%s' is not a commit"
-msgstr ""
-
-#: builtin/merge.c:1057
-msgid "No current branch."
-msgstr ""
-
-#: builtin/merge.c:1059
-msgid "No remote for the current branch."
-msgstr ""
-
-#: builtin/merge.c:1061
-msgid "No default upstream defined for the current branch."
-msgstr ""
-
-#: builtin/merge.c:1066
-#, c-format
-msgid "No remote tracking branch for %s from %s"
-msgstr ""
-
-#: builtin/merge.c:1188
-msgid "There is no merge to abort (MERGE_HEAD missing)."
-msgstr ""
-
-#: builtin/merge.c:1204 git-pull.sh:31
-msgid ""
-"You have not concluded your merge (MERGE_HEAD exists).\n"
-"Please, commit your changes before you can merge."
-msgstr ""
-
-#: builtin/merge.c:1207 git-pull.sh:34
-msgid "You have not concluded your merge (MERGE_HEAD exists)."
-msgstr ""
-
-#: builtin/merge.c:1211
-msgid ""
-"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
-"Please, commit your changes before you can merge."
-msgstr ""
-
-#: builtin/merge.c:1214
-msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
-msgstr ""
-
-#: builtin/merge.c:1223
-msgid "You cannot combine --squash with --no-ff."
-msgstr ""
-
-#: builtin/merge.c:1228
-msgid "You cannot combine --no-ff with --ff-only."
-msgstr ""
-
-#: builtin/merge.c:1235
-msgid "No commit specified and merge.defaultToUpstream not set."
-msgstr ""
-
-#: builtin/merge.c:1266
-msgid "Can merge only exactly one commit into empty head"
-msgstr ""
-
-#: builtin/merge.c:1269
-msgid "Squash commit into empty head not supported yet"
-msgstr ""
-
-#: builtin/merge.c:1271
-msgid "Non-fast-forward commit does not make sense into an empty head"
-msgstr ""
-
-#: builtin/merge.c:1275 builtin/merge.c:1319
-#, c-format
-msgid "%s - not something we can merge"
-msgstr ""
-
-#: builtin/merge.c:1385
-#, c-format
-msgid "Updating %s..%s\n"
-msgstr ""
-
-#: builtin/merge.c:1423
-#, c-format
-msgid "Trying really trivial in-index merge...\n"
-msgstr ""
-
-#: builtin/merge.c:1430
-#, c-format
-msgid "Nope.\n"
-msgstr ""
-
-#: builtin/merge.c:1462
-msgid "Not possible to fast-forward, aborting."
-msgstr ""
-
-#: builtin/merge.c:1485 builtin/merge.c:1562
-#, c-format
-msgid "Rewinding the tree to pristine...\n"
-msgstr ""
-
-#: builtin/merge.c:1489
-#, c-format
-msgid "Trying merge strategy %s...\n"
-msgstr ""
-
-#: builtin/merge.c:1553
-#, c-format
-msgid "No merge strategy handled the merge.\n"
-msgstr ""
-
-#: builtin/merge.c:1555
-#, c-format
-msgid "Merge with strategy %s failed.\n"
-msgstr ""
-
-#: builtin/merge.c:1564
-#, c-format
-msgid "Using the %s to prepare resolving by hand.\n"
-msgstr ""
-
-#: builtin/merge.c:1575
-#, c-format
-msgid "Automatic merge went well; stopped before committing as requested\n"
-msgstr ""
-
-#: builtin/mv.c:108
-#, c-format
-msgid "Checking rename of '%s' to '%s'\n"
-msgstr ""
-
-#: builtin/mv.c:112
-msgid "bad source"
-msgstr ""
-
-#: builtin/mv.c:115
-msgid "can not move directory into itself"
-msgstr ""
-
-#: builtin/mv.c:118
-msgid "cannot move directory over file"
-msgstr ""
-
-#: builtin/mv.c:128
-#, c-format
-msgid "Huh? %.*s is in index?"
-msgstr ""
-
-#: builtin/mv.c:140
-msgid "source directory is empty"
-msgstr ""
-
-#: builtin/mv.c:171
-msgid "not under version control"
-msgstr ""
-
-#: builtin/mv.c:173
-msgid "destination exists"
-msgstr ""
-
-#: builtin/mv.c:181
-#, c-format
-msgid "overwriting '%s'"
-msgstr ""
-
-#: builtin/mv.c:184
-msgid "Cannot overwrite"
-msgstr ""
-
-#: builtin/mv.c:187
-msgid "multiple sources for the same target"
-msgstr ""
-
-#: builtin/mv.c:202
-#, c-format
-msgid "%s, source=%s, destination=%s"
-msgstr ""
-
-#: builtin/mv.c:212
-#, c-format
-msgid "Renaming %s to %s\n"
-msgstr ""
-
-#: builtin/mv.c:215
-#, c-format
-msgid "renaming '%s' failed"
-msgstr ""
-
-#: builtin/notes.c:139
-#, c-format
-msgid "unable to start 'show' for object '%s'"
-msgstr ""
-
-#: builtin/notes.c:145
-msgid "can't fdopen 'show' output fd"
-msgstr ""
-
-#: builtin/notes.c:155
-#, c-format
-msgid "failed to close pipe to 'show' for object '%s'"
-msgstr ""
-
-#: builtin/notes.c:158
-#, c-format
-msgid "failed to finish 'show' for object '%s'"
-msgstr ""
-
-#: builtin/notes.c:175 builtin/tag.c:343
-#, c-format
-msgid "could not create file '%s'"
-msgstr ""
-
-#: builtin/notes.c:189
-msgid "Please supply the note contents using either -m or -F option"
-msgstr ""
-
-#: builtin/notes.c:210 builtin/notes.c:973
-#, c-format
-msgid "Removing note for object %s\n"
-msgstr ""
-
-#: builtin/notes.c:215
-msgid "unable to write note object"
-msgstr ""
-
-#: builtin/notes.c:217
-#, c-format
-msgid "The note contents has been left in %s"
-msgstr ""
-
-#: builtin/notes.c:251 builtin/tag.c:521
-#, c-format
-msgid "cannot read '%s'"
-msgstr ""
-
-#: builtin/notes.c:253 builtin/tag.c:524
-#, c-format
-msgid "could not open or read '%s'"
-msgstr ""
-
-#: builtin/notes.c:272 builtin/notes.c:445 builtin/notes.c:447
-#: builtin/notes.c:507 builtin/notes.c:561 builtin/notes.c:644
-#: builtin/notes.c:649 builtin/notes.c:724 builtin/notes.c:766
-#: builtin/notes.c:968 builtin/reset.c:293 builtin/tag.c:537
-#, c-format
-msgid "Failed to resolve '%s' as a valid ref."
-msgstr ""
-
-#: builtin/notes.c:275
-#, c-format
-msgid "Failed to read object '%s'."
-msgstr ""
-
-#: builtin/notes.c:299
-msgid "Cannot commit uninitialized/unreferenced notes tree"
-msgstr ""
-
-#: builtin/notes.c:340
-#, c-format
-msgid "Bad notes.rewriteMode value: '%s'"
-msgstr ""
-
-#: builtin/notes.c:350
-#, c-format
-msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
-msgstr ""
-
-#. TRANSLATORS: The first %s is the name of the
-#. environment variable, the second %s is its value
-#: builtin/notes.c:377
-#, c-format
-msgid "Bad %s value: '%s'"
-msgstr ""
-
-#: builtin/notes.c:441
-#, c-format
-msgid "Malformed input line: '%s'."
-msgstr ""
-
-#: builtin/notes.c:456
-#, c-format
-msgid "Failed to copy notes from '%s' to '%s'"
-msgstr ""
-
-#: builtin/notes.c:500 builtin/notes.c:554 builtin/notes.c:627
-#: builtin/notes.c:639 builtin/notes.c:712 builtin/notes.c:759
-#: builtin/notes.c:1033
-msgid "too many parameters"
-msgstr ""
-
-#: builtin/notes.c:513 builtin/notes.c:772
-#, c-format
-msgid "No note found for object %s."
-msgstr ""
-
-#: builtin/notes.c:580
-#, c-format
-msgid ""
-"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
-msgstr ""
-
-#: builtin/notes.c:585 builtin/notes.c:662
-#, c-format
-msgid "Overwriting existing notes for object %s\n"
-msgstr ""
-
-#: builtin/notes.c:635
-msgid "too few parameters"
-msgstr ""
-
-#: builtin/notes.c:656
-#, c-format
-msgid ""
-"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
-msgstr ""
-
-#: builtin/notes.c:668
-#, c-format
-msgid "Missing notes on source object %s. Cannot copy."
-msgstr ""
-
-#: builtin/notes.c:717
-#, c-format
-msgid ""
-"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
-"Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
-msgstr ""
-
-#: builtin/notes.c:971
-#, c-format
-msgid "Object %s has no note\n"
-msgstr ""
-
-#: builtin/notes.c:1103
-#, c-format
-msgid "Unknown subcommand: %s"
-msgstr ""
-
-#: builtin/pack-objects.c:2310
-#, c-format
-msgid "unsupported index version %s"
-msgstr ""
-
-#: builtin/pack-objects.c:2314
-#, c-format
-msgid "bad index version '%s'"
-msgstr ""
-
-#: builtin/pack-objects.c:2322
-#, c-format
-msgid "option %s does not accept negative form"
-msgstr ""
-
-#: builtin/pack-objects.c:2326
-#, c-format
-msgid "unable to parse value '%s' for option %s"
-msgstr ""
-
-#: builtin/push.c:44
-msgid "tag shorthand without <tag>"
-msgstr ""
-
-#: builtin/push.c:63
-msgid "--delete only accepts plain target ref names"
-msgstr ""
-
-#: builtin/push.c:73
-#, c-format
-msgid ""
-"You are not currently on a branch.\n"
-"To push the history leading to the current (detached HEAD)\n"
-"state now, use\n"
-"\n"
-" git push %s HEAD:<name-of-remote-branch>\n"
-msgstr ""
-
-#: builtin/push.c:80
-#, c-format
-msgid ""
-"The current branch %s has no upstream branch.\n"
-"To push the current branch and set the remote as upstream, use\n"
-"\n"
-" git push --set-upstream %s %s\n"
-msgstr ""
-
-#: builtin/push.c:88
-#, c-format
-msgid "The current branch %s has multiple upstream branches, refusing to push."
-msgstr ""
-
-#: builtin/push.c:111
-msgid ""
-"You didn't specify any refspecs to push, and push.default is \"nothing\"."
-msgstr ""
-
-#: builtin/push.c:131
-#, c-format
-msgid "Pushing to %s\n"
-msgstr ""
-
-#: builtin/push.c:135
-#, c-format
-msgid "failed to push some refs to '%s'"
-msgstr ""
-
-#: builtin/push.c:143
-#, c-format
-msgid ""
-"To prevent you from losing history, non-fast-forward updates were rejected\n"
-"Merge the remote changes (e.g. 'git pull') before pushing again. See the\n"
-"'Note about fast-forwards' section of 'git push --help' for details.\n"
-msgstr ""
-
-#: builtin/push.c:160
-#, c-format
-msgid "bad repository '%s'"
-msgstr ""
-
-#: builtin/push.c:161
-msgid ""
-"No configured push destination.\n"
-"Either specify the URL from the command-line or configure a remote "
-"repository using\n"
-"\n"
-" git remote add <name> <url>\n"
-"\n"
-"and then push using the remote name\n"
-"\n"
-" git push <name>\n"
-msgstr ""
-
-#: builtin/push.c:176
-msgid "--all and --tags are incompatible"
-msgstr ""
-
-#: builtin/push.c:177
-msgid "--all can't be combined with refspecs"
-msgstr ""
-
-#: builtin/push.c:182
-msgid "--mirror and --tags are incompatible"
-msgstr ""
-
-#: builtin/push.c:183
-msgid "--mirror can't be combined with refspecs"
-msgstr ""
-
-#: builtin/push.c:188
-msgid "--all and --mirror are incompatible"
-msgstr ""
-
-#: builtin/push.c:274
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr ""
-
-#: builtin/push.c:276
-msgid "--delete doesn't make sense without any refs"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "mixed"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "soft"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "hard"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "keep"
-msgstr ""
-
-#: builtin/reset.c:77
-msgid "You do not have a valid HEAD."
-msgstr ""
-
-#: builtin/reset.c:79
-msgid "Failed to find tree of HEAD."
-msgstr ""
-
-#: builtin/reset.c:85
-#, c-format
-msgid "Failed to find tree of %s."
-msgstr ""
-
-#: builtin/reset.c:96
-msgid "Could not write new index file."
-msgstr ""
-
-#: builtin/reset.c:106
-#, c-format
-msgid "HEAD is now at %s"
-msgstr ""
-
-#: builtin/reset.c:130
-msgid "Could not read index"
-msgstr ""
-
-#: builtin/reset.c:133
-msgid "Unstaged changes after reset:"
-msgstr ""
-
-#: builtin/reset.c:223
-#, c-format
-msgid "Cannot do a %s reset in the middle of a merge."
-msgstr ""
-
-#: builtin/reset.c:297
-#, c-format
-msgid "Could not parse object '%s'."
-msgstr ""
-
-#: builtin/reset.c:302
-msgid "--patch is incompatible with --{hard,mixed,soft}"
-msgstr ""
-
-#: builtin/reset.c:311
-msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
-msgstr ""
-
-#: builtin/reset.c:313
-#, c-format
-msgid "Cannot do %s reset with paths."
-msgstr ""
-
-#: builtin/reset.c:325
-#, c-format
-msgid "%s reset is not allowed in a bare repository"
-msgstr ""
-
-#: builtin/reset.c:341
-#, c-format
-msgid "Could not reset index file to revision '%s'."
-msgstr ""
-
-#: builtin/revert.c:70 builtin/revert.c:91
-#, c-format
-msgid "%s: %s cannot be used with %s"
-msgstr ""
-
-#: builtin/revert.c:126
-msgid "program error"
-msgstr ""
-
-#: builtin/revert.c:209
-msgid "revert failed"
-msgstr ""
-
-#: builtin/revert.c:224
-msgid "cherry-pick failed"
-msgstr ""
-
-#: builtin/rm.c:109
-#, c-format
-msgid ""
-"'%s' has staged content different from both the file and the HEAD\n"
-"(use -f to force removal)"
-msgstr ""
-
-#: builtin/rm.c:115
-#, c-format
-msgid ""
-"'%s' has changes staged in the index\n"
-"(use --cached to keep the file, or -f to force removal)"
-msgstr ""
-
-#: builtin/rm.c:119
-#, c-format
-msgid ""
-"'%s' has local modifications\n"
-"(use --cached to keep the file, or -f to force removal)"
-msgstr ""
-
-#: builtin/rm.c:194
-#, c-format
-msgid "not removing '%s' recursively without -r"
-msgstr ""
-
-#: builtin/rm.c:230
-#, c-format
-msgid "git rm: unable to remove %s"
-msgstr ""
-
-#: builtin/shortlog.c:157
-#, c-format
-msgid "Missing author: %s"
-msgstr ""
-
-#: builtin/tag.c:58
-#, c-format
-msgid "malformed object at '%s'"
-msgstr ""
-
-#: builtin/tag.c:205
-#, c-format
-msgid "tag name too long: %.*s..."
-msgstr ""
-
-#: builtin/tag.c:210
-#, c-format
-msgid "tag '%s' not found."
-msgstr ""
-
-#: builtin/tag.c:225
-#, c-format
-msgid "Deleted tag '%s' (was %s)\n"
-msgstr ""
-
-#: builtin/tag.c:237
-#, c-format
-msgid "could not verify the tag '%s'"
-msgstr ""
-
-#: builtin/tag.c:247
-msgid ""
-"\n"
-"#\n"
-"# Write a tag message\n"
-"# Lines starting with '#' will be ignored.\n"
-"#\n"
-msgstr ""
-
-#: builtin/tag.c:254
-msgid ""
-"\n"
-"#\n"
-"# Write a tag message\n"
-"# Lines starting with '#' will be kept; you may remove them yourself if you "
-"want to.\n"
-"#\n"
-msgstr ""
-
-#: builtin/tag.c:294
-msgid "unable to sign the tag"
-msgstr ""
-
-#: builtin/tag.c:296
-msgid "unable to write tag file"
-msgstr ""
-
-#: builtin/tag.c:321
-msgid "bad object type."
-msgstr ""
-
-#: builtin/tag.c:334
-msgid "tag header too big."
-msgstr ""
-
-#: builtin/tag.c:366
-msgid "no tag message?"
-msgstr ""
-
-#: builtin/tag.c:372
-#, c-format
-msgid "The tag message has been left in %s\n"
-msgstr ""
-
-#: builtin/tag.c:421
-msgid "switch 'points-at' requires an object"
-msgstr ""
-
-#: builtin/tag.c:423
-#, c-format
-msgid "malformed object name '%s'"
-msgstr ""
-
-#: builtin/tag.c:502
-msgid "-n option is only allowed with -l."
-msgstr ""
-
-#: builtin/tag.c:504
-msgid "--contains option is only allowed with -l."
-msgstr ""
-
-#: builtin/tag.c:506
-msgid "--points-at option is only allowed with -l."
-msgstr ""
-
-#: builtin/tag.c:514
-msgid "only one -F or -m option is allowed."
-msgstr ""
-
-#: builtin/tag.c:534
-msgid "too many params"
-msgstr ""
-
-#: builtin/tag.c:540
-#, c-format
-msgid "'%s' is not a valid tag name."
-msgstr ""
-
-#: builtin/tag.c:545
-#, c-format
-msgid "tag '%s' already exists"
-msgstr ""
-
-#: builtin/tag.c:563
-#, c-format
-msgid "%s: cannot lock the ref"
-msgstr ""
-
-#: builtin/tag.c:565
-#, c-format
-msgid "%s: cannot update the ref"
-msgstr ""
-
-#: builtin/tag.c:567
-#, c-format
-msgid "Updated tag '%s' (was %s)\n"
-msgstr ""
-
-#: git-am.sh:49
-msgid "You need to set your committer info first"
-msgstr ""
-
-#: git-am.sh:136
-msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr ""
-
-#: git-am.sh:147
-msgid ""
-"Did you hand edit your patch?\n"
-"It does not apply to blobs recorded in its index."
-msgstr ""
-
-#: git-am.sh:156
-msgid "Falling back to patching base and 3-way merge..."
-msgstr ""
-
-#: git-am.sh:268
-msgid "Only one StGIT patch series can be applied at once"
-msgstr ""
-
-#: git-am.sh:355
-#, sh-format
-msgid "Patch format $patch_format is not supported."
-msgstr ""
-
-#: git-am.sh:357
-msgid "Patch format detection failed."
-msgstr ""
-
-#: git-am.sh:411
-msgid "-d option is no longer supported. Do not use."
-msgstr ""
-
-#: git-am.sh:474
-#, sh-format
-msgid "previous rebase directory $dotest still exists but mbox given."
-msgstr ""
-
-#: git-am.sh:479
-msgid "Please make up your mind. --skip or --abort?"
-msgstr ""
-
-#: git-am.sh:506
-msgid "Resolve operation not in progress, we are not resuming."
-msgstr ""
-
-#: git-am.sh:572
-#, sh-format
-msgid "Dirty index: cannot apply patches (dirty: $files)"
-msgstr ""
-
-#: git-am.sh:748
-msgid "cannot be interactive without stdin connected to a terminal."
-msgstr ""
-
-#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
-#. in your translation. The program will only accept English
-#. input at this point.
-#: git-am.sh:759
-msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
-msgstr ""
-
-#: git-am.sh:795
-#, sh-format
-msgid "Applying: $FIRSTLINE"
-msgstr ""
-
-#: git-am.sh:840
-msgid "No changes -- Patch already applied."
-msgstr ""
-
-#: git-am.sh:866
-msgid "applying to an empty history"
-msgstr ""
-
-#. TRANSLATORS: Make sure to include [Y] and [n] in your
-#. translation. The program will only accept English input
-#. at this point.
-#: git-bisect.sh:54
-msgid "Do you want me to do it for you [Y/n]? "
-msgstr ""
-
-#: git-bisect.sh:95
-#, sh-format
-msgid "unrecognised option: '$arg'"
-msgstr ""
-
-#: git-bisect.sh:99
-#, sh-format
-msgid "'$arg' does not appear to be a valid revision"
-msgstr ""
-
-#: git-bisect.sh:117
-msgid "Bad HEAD - I need a HEAD"
-msgstr ""
-
-#: git-bisect.sh:130
-#, sh-format
-msgid ""
-"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'."
-msgstr ""
-
-#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
-msgstr ""
-
-#: git-bisect.sh:144
-msgid "Bad HEAD - strange symbolic ref"
-msgstr ""
-
-#: git-bisect.sh:189
-#, sh-format
-msgid "Bad bisect_write argument: $state"
-msgstr ""
-
-#: git-bisect.sh:218
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr ""
-
-#: git-bisect.sh:232
-msgid "Please call 'bisect_state' with at least one argument."
-msgstr ""
-
-#: git-bisect.sh:244
-#, sh-format
-msgid "Bad rev input: $rev"
-msgstr ""
-
-#: git-bisect.sh:250
-msgid "'git bisect bad' can take only one argument."
-msgstr ""
-
-#. TRANSLATORS: Make sure to include [Y] and [n] in your
-#. translation. The program will only accept English input
-#. at this point.
-#: git-bisect.sh:279
-msgid "Are you sure [Y/n]? "
-msgstr ""
-
-#: git-bisect.sh:354
-#, sh-format
-msgid "'$invalid' is not a valid commit"
-msgstr ""
-
-#: git-bisect.sh:363
-#, sh-format
-msgid ""
-"Could not check out original HEAD '$branch'.\n"
-"Try 'git bisect reset <commit>'."
-msgstr ""
-
-#: git-bisect.sh:390
-msgid "No logfile given"
-msgstr ""
-
-#: git-bisect.sh:391
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr ""
-
-#: git-bisect.sh:408
-msgid "?? what are you talking about?"
-msgstr ""
-
-#: git-bisect.sh:474
-msgid "We are not bisecting."
-msgstr ""
-
-#: git-pull.sh:21
-msgid ""
-"Pull is not possible because you have unmerged files.\n"
-"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n"
-"as appropriate to mark resolution, or use 'git commit -a'."
-msgstr ""
-
-#: git-pull.sh:25
-msgid "Pull is not possible because you have unmerged files."
-msgstr ""
-
-#: git-pull.sh:197
-msgid "updating an unborn branch with changes added to the index"
-msgstr ""
-
-#: git-pull.sh:253
-msgid "Cannot merge multiple branches into empty head"
-msgstr ""
-
-#: git-pull.sh:257
-msgid "Cannot rebase onto multiple branches"
-msgstr ""
-
-#: git-stash.sh:51
-msgid "git stash clear with parameters is unimplemented"
-msgstr ""
-
-#: git-stash.sh:74
-msgid "You do not have the initial commit yet"
-msgstr ""
-
-#: git-stash.sh:89
-msgid "Cannot save the current index state"
-msgstr ""
-
-#: git-stash.sh:123 git-stash.sh:136
-msgid "Cannot save the current worktree state"
-msgstr ""
-
-#: git-stash.sh:140
-msgid "No changes selected"
-msgstr ""
-
-#: git-stash.sh:143
-msgid "Cannot remove temporary index (can't happen)"
-msgstr ""
-
-#: git-stash.sh:156
-msgid "Cannot record working tree state"
-msgstr ""
-
-#: git-stash.sh:223
-msgid "No local changes to save"
-msgstr ""
-
-#: git-stash.sh:227
-msgid "Cannot initialize stash"
-msgstr ""
-
-#: git-stash.sh:235
-msgid "Cannot save the current status"
-msgstr ""
-
-#: git-stash.sh:253
-msgid "Cannot remove worktree changes"
-msgstr ""
-
-#: git-stash.sh:352
-msgid "No stash found."
-msgstr ""
-
-#: git-stash.sh:359
-#, sh-format
-msgid "Too many revisions specified: $REV"
-msgstr ""
-
-#: git-stash.sh:365
-#, sh-format
-msgid "$reference is not valid reference"
-msgstr ""
-
-#: git-stash.sh:393
-#, sh-format
-msgid "'$args' is not a stash-like commit"
-msgstr ""
-
-#: git-stash.sh:404
-#, sh-format
-msgid "'$args' is not a stash reference"
-msgstr ""
-
-#: git-stash.sh:412
-msgid "unable to refresh index"
-msgstr ""
-
-#: git-stash.sh:416
-msgid "Cannot apply a stash in the middle of a merge"
-msgstr ""
-
-#: git-stash.sh:424
-msgid "Conflicts in index. Try without --index."
-msgstr ""
-
-#: git-stash.sh:426
-msgid "Could not save index tree"
-msgstr ""
-
-#: git-stash.sh:460
-msgid "Cannot unstage modified files"
-msgstr ""
-
-#: git-stash.sh:491
-#, sh-format
-msgid "Dropped ${REV} ($s)"
-msgstr ""
-
-#: git-stash.sh:492
-#, sh-format
-msgid "${REV}: Could not drop stash entry"
-msgstr ""
-
-#: git-stash.sh:499
-msgid "No branch name specified"
-msgstr ""
-
-#: git-stash.sh:570
-msgid "(To restore them type \"git stash apply\")"
-msgstr ""
-
-#: git-submodule.sh:56
-#, sh-format
-msgid "cannot strip one component off url '$remoteurl'"
-msgstr ""
-
-#: git-submodule.sh:108
-#, sh-format
-msgid "No submodule mapping found in .gitmodules for path '$path'"
-msgstr ""
-
-#: git-submodule.sh:149
-#, sh-format
-msgid "Clone of '$url' into submodule path '$path' failed"
-msgstr ""
-
-#: git-submodule.sh:159
-#, sh-format
-msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa"
-msgstr ""
-
-#: git-submodule.sh:247
-#, sh-format
-msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr ""
-
-#: git-submodule.sh:264
-#, sh-format
-msgid "'$path' already exists in the index"
-msgstr ""
-
-#: git-submodule.sh:281
-#, sh-format
-msgid "'$path' already exists and is not a valid git repo"
-msgstr ""
-
-#: git-submodule.sh:295
-#, sh-format
-msgid "Unable to checkout submodule '$path'"
-msgstr ""
-
-#: git-submodule.sh:300
-#, sh-format
-msgid "Failed to add submodule '$path'"
-msgstr ""
-
-#: git-submodule.sh:305
-#, sh-format
-msgid "Failed to register submodule '$path'"
-msgstr ""
-
-#: git-submodule.sh:347
-#, sh-format
-msgid "Entering '$prefix$path'"
-msgstr ""
-
-#: git-submodule.sh:359
-#, sh-format
-msgid "Stopping at '$path'; script returned non-zero status."
-msgstr ""
-
-#: git-submodule.sh:401
-#, sh-format
-msgid "No url found for submodule path '$path' in .gitmodules"
-msgstr ""
-
-#: git-submodule.sh:410
-#, sh-format
-msgid "Failed to register url for submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:418
-#, sh-format
-msgid "Failed to register update mode for submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:420
-#, sh-format
-msgid "Submodule '$name' ($url) registered for path '$path'"
-msgstr ""
-
-#: git-submodule.sh:519
-#, sh-format
-msgid ""
-"Submodule path '$path' not initialized\n"
-"Maybe you want to use 'update --init'?"
-msgstr ""
-
-#: git-submodule.sh:532
-#, sh-format
-msgid "Unable to find current revision in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:551
-#, sh-format
-msgid "Unable to fetch in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:565
-#, sh-format
-msgid "Unable to rebase '$sha1' in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:566
-#, sh-format
-msgid "Submodule path '$path': rebased into '$sha1'"
-msgstr ""
-
-#: git-submodule.sh:571
-#, sh-format
-msgid "Unable to merge '$sha1' in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:572
-#, sh-format
-msgid "Submodule path '$path': merged in '$sha1'"
-msgstr ""
-
-#: git-submodule.sh:577
-#, sh-format
-msgid "Unable to checkout '$sha1' in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:578
-#, sh-format
-msgid "Submodule path '$path': checked out '$sha1'"
-msgstr ""
-
-#: git-submodule.sh:600 git-submodule.sh:923
-#, sh-format
-msgid "Failed to recurse into submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:708
-msgid "--"
-msgstr ""
-
-#: git-submodule.sh:766
-#, sh-format
-msgid " Warn: $name doesn't contain commit $sha1_src"
-msgstr ""
-
-#: git-submodule.sh:769
-#, sh-format
-msgid " Warn: $name doesn't contain commit $sha1_dst"
-msgstr ""
-
-#: git-submodule.sh:772
-#, sh-format
-msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst"
-msgstr ""
-
-#: git-submodule.sh:797
-msgid "blob"
-msgstr ""
-
-#: git-submodule.sh:798
-msgid "submodule"
-msgstr ""
-
-#: git-submodule.sh:969
-#, sh-format
-msgid "Synchronizing submodule url for '$name'"
-msgstr ""
diff --git a/po/de.po b/po/de.po
index c0bbb65bf..b777ef480 100644
--- a/po/de.po
+++ b/po/de.po
@@ -5,9 +5,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: git 1.8.5\n"
+"Project-Id-Version: git 1.9\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2013-11-02 08:06+0800\n"
+"POT-Creation-Date: 2014-02-01 08:06+0800\n"
"PO-Revision-Date: 2013-07-28 18:42+0200\n"
"Last-Translator: Ralf Thielow <ralf.thielow@gmail.com>\n"
"Language-Team: German <>\n"
@@ -57,7 +57,7 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote <Repository> [--exec <Programm>] --list"
-#: archive.c:242 builtin/add.c:240 builtin/add.c:556 builtin/rm.c:328
+#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
@@ -78,8 +78,8 @@ msgstr "Präfix"
msgid "prepend prefix to each pathname in the archive"
msgstr "stellt einen Präfix vor jeden Pfadnamen in dem Archiv"
-#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2264
-#: builtin/blame.c:2265 builtin/config.c:58 builtin/fast-export.c:680
+#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265
+#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680
#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77
#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408
#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154
@@ -268,64 +268,64 @@ msgstr "Fehler beim Sperren der Referenz zur Aktualisierung."
msgid "Failed to write ref"
msgstr "Fehler beim Schreiben der Referenz."
-#: bundle.c:36
+#: bundle.c:37
#, c-format
msgid "'%s' does not look like a v2 bundle file"
msgstr "'%s' sieht nicht wie eine v2 Paketdatei aus"
-#: bundle.c:63
+#: bundle.c:64
#, c-format
msgid "unrecognized header: %s%s (%d)"
msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
-#: bundle.c:89 builtin/commit.c:706
+#: bundle.c:90 builtin/commit.c:706
#, c-format
msgid "could not open '%s'"
msgstr "Konnte '%s' nicht öffnen"
-#: bundle.c:140
+#: bundle.c:141
msgid "Repository lacks these prerequisite commits:"
msgstr "Dem Repository fehlen folgende vorausgesetzte Commits:"
-#: bundle.c:164 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
-#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:364
+#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
+#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357
#: builtin/shortlog.c:158
msgid "revision walk setup failed"
msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
-#: bundle.c:186
+#: bundle.c:187
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "Das Paket enthält diese Referenz:"
msgstr[1] "Das Paket enthält diese %d Referenzen:"
-#: bundle.c:193
+#: bundle.c:194
msgid "The bundle records a complete history."
msgstr "Das Paket speichert eine komplette Historie."
-#: bundle.c:195
+#: bundle.c:196
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "Das Paket benötigt diese Referenz:"
msgstr[1] "Das Paket benötigt diese %d Referenzen:"
-#: bundle.c:294
+#: bundle.c:296
msgid "rev-list died"
msgstr "\"rev-list\" abgebrochen"
-#: bundle.c:300 builtin/log.c:1329 builtin/shortlog.c:261
+#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261
#, c-format
msgid "unrecognized argument: %s"
msgstr "nicht erkanntes Argument: %s"
-#: bundle.c:335
+#: bundle.c:337
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
-#: bundle.c:380
+#: bundle.c:382
msgid "Refusing to create empty bundle."
msgstr "Erstellung eines leeren Pakets zurückgewiesen."
@@ -360,16 +360,16 @@ msgstr "%s %s ist kein Commit!"
msgid "memory exhausted"
msgstr "Speicher verbraucht"
-#: connected.c:60
+#: connected.c:70
msgid "Could not run 'git rev-list'"
msgstr "Konnte 'git rev-list' nicht ausführen"
-#: connected.c:80
+#: connected.c:90
#, c-format
msgid "failed write to rev-list: %s"
msgstr "Fehler beim Schreiben nach rev-list: %s"
-#: connected.c:88
+#: connected.c:98
#, c-format
msgid "failed to close rev-list's stdin: %s"
msgstr "Fehler beim Schließen von rev-list's Standard-Eingabe: %s"
@@ -441,23 +441,28 @@ msgid_plural "%lu years ago"
msgstr[0] "vor %lu Jahr"
msgstr[1] "vor %lu Jahren"
-#: diff.c:112
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr "Fehler beim Lesen der Reihenfolgedatei '%s'."
+
+#: diff.c:113
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr ""
" Fehler beim Parsen des abgeschnittenen \"dirstat\" Prozentsatzes '%s'\n"
-#: diff.c:117
+#: diff.c:118
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr " Unbekannter \"dirstat\" Parameter '%s'\n"
-#: diff.c:210
+#: diff.c:213
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr "Unbekannter Wert in Konfigurationsvariable 'diff.dirstat': '%s'"
-#: diff.c:260
+#: diff.c:263
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -466,7 +471,7 @@ msgstr ""
"Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n"
"%s"
-#: diff.c:3490
+#: diff.c:3509
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -475,7 +480,7 @@ msgstr ""
"Fehler beim Parsen des --dirstat/-X Optionsparameters:\n"
"%s"
-#: diff.c:3504
+#: diff.c:3523
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'"
@@ -586,7 +591,7 @@ msgid "failed to read the cache"
msgstr "Lesen des Zwischenspeichers fehlgeschlagen"
#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559
-#: builtin/clone.c:655
+#: builtin/clone.c:661
msgid "unable to write new index file"
msgstr "Konnte neue Staging-Area-Datei nicht schreiben."
@@ -635,7 +640,7 @@ msgstr "kann Objekt %s '%s' nicht lesen"
msgid "blob expected for %s '%s'"
msgstr "Blob erwartet für %s '%s'"
-#: merge-recursive.c:774 builtin/clone.c:311
+#: merge-recursive.c:774 builtin/clone.c:317
#, c-format
msgid "failed to open '%s'"
msgstr "Fehler beim Öffnen von '%s'"
@@ -685,7 +690,7 @@ msgstr ""
msgid "rename"
msgstr "umbenennen"
-#: merge-recursive.c:1082
+#: merge-recursive.c:1082 wt-status.c:283
msgid "renamed"
msgstr "umbenannt"
@@ -750,7 +755,7 @@ msgstr "Objekt %s ist kein Blob"
msgid "modify"
msgstr "ändern"
-#: merge-recursive.c:1565
+#: merge-recursive.c:1565 wt-status.c:281
msgid "modified"
msgstr "geändert"
@@ -772,7 +777,7 @@ msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)"
msgid "Auto-merging %s"
msgstr "automatischer Merge von %s"
-#: merge-recursive.c:1634 git-submodule.sh:1125
+#: merge-recursive.c:1634 git-submodule.sh:1148
msgid "submodule"
msgstr "Submodul"
@@ -844,7 +849,7 @@ msgstr "Merge hat keinen Commit zurückgegeben"
msgid "Could not parse object '%s'"
msgstr "Konnte Objekt '%s' nicht parsen."
-#: merge-recursive.c:2010 builtin/merge.c:672
+#: merge-recursive.c:2010 builtin/merge.c:665
msgid "Unable to write index."
msgstr "Konnte Staging-Area nicht schreiben."
@@ -901,47 +906,50 @@ msgstr " %s"
msgid "-NUM"
msgstr "-NUM"
-#: pathspec.c:118
+#: pathspec.c:133
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
-msgstr "Globale Einstellungen zur Pfadspezifikation 'glob' und 'noglob' sind inkompatibel."
+msgstr ""
+"Globale Einstellungen zur Pfadspezifikation 'glob' und 'noglob' sind "
+"inkompatibel."
-#: pathspec.c:128
+#: pathspec.c:143
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
-msgstr "Globale Einstellung zur Pfadspezifikation 'literal' ist inkompatibel\n"
+msgstr ""
+"Globale Einstellung zur Pfadspezifikation 'literal' ist inkompatibel\n"
"mit allen anderen Optionen."
-#: pathspec.c:158
+#: pathspec.c:177
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "ungültiger Parameter für Pfadspezifikationsangabe 'prefix'"
-#: pathspec.c:164
+#: pathspec.c:183
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "ungültige Pfadspezifikationsangabe '%.*s' in '%s'"
-#: pathspec.c:168
+#: pathspec.c:187
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "Fehlendes ')' am Ende der Pfadspezifikationsangabe in '%s'"
-#: pathspec.c:186
+#: pathspec.c:205
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "nicht unterstützte Pfadspezifikationsangabe '%c' in '%s'"
-#: pathspec.c:211
+#: pathspec.c:230
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s: 'literal' und 'glob' sind inkompatibel"
-#: pathspec.c:222
+#: pathspec.c:241
#, c-format
msgid "%s: '%s' is outside repository"
msgstr "%s: '%s' liegt außerhalb des Repositories"
-#: pathspec.c:278
+#: pathspec.c:291
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Pfadspezifikation '%s' befindet sich in Submodul '%.*s'"
@@ -951,42 +959,75 @@ msgstr "Pfadspezifikation '%s' befindet sich in Submodul '%.*s'"
#. * name. E.g. when add--interactive dies when running
#. * "checkout -p"
#.
-#: pathspec.c:340
+#: pathspec.c:353
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
-msgstr "%s: Pfadspezifikationsangabe wird von diesem Kommando nicht unterstützt: %s"
+msgstr ""
+"%s: Pfadspezifikationsangabe wird von diesem Kommando nicht unterstützt: %s"
-#: pathspec.c:415
+#: pathspec.c:433
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "Pfadspezifikation '%s' ist hinter einem symbolischen Verweis"
-#: remote.c:1833
+#: pathspec.c:442
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr ""
+":(exclude) Muster, aber keine anderen Pfadspezifikationen angegeben.\n"
+"Vielleicht haben Sie vergessen entweder ':/' oder '.' hinzuzufügen?"
+
+#: remote.c:753
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "Kann 'fetch' nicht für sowohl %s als auch %s nach %s ausführen."
+
+#: remote.c:757
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s folgt üblicherweise %s, nicht %s"
+
+#: remote.c:761
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "%s folgt sowohl %s als auch %s"
+
+#.
+#. * This last possibility doesn't occur because
+#. * FETCH_HEAD_IGNORE entries always appear at
+#. * the end of the list.
+#.
+#: remote.c:769
+msgid "Internal error"
+msgstr "Interner Fehler"
+
+#: remote.c:1871
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Ihr Branch basiert auf '%s', aber Upstream-Branch wurde entfernt.\n"
-#: remote.c:1837
+#: remote.c:1875
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
-#: remote.c:1840
+#: remote.c:1878
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr "Ihr Branch ist auf dem selben Stand wie '%s'.\n"
-#: remote.c:1844
+#: remote.c:1882
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] "Ihr Branch ist vor '%s' um %d Commit.\n"
msgstr[1] "Ihr Branch ist vor '%s' um %d Commits.\n"
-#: remote.c:1850
+#: remote.c:1888
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (benutzen Sie \"git push\" um lokale Commits zu publizieren)\n"
-#: remote.c:1853
+#: remote.c:1891
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -996,12 +1037,12 @@ msgstr[0] ""
msgstr[1] ""
"Ihr Branch ist zu '%s' um %d Commits hinterher, und kann vorgespult werden.\n"
-#: remote.c:1861
+#: remote.c:1899
msgid " (use \"git pull\" to update your local branch)\n"
msgstr ""
" (benutzen Sie \"git pull\" um Ihren lokalen Branch zu aktualisieren)\n"
-#: remote.c:1864
+#: remote.c:1902
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -1016,7 +1057,7 @@ msgstr[1] ""
"Ihr Branch und '%s' sind divergiert,\n"
"und haben jeweils %d und %d unterschiedliche Commits.\n"
-#: remote.c:1874
+#: remote.c:1912
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr ""
" (benutzen Sie \"git pull\" um Ihren Branch mit dem Remote-Branch "
@@ -1031,14 +1072,14 @@ msgstr "Öffnen von /dev/null fehlgeschlagen"
msgid "dup2(%d,%d) failed"
msgstr "dup2(%d,%d) fehlgeschlagen"
-#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903
-#: builtin/merge.c:1013 builtin/merge.c:1023
+#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896
+#: builtin/merge.c:1006 builtin/merge.c:1016
#, c-format
msgid "Could not open '%s' for writing"
msgstr "Konnte '%s' nicht zum Schreiben öffnen."
-#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793
-#: builtin/merge.c:1015 builtin/merge.c:1028
+#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786
+#: builtin/merge.c:1008 builtin/merge.c:1021
#, c-format
msgid "Could not write to '%s'"
msgstr "Konnte nicht nach '%s' schreiben."
@@ -1280,7 +1321,7 @@ msgstr "Kann nicht als allerersten Commit einen Revert ausführen."
msgid "Can't cherry-pick into empty head"
msgstr "Kann nicht als allerersten Commit einen Cherry-Pick ausführen."
-#: sha1_name.c:440
+#: sha1_name.c:439
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -1305,28 +1346,29 @@ msgstr ""
"indem Sie \"git config advice.objectNameWarning false\"\n"
"ausführen."
-#: sha1_name.c:1112
+#: sha1_name.c:1070
msgid "HEAD does not point to a branch"
msgstr "HEAD zeigt auf keinen Branch"
-#: sha1_name.c:1115
+#: sha1_name.c:1073
#, c-format
msgid "No such branch: '%s'"
msgstr "Kein solcher Branch '%s'"
-#: sha1_name.c:1117
+#: sha1_name.c:1075
#, c-format
msgid "No upstream configured for branch '%s'"
msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert."
-#: sha1_name.c:1121
+#: sha1_name.c:1079
#, c-format
msgid "Upstream branch '%s' not stored as a remote-tracking branch"
msgstr "Upstream-Branch '%s' ist nicht als Remote-Tracking-Branch gespeichert"
#: submodule.c:64 submodule.c:98
msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
-msgstr "Kann nicht zusammengeführte .gitmodules-Datei nicht ändern, lösen\n"
+msgstr ""
+"Kann nicht zusammengeführte .gitmodules-Datei nicht ändern, lösen\n"
"Sie zuerst die Konflikte auf"
#: submodule.c:68 submodule.c:102
@@ -1428,245 +1470,237 @@ msgstr "konnte aktuellen Benutzer nicht in Passwort-Datei finden: %s"
msgid "no such user"
msgstr "kein solcher Benutzer"
-#: wt-status.c:146
+#: wt-status.c:150
msgid "Unmerged paths:"
msgstr "Nicht zusammengeführte Pfade:"
-#: wt-status.c:173 wt-status.c:200
+#: wt-status.c:177 wt-status.c:204
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
msgstr ""
" (benutzen Sie \"git reset %s <Datei>...\" zum Entfernen aus der Staging-"
"Area)"
-#: wt-status.c:175 wt-status.c:202
+#: wt-status.c:179 wt-status.c:206
msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr ""
" (benutzen Sie \"git rm --cached <Datei>...\" zum Entfernen aus der Staging-"
"Area)"
-#: wt-status.c:179
+#: wt-status.c:183
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr ""
" (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung zu markieren)"
-#: wt-status.c:181 wt-status.c:185
+#: wt-status.c:185 wt-status.c:189
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr ""
" (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung entsprechend zu "
"markieren)"
-#: wt-status.c:183
+#: wt-status.c:187
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr ""
" (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung zu markieren)"
-#: wt-status.c:194
+#: wt-status.c:198
msgid "Changes to be committed:"
msgstr "zum Commit vorgemerkte Änderungen:"
-#: wt-status.c:212
+#: wt-status.c:216
msgid "Changes not staged for commit:"
msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:"
-#: wt-status.c:216
+#: wt-status.c:220
msgid " (use \"git add <file>...\" to update what will be committed)"
msgstr ""
" (benutzen Sie \"git add <Datei>...\" um die Änderungen zum Commit "
"vorzumerken)"
-#: wt-status.c:218
+#: wt-status.c:222
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr ""
" (benutzen Sie \"git add/rm <Datei>...\" um die Änderungen zum Commit "
"vorzumerken)"
-#: wt-status.c:219
+#: wt-status.c:223
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr ""
" (benutzen Sie \"git checkout -- <Datei>...\" um die Änderungen im "
"Arbeitsverzeichnis zu verwerfen)"
-#: wt-status.c:221
+#: wt-status.c:225
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
" (committen oder verwerfen Sie den unbeobachteten oder geänderten Inhalt in "
"den Submodulen)"
-#: wt-status.c:233
+#: wt-status.c:237
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr ""
" (benutzen Sie \"git %s <Datei>...\" um die Änderungen zum Commit "
"vorzumerken)"
-#: wt-status.c:250
+#: wt-status.c:254
msgid "bug"
msgstr "Fehler"
-#: wt-status.c:255
+#: wt-status.c:259
msgid "both deleted:"
msgstr "beide gelöscht:"
-#: wt-status.c:256
+#: wt-status.c:260
msgid "added by us:"
msgstr "von uns hinzugefügt:"
-#: wt-status.c:257
+#: wt-status.c:261
msgid "deleted by them:"
msgstr "von denen gelöscht:"
-#: wt-status.c:258
+#: wt-status.c:262
msgid "added by them:"
msgstr "von denen hinzugefügt:"
-#: wt-status.c:259
+#: wt-status.c:263
msgid "deleted by us:"
msgstr "von uns gelöscht:"
-#: wt-status.c:260
+#: wt-status.c:264
msgid "both added:"
msgstr "von beiden hinzugefügt:"
-#: wt-status.c:261
+#: wt-status.c:265
msgid "both modified:"
msgstr "von beiden geändert:"
-#: wt-status.c:291
-msgid "new commits, "
-msgstr "neue Commits, "
-
-#: wt-status.c:293
-msgid "modified content, "
-msgstr "geänderter Inhalt, "
-
-#: wt-status.c:295
-msgid "untracked content, "
-msgstr "unbeobachteter Inhalt, "
+#: wt-status.c:275
+msgid "new file"
+msgstr "neue Datei"
-#: wt-status.c:312
-#, c-format
-msgid "new file: %s"
-msgstr "neue Datei: %s"
+#: wt-status.c:277
+msgid "copied"
+msgstr "kopiert"
-#: wt-status.c:315
-#, c-format
-msgid "copied: %s -> %s"
-msgstr "kopiert: %s -> %s"
+#: wt-status.c:279
+msgid "deleted"
+msgstr "gelöscht"
-#: wt-status.c:318
-#, c-format
-msgid "deleted: %s"
-msgstr "gelöscht: %s"
+#: wt-status.c:285
+msgid "typechange"
+msgstr "Typänderung"
-#: wt-status.c:321
-#, c-format
-msgid "modified: %s"
-msgstr "geändert: %s"
+#: wt-status.c:287
+msgid "unknown"
+msgstr "unbekannt"
-#: wt-status.c:324
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr "umbenannt: %s -> %s"
+#: wt-status.c:289
+msgid "unmerged"
+msgstr "nicht zusammengeführt"
-#: wt-status.c:327
-#, c-format
-msgid "typechange: %s"
-msgstr "Typänderung: %s"
+#: wt-status.c:336
+msgid "new commits, "
+msgstr "neue Commits, "
-#: wt-status.c:330
-#, c-format
-msgid "unknown: %s"
-msgstr "unbekannt: %s"
+#: wt-status.c:338
+msgid "modified content, "
+msgstr "geänderter Inhalt, "
-#: wt-status.c:333
-#, c-format
-msgid "unmerged: %s"
-msgstr "nicht zusammengeführt: %s"
+#: wt-status.c:340
+msgid "untracked content, "
+msgstr "unbeobachteter Inhalt, "
-#: wt-status.c:336
+#: wt-status.c:357
#, c-format
msgid "bug: unhandled diff status %c"
msgstr "Fehler: unbehandelter Differenz-Status %c"
-#: wt-status.c:703
+#: wt-status.c:732
msgid "Submodules changed but not updated:"
msgstr "Submodule geändert, aber nicht aktualisiert:"
-#: wt-status.c:705
+#: wt-status.c:734
msgid "Submodule changes to be committed:"
msgstr "Änderungen in Submodul zum Committen:"
-#: wt-status.c:848
+#: wt-status.c:836
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr ""
+"Ändern Sie nicht die obige Zeile.\n"
+"Alles unterhalb von ihr wird entfernt."
+
+#: wt-status.c:899
msgid "You have unmerged paths."
msgstr "Sie haben nicht zusammengeführte Pfade."
-#: wt-status.c:851
+#: wt-status.c:902
msgid " (fix conflicts and run \"git commit\")"
msgstr " (beheben Sie die Konflikte und führen Sie \"git commit\" aus)"
-#: wt-status.c:854
+#: wt-status.c:905
msgid "All conflicts fixed but you are still merging."
msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge."
-#: wt-status.c:857
+#: wt-status.c:908
msgid " (use \"git commit\" to conclude merge)"
msgstr " (benutzen Sie \"git commit\" um den Merge abzuschließen)"
-#: wt-status.c:867
+#: wt-status.c:918
msgid "You are in the middle of an am session."
msgstr "Eine \"am\"-Sitzung ist im Gange."
-#: wt-status.c:870
+#: wt-status.c:921
msgid "The current patch is empty."
msgstr "Der aktuelle Patch ist leer."
-#: wt-status.c:874
+#: wt-status.c:925
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)"
-#: wt-status.c:876
+#: wt-status.c:927
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (benutzen Sie \"git am --skip\" um diesen Patch auszulassen)"
-#: wt-status.c:878
+#: wt-status.c:929
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
" (benutzen Sie \"git am --abort\" um den ursprünglichen Branch "
"wiederherzustellen)"
-#: wt-status.c:938 wt-status.c:955
+#: wt-status.c:989 wt-status.c:1006
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'."
-#: wt-status.c:943 wt-status.c:960
+#: wt-status.c:994 wt-status.c:1011
msgid "You are currently rebasing."
msgstr "Sie sind gerade beim Rebase."
-#: wt-status.c:946
+#: wt-status.c:997
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git rebase --continue\" "
"aus)"
-#: wt-status.c:948
+#: wt-status.c:999
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (benutzen Sie \"git rebase --skip\" um diesen Patch auszulassen)"
-#: wt-status.c:950
+#: wt-status.c:1001
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr ""
" (benutzen Sie \"git rebase --abort\" um den ursprünglichen Branch "
"auszuchecken)"
-#: wt-status.c:963
+#: wt-status.c:1014
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)"
-#: wt-status.c:967
+#: wt-status.c:1018
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -1674,129 +1708,129 @@ msgstr ""
"Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf "
"'%s' im Gange ist."
-#: wt-status.c:972
+#: wt-status.c:1023
msgid "You are currently splitting a commit during a rebase."
msgstr "Sie teilen gerade einen Commit während eines Rebase auf."
-#: wt-status.c:975
+#: wt-status.c:1026
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (Sobald Ihr Arbeitsverzeichnis unverändert ist, führen Sie \"git rebase --"
"continue\" aus)"
-#: wt-status.c:979
+#: wt-status.c:1030
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"Sie editieren gerade einen Commit während eines Rebase von Branch '%s' auf "
"'%s'."
-#: wt-status.c:984
+#: wt-status.c:1035
msgid "You are currently editing a commit during a rebase."
msgstr "Sie editieren gerade einen Commit während eines Rebase."
-#: wt-status.c:987
+#: wt-status.c:1038
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
" (benutzen Sie \"git commit --amend\" um den aktuellen Commit nachzubessern)"
-#: wt-status.c:989
+#: wt-status.c:1040
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (benutzen Sie \"git rebase --continue\" sobald Ihre Änderungen "
"abgeschlossen sind)"
-#: wt-status.c:999
+#: wt-status.c:1050
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "Sie führen gerade \"cherry-pick\" von Commit %s aus."
-#: wt-status.c:1004
+#: wt-status.c:1055
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue"
"\" aus)"
-#: wt-status.c:1007
+#: wt-status.c:1058
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)"
-#: wt-status.c:1009
+#: wt-status.c:1060
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (benutzen Sie \"git cherry-pick --abort\" um die Cherry-Pick-Operation "
"abzubrechen)"
-#: wt-status.c:1018
+#: wt-status.c:1069
#, c-format
msgid "You are currently reverting commit %s."
msgstr "Sie sind gerade an einem Revert von Commit '%s'."
-#: wt-status.c:1023
+#: wt-status.c:1074
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr ""
" (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" "
"aus)"
-#: wt-status.c:1026
+#: wt-status.c:1077
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)"
-#: wt-status.c:1028
+#: wt-status.c:1079
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
" (benutzen Sie \"git revert --abort\" um die Revert-Operation abzubrechen)"
-#: wt-status.c:1039
+#: wt-status.c:1090
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'."
-#: wt-status.c:1043
+#: wt-status.c:1094
msgid "You are currently bisecting."
msgstr "Sie sind gerade bei einer binären Suche."
-#: wt-status.c:1046
+#: wt-status.c:1097
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
" (benutzen Sie \"git bisect reset\" um zum ursprünglichen Branch "
"zurückzukehren)"
-#: wt-status.c:1221
+#: wt-status.c:1272
msgid "On branch "
msgstr "Auf Branch "
-#: wt-status.c:1228
+#: wt-status.c:1279
msgid "rebase in progress; onto "
msgstr "Rebase im Gange; auf "
-#: wt-status.c:1235
+#: wt-status.c:1286
msgid "HEAD detached at "
msgstr "HEAD losgelöst bei "
-#: wt-status.c:1237
+#: wt-status.c:1288
msgid "HEAD detached from "
msgstr "HEAD losgelöst von "
-#: wt-status.c:1240
+#: wt-status.c:1291
msgid "Not currently on any branch."
msgstr "Im Moment auf keinem Branch."
-#: wt-status.c:1257
+#: wt-status.c:1308
msgid "Initial commit"
msgstr "Initialer Commit"
-#: wt-status.c:1271
+#: wt-status.c:1322
msgid "Untracked files"
msgstr "Unbeobachtete Dateien"
-#: wt-status.c:1273
+#: wt-status.c:1324
msgid "Ignored files"
msgstr "Ignorierte Dateien"
-#: wt-status.c:1277
+#: wt-status.c:1328
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1807,32 +1841,32 @@ msgstr ""
"'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n"
"neue Dateien selbstständig hinzuzufügen (siehe 'git help status')."
-#: wt-status.c:1283
+#: wt-status.c:1334
#, c-format
msgid "Untracked files not listed%s"
msgstr "Unbeobachtete Dateien nicht aufgelistet%s"
-#: wt-status.c:1285
+#: wt-status.c:1336
msgid " (use -u option to show untracked files)"
msgstr " (benutzen Sie die Option -u um unbeobachteten Dateien anzuzeigen)"
-#: wt-status.c:1291
+#: wt-status.c:1342
msgid "No changes"
msgstr "Keine Änderungen"
-#: wt-status.c:1296
+#: wt-status.c:1347
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
"keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder "
"\"git commit -a\")\n"
-#: wt-status.c:1299
+#: wt-status.c:1350
#, c-format
msgid "no changes added to commit\n"
msgstr "keine Änderungen zum Commit vorgemerkt\n"
-#: wt-status.c:1302
+#: wt-status.c:1353
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -1841,60 +1875,60 @@ msgstr ""
"nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien (benutzen "
"Sie \"git add\" zum Beobachten)\n"
-#: wt-status.c:1305
+#: wt-status.c:1356
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien\n"
-#: wt-status.c:1308
+#: wt-status.c:1359
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"nichts zu committen (Erstellen/Kopieren Sie Dateien und benutzen Sie \"git "
"add\" zum Beobachten)\n"
-#: wt-status.c:1311 wt-status.c:1316
+#: wt-status.c:1362 wt-status.c:1367
#, c-format
msgid "nothing to commit\n"
msgstr "nichts zu committen\n"
-#: wt-status.c:1314
+#: wt-status.c:1365
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
"nichts zu committen (benutzen Sie die Option -u, um unbeobachtete Dateien "
"anzuzeigen)\n"
-#: wt-status.c:1318
+#: wt-status.c:1369
#, c-format
msgid "nothing to commit, working directory clean\n"
msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
-#: wt-status.c:1427
+#: wt-status.c:1478
msgid "HEAD (no branch)"
msgstr "HEAD (kein Branch)"
-#: wt-status.c:1433
+#: wt-status.c:1484
msgid "Initial commit on "
msgstr "Initialer Commit auf "
-#: wt-status.c:1463
+#: wt-status.c:1514
msgid "gone"
msgstr "entfernt"
-#: wt-status.c:1465
+#: wt-status.c:1516
msgid "behind "
msgstr "hinterher "
-#: wt-status.c:1468 wt-status.c:1471
+#: wt-status.c:1519 wt-status.c:1522
msgid "ahead "
msgstr "voraus "
-#: wt-status.c:1473
+#: wt-status.c:1524
msgid ", behind "
msgstr ", hinterher "
-#: compat/precompose_utf8.c:55 builtin/clone.c:350
+#: compat/precompose_utf8.c:55 builtin/clone.c:356
#, c-format
msgid "failed to unlink '%s'"
msgstr "Konnte '%s' nicht entfernen."
@@ -2027,15 +2061,15 @@ msgstr ""
"Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien "
"ignoriert:\n"
-#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:92 builtin/mv.c:66
-#: builtin/prune-packed.c:73 builtin/push.c:459 builtin/remote.c:1253
+#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70
+#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344
#: builtin/rm.c:269
msgid "dry run"
msgstr "Probelauf"
#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19
#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612
-#: builtin/log.c:1592 builtin/mv.c:65 builtin/read-tree.c:113
+#: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113
msgid "be verbose"
msgstr "erweiterte Ausgaben"
@@ -2120,11 +2154,11 @@ msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "Wollten Sie vielleicht 'git add .' sagen?\n"
#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919
-#: builtin/commit.c:320 builtin/mv.c:86 builtin/reset.c:224 builtin/rm.c:299
+#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299
msgid "index file corrupt"
msgstr "Staging-Area-Datei beschädigt"
-#: builtin/add.c:589 builtin/apply.c:4506 builtin/mv.c:259 builtin/rm.c:432
+#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432
msgid "Unable to write new index file"
msgstr "Konnte neue Staging-Area-Datei nicht schreiben."
@@ -2463,7 +2497,7 @@ msgid "unable to read index file"
msgstr "Konnte Staging-Area-Datei nicht lesen"
#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90
-#: builtin/fetch.c:77
+#: builtin/fetch.c:78
msgid "path"
msgstr "Pfad"
@@ -2678,96 +2712,96 @@ msgstr "git blame [Optionen] [rev-opts] [rev] [--] Datei"
msgid "[rev-opts] are documented in git-rev-list(1)"
msgstr "[rev-opts] sind dokumentiert in git-rev-list(1)"
-#: builtin/blame.c:2248
+#: builtin/blame.c:2249
msgid "Show blame entries as we find them, incrementally"
msgstr "Zeigt \"blame\"-Einträge schrittweise, während wir sie generieren"
-#: builtin/blame.c:2249
+#: builtin/blame.c:2250
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr "Zeigt leere SHA-1 für Grenz-Commits (Standard: aus)"
-#: builtin/blame.c:2250
+#: builtin/blame.c:2251
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr "Behandelt Ursprungs-Commit nicht als Grenzen (Standard: aus)"
-#: builtin/blame.c:2251
+#: builtin/blame.c:2252
msgid "Show work cost statistics"
msgstr "Zeigt Statistiken zum Arbeitsaufwand"
-#: builtin/blame.c:2252
+#: builtin/blame.c:2253
msgid "Show output score for blame entries"
msgstr "Zeigt Ausgabebewertung für \"blame\"-Einträge"
-#: builtin/blame.c:2253
+#: builtin/blame.c:2254
msgid "Show original filename (Default: auto)"
msgstr "Zeigt ursprünglichen Dateinamen (Standard: auto)"
-#: builtin/blame.c:2254
+#: builtin/blame.c:2255
msgid "Show original linenumber (Default: off)"
msgstr "Zeigt ursprüngliche Zeilennummer (Standard: aus)"
-#: builtin/blame.c:2255
+#: builtin/blame.c:2256
msgid "Show in a format designed for machine consumption"
msgstr "Anzeige in einem Format für maschinelle Auswertung"
-#: builtin/blame.c:2256
+#: builtin/blame.c:2257
msgid "Show porcelain format with per-line commit information"
msgstr ""
"Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile"
-#: builtin/blame.c:2257
+#: builtin/blame.c:2258
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr "Benutzt den gleichen Ausgabemodus wie \"git-annotate\" (Standard: aus)"
-#: builtin/blame.c:2258
+#: builtin/blame.c:2259
msgid "Show raw timestamp (Default: off)"
msgstr "Zeigt unbearbeiteten Zeitstempel (Standard: aus)"
-#: builtin/blame.c:2259
+#: builtin/blame.c:2260
msgid "Show long commit SHA1 (Default: off)"
msgstr "Zeigt langen Commit-SHA1 (Standard: aus)"
-#: builtin/blame.c:2260
+#: builtin/blame.c:2261
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Unterdrückt den Namen des Autors und den Zeitstempel (Standard: aus)"
-#: builtin/blame.c:2261
+#: builtin/blame.c:2262
msgid "Show author email instead of name (Default: off)"
msgstr "Zeigt anstatt des Namens die Email-Adresse des Autors (Standard: aus)"
-#: builtin/blame.c:2262
+#: builtin/blame.c:2263
msgid "Ignore whitespace differences"
msgstr "Ignoriert Unterschiede im Whitespace"
-#: builtin/blame.c:2263
+#: builtin/blame.c:2264
msgid "Spend extra cycles to find better match"
msgstr "arbeite länger, um bessere Übereinstimmungen zu finden"
-#: builtin/blame.c:2264
+#: builtin/blame.c:2265
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Benutzt Commits von <Datei> anstatt \"git-rev-list\" aufzurufen"
-#: builtin/blame.c:2265
+#: builtin/blame.c:2266
msgid "Use <file>'s contents as the final image"
msgstr "Benutzt Inhalte der <Datei>en als entgültiges Abbild"
-#: builtin/blame.c:2266 builtin/blame.c:2267
+#: builtin/blame.c:2267 builtin/blame.c:2268
msgid "score"
msgstr "Bewertung"
-#: builtin/blame.c:2266
+#: builtin/blame.c:2267
msgid "Find line copies within and across files"
msgstr "Findet kopierte Zeilen innerhalb oder zwischen Dateien"
-#: builtin/blame.c:2267
+#: builtin/blame.c:2268
msgid "Find line movements within and across files"
msgstr "Findet verschobene Zeilen innerhalb oder zwischen Dateien"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "Process only line range n,m, counting from 1"
msgstr "Verarbeitet nur Zeilen im Bereich n,m, gezählt von 1"
@@ -2873,252 +2907,252 @@ msgstr "Branch %s entfernt (war %s).\n"
msgid "branch '%s' does not point at a commit"
msgstr "Branch '%s' zeigt auf keinen Commit"
-#: builtin/branch.c:453
+#: builtin/branch.c:454
#, c-format
msgid "[%s: gone]"
msgstr "[%s: entfernt]"
-#: builtin/branch.c:456
+#: builtin/branch.c:459
#, c-format
msgid "[%s]"
msgstr "[%s]"
-#: builtin/branch.c:459
+#: builtin/branch.c:464
#, c-format
msgid "[%s: behind %d]"
msgstr "[%s: %d hinterher]"
-#: builtin/branch.c:461
+#: builtin/branch.c:466
#, c-format
msgid "[behind %d]"
msgstr "[%d hinterher]"
-#: builtin/branch.c:465
+#: builtin/branch.c:470
#, c-format
msgid "[%s: ahead %d]"
msgstr "[%s: %d voraus]"
-#: builtin/branch.c:467
+#: builtin/branch.c:472
#, c-format
msgid "[ahead %d]"
msgstr "[%d voraus]"
-#: builtin/branch.c:470
+#: builtin/branch.c:475
#, c-format
msgid "[%s: ahead %d, behind %d]"
msgstr "[%s: %d voraus, %d hinterher]"
-#: builtin/branch.c:473
+#: builtin/branch.c:478
#, c-format
msgid "[ahead %d, behind %d]"
msgstr "[%d voraus, %d hinterher]"
-#: builtin/branch.c:496
+#: builtin/branch.c:502
msgid " **** invalid ref ****"
msgstr " **** ungültige Referenz ****"
-#: builtin/branch.c:588
+#: builtin/branch.c:594
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(kein Branch, Rebase von Branch %s im Gange)"
-#: builtin/branch.c:591
+#: builtin/branch.c:597
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(kein Branch, binäre Suche begonnen bei %s)"
-#: builtin/branch.c:594
+#: builtin/branch.c:600
#, c-format
msgid "(detached from %s)"
msgstr "(losgelöst von %s)"
-#: builtin/branch.c:597
+#: builtin/branch.c:603
msgid "(no branch)"
msgstr "(kein Branch)"
-#: builtin/branch.c:643
+#: builtin/branch.c:649
#, c-format
msgid "object '%s' does not point to a commit"
msgstr "Objekt '%s' zeigt auf keinen Commit"
-#: builtin/branch.c:675
+#: builtin/branch.c:681
msgid "some refs could not be read"
msgstr "Konnte einige Referenzen nicht lesen"
-#: builtin/branch.c:688
+#: builtin/branch.c:694
msgid "cannot rename the current branch while not on any."
msgstr ""
"Kann aktuellen Branch nicht umbenennen, solange Sie sich auf keinem befinden."
-#: builtin/branch.c:698
+#: builtin/branch.c:704
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Ungültiger Branchname: '%s'"
-#: builtin/branch.c:713
+#: builtin/branch.c:719
msgid "Branch rename failed"
msgstr "Umbenennung des Branches fehlgeschlagen"
-#: builtin/branch.c:717
+#: builtin/branch.c:723
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "falsch benannten Branch '%s' umbenannt"
-#: builtin/branch.c:721
+#: builtin/branch.c:727
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "Branch umbenannt zu %s, aber HEAD ist nicht aktualisiert!"
-#: builtin/branch.c:728
+#: builtin/branch.c:734
msgid "Branch is renamed, but update of config-file failed"
msgstr ""
"Branch ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist "
"fehlgeschlagen."
-#: builtin/branch.c:743
+#: builtin/branch.c:749
#, c-format
msgid "malformed object name %s"
msgstr "Missgebildeter Objektname %s"
-#: builtin/branch.c:767
+#: builtin/branch.c:773
#, c-format
msgid "could not write branch description template: %s"
msgstr "Konnte Beschreibungsvorlage für Branch nicht schreiben: %s"
-#: builtin/branch.c:797
+#: builtin/branch.c:803
msgid "Generic options"
msgstr "Allgemeine Optionen"
-#: builtin/branch.c:799
+#: builtin/branch.c:805
msgid "show hash and subject, give twice for upstream branch"
msgstr "Zeigt Hash und Betreff; -vv: zusätzlich Upstream-Branch"
-#: builtin/branch.c:800
+#: builtin/branch.c:806
msgid "suppress informational messages"
msgstr "unterdrückt Informationsmeldungen"
-#: builtin/branch.c:801
+#: builtin/branch.c:807
msgid "set up tracking mode (see git-pull(1))"
msgstr "stellt den Ãœbernahmemodus ein (siehe git-pull(1))"
-#: builtin/branch.c:803
+#: builtin/branch.c:809
msgid "change upstream info"
msgstr "ändert Informationen zum Upstream-Branch"
-#: builtin/branch.c:807
+#: builtin/branch.c:813
msgid "use colored output"
msgstr "verwendet farbliche Ausgaben"
-#: builtin/branch.c:808
+#: builtin/branch.c:814
msgid "act on remote-tracking branches"
msgstr "wirkt auf Remote-Tracking-Branches"
-#: builtin/branch.c:811 builtin/branch.c:817 builtin/branch.c:838
-#: builtin/branch.c:844 builtin/commit.c:1460 builtin/commit.c:1461
+#: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844
+#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461
#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468
msgid "commit"
msgstr "Commit"
-#: builtin/branch.c:812 builtin/branch.c:818
+#: builtin/branch.c:818 builtin/branch.c:824
msgid "print only branches that contain the commit"
msgstr "gibt nur Branches aus, welche diesen Commit beinhalten"
-#: builtin/branch.c:824
+#: builtin/branch.c:830
msgid "Specific git-branch actions:"
msgstr "spezifische Aktionen für \"git-branch\":"
-#: builtin/branch.c:825
+#: builtin/branch.c:831
msgid "list both remote-tracking and local branches"
msgstr "listet Remote-Tracking und lokale Branches auf"
-#: builtin/branch.c:827
+#: builtin/branch.c:833
msgid "delete fully merged branch"
msgstr "entfernt vollständig zusammengeführten Branch"
-#: builtin/branch.c:828
+#: builtin/branch.c:834
msgid "delete branch (even if not merged)"
msgstr "löscht Branch (auch wenn nicht zusammengeführt)"
-#: builtin/branch.c:829
+#: builtin/branch.c:835
msgid "move/rename a branch and its reflog"
msgstr "verschiebt/benennt einen Branch und dessen Reflog um"
-#: builtin/branch.c:830
+#: builtin/branch.c:836
msgid "move/rename a branch, even if target exists"
msgstr ""
"verschiebt/benennt einen Branch um, auch wenn das Ziel bereits existiert"
-#: builtin/branch.c:831
+#: builtin/branch.c:837
msgid "list branch names"
msgstr "listet Branchnamen auf"
-#: builtin/branch.c:832
+#: builtin/branch.c:838
msgid "create the branch's reflog"
msgstr "erzeugt das Reflog des Branches"
-#: builtin/branch.c:834
+#: builtin/branch.c:840
msgid "edit the description for the branch"
msgstr "bearbeitet die Beschreibung für den Branch"
-#: builtin/branch.c:835
+#: builtin/branch.c:841
msgid "force creation (when already exists)"
msgstr "erzeuge auch, wenn der Branch bereits existiert"
-#: builtin/branch.c:838
+#: builtin/branch.c:844
msgid "print only not merged branches"
msgstr "gibt nur Branches aus, die nicht zusammengeführt sind"
-#: builtin/branch.c:844
+#: builtin/branch.c:850
msgid "print only merged branches"
msgstr "gibt nur Branches aus, die zusammengeführt sind"
-#: builtin/branch.c:848
+#: builtin/branch.c:854
msgid "list branches in columns"
msgstr "listet Branches in Spalten auf"
-#: builtin/branch.c:861
+#: builtin/branch.c:867
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Konnte HEAD nicht als gültige Referenz auflösen."
-#: builtin/branch.c:866 builtin/clone.c:629
+#: builtin/branch.c:872 builtin/clone.c:635
msgid "HEAD not found below refs/heads!"
msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!"
-#: builtin/branch.c:890
+#: builtin/branch.c:896
msgid "--column and --verbose are incompatible"
msgstr "Die Optionen --column und --verbose sind inkompatibel."
-#: builtin/branch.c:896 builtin/branch.c:935
+#: builtin/branch.c:902 builtin/branch.c:941
msgid "branch name required"
msgstr "Branchname erforderlich"
-#: builtin/branch.c:911
+#: builtin/branch.c:917
msgid "Cannot give description to detached HEAD"
msgstr "zu losgelöstem HEAD kann keine Beschreibung hinterlegt werden"
-#: builtin/branch.c:916
+#: builtin/branch.c:922
msgid "cannot edit description of more than one branch"
msgstr "Beschreibung von mehr als einem Branch kann nicht bearbeitet werden"
-#: builtin/branch.c:923
+#: builtin/branch.c:929
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Noch kein Commit in Branch '%s'."
-#: builtin/branch.c:926
+#: builtin/branch.c:932
#, c-format
msgid "No branch named '%s'."
msgstr "Branch '%s' nicht vorhanden."
-#: builtin/branch.c:941
+#: builtin/branch.c:947
msgid "too many branches for a rename operation"
msgstr "zu viele Branches für eine Umbenennen-Operation angegeben"
-#: builtin/branch.c:946
+#: builtin/branch.c:952
msgid "too many branches to set new upstream"
msgstr "zu viele Branches angegeben um Upstream-Branch zu setzen"
-#: builtin/branch.c:950
+#: builtin/branch.c:956
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
@@ -3126,43 +3160,43 @@ msgstr ""
"Konnte keinen neuen Upstream-Branch von HEAD zu %s setzen, da dieser auf\n"
"keinen Branch zeigt."
-#: builtin/branch.c:953 builtin/branch.c:975 builtin/branch.c:997
+#: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002
#, c-format
msgid "no such branch '%s'"
msgstr "Kein solcher Branch '%s'"
-#: builtin/branch.c:957
+#: builtin/branch.c:963
#, c-format
msgid "branch '%s' does not exist"
msgstr "Branch '%s' existiert nicht"
-#: builtin/branch.c:969
+#: builtin/branch.c:975
msgid "too many branches to unset upstream"
msgstr ""
"zu viele Branches angegeben um Konfiguration zu Upstream-Branch zu entfernen"
-#: builtin/branch.c:973
+#: builtin/branch.c:979
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"Konnte Konfiguration zu Upstream-Branch von HEAD nicht entfernen, da dieser\n"
"auf keinen Branch zeigt."
-#: builtin/branch.c:979
+#: builtin/branch.c:985
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
-#: builtin/branch.c:994
+#: builtin/branch.c:999
msgid "it does not make sense to create 'HEAD' manually"
msgstr "'HEAD' darf nicht manuell erstellt werden"
-#: builtin/branch.c:1000
+#: builtin/branch.c:1005
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr ""
"Die Optionen -a und -r bei 'git branch' können nicht gemeimsam mit einem "
"Branchnamen verwendet werden."
-#: builtin/branch.c:1003
+#: builtin/branch.c:1008
#, c-format
msgid ""
"The --set-upstream flag is deprecated and will be removed. Consider using --"
@@ -3171,7 +3205,7 @@ msgstr ""
"Die --set-upstream Option ist veraltet und wird entfernt. Benutzen Sie --"
"track oder --set-upstream-to\n"
-#: builtin/branch.c:1020
+#: builtin/branch.c:1025
#, c-format
msgid ""
"\n"
@@ -3182,12 +3216,12 @@ msgstr ""
"Wenn Sie wollten, dass '%s' den Branch '%s' als Upstream-Branch hat, führen "
"Sie aus:\n"
-#: builtin/branch.c:1021
+#: builtin/branch.c:1026
#, c-format
msgid " git branch -d %s\n"
msgstr " git branch -d %s\n"
-#: builtin/branch.c:1022
+#: builtin/branch.c:1027
#, c-format
msgid " git branch --set-upstream-to %s\n"
msgstr " git branch --set-upstream-to %s\n"
@@ -3205,45 +3239,45 @@ msgstr "Um ein Paket zu erstellen wird ein Repository benötigt."
msgid "Need a repository to unbundle."
msgstr "Zum Entpacken wird ein Repository benötigt."
-#: builtin/cat-file.c:312
+#: builtin/cat-file.c:328
msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
msgstr "git cat-file (-t|-s|-e|-p|<Art>|--textconv) <Objekt>"
-#: builtin/cat-file.c:313
+#: builtin/cat-file.c:329
msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
msgstr "git cat-file (--batch|--batch-check) < <Liste_von_Objekten>"
-#: builtin/cat-file.c:350
+#: builtin/cat-file.c:366
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<Art> kann sein: blob, tree, commit, tag"
-#: builtin/cat-file.c:351
+#: builtin/cat-file.c:367
msgid "show object type"
msgstr "zeigt Objektart"
-#: builtin/cat-file.c:352
+#: builtin/cat-file.c:368
msgid "show object size"
msgstr "zeigt Objektgröße"
-#: builtin/cat-file.c:354
+#: builtin/cat-file.c:370
msgid "exit with zero when there's no error"
msgstr "beendet mit Rückgabewert 0, wenn kein Fehler aufgetreten ist"
-#: builtin/cat-file.c:355
+#: builtin/cat-file.c:371
msgid "pretty-print object's content"
msgstr "ansprechende Anzeige des Objektinhaltes"
-#: builtin/cat-file.c:357
+#: builtin/cat-file.c:373
msgid "for blob objects, run textconv on object's content"
msgstr "führt eine Textkonvertierung auf den Inhalt von Blob-Objekten aus"
-#: builtin/cat-file.c:359
+#: builtin/cat-file.c:375
msgid "show info and content of objects fed from the standard input"
msgstr ""
"Anzeige von Informationen und Inhalt von Objekten, gelesen von der Standard-"
"Eingabe"
-#: builtin/cat-file.c:362
+#: builtin/cat-file.c:378
msgid "show info about objects fed from the standard input"
msgstr ""
"Anzeige von Informationen über Objekte, gelesen von der Standard-Eingabe"
@@ -3273,7 +3307,7 @@ msgstr "liest Dateinamen von der Standard-Eingabe"
msgid "terminate input and output records by a NUL character"
msgstr "schließt Einträge von Ein- und Ausgabe mit NUL-Zeichen ab"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:259
+#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260
msgid "suppress progress reporting"
msgstr "unterdrückt Fortschrittsanzeige"
@@ -3569,7 +3603,7 @@ msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Kann Branch nicht zu Nicht-Commit '%s' wechseln"
#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88
-#: builtin/remote.c:169 builtin/remote.c:171
+#: builtin/remote.c:159 builtin/remote.c:161
msgid "branch"
msgstr "Branch"
@@ -3617,11 +3651,11 @@ msgstr "erzwingt Auschecken (verwirft lokale Änderungen)"
msgid "perform a 3-way merge with the new branch"
msgstr "führt einen 3-Wege-Merge mit dem neuen Branch aus"
-#: builtin/checkout.c:1106 builtin/merge.c:232
+#: builtin/checkout.c:1106 builtin/merge.c:225
msgid "update ignored files (default)"
msgstr "aktualisiert ignorierte Dateien (Standard)"
-#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:251
+#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248
msgid "style"
msgstr "Stil"
@@ -3820,7 +3854,7 @@ msgid "remove whole directories"
msgstr "löscht ganze Verzeichnisse"
#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718
-#: builtin/ls-files.c:483 builtin/name-rev.c:315 builtin/show-ref.c:185
+#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185
msgid "pattern"
msgstr "Muster"
@@ -3860,8 +3894,8 @@ msgstr ""
msgid "git clone [options] [--] <repo> [<dir>]"
msgstr "git clone [Optionen] [--] <Repository> [<Verzeichnis>]"
-#: builtin/clone.c:64 builtin/fetch.c:96 builtin/merge.c:229
-#: builtin/push.c:474
+#: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222
+#: builtin/push.c:521
msgid "force progress reporting"
msgstr "erzwingt Fortschrittsanzeige"
@@ -3921,13 +3955,13 @@ msgstr "checkt <Branch> aus, anstatt HEAD des Remote-Repositories"
msgid "path to git-upload-pack on the remote"
msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite"
-#: builtin/clone.c:92 builtin/fetch.c:97 builtin/grep.c:663
+#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663
msgid "depth"
msgstr "Tiefe"
#: builtin/clone.c:93
msgid "create a shallow clone of that depth"
-msgstr "erstellt einen flachen Klon mit dieser Tiefe"
+msgstr "erstellt einen Klon mit unvollständiger Historie (shallow) in dieser Tiefe"
#: builtin/clone.c:95
msgid "clone only one branch, HEAD or --branch"
@@ -3954,42 +3988,52 @@ msgstr "setzt Konfiguration innerhalb des neuen Repositories"
msgid "reference repository '%s' is not a local repository."
msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
-#: builtin/clone.c:315
+#: builtin/clone.c:256
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
+
+#: builtin/clone.c:259
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") eingehängt."
+
+#: builtin/clone.c:321
#, c-format
msgid "failed to create directory '%s'"
msgstr "Fehler beim Erstellen von Verzeichnis '%s'"
-#: builtin/clone.c:317 builtin/diff.c:77
+#: builtin/clone.c:323 builtin/diff.c:83
#, c-format
msgid "failed to stat '%s'"
msgstr "Konnte '%s' nicht lesen"
-#: builtin/clone.c:319
+#: builtin/clone.c:325
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s existiert und ist kein Verzeichnis"
-#: builtin/clone.c:333
+#: builtin/clone.c:339
#, c-format
msgid "failed to stat %s\n"
msgstr "Konnte %s nicht lesen\n"
-#: builtin/clone.c:355
+#: builtin/clone.c:361
#, c-format
msgid "failed to create link '%s'"
msgstr "Konnte Verweis '%s' nicht erstellen"
-#: builtin/clone.c:359
+#: builtin/clone.c:365
#, c-format
msgid "failed to copy file to '%s'"
msgstr "Konnte Datei nicht nach '%s' kopieren"
-#: builtin/clone.c:382 builtin/clone.c:559
+#: builtin/clone.c:388 builtin/clone.c:565
#, c-format
msgid "done.\n"
msgstr "Fertig.\n"
-#: builtin/clone.c:395
+#: builtin/clone.c:401
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -3999,103 +4043,113 @@ msgstr ""
"Sie können mit 'git status' prüfen, was ausgecheckt worden ist\n"
"und das Auschecken mit 'git checkout -f HEAD' erneut versuchen.\n"
-#: builtin/clone.c:474
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "Konnte zu klonenden Remote-Branch %s nicht finden."
-#: builtin/clone.c:554
+#: builtin/clone.c:560
#, c-format
msgid "Checking connectivity... "
msgstr "Prüfe Konnektivität... "
-#: builtin/clone.c:557
+#: builtin/clone.c:563
msgid "remote did not send all necessary objects"
msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet."
-#: builtin/clone.c:620
+#: builtin/clone.c:626
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"Externer HEAD bezieht sich auf eine nicht existierende Referenz und kann "
"nicht ausgecheckt werden.\n"
-#: builtin/clone.c:651
+#: builtin/clone.c:657
msgid "unable to checkout working tree"
msgstr "Arbeitsverzeichnis konnte nicht ausgecheckt werden"
-#: builtin/clone.c:759
+#: builtin/clone.c:765
msgid "Too many arguments."
msgstr "Zu viele Argumente."
-#: builtin/clone.c:763
+#: builtin/clone.c:769
msgid "You must specify a repository to clone."
msgstr "Sie müssen ein Repository zum Klonen angeben."
-#: builtin/clone.c:774
+#: builtin/clone.c:780
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "Die Optionen --bare und --origin %s sind inkompatibel."
-#: builtin/clone.c:777
+#: builtin/clone.c:783
msgid "--bare and --separate-git-dir are incompatible."
msgstr "Die Optionen --bare und --separate-git-dir sind inkompatibel."
-#: builtin/clone.c:790
+#: builtin/clone.c:796
#, c-format
msgid "repository '%s' does not exist"
msgstr "Repository '%s' existiert nicht."
-#: builtin/clone.c:795
+#: builtin/clone.c:802
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
"Die Option --depth wird in lokalen Klonen ignoriert; benutzen Sie "
"stattdessen file://"
-#: builtin/clone.c:797
+#: builtin/clone.c:805
+msgid "source repository is shallow, ignoring --local"
+msgstr "Quelle ist ein Repository mit unvollständiger Historie (shallow),"
+"ignoriere --local"
+
+#: builtin/clone.c:810
msgid "--local is ignored"
msgstr "--local wird ignoriert"
-#: builtin/clone.c:807
+#: builtin/clone.c:814 builtin/fetch.c:1119
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr "Tiefe %s ist keine positive Zahl"
+
+#: builtin/clone.c:824
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "Zielpfad '%s' existiert bereits und ist kein leeres Verzeichnis."
-#: builtin/clone.c:817
+#: builtin/clone.c:834
#, c-format
msgid "working tree '%s' already exists."
msgstr "Arbeitsverzeichnis '%s' existiert bereits."
-#: builtin/clone.c:830 builtin/clone.c:842
+#: builtin/clone.c:847 builtin/clone.c:859
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
-#: builtin/clone.c:833
+#: builtin/clone.c:850
#, c-format
msgid "could not create work tree dir '%s'."
msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen."
-#: builtin/clone.c:852
+#: builtin/clone.c:869
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Klone in Bare-Repository '%s'...\n"
-#: builtin/clone.c:854
+#: builtin/clone.c:871
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Klone nach '%s'...\n"
-#: builtin/clone.c:888
+#: builtin/clone.c:906
#, c-format
msgid "Don't know how to clone %s"
msgstr "Weiß nicht wie %s zu klonen ist."
-#: builtin/clone.c:939 builtin/clone.c:947
+#: builtin/clone.c:957 builtin/clone.c:965
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden"
-#: builtin/clone.c:950
+#: builtin/clone.c:968
msgid "You appear to have cloned an empty repository."
msgstr "Sie scheinen ein leeres Repository geklont zu haben."
@@ -4464,7 +4518,7 @@ msgstr "zeigt Status im Kurzformat"
msgid "show branch information"
msgstr "zeigt Branchinformationen"
-#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:460
+#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507
msgid "machine-readable output"
msgstr "maschinenlesbare Ausgabe"
@@ -4547,7 +4601,7 @@ msgstr "Autor"
msgid "override author for commit"
msgstr "überschreibt Autor eines Commits"
-#: builtin/commit.c:1458 builtin/gc.c:260
+#: builtin/commit.c:1458 builtin/gc.c:261
msgid "date"
msgstr "Datum"
@@ -4555,7 +4609,7 @@ msgstr "Datum"
msgid "override date for commit"
msgstr "überschreibt Datum eines Commits"
-#: builtin/commit.c:1459 builtin/merge.c:223 builtin/notes.c:405
+#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405
#: builtin/notes.c:562 builtin/tag.c:455
msgid "message"
msgstr "Beschreibung"
@@ -4613,11 +4667,11 @@ msgstr ""
msgid "include status in commit message template"
msgstr "fügt Status in die Commit-Beschreibungsvorlage ein"
-#: builtin/commit.c:1470 builtin/merge.c:230 builtin/tag.c:461
+#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461
msgid "key id"
msgstr "Schlüssel-ID"
-#: builtin/commit.c:1471 builtin/merge.c:231
+#: builtin/commit.c:1471 builtin/merge.c:224
msgid "GPG sign commit"
msgstr "signiert Commit mit GPG"
@@ -4674,7 +4728,7 @@ msgstr "erlaubt Aufzeichnung einer Änderung mit einer leeren Beschreibung"
msgid "could not parse HEAD commit"
msgstr "Konnte Commit von HEAD nicht analysieren."
-#: builtin/commit.c:1567 builtin/merge.c:525
+#: builtin/commit.c:1567 builtin/merge.c:518
#, c-format
msgid "could not open '%s' for reading"
msgstr "Konnte '%s' nicht zum Lesen öffnen."
@@ -4693,29 +4747,29 @@ msgstr "Konnte MERGE_MODE nicht lesen"
msgid "could not read commit message: %s"
msgstr "Konnte Commit-Beschreibung nicht lesen: %s"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1611
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Commit abgebrochen; Sie haben die Beschreibung nicht editiert.\n"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1616
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Commit aufgrund leerer Beschreibung abgebrochen.\n"
-#: builtin/commit.c:1634 builtin/merge.c:861 builtin/merge.c:886
+#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879
msgid "failed to write commit object"
msgstr "Fehler beim Schreiben des Commit-Objektes."
-#: builtin/commit.c:1655
+#: builtin/commit.c:1652
msgid "cannot lock HEAD ref"
msgstr "Kann Referenz von HEAD nicht sperren."
-#: builtin/commit.c:1659
+#: builtin/commit.c:1656
msgid "cannot update HEAD ref"
msgstr "Kann Referenz von HEAD nicht aktualisieren."
-#: builtin/commit.c:1670
+#: builtin/commit.c:1667
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full or quota is\n"
@@ -4978,7 +5032,7 @@ msgstr "betrachtet die jüngsten <n> Tags (Standard: 10)"
msgid "only consider tags matching <pattern>"
msgstr "betrachtet nur Tags die <Muster> entsprechen"
-#: builtin/describe.c:423 builtin/name-rev.c:322
+#: builtin/describe.c:423 builtin/name-rev.c:321
msgid "show abbreviated commit object as fallback"
msgstr "zeigt gekürztes Commit-Objekt, wenn sonst nichts zutrifft"
@@ -5004,31 +5058,31 @@ msgstr "Keine Namen gefunden, kann nichts beschreiben."
msgid "--dirty is incompatible with commit-ishes"
msgstr "Die Option --dirty kann nicht mit Commits verwendet werden."
-#: builtin/diff.c:79
+#: builtin/diff.c:85
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "'%s': keine reguläre Datei oder symbolischer Verweis"
-#: builtin/diff.c:230
+#: builtin/diff.c:236
#, c-format
msgid "invalid option: %s"
msgstr "Ungültige Option: %s"
-#: builtin/diff.c:307
+#: builtin/diff.c:357
msgid "Not a git repository"
msgstr "Kein Git-Repository"
-#: builtin/diff.c:350
+#: builtin/diff.c:400
#, c-format
msgid "invalid object '%s' given."
msgstr "Objekt '%s' ist ungültig."
-#: builtin/diff.c:359
+#: builtin/diff.c:409
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "Mehr als zwei Blobs angegeben: '%s'"
-#: builtin/diff.c:366
+#: builtin/diff.c:416
#, c-format
msgid "unhandled object '%s' given."
msgstr "unbehandeltes Objekt '%s' angegeben"
@@ -5089,147 +5143,157 @@ msgstr "git fetch --multiple [<Optionen>] [(<Repository> | <Gruppe>)...]"
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<Optionen>]"
-#: builtin/fetch.c:74
+#: builtin/fetch.c:75
msgid "fetch from all remotes"
msgstr "fordert von allen Remote-Repositories an"
-#: builtin/fetch.c:76
+#: builtin/fetch.c:77
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "hängt an .git/FETCH_HEAD an, anstatt zu überschreiben"
-#: builtin/fetch.c:78
+#: builtin/fetch.c:79
msgid "path to upload pack on remote end"
msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite"
-#: builtin/fetch.c:79
+#: builtin/fetch.c:80
msgid "force overwrite of local branch"
msgstr "erzwingt das Ãœberschreiben von lokalen Branches"
-#: builtin/fetch.c:81
+#: builtin/fetch.c:82
msgid "fetch from multiple remotes"
msgstr "fordert von mehreren Remote-Repositories an"
-#: builtin/fetch.c:83
+#: builtin/fetch.c:84
msgid "fetch all tags and associated objects"
msgstr "fordert alle Tags und verbundene Objekte an"
-#: builtin/fetch.c:85
+#: builtin/fetch.c:86
msgid "do not fetch all tags (--no-tags)"
msgstr "fordert nicht alle Tags an (--no-tags)"
-#: builtin/fetch.c:87
+#: builtin/fetch.c:88
msgid "prune remote-tracking branches no longer on remote"
msgstr ""
"entfernt Remote-Tracking-Branches, die sich nicht mehr im Remote-Repository "
"befinden"
-#: builtin/fetch.c:88
+#: builtin/fetch.c:89
msgid "on-demand"
msgstr "bei-Bedarf"
-#: builtin/fetch.c:89
+#: builtin/fetch.c:90
msgid "control recursive fetching of submodules"
msgstr "kontrolliert rekursive Anforderungen von Submodulen"
-#: builtin/fetch.c:93
+#: builtin/fetch.c:94
msgid "keep downloaded pack"
msgstr "behält heruntergeladenes Paket"
-#: builtin/fetch.c:95
+#: builtin/fetch.c:96
msgid "allow updating of HEAD ref"
msgstr "erlaubt Aktualisierung der \"HEAD\"-Referenz"
-#: builtin/fetch.c:98
+#: builtin/fetch.c:99
msgid "deepen history of shallow clone"
-msgstr "vertieft die Historie eines flachen Klons"
+msgstr "vertieft die Historie eines Klons mit unvollständiger Historie (shallow)"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:101
msgid "convert to a complete repository"
msgstr "konvertiert zu einem vollständigen Repository"
-#: builtin/fetch.c:102 builtin/log.c:1197
+#: builtin/fetch.c:103 builtin/log.c:1197
msgid "dir"
msgstr "Verzeichnis"
-#: builtin/fetch.c:103
+#: builtin/fetch.c:104
msgid "prepend this to submodule path output"
msgstr "stellt dies an die Ausgabe der Submodul-Pfade voran"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:107
msgid "default mode for recursion"
msgstr "Standard-Modus für Rekursion"
-#: builtin/fetch.c:236
+#: builtin/fetch.c:109
+msgid "accept refs that update .git/shallow"
+msgstr "akzeptiert Referenzen die .git/shallow aktualisieren"
+
+#: builtin/fetch.c:347
msgid "Couldn't find remote ref HEAD"
msgstr "Konnte Remote-Referenz von HEAD nicht finden."
-#: builtin/fetch.c:290
+#: builtin/fetch.c:411
#, c-format
msgid "object %s not found"
msgstr "Objekt %s nicht gefunden"
-#: builtin/fetch.c:295
+#: builtin/fetch.c:416
msgid "[up to date]"
msgstr "[aktuell]"
-#: builtin/fetch.c:309
+#: builtin/fetch.c:430
#, c-format
msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
msgstr ""
"! %-*s %-*s -> %s (kann \"fetch\" im aktuellen Branch nicht ausführen)"
-#: builtin/fetch.c:310 builtin/fetch.c:396
+#: builtin/fetch.c:431 builtin/fetch.c:517
msgid "[rejected]"
msgstr "[zurückgewiesen]"
-#: builtin/fetch.c:321
+#: builtin/fetch.c:442
msgid "[tag update]"
msgstr "[Tag Aktualisierung]"
-#: builtin/fetch.c:323 builtin/fetch.c:358 builtin/fetch.c:376
+#: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497
msgid " (unable to update local ref)"
msgstr " (kann lokale Referenz nicht aktualisieren)"
-#: builtin/fetch.c:341
+#: builtin/fetch.c:462
msgid "[new tag]"
msgstr "[neues Tag]"
-#: builtin/fetch.c:344
+#: builtin/fetch.c:465
msgid "[new branch]"
msgstr "[neuer Branch]"
-#: builtin/fetch.c:347
+#: builtin/fetch.c:468
msgid "[new ref]"
msgstr "[neue Referenz]"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "unable to update local ref"
msgstr "kann lokale Referenz nicht aktualisieren"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "forced update"
msgstr "Aktualisierung erzwungen"
-#: builtin/fetch.c:398
+#: builtin/fetch.c:519
msgid "(non-fast-forward)"
msgstr "(kein Vorspulen)"
-#: builtin/fetch.c:429 builtin/fetch.c:735
+#: builtin/fetch.c:552 builtin/fetch.c:785
#, c-format
msgid "cannot open %s: %s\n"
msgstr "kann %s nicht öffnen: %s\n"
-#: builtin/fetch.c:438
+#: builtin/fetch.c:561
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n"
-#: builtin/fetch.c:537
+#: builtin/fetch.c:579
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr "%s wurde zurückgewiesen, da Ursprungs-Commits von Repositories"
+"mit unvollständiger Historie (shallow) nicht aktualisiert werden dürfen."
+
+#: builtin/fetch.c:667 builtin/fetch.c:750
#, c-format
msgid "From %.*s\n"
msgstr "Von %.*s\n"
-#: builtin/fetch.c:548
+#: builtin/fetch.c:678
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -5238,57 +5302,57 @@ msgstr ""
"Einige lokale Referenzen konnten nicht aktualisiert werden; versuchen Sie\n"
"'git remote prune %s' um jeden älteren, widersprüchlichen Branch zu löschen."
-#: builtin/fetch.c:598
+#: builtin/fetch.c:730
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s wird unreferenziert)"
-#: builtin/fetch.c:599
+#: builtin/fetch.c:731
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s wurde unreferenziert)"
-#: builtin/fetch.c:606
+#: builtin/fetch.c:755
msgid "[deleted]"
msgstr "[gelöscht]"
-#: builtin/fetch.c:607 builtin/remote.c:1055
+#: builtin/fetch.c:756 builtin/remote.c:1050
msgid "(none)"
msgstr "(nichts)"
-#: builtin/fetch.c:725
+#: builtin/fetch.c:775
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr ""
"Der \"fetch\" in den aktuellen Branch %s von einem nicht-Bare-Repository "
"wurde verweigert."
-#: builtin/fetch.c:744
+#: builtin/fetch.c:794
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Option \"%s\" Wert \"%s\" ist nicht gültig für %s"
-#: builtin/fetch.c:747
+#: builtin/fetch.c:797
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Option \"%s\" wird ignoriert für %s\n"
-#: builtin/fetch.c:801
+#: builtin/fetch.c:853
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "Weiß nicht wie von %s angefordert wird."
-#: builtin/fetch.c:976
+#: builtin/fetch.c:1015
#, c-format
msgid "Fetching %s\n"
msgstr "Fordere an von %s\n"
-#: builtin/fetch.c:978 builtin/remote.c:100
+#: builtin/fetch.c:1017 builtin/remote.c:90
#, c-format
msgid "Could not fetch %s"
msgstr "Konnte nicht von %s anfordern"
-#: builtin/fetch.c:997
+#: builtin/fetch.c:1036
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -5297,35 +5361,35 @@ msgstr ""
"oder den Namen des Remote-Repositories an, von welchem neue\n"
"Commits angefordert werden sollen."
-#: builtin/fetch.c:1020
+#: builtin/fetch.c:1059
msgid "You need to specify a tag name."
msgstr "Sie müssen den Namen des Tags angeben."
-#: builtin/fetch.c:1068
+#: builtin/fetch.c:1107
msgid "--depth and --unshallow cannot be used together"
msgstr ""
"Die Optionen --depth und --unshallow können nicht gemeinsam verwendet werden."
-#: builtin/fetch.c:1070
+#: builtin/fetch.c:1109
msgid "--unshallow on a complete repository does not make sense"
msgstr ""
-"Die Option --unshallow kann nicht in einem vollständigen Repository "
+"Die Option --unshallow kann nicht in einem Repository mit unvollständiger Historie "
"verwendet werden."
-#: builtin/fetch.c:1089
+#: builtin/fetch.c:1132
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all akzeptiert kein Repository als Argument"
-#: builtin/fetch.c:1091
+#: builtin/fetch.c:1134
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all kann nicht mit Refspecs verwendet werden."
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1145
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Kein Remote-Repository (einzeln oder Gruppe): %s"
-#: builtin/fetch.c:1110
+#: builtin/fetch.c:1153
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr ""
"Das Abholen einer Gruppe von Remote-Repositories kann nicht mit der Angabe\n"
@@ -5337,8 +5401,9 @@ msgstr ""
"git fmt-merge-msg [-m <Beschreibung>] [--log[=<n>]|--no-log] [--file <Datei>]"
#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702
-#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:178
-#: builtin/tag.c:446 parse-options.h:135 parse-options.h:245
+#: builtin/merge.c:196 builtin/repack.c:160 builtin/repack.c:164
+#: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:446
+#: parse-options.h:135 parse-options.h:242
msgid "n"
msgstr "Anzahl"
@@ -5362,43 +5427,43 @@ msgstr "verwendet <Text> als Beschreibungsanfang"
msgid "file to read from"
msgstr "Datei zum Einlesen"
-#: builtin/for-each-ref.c:995
+#: builtin/for-each-ref.c:1063
msgid "git for-each-ref [options] [<pattern>]"
msgstr "git for-each-ref [Optionen] [<Muster>]"
-#: builtin/for-each-ref.c:1010
+#: builtin/for-each-ref.c:1078
msgid "quote placeholders suitably for shells"
msgstr "formatiert Platzhalter als Shell-String"
-#: builtin/for-each-ref.c:1012
+#: builtin/for-each-ref.c:1080
msgid "quote placeholders suitably for perl"
msgstr "formatiert Platzhalter als Perl-String"
-#: builtin/for-each-ref.c:1014
+#: builtin/for-each-ref.c:1082
msgid "quote placeholders suitably for python"
msgstr "formatiert Platzhalter als Python-String"
-#: builtin/for-each-ref.c:1016
+#: builtin/for-each-ref.c:1084
msgid "quote placeholders suitably for tcl"
msgstr "formatiert Platzhalter als TCL-String"
-#: builtin/for-each-ref.c:1019
+#: builtin/for-each-ref.c:1087
msgid "show only <n> matched refs"
msgstr "zeigt nur <n> passende Referenzen"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088 builtin/replace.c:177
msgid "format"
msgstr "Format"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088
msgid "format to use for the output"
msgstr "für die Ausgabe zu verwendendes Format"
-#: builtin/for-each-ref.c:1021
+#: builtin/for-each-ref.c:1089
msgid "key"
msgstr "Schüssel"
-#: builtin/for-each-ref.c:1022
+#: builtin/for-each-ref.c:1090
msgid "field name to sort on"
msgstr "sortiere nach diesem Feld"
@@ -5442,42 +5507,43 @@ msgstr "aktiviert genauere Prüfung"
msgid "write dangling objects in .git/lost-found"
msgstr "schreibt unreferenzierte Objekte nach .git/lost-found"
-#: builtin/fsck.c:623 builtin/prune.c:134
+#: builtin/fsck.c:623 builtin/prune.c:144
msgid "show progress"
msgstr "zeigt Fortschrittsanzeige"
-#: builtin/gc.c:23
+#: builtin/gc.c:24
msgid "git gc [options]"
msgstr "git gc [Optionen]"
-#: builtin/gc.c:79
+#: builtin/gc.c:80
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Ungültiger %s: '%s'"
-#: builtin/gc.c:106
+#: builtin/gc.c:107
#, c-format
msgid "insanely long object directory %.*s"
msgstr "zu langes Objekt-Verzeichnis %.*s"
-#: builtin/gc.c:261
+#: builtin/gc.c:262
msgid "prune unreferenced objects"
msgstr "entfernt unreferenzierte Objekte"
-#: builtin/gc.c:263
+#: builtin/gc.c:264
msgid "be more thorough (increased runtime)"
msgstr "mehr Gründlichkeit (erhöht Laufzeit)"
-#: builtin/gc.c:264
+#: builtin/gc.c:265
msgid "enable auto-gc mode"
msgstr "aktiviert \"auto-gc\" Modus"
-#: builtin/gc.c:265
+#: builtin/gc.c:266
msgid "force running gc even if there may be another gc running"
-msgstr "erzwingt Ausführung von \"git gc\" selbst wenn ein anderes\n"
+msgstr ""
+"erzwingt Ausführung von \"git gc\" selbst wenn ein anderes\n"
"\"git gc\" bereits ausgeführt wird"
-#: builtin/gc.c:305
+#: builtin/gc.c:306
#, c-format
msgid ""
"Auto packing the repository for optimum performance. You may also\n"
@@ -5488,7 +5554,7 @@ msgstr ""
"Siehe \"git help gc\" für weitere Informationen.\n"
#. be quiet on --auto
-#: builtin/gc.c:315
+#: builtin/gc.c:316
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -5496,7 +5562,7 @@ msgstr ""
"\"git gc\" wird bereits auf Maschine '%s' pid %<PRIuMAX> ausgeführt\n"
"(benutzen Sie --force falls nicht)"
-#: builtin/gc.c:340
+#: builtin/gc.c:341
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
@@ -5845,57 +5911,57 @@ msgstr ""
"'%s': Kommando für unterstützten Handbuchbetrachter.\n"
"Sie könnten stattdessen 'man.<Werkzeug>.path' benutzen."
-#: builtin/help.c:349
+#: builtin/help.c:353
#, c-format
msgid "'%s': unknown man viewer."
msgstr "'%s': unbekannter Handbuch-Betrachter."
-#: builtin/help.c:366
+#: builtin/help.c:370
msgid "no man viewer handled the request"
msgstr "kein Handbuch-Betrachter konnte mit dieser Anfrage umgehen"
-#: builtin/help.c:374
+#: builtin/help.c:378
msgid "no info viewer handled the request"
msgstr "kein Informations-Betrachter konnte mit dieser Anfrage umgehen"
-#: builtin/help.c:420
+#: builtin/help.c:424
msgid "Defining attributes per path"
msgstr "Definition von Attributen pro Pfad"
-#: builtin/help.c:421
+#: builtin/help.c:425
msgid "A Git glossary"
msgstr "Ein Git-Glossar"
-#: builtin/help.c:422
+#: builtin/help.c:426
msgid "Specifies intentionally untracked files to ignore"
msgstr "Spezifikation von bewusst ignorierten, unbeobachteten Dateien"
-#: builtin/help.c:423
+#: builtin/help.c:427
msgid "Defining submodule properties"
msgstr "Definition von Submodul-Eigenschaften"
-#: builtin/help.c:424
+#: builtin/help.c:428
msgid "Specifying revisions and ranges for Git"
msgstr "Spezifikation von Commits und Bereichen für Git"
-#: builtin/help.c:425
+#: builtin/help.c:429
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "Eine einführende Anleitung zu Git (für Version 1.5.1 oder neuer)"
-#: builtin/help.c:426
+#: builtin/help.c:430
msgid "An overview of recommended workflows with Git"
msgstr "Eine Übersicht über empfohlene Arbeitsabläufe mit Git"
-#: builtin/help.c:438
+#: builtin/help.c:442
msgid "The common Git guides are:\n"
msgstr "Die allgemein verwendeten Git-Anleitungen sind:\n"
-#: builtin/help.c:460 builtin/help.c:476
+#: builtin/help.c:463 builtin/help.c:480
#, c-format
msgid "usage: %s%s"
msgstr "Verwendung: %s%s"
-#: builtin/help.c:492
+#: builtin/help.c:496
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "für `git %s' wurde der Alias `%s' angelegt"
@@ -6305,21 +6371,21 @@ msgstr "Berechtigungen"
msgid "specify that the git repository is to be shared amongst several users"
msgstr "gibt an, dass das Git-Repository mit mehreren Benutzern geteilt wird"
-#: builtin/init-db.c:493 builtin/prune-packed.c:75 builtin/repack.c:155
+#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155
msgid "be quiet"
msgstr "weniger Ausgaben"
-#: builtin/init-db.c:522 builtin/init-db.c:529
+#: builtin/init-db.c:525 builtin/init-db.c:530
#, c-format
msgid "cannot mkdir %s"
msgstr "kann Verzeichnis %s nicht erstellen"
-#: builtin/init-db.c:533
+#: builtin/init-db.c:534
#, c-format
msgid "cannot chdir to %s"
msgstr "kann nicht in Verzeichnis %s wechseln"
-#: builtin/init-db.c:555
+#: builtin/init-db.c:556
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -6328,11 +6394,11 @@ msgstr ""
"%s (oder --work-tree=<Verzeichnis>) nicht erlaubt ohne Spezifizierung von %s "
"(oder --git-dir=<Verzeichnis>)"
-#: builtin/init-db.c:579
+#: builtin/init-db.c:580
msgid "Cannot access current working directory"
msgstr "Kann nicht auf aktuelles Arbeitsverzeichnis zugreifen."
-#: builtin/init-db.c:586
+#: builtin/init-db.c:587
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "Kann nicht auf Arbeitsverzeichnis '%s' zugreifen."
@@ -6768,153 +6834,153 @@ msgstr "Verfügbare Strategien sind:"
msgid "Available custom strategies are:"
msgstr "Verfügbare benutzerdefinierte Strategien sind:"
-#: builtin/merge.c:198
+#: builtin/merge.c:191
msgid "do not show a diffstat at the end of the merge"
msgstr "zeigt keine Zusammenfassung der Unterschiede am Schluss des Merges an"
-#: builtin/merge.c:201
+#: builtin/merge.c:194
msgid "show a diffstat at the end of the merge"
msgstr "zeigt eine Zusammenfassung der Unterschiede am Schluss des Merges an"
-#: builtin/merge.c:202
+#: builtin/merge.c:195
msgid "(synonym to --stat)"
msgstr "(Synonym für --stat)"
-#: builtin/merge.c:204
+#: builtin/merge.c:197
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"fügt (höchstens <n>) Einträge von \"shortlog\" zur Beschreibung des Merge-"
"Commits hinzu"
-#: builtin/merge.c:207
+#: builtin/merge.c:200
msgid "create a single commit instead of doing a merge"
msgstr "erzeugt einen einzelnen Commit anstatt eines Merges"
-#: builtin/merge.c:209
+#: builtin/merge.c:202
msgid "perform a commit if the merge succeeds (default)"
msgstr "führt einen Commit durch, wenn der Merge erfolgreich war (Standard)"
-#: builtin/merge.c:211
+#: builtin/merge.c:204
msgid "edit message before committing"
msgstr "Bearbeitung der Beschreibung vor dem Commit"
-#: builtin/merge.c:212
+#: builtin/merge.c:205
msgid "allow fast-forward (default)"
msgstr "erlaubt Vorspulen (Standard)"
-#: builtin/merge.c:214
+#: builtin/merge.c:207
msgid "abort if fast-forward is not possible"
msgstr "bricht ab, wenn kein Vorspulen möglich ist"
-#: builtin/merge.c:218
+#: builtin/merge.c:211
msgid "Verify that the named commit has a valid GPG signature"
msgstr "überprüft den genannten Commit auf eine gültige GPG-Signatur"
-#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:89
+#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89
msgid "strategy"
msgstr "Strategie"
-#: builtin/merge.c:220
+#: builtin/merge.c:213
msgid "merge strategy to use"
msgstr "zu verwendende Merge-Strategie"
-#: builtin/merge.c:221
+#: builtin/merge.c:214
msgid "option=value"
msgstr "Option=Wert"
-#: builtin/merge.c:222
+#: builtin/merge.c:215
msgid "option for selected merge strategy"
msgstr "Option für ausgewählte Merge-Strategie"
-#: builtin/merge.c:224
+#: builtin/merge.c:217
msgid "merge commit message (for a non-fast-forward merge)"
msgstr ""
"führt Commit-Beschreibung zusammen (für einen Merge, der kein Vorspulen war)"
-#: builtin/merge.c:228
+#: builtin/merge.c:221
msgid "abort the current in-progress merge"
msgstr "bricht den sich im Gange befindlichen Merge ab"
-#: builtin/merge.c:257
+#: builtin/merge.c:250
msgid "could not run stash."
msgstr "Konnte \"stash\" nicht ausführen."
-#: builtin/merge.c:262
+#: builtin/merge.c:255
msgid "stash failed"
msgstr "\"stash\" fehlgeschlagen"
-#: builtin/merge.c:267
+#: builtin/merge.c:260
#, c-format
msgid "not a valid object: %s"
msgstr "kein gültiges Objekt: %s"
-#: builtin/merge.c:286 builtin/merge.c:303
+#: builtin/merge.c:279 builtin/merge.c:296
msgid "read-tree failed"
msgstr "read-tree fehlgeschlagen"
-#: builtin/merge.c:333
+#: builtin/merge.c:326
msgid " (nothing to squash)"
msgstr " (nichts zu quetschen)"
-#: builtin/merge.c:346
+#: builtin/merge.c:339
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Quetsche Commit -- HEAD wird nicht aktualisiert\n"
-#: builtin/merge.c:378
+#: builtin/merge.c:371
msgid "Writing SQUASH_MSG"
msgstr "Schreibe SQUASH_MSG"
-#: builtin/merge.c:380
+#: builtin/merge.c:373
msgid "Finishing SQUASH_MSG"
msgstr "Schließe SQUASH_MSG ab"
-#: builtin/merge.c:403
+#: builtin/merge.c:396
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr "Keine Merge-Commit-Beschreibung -- HEAD wird nicht aktualisiert\n"
-#: builtin/merge.c:453
+#: builtin/merge.c:446
#, c-format
msgid "'%s' does not point to a commit"
msgstr "'%s' zeigt auf keinen Commit"
-#: builtin/merge.c:565
+#: builtin/merge.c:558
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Ungültiger branch.%s.mergeoptions String: %s"
-#: builtin/merge.c:657
+#: builtin/merge.c:650
msgid "git write-tree failed to write a tree"
msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl"
-#: builtin/merge.c:685
+#: builtin/merge.c:678
msgid "Not handling anything other than two heads merge."
msgstr "Es wird nur der Merge von zwei Branches behandelt."
-#: builtin/merge.c:699
+#: builtin/merge.c:692
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Unbekannte Option für merge-recursive: -X%s"
-#: builtin/merge.c:713
+#: builtin/merge.c:706
#, c-format
msgid "unable to write %s"
msgstr "konnte %s nicht schreiben"
-#: builtin/merge.c:802
+#: builtin/merge.c:795
#, c-format
msgid "Could not read from '%s'"
msgstr "konnte nicht von '%s' lesen"
-#: builtin/merge.c:811
+#: builtin/merge.c:804
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"Merge wurde nicht committet; benutzen Sie 'git commit' um den Merge "
"abzuschließen.\n"
-#: builtin/merge.c:817
+#: builtin/merge.c:810
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -6930,50 +6996,50 @@ msgstr ""
"Zeilen beginnend mit '%c' werden ignoriert, und eine leere Beschreibung\n"
"bricht den Commit ab.\n"
-#: builtin/merge.c:841
+#: builtin/merge.c:834
msgid "Empty commit message."
msgstr "Leere Commit-Beschreibung"
-#: builtin/merge.c:853
+#: builtin/merge.c:846
#, c-format
msgid "Wonderful.\n"
msgstr "Wunderbar.\n"
-#: builtin/merge.c:918
+#: builtin/merge.c:911
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen "
"Sie dann das Ergebnis.\n"
-#: builtin/merge.c:934
+#: builtin/merge.c:927
#, c-format
msgid "'%s' is not a commit"
msgstr "'%s' ist kein Commit"
-#: builtin/merge.c:975
+#: builtin/merge.c:968
msgid "No current branch."
msgstr "Sie befinden sich auf keinem Branch."
-#: builtin/merge.c:977
+#: builtin/merge.c:970
msgid "No remote for the current branch."
msgstr "Kein Remote-Repository für den aktuellen Branch."
-#: builtin/merge.c:979
+#: builtin/merge.c:972
msgid "No default upstream defined for the current branch."
msgstr ""
"Es ist kein Standard-Upstream-Branch für den aktuellen Branch definiert."
-#: builtin/merge.c:984
+#: builtin/merge.c:977
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "Kein Remote-Tracking-Branch für %s von %s"
-#: builtin/merge.c:1140
+#: builtin/merge.c:1133
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "Es gibt keinen Merge zum Abbrechen (vermisse MERGE_HEAD)"
-#: builtin/merge.c:1156 git-pull.sh:31
+#: builtin/merge.c:1149 git-pull.sh:31
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -6981,11 +7047,11 @@ msgstr ""
"Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n"
"Bitte committen Sie Ihre Änderungen, bevor Sie \"merge\" ausführen können."
-#: builtin/merge.c:1159 git-pull.sh:34
+#: builtin/merge.c:1152 git-pull.sh:34
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
-#: builtin/merge.c:1163
+#: builtin/merge.c:1156
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -6993,143 +7059,151 @@ msgstr ""
"Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert).\n"
"Bitte committen Sie Ihre Änderungen, bevor Sie \"merge\" ausführen können."
-#: builtin/merge.c:1166
+#: builtin/merge.c:1159
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr ""
"Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert)."
-#: builtin/merge.c:1175
+#: builtin/merge.c:1168
msgid "You cannot combine --squash with --no-ff."
msgstr "Sie können --squash nicht mit --no-ff kombinieren."
-#: builtin/merge.c:1184
+#: builtin/merge.c:1177
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr "Kein Commit angegeben und merge.defaultToUpstream ist nicht gesetzt."
-#: builtin/merge.c:1216
+#: builtin/merge.c:1209
msgid "Can merge only exactly one commit into empty head"
msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen."
-#: builtin/merge.c:1219
+#: builtin/merge.c:1212
msgid "Squash commit into empty head not supported yet"
msgstr ""
"Bin auf einem Commit, der noch geboren wird; kann \"squash\" nicht ausführen."
-#: builtin/merge.c:1221
+#: builtin/merge.c:1214
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr ""
"Nicht vorzuspulender Commit kann nicht in einem leeren Branch verwendet "
"werden."
-#: builtin/merge.c:1226
+#: builtin/merge.c:1219
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - nichts was wir zusammenführen können"
-#: builtin/merge.c:1277
+#: builtin/merge.c:1270
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Commit %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s."
-#: builtin/merge.c:1280
+#: builtin/merge.c:1273
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "Commit %s hat eine ungültige GPG-Signatur, angeblich von %s."
#. 'N'
-#: builtin/merge.c:1283
+#: builtin/merge.c:1276
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Commit %s hat keine GPG-Signatur."
-#: builtin/merge.c:1286
+#: builtin/merge.c:1279
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Commit %s hat eine gültige GPG-Signatur von %s\n"
-#: builtin/merge.c:1370
+#: builtin/merge.c:1363
#, c-format
msgid "Updating %s..%s\n"
msgstr "Aktualisiere %s..%s\n"
-#: builtin/merge.c:1409
+#: builtin/merge.c:1402
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Probiere wirklich trivialen \"in-index\"-Merge...\n"
-#: builtin/merge.c:1416
+#: builtin/merge.c:1409
#, c-format
msgid "Nope.\n"
msgstr "Nein.\n"
-#: builtin/merge.c:1448
+#: builtin/merge.c:1441
msgid "Not possible to fast-forward, aborting."
msgstr "Vorspulen nicht möglich, breche ab."
-#: builtin/merge.c:1471 builtin/merge.c:1550
+#: builtin/merge.c:1464 builtin/merge.c:1543
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Rücklauf des Verzeichnisses bis zum Ursprung...\n"
-#: builtin/merge.c:1475
+#: builtin/merge.c:1468
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Probiere Merge-Strategie %s...\n"
-#: builtin/merge.c:1541
+#: builtin/merge.c:1534
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Keine Merge-Strategie behandelt diesen Merge.\n"
-#: builtin/merge.c:1543
+#: builtin/merge.c:1536
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Merge mit Strategie %s fehlgeschlagen.\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1545
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Benutzen Sie \"%s\" um die Auflösung per Hand vorzubereiten.\n"
-#: builtin/merge.c:1564
+#: builtin/merge.c:1557
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"Automatischer Merge abgeschlossen; halte, wie gewünscht, vor dem Commit an\n"
-#: builtin/merge-base.c:26
+#: builtin/merge-base.c:29
msgid "git merge-base [-a|--all] <commit> <commit>..."
msgstr "git merge-base [-a|--all] <Commit> <Commit>..."
-#: builtin/merge-base.c:27
+#: builtin/merge-base.c:30
msgid "git merge-base [-a|--all] --octopus <commit>..."
msgstr "git merge-base [-a|--all] --octopus <Commit>..."
-#: builtin/merge-base.c:28
+#: builtin/merge-base.c:31
msgid "git merge-base --independent <commit>..."
msgstr "git merge-base --independent <Commit>..."
-#: builtin/merge-base.c:29
+#: builtin/merge-base.c:32
msgid "git merge-base --is-ancestor <commit> <commit>"
msgstr "git merge-base --is-ancestor <Commit> <Commit>"
-#: builtin/merge-base.c:98
+#: builtin/merge-base.c:33
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr "git merge-base --fork-point <Referenz> [<Commit>]"
+
+#: builtin/merge-base.c:214
msgid "output all common ancestors"
msgstr "Ausgabe aller gemeinsamen Vorgänger-Commits"
-#: builtin/merge-base.c:99
+#: builtin/merge-base.c:216
msgid "find ancestors for a single n-way merge"
msgstr "findet Vorgänger-Commits für einen einzelnen n-Wege-Merge"
-#: builtin/merge-base.c:100
+#: builtin/merge-base.c:218
msgid "list revs not reachable from others"
msgstr "listet Commits auf, die nicht durch Andere erreichbar sind"
-#: builtin/merge-base.c:102
+#: builtin/merge-base.c:220
msgid "is the first one ancestor of the other?"
msgstr "ist der Erste ein Vorgänger-Commit von dem Anderen?"
+#: builtin/merge-base.c:222
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr "findet wo <Commit> von Reflog von <Referenz> abgespalten wurde"
+
#: builtin/merge-file.c:8
msgid ""
"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
@@ -7190,124 +7264,129 @@ msgstr "erlaubt die Erstellung von mehr als einem \"Tree\"-Objekt"
msgid "git mv [options] <source>... <destination>"
msgstr "git mv [Optionen] <Quelle>... <Ziel>"
-#: builtin/mv.c:67
+#: builtin/mv.c:71
msgid "force move/rename even if target exists"
msgstr "erzwingt Verschieben/Umbenennen, auch wenn das Ziel existiert"
-#: builtin/mv.c:68
+#: builtin/mv.c:72
msgid "skip move/rename errors"
msgstr "überspringt Fehler beim Verschieben oder Umbenennen"
-#: builtin/mv.c:113
+#: builtin/mv.c:122
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Prüfe Umbenennung von '%s' nach '%s'\n"
-#: builtin/mv.c:117
+#: builtin/mv.c:126
msgid "bad source"
msgstr "ungültige Quelle"
-#: builtin/mv.c:120
+#: builtin/mv.c:129
msgid "can not move directory into itself"
msgstr "kann Verzeichnis nicht in sich selbst verschieben"
-#: builtin/mv.c:123
+#: builtin/mv.c:132
msgid "cannot move directory over file"
msgstr "kann Verzeichnis nicht über Datei verschieben"
-#: builtin/mv.c:129
+#: builtin/mv.c:138
#, c-format
msgid "Huh? Directory %s is in index and no submodule?"
msgstr "Huh? Verzeichnis %s ist zum Commit vorgemerkt und kein Submodul?"
-#: builtin/mv.c:131 builtin/rm.c:318
+#: builtin/mv.c:140 builtin/rm.c:318
msgid "Please, stage your changes to .gitmodules or stash them to proceed"
msgstr ""
-"Bitte merken Sie Ihre Änderungen in .gitmodules zum Commit vor oder benutzen\n"
+"Bitte merken Sie Ihre Änderungen in .gitmodules zum Commit vor oder "
+"benutzen\n"
"Sie \"stash\" um fortzufahren."
-#: builtin/mv.c:147
+#: builtin/mv.c:156
#, c-format
msgid "Huh? %.*s is in index?"
msgstr "Huh? %.*s ist zum Commit vorgemerkt?"
-#: builtin/mv.c:159
+#: builtin/mv.c:168
msgid "source directory is empty"
msgstr "Quellverzeichnis ist leer"
-#: builtin/mv.c:191
+#: builtin/mv.c:200
msgid "not under version control"
msgstr "nicht unter Versionskontrolle"
-#: builtin/mv.c:193
+#: builtin/mv.c:202
msgid "destination exists"
msgstr "Ziel existiert bereits"
-#: builtin/mv.c:201
+#: builtin/mv.c:210
#, c-format
msgid "overwriting '%s'"
msgstr "überschreibe '%s'"
-#: builtin/mv.c:204
+#: builtin/mv.c:213
msgid "Cannot overwrite"
msgstr "Kann nicht überschreiben"
-#: builtin/mv.c:207
+#: builtin/mv.c:216
msgid "multiple sources for the same target"
msgstr "mehrere Quellen für das selbe Ziel"
-#: builtin/mv.c:222
+#: builtin/mv.c:218
+msgid "destination directory does not exist"
+msgstr "Zielverzeichnis existiert nicht"
+
+#: builtin/mv.c:233
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, Quelle=%s, Ziel=%s"
-#: builtin/mv.c:232
+#: builtin/mv.c:243
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Benenne %s nach %s um\n"
-#: builtin/mv.c:235 builtin/remote.c:731 builtin/repack.c:330
+#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328
#, c-format
msgid "renaming '%s' failed"
msgstr "Umbenennung von '%s' fehlgeschlagen"
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [options] <commit>..."
msgstr "git name-rev [Optionen] <Commit>..."
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [options] --all"
msgstr "git name-rev [Optionen] --all"
-#: builtin/name-rev.c:261
+#: builtin/name-rev.c:260
msgid "git name-rev [options] --stdin"
msgstr "git name-rev [Optionen] --stdin"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "print only names (no SHA-1)"
msgstr "zeigt nur Namen an (keine SHA-1)"
-#: builtin/name-rev.c:314
+#: builtin/name-rev.c:313
msgid "only use tags to name the commits"
msgstr "verwendet nur Tags um die Commits zu benennen"
-#: builtin/name-rev.c:316
+#: builtin/name-rev.c:315
msgid "only use refs matching <pattern>"
msgstr "verwendet nur Referenzen die <Muster> entsprechen"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "list all commits reachable from all refs"
msgstr "listet alle Commits auf, die von allen Referenzen erreichbar sind"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "read from stdin"
msgstr "liest von der Standard-Eingabe"
-#: builtin/name-rev.c:320
+#: builtin/name-rev.c:319
msgid "allow to print `undefined` names (default)"
msgstr "erlaubt Ausgabe von `undefinierten` Namen (Standard)"
-#: builtin/name-rev.c:326
+#: builtin/name-rev.c:325
msgid "dereference tags in the input (internal use)"
msgstr "dereferenziert Tags in der Eingabe (interne Verwendung)"
@@ -7636,7 +7715,7 @@ msgstr "Notiz-Referenz"
msgid "use notes from <notes_ref>"
msgstr "verwendet Notizen von <Notiz-Referenz>"
-#: builtin/notes.c:974 builtin/remote.c:1598
+#: builtin/notes.c:974 builtin/remote.c:1593
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Unbekanntes Unterkommando: %s"
@@ -7656,150 +7735,150 @@ msgstr ""
msgid "deflate error (%d)"
msgstr "Fehler beim Komprimieren (%d)"
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2396
#, c-format
msgid "unsupported index version %s"
msgstr "Nicht unterstützte Staging-Area-Version %s"
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2400
#, c-format
msgid "bad index version '%s'"
msgstr "Ungültige Staging-Area-Version '%s'"
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2423
#, c-format
msgid "option %s does not accept negative form"
msgstr "Option %s akzeptiert keine negative Form"
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2427
#, c-format
msgid "unable to parse value '%s' for option %s"
msgstr "konnte Wert '%s' für Option %s nicht parsen"
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2446
msgid "do not show progress meter"
msgstr "zeigt keine Fortschrittsanzeige"
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2448
msgid "show progress meter"
msgstr "zeigt Fortschrittsanzeige"
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2450
msgid "show progress meter during object writing phase"
msgstr "zeigt Forschrittsanzeige während der Phase des Schreibens der Objekte"
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2453
msgid "similar to --all-progress when progress meter is shown"
msgstr "ähnlich zu --all-progress wenn Fortschrittsanzeige darstellt wird"
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2454
msgid "version[,offset]"
msgstr "version[,offset]"
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2455
msgid "write the pack index file in the specified idx format version"
msgstr ""
"schreibt die Index-Datei des Paketes in der angegebenen Indexformat-Version"
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2458
msgid "maximum size of each output pack file"
msgstr "maximale Größe für jede ausgegebene Paketdatei"
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2460
msgid "ignore borrowed objects from alternate object store"
msgstr "ignoriert geliehene Objekte von alternativem Objektspeicher"
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2462
msgid "ignore packed objects"
msgstr "ignoriert gepackte Objekte"
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2464
msgid "limit pack window by objects"
msgstr "begrenzt Paketfenster durch Objekte"
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2466
msgid "limit pack window by memory in addition to object limit"
msgstr "begrenzt Paketfenster, zusätzlich zur Objektbegrenzung, durch Speicher"
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2468
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
"maximale Länge der erlaubten Differenzverkettung im resultierenden Paket"
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2470
msgid "reuse existing deltas"
msgstr "verwendet existierende Unterschiede wieder"
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2472
msgid "reuse existing objects"
msgstr "verwendet existierende Objekte wieder"
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2474
msgid "use OFS_DELTA objects"
msgstr "verwendet OFS_DELTA Objekte"
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2476
msgid "use threads when searching for best delta matches"
msgstr ""
"verwendet Threads bei der Suche nach den besten Ãœbereinstimmungen bei "
"Unterschieden"
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2478
msgid "do not create an empty pack output"
msgstr "erzeugt keine leeren Pakete"
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2480
msgid "read revision arguments from standard input"
msgstr "liest Argumente bezüglich Commits von der Standard-Eingabe"
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2482
msgid "limit the objects to those that are not yet packed"
msgstr "begrenzt die Objekte zu solchen, die noch nicht gepackt wurden"
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2485
msgid "include objects reachable from any reference"
msgstr "schließt Objekte ein, die von jeder Referenz erreichbar sind"
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2488
msgid "include objects referred by reflog entries"
msgstr ""
"schließt Objekte ein, die von Einträgen des Reflogs referenziert werden"
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2491
msgid "output pack to stdout"
msgstr "schreibt Paket in die Standard-Ausgabe"
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2493
msgid "include tag objects that refer to objects to be packed"
msgstr "schließt Tag-Objekte ein, die auf gepackte Objekte referenzieren"
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2495
msgid "keep unreachable objects"
msgstr "behält nicht erreichbare Objekte"
-#: builtin/pack-objects.c:2498 parse-options.h:143
+#: builtin/pack-objects.c:2496 parse-options.h:143
msgid "time"
msgstr "Zeit"
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2497
msgid "unpack unreachable objects newer than <time>"
msgstr "entpackt nicht erreichbare Objekte, die neuer als <Zeit> sind"
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2500
msgid "create thin packs"
msgstr "erzeugt dünnere Pakete"
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2502
msgid "ignore packs that have companion .keep file"
msgstr "ignoriert Pakete die .keep Dateien haben"
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2504
msgid "pack compression level"
msgstr "Komprimierungsgrad für Paketierung"
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2506
msgid "do not hide commits by grafts"
-msgstr "verbirgt keine Commits mit künstlichen Vorgängern (\"grafts\")"
+msgstr "verbirgt keine künstlichen Vorgänger-Commits (\"grafts\")"
#: builtin/pack-refs.c:6
msgid "git pack-refs [options]"
@@ -7821,15 +7900,15 @@ msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]"
msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
msgstr "git prune [-n] [-v] [--expire <Zeit>] [--] [<head>...]"
-#: builtin/prune.c:132
+#: builtin/prune.c:142
msgid "do not remove, show only"
msgstr "nicht löschen, nur anzeigen"
-#: builtin/prune.c:133
+#: builtin/prune.c:143
msgid "report pruned objects"
msgstr "meldet gelöschte Objekte"
-#: builtin/prune.c:136
+#: builtin/prune.c:146
msgid "expire objects older than <time>"
msgstr "lässt Objekte älter als <Zeit> verfallen"
@@ -7837,15 +7916,15 @@ msgstr "lässt Objekte älter als <Zeit> verfallen"
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr "git push [<Optionen>] [<Repository> [<Refspec>...]]"
-#: builtin/push.c:47
+#: builtin/push.c:86
msgid "tag shorthand without <tag>"
msgstr "Kurzschrift für Tag ohne <Tag>"
-#: builtin/push.c:66
+#: builtin/push.c:96
msgid "--delete only accepts plain target ref names"
msgstr "Die Option --delete akzeptiert nur reine Referenznamen als Ziel."
-#: builtin/push.c:101
+#: builtin/push.c:141
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
@@ -7854,7 +7933,7 @@ msgstr ""
"Um eine Variante permanent zu verwenden, siehe push.default in 'git help "
"config'."
-#: builtin/push.c:104
+#: builtin/push.c:144
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -7880,7 +7959,7 @@ msgstr ""
" git push %s %s\n"
"%s"
-#: builtin/push.c:119
+#: builtin/push.c:159
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -7895,7 +7974,7 @@ msgstr ""
"\n"
" git push %s HEAD:<Name-des-Remote-Branches>\n"
-#: builtin/push.c:133
+#: builtin/push.c:173
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -7909,13 +7988,13 @@ msgstr ""
"\n"
" git push --set-upstream %s %s\n"
-#: builtin/push.c:141
+#: builtin/push.c:181
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
msgstr ""
"Der aktuelle Branch %s hat mehrere Upstream-Branches, \"push\" verweigert."
-#: builtin/push.c:144
+#: builtin/push.c:184
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -7926,7 +8005,7 @@ msgstr ""
"Branches '%s' ist, ohne anzugeben, was versendet werden soll, um welchen\n"
"Remote-Branch zu aktualisieren."
-#: builtin/push.c:167
+#: builtin/push.c:207
msgid ""
"push.default is unset; its implicit value is changing in\n"
"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7938,6 +8017,13 @@ msgid ""
"\n"
" git config --global push.default simple\n"
"\n"
+"When push.default is set to 'matching', git will push local branches\n"
+"to the remote branches that already exist with the same name.\n"
+"\n"
+"In Git 2.0, Git will default to the more conservative 'simple'\n"
+"behavior, which only pushes the current branch to the corresponding\n"
+"remote branch that 'git pull' uses to update the current branch.\n"
+"\n"
"See 'git help config' and search for 'push.default' for further "
"information.\n"
"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
@@ -7955,20 +8041,27 @@ msgstr ""
"\n"
" git config --global push.default simple\n"
"\n"
-"Führen Sie 'git help config' aus und suchen Sie nach 'push.default' für "
+"Wenn 'push.default' auf den Wert 'matching' gesetzt ist, werden lokale\n"
+"Branches zu den Remote-Branches mit den selben Namen versendet.\n"
+"\n"
+"In Git 2.0 wird das Standardverhalten zu 'simple' geändert. Hierbei wird\n"
+"der aktuelle Branch zu dem entsprechenden Remote-Branch versendet, den\n"
+"'git pull' zur Aktualisierung des aktuellen Branches verwendet.\n"
+"\n"
+"Führen Sie 'git help config' aus und suchen Sie nach 'push.default' für\n"
"weitere Informationen.\n"
-"(Der Modus 'simple' wurde in Git 1.7.11 eingeführt. Benutze den ähnlichen "
-"Modus 'current' anstatt 'simple', falls Sie gelegentlich ältere Versionen "
-"von Git benutzen.)"
+"(Der Modus 'simple' wurde in Git 1.7.11 eingeführt. Benutzen Sie den ähnlichen\n"
+"Modus 'current' anstatt 'simple', falls Sie gelegentlich ältere Versionen von\n"
+"Git benutzen.)"
-#: builtin/push.c:227
+#: builtin/push.c:274
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr ""
"Sie haben keine Refspec für \"push\" angegeben, und push.default ist "
"\"nothing\"."
-#: builtin/push.c:234
+#: builtin/push.c:281
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -7982,7 +8075,7 @@ msgstr ""
"Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n"
"für weitere Details."
-#: builtin/push.c:240
+#: builtin/push.c:287
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. If you did not intend to push that branch, you may want to\n"
@@ -7998,7 +8091,7 @@ msgstr ""
"'simple', 'current'\n"
"oder 'upstream' setzen, um nur den aktuellen Branch zu versenden."
-#: builtin/push.c:246
+#: builtin/push.c:293
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -8012,7 +8105,7 @@ msgstr ""
"Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n"
"für weitere Details."
-#: builtin/push.c:252
+#: builtin/push.c:299
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -8031,13 +8124,13 @@ msgstr ""
"Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n"
"für weitere Details."
-#: builtin/push.c:259
+#: builtin/push.c:306
msgid "Updates were rejected because the tag already exists in the remote."
msgstr ""
"Aktualisierungen wurden zurückgewiesen, weil das Tag bereits\n"
"im Remote-Repository existiert."
-#: builtin/push.c:262
+#: builtin/push.c:309
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
@@ -8047,22 +8140,22 @@ msgstr ""
"das kein Commit ist, oder es auf ein solches Objekt zeigen lassen, ohne\n"
"die Option '--force' zu verwenden.\n"
-#: builtin/push.c:328
+#: builtin/push.c:375
#, c-format
msgid "Pushing to %s\n"
msgstr "Versende nach %s\n"
-#: builtin/push.c:332
+#: builtin/push.c:379
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "Fehler beim Versenden einiger Referenzen nach '%s'"
-#: builtin/push.c:365
+#: builtin/push.c:412
#, c-format
msgid "bad repository '%s'"
msgstr "ungültiges Repository '%s'"
-#: builtin/push.c:366
+#: builtin/push.c:413
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -8084,95 +8177,95 @@ msgstr ""
"\n"
" git push <Name>\n"
-#: builtin/push.c:381
+#: builtin/push.c:428
msgid "--all and --tags are incompatible"
msgstr "Die Optionen --all und --tags sind inkompatibel."
-#: builtin/push.c:382
+#: builtin/push.c:429
msgid "--all can't be combined with refspecs"
msgstr "Die Option --all kann nicht mit Refspecs kombiniert werden."
-#: builtin/push.c:387
+#: builtin/push.c:434
msgid "--mirror and --tags are incompatible"
msgstr "Die Optionen --mirror und --tags sind inkompatibel."
-#: builtin/push.c:388
+#: builtin/push.c:435
msgid "--mirror can't be combined with refspecs"
msgstr "Die Option --mirror kann nicht mit Refspecs kombiniert werden."
-#: builtin/push.c:393
+#: builtin/push.c:440
msgid "--all and --mirror are incompatible"
msgstr "Die Optionen --all und --mirror sind inkompatibel."
-#: builtin/push.c:453
+#: builtin/push.c:500
msgid "repository"
msgstr "Repository"
-#: builtin/push.c:454
+#: builtin/push.c:501
msgid "push all refs"
msgstr "versendet alle Referenzen"
-#: builtin/push.c:455
+#: builtin/push.c:502
msgid "mirror all refs"
msgstr "spiegelt alle Referenzen"
-#: builtin/push.c:457
+#: builtin/push.c:504
msgid "delete refs"
msgstr "löscht Referenzen"
-#: builtin/push.c:458
+#: builtin/push.c:505
msgid "push tags (can't be used with --all or --mirror)"
msgstr "versendet Tags (kann nicht mit --all oder --mirror verwendet werden)"
-#: builtin/push.c:461
+#: builtin/push.c:508
msgid "force updates"
msgstr "erzwingt Aktualisierung"
-#: builtin/push.c:463
+#: builtin/push.c:510
msgid "refname>:<expect"
msgstr "Referenzname>:<Erwartungswert"
-#: builtin/push.c:464
+#: builtin/push.c:511
msgid "require old value of ref to be at this value"
msgstr "Referenz muss sich auf dem angegebenen Wert befinden"
-#: builtin/push.c:466
+#: builtin/push.c:513
msgid "check"
msgstr ""
-#: builtin/push.c:467
+#: builtin/push.c:514
msgid "control recursive pushing of submodules"
msgstr "steuert rekursiven \"push\" von Submodulen"
-#: builtin/push.c:469
+#: builtin/push.c:516
msgid "use thin pack"
msgstr "verwendet kleinere Pakete"
-#: builtin/push.c:470 builtin/push.c:471
+#: builtin/push.c:517 builtin/push.c:518
msgid "receive pack program"
msgstr "'receive pack' Programm"
-#: builtin/push.c:472
+#: builtin/push.c:519
msgid "set upstream for git pull/status"
msgstr "setzt Upstream für \"git pull/status\""
-#: builtin/push.c:475
+#: builtin/push.c:522
msgid "prune locally removed refs"
msgstr "entfernt lokal gelöschte Referenzen"
-#: builtin/push.c:477
+#: builtin/push.c:524
msgid "bypass pre-push hook"
msgstr "umgeht \"pre-push hook\""
-#: builtin/push.c:478
+#: builtin/push.c:525
msgid "push missing but relevant tags"
msgstr "versendet fehlende, aber relevante Tags"
-#: builtin/push.c:488
+#: builtin/push.c:535
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "Die Option --delete ist inkompatibel mit --all, --mirror und --tags."
-#: builtin/push.c:490
+#: builtin/push.c:537
msgid "--delete doesn't make sense without any refs"
msgstr "Die Option --delete kann nur mit Referenzen verwendet werden."
@@ -8261,11 +8354,11 @@ msgstr "'%s' für '%s' ist kein gültiger Zeitstempel"
msgid "'%s' is not a valid timestamp"
msgstr "'%s' ist kein gültiger Zeitstempel"
-#: builtin/remote.c:11
+#: builtin/remote.c:12
msgid "git remote [-v | --verbose]"
msgstr "git remote [-v | --verbose]"
-#: builtin/remote.c:12
+#: builtin/remote.c:13
msgid ""
"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <name> <url>"
@@ -8273,82 +8366,82 @@ msgstr ""
"git remote add [-t <Branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <Name> <URL>"
-#: builtin/remote.c:13 builtin/remote.c:32
+#: builtin/remote.c:14 builtin/remote.c:33
msgid "git remote rename <old> <new>"
msgstr "git remote rename <alt> <neu>"
-#: builtin/remote.c:14 builtin/remote.c:37
+#: builtin/remote.c:15 builtin/remote.c:38
msgid "git remote remove <name>"
msgstr "git remote remove <Name>"
-#: builtin/remote.c:15
+#: builtin/remote.c:16
msgid "git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"
msgstr "git remote set-head <Name> (-a | --auto | -d | --delete | <Branch>)"
-#: builtin/remote.c:16
+#: builtin/remote.c:17
msgid "git remote [-v | --verbose] show [-n] <name>"
msgstr "git remote [-v | --verbose] show [-n] <Name>"
-#: builtin/remote.c:17
+#: builtin/remote.c:18
msgid "git remote prune [-n | --dry-run] <name>"
msgstr "git remote prune [-n | --dry-run] <Name>"
-#: builtin/remote.c:18
+#: builtin/remote.c:19
msgid ""
"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
msgstr ""
"git remote [-v | --verbose] update [-p | --prune] [(<Gruppe> | <Remote>)...]"
-#: builtin/remote.c:19
+#: builtin/remote.c:20
msgid "git remote set-branches [--add] <name> <branch>..."
msgstr "git remote set-branches [--add] <Name> <Branch>..."
-#: builtin/remote.c:20 builtin/remote.c:68
+#: builtin/remote.c:21 builtin/remote.c:69
msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
msgstr "git remote set-url [--push] <Name> <neueURL> [<alteURL>]"
-#: builtin/remote.c:21 builtin/remote.c:69
+#: builtin/remote.c:22 builtin/remote.c:70
msgid "git remote set-url --add <name> <newurl>"
msgstr "git remote set-url --add <Name> <neueURL>"
-#: builtin/remote.c:22 builtin/remote.c:70
+#: builtin/remote.c:23 builtin/remote.c:71
msgid "git remote set-url --delete <name> <url>"
msgstr "git remote set-url --delete <Name> <URL>"
-#: builtin/remote.c:27
+#: builtin/remote.c:28
msgid "git remote add [<options>] <name> <url>"
msgstr "git remote add [<Optionen>] <Name> <URL>"
-#: builtin/remote.c:42
+#: builtin/remote.c:43
msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
msgstr "git remote set-head <Name> (-a | --auto | -d | --delete | <Branch>)"
-#: builtin/remote.c:47
+#: builtin/remote.c:48
msgid "git remote set-branches <name> <branch>..."
msgstr "git remote set-branches <Name> <Branch>..."
-#: builtin/remote.c:48
+#: builtin/remote.c:49
msgid "git remote set-branches --add <name> <branch>..."
msgstr "git remote set-branches --add <Name> <Branch>..."
-#: builtin/remote.c:53
+#: builtin/remote.c:54
msgid "git remote show [<options>] <name>"
msgstr "git remote show [<Optionen>] <Name>"
-#: builtin/remote.c:58
+#: builtin/remote.c:59
msgid "git remote prune [<options>] <name>"
msgstr "git remote prune [<Optionen>] <Name>"
-#: builtin/remote.c:63
+#: builtin/remote.c:64
msgid "git remote update [<options>] [<group> | <remote>]..."
msgstr "git remote update [<Optionen>] [<Gruppe> | <externesRepository>]..."
-#: builtin/remote.c:98
+#: builtin/remote.c:88
#, c-format
msgid "Updating %s"
msgstr "Aktualisiere %s"
-#: builtin/remote.c:130
+#: builtin/remote.c:120
msgid ""
"--mirror is dangerous and deprecated; please\n"
"\t use --mirror=fetch or --mirror=push instead"
@@ -8356,107 +8449,107 @@ msgstr ""
"--mirror ist gefährlich und veraltet; bitte\n"
"\t benutzen Sie stattdessen --mirror=fetch oder --mirror=push"
-#: builtin/remote.c:147
+#: builtin/remote.c:137
#, c-format
msgid "unknown mirror argument: %s"
msgstr "unbekanntes Argument für Option --mirror: %s"
-#: builtin/remote.c:163
+#: builtin/remote.c:153
msgid "fetch the remote branches"
msgstr "fordert die Remote-Branches an"
-#: builtin/remote.c:165
+#: builtin/remote.c:155
msgid "import all tags and associated objects when fetching"
msgstr "importiert alle Tags und verbundene Objekte beim Anfordern"
-#: builtin/remote.c:168
+#: builtin/remote.c:158
msgid "or do not fetch any tag at all (--no-tags)"
msgstr "oder fordere gar keine Zweige an (--no-tags)"
-#: builtin/remote.c:170
+#: builtin/remote.c:160
msgid "branch(es) to track"
msgstr "Branch(es) zur Ãœbernahme"
-#: builtin/remote.c:171
+#: builtin/remote.c:161
msgid "master branch"
msgstr "Hauptbranch"
-#: builtin/remote.c:172
+#: builtin/remote.c:162
msgid "push|fetch"
msgstr "push|fetch"
-#: builtin/remote.c:173
+#: builtin/remote.c:163
msgid "set up remote as a mirror to push to or fetch from"
msgstr ""
"Aufsetzen des Remote-Repositories als Spiegel-Repository für \"push\" und "
"\"fetch\""
-#: builtin/remote.c:185
+#: builtin/remote.c:175
msgid "specifying a master branch makes no sense with --mirror"
msgstr ""
"Die Option --mirror kann nicht mit der Angabe eines Hauptbranches verwendet "
"werden."
-#: builtin/remote.c:187
+#: builtin/remote.c:177
msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr ""
"Die Angabe von zu folgenden Branches kann nur mit dem Anfordern von "
"Spiegelarchiven verwendet werden."
-#: builtin/remote.c:195 builtin/remote.c:646
+#: builtin/remote.c:185 builtin/remote.c:641
#, c-format
msgid "remote %s already exists."
msgstr "externes Repository %s existiert bereits"
-#: builtin/remote.c:199 builtin/remote.c:650
+#: builtin/remote.c:189 builtin/remote.c:645
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "'%s' ist kein gültiger Name für ein Remote-Repository"
-#: builtin/remote.c:243
+#: builtin/remote.c:233
#, c-format
msgid "Could not setup master '%s'"
msgstr "Konnte symbolische Referenz für Hauptbranch von '%s' nicht einrichten"
-#: builtin/remote.c:299
+#: builtin/remote.c:289
#, c-format
msgid "more than one %s"
msgstr "mehr als ein %s"
-#: builtin/remote.c:339
+#: builtin/remote.c:334
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr "Konnte Fetch-Map für Refspec %s nicht bekommen"
-#: builtin/remote.c:440 builtin/remote.c:448
+#: builtin/remote.c:435 builtin/remote.c:443
msgid "(matching)"
msgstr "(übereinstimmend)"
-#: builtin/remote.c:452
+#: builtin/remote.c:447
msgid "(delete)"
msgstr "(lösche)"
-#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607
+#: builtin/remote.c:590 builtin/remote.c:596 builtin/remote.c:602
#, c-format
msgid "Could not append '%s' to '%s'"
msgstr "Konnte '%s' nicht an '%s' anhängen."
-#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890
+#: builtin/remote.c:634 builtin/remote.c:787 builtin/remote.c:885
#, c-format
msgid "No such remote: %s"
msgstr "Kein solches Remote-Repository: %s"
-#: builtin/remote.c:656
+#: builtin/remote.c:651
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "Konnte Sektion '%s' in Konfiguration nicht nach '%s' umbenennen"
-#: builtin/remote.c:662 builtin/remote.c:799
+#: builtin/remote.c:657 builtin/remote.c:794
#, c-format
msgid "Could not remove config section '%s'"
msgstr "Konnte Sektion '%s' nicht aus Konfiguration entfernen"
-#: builtin/remote.c:677
+#: builtin/remote.c:672
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -8467,32 +8560,32 @@ msgstr ""
"\t%s\n"
"\tBitte aktualisieren Sie, falls notwendig, die Konfiguration manuell."
-#: builtin/remote.c:683
+#: builtin/remote.c:678
#, c-format
msgid "Could not append '%s'"
msgstr "Konnte '%s' nicht anhängen."
-#: builtin/remote.c:694
+#: builtin/remote.c:689
#, c-format
msgid "Could not set '%s'"
msgstr "Konnte '%s' nicht setzen"
-#: builtin/remote.c:716
+#: builtin/remote.c:711
#, c-format
msgid "deleting '%s' failed"
msgstr "Konnte '%s' nicht löschen"
-#: builtin/remote.c:750
+#: builtin/remote.c:745
#, c-format
msgid "creating '%s' failed"
msgstr "Konnte '%s' nicht erstellen"
-#: builtin/remote.c:764
+#: builtin/remote.c:759
#, c-format
msgid "Could not remove branch %s"
msgstr "Konnte Branch %s nicht löschen"
-#: builtin/remote.c:834
+#: builtin/remote.c:829
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -8508,120 +8601,120 @@ msgstr[1] ""
"entfernt;\n"
"um diese zu entfernen, benutzen Sie:"
-#: builtin/remote.c:943
+#: builtin/remote.c:938
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " neu (wird bei nächstem \"fetch\" in remotes/%s gespeichert)"
-#: builtin/remote.c:946
+#: builtin/remote.c:941
msgid " tracked"
msgstr " gefolgt"
-#: builtin/remote.c:948
+#: builtin/remote.c:943
msgid " stale (use 'git remote prune' to remove)"
msgstr " veraltet (benutzen Sie 'git remote prune' zum Löschen)"
-#: builtin/remote.c:950
+#: builtin/remote.c:945
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:991
+#: builtin/remote.c:986
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "ungültiges branch.%s.merge; kann Rebase nicht auf > 1 Branch ausführen"
-#: builtin/remote.c:998
+#: builtin/remote.c:993
#, c-format
msgid "rebases onto remote %s"
msgstr "Rebase auf Remote-Branch %s"
-#: builtin/remote.c:1001
+#: builtin/remote.c:996
#, c-format
msgid " merges with remote %s"
msgstr " führt mit Remote-Branch %s zusammen"
-#: builtin/remote.c:1002
+#: builtin/remote.c:997
msgid " and with remote"
msgstr " und mit Remote-Branch"
-#: builtin/remote.c:1004
+#: builtin/remote.c:999
#, c-format
msgid "merges with remote %s"
msgstr "führt mit Remote-Branch %s zusammen"
-#: builtin/remote.c:1005
+#: builtin/remote.c:1000
msgid " and with remote"
msgstr " und mit Remote-Branch"
-#: builtin/remote.c:1051
+#: builtin/remote.c:1046
msgid "create"
msgstr "erstellt"
-#: builtin/remote.c:1054
+#: builtin/remote.c:1049
msgid "delete"
msgstr "gelöscht"
-#: builtin/remote.c:1058
+#: builtin/remote.c:1053
msgid "up to date"
msgstr "aktuell"
-#: builtin/remote.c:1061
+#: builtin/remote.c:1056
msgid "fast-forwardable"
msgstr "vorspulbar"
-#: builtin/remote.c:1064
+#: builtin/remote.c:1059
msgid "local out of date"
msgstr "lokal nicht aktuell"
-#: builtin/remote.c:1071
+#: builtin/remote.c:1066
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s erzwingt Versandt nach %-*s (%s)"
-#: builtin/remote.c:1074
+#: builtin/remote.c:1069
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s versendet nach %-*s (%s)"
-#: builtin/remote.c:1078
+#: builtin/remote.c:1073
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s erzwingt Versand nach %s"
-#: builtin/remote.c:1081
+#: builtin/remote.c:1076
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s versendet nach %s"
-#: builtin/remote.c:1091
+#: builtin/remote.c:1144
msgid "do not query remotes"
msgstr "keine Abfrage von Remote-Repositories"
-#: builtin/remote.c:1118
+#: builtin/remote.c:1171
#, c-format
msgid "* remote %s"
msgstr "* Remote-Repository %s"
-#: builtin/remote.c:1119
+#: builtin/remote.c:1172
#, c-format
msgid " Fetch URL: %s"
msgstr " URL zum Abholen: %s"
-#: builtin/remote.c:1120 builtin/remote.c:1285
+#: builtin/remote.c:1173 builtin/remote.c:1318
msgid "(no URL)"
msgstr "(keine URL)"
-#: builtin/remote.c:1129 builtin/remote.c:1131
+#: builtin/remote.c:1182 builtin/remote.c:1184
#, c-format
msgid " Push URL: %s"
msgstr " URL zum Versenden: %s"
-#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137
+#: builtin/remote.c:1186 builtin/remote.c:1188 builtin/remote.c:1190
#, c-format
msgid " HEAD branch: %s"
msgstr " Hauptbranch: %s"
-#: builtin/remote.c:1139
+#: builtin/remote.c:1192
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
@@ -8629,146 +8722,146 @@ msgstr ""
" Hauptbranch (externer HEAD ist mehrdeutig, könnte einer der folgenden "
"sein):\n"
-#: builtin/remote.c:1151
+#: builtin/remote.c:1204
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Remote-Branch:%s"
msgstr[1] " Remote-Branches:%s"
-#: builtin/remote.c:1154 builtin/remote.c:1181
+#: builtin/remote.c:1207 builtin/remote.c:1234
msgid " (status not queried)"
msgstr " (Zustand nicht abgefragt)"
-#: builtin/remote.c:1163
+#: builtin/remote.c:1216
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Lokaler Branch konfiguriert für 'git pull':"
msgstr[1] " Lokale Branches konfiguriert für 'git pull':"
-#: builtin/remote.c:1171
+#: builtin/remote.c:1224
msgid " Local refs will be mirrored by 'git push'"
msgstr " Lokale Referenzen werden von 'git push' gespiegelt"
-#: builtin/remote.c:1178
+#: builtin/remote.c:1231
#, c-format
msgid " Local ref configured for 'git push'%s:"
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:"
-#: builtin/remote.c:1199
+#: builtin/remote.c:1252
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Remote-Repository"
-#: builtin/remote.c:1201
+#: builtin/remote.c:1254
msgid "delete refs/remotes/<name>/HEAD"
msgstr "entfernt refs/remotes/<Name>/HEAD"
-#: builtin/remote.c:1216
+#: builtin/remote.c:1269
msgid "Cannot determine remote HEAD"
msgstr "Kann HEAD des Remote-Repositories nicht bestimmen"
-#: builtin/remote.c:1218
+#: builtin/remote.c:1271
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr ""
"Mehrere Hauptbranches im Remote-Repository. Bitte wählen Sie explizit einen "
"aus mit:"
-#: builtin/remote.c:1228
+#: builtin/remote.c:1281
#, c-format
msgid "Could not delete %s"
msgstr "Konnte %s nicht entfernen"
-#: builtin/remote.c:1236
+#: builtin/remote.c:1289
#, c-format
msgid "Not a valid ref: %s"
msgstr "keine gültige Referenz: %s"
-#: builtin/remote.c:1238
+#: builtin/remote.c:1291
#, c-format
msgid "Could not setup %s"
msgstr "Konnte %s nicht einrichten"
-#: builtin/remote.c:1274
+#: builtin/remote.c:1307
#, c-format
msgid " %s will become dangling!"
msgstr " %s wird unreferenziert!"
-#: builtin/remote.c:1275
+#: builtin/remote.c:1308
#, c-format
msgid " %s has become dangling!"
msgstr " %s wurde unreferenziert!"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1314
#, c-format
msgid "Pruning %s"
msgstr "entferne veraltete Branches von %s"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1315
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1295
+#: builtin/remote.c:1328
#, c-format
msgid " * [would prune] %s"
msgstr " * [würde veralteten Branch entfernen] %s"
-#: builtin/remote.c:1298
+#: builtin/remote.c:1331
#, c-format
msgid " * [pruned] %s"
msgstr "* [veralteten Branch entfernt] %s"
-#: builtin/remote.c:1321
+#: builtin/remote.c:1374
msgid "prune remotes after fetching"
msgstr "entfernt veraltete Branches im Remote-Repository nach \"fetch\""
-#: builtin/remote.c:1387 builtin/remote.c:1461
+#: builtin/remote.c:1440 builtin/remote.c:1514
#, c-format
msgid "No such remote '%s'"
msgstr "Kein solches Remote-Repository '%s'"
-#: builtin/remote.c:1407
+#: builtin/remote.c:1460
msgid "add branch"
msgstr "fügt Branch hinzu"
-#: builtin/remote.c:1414
+#: builtin/remote.c:1467
msgid "no remote specified"
msgstr "kein Remote-Repository angegeben"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1489
msgid "manipulate push URLs"
msgstr "manipuliert URLs für \"push\""
-#: builtin/remote.c:1438
+#: builtin/remote.c:1491
msgid "add URL"
msgstr "fügt URL hinzu"
-#: builtin/remote.c:1440
+#: builtin/remote.c:1493
msgid "delete URLs"
msgstr "löscht URLs"
-#: builtin/remote.c:1447
+#: builtin/remote.c:1500
msgid "--add --delete doesn't make sense"
msgstr ""
"Die Optionen --add und --delete können nicht gemeinsam verwendet werden."
-#: builtin/remote.c:1487
+#: builtin/remote.c:1540
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "ungültiges altes URL Format: %s"
-#: builtin/remote.c:1495
+#: builtin/remote.c:1548
#, c-format
msgid "No such URL found: %s"
msgstr "Keine solche URL gefunden: %s"
-#: builtin/remote.c:1497
+#: builtin/remote.c:1550
msgid "Will not delete all non-push URLs"
msgstr "Werde keine URLs entfernen, die nicht für \"push\" bestimmt sind"
-#: builtin/remote.c:1569
+#: builtin/remote.c:1564
msgid "be verbose; must be placed before a subcommand"
msgstr "erweiterte Ausgaben; muss vor einem Unterkommando angegeben werden"
@@ -8816,9 +8909,14 @@ msgstr "mit -A, löscht keine Objekte älter als dieses Datum"
msgid "size of the window used for delta compression"
msgstr "Größe des Fensters für die Delta-Kompression"
+#: builtin/repack.c:162 builtin/repack.c:166
+msgid "bytes"
+msgstr "Bytes"
+
#: builtin/repack.c:163
msgid "same as the above, but limit memory size instead of entries count"
-msgstr "gleiches wie oben, limitiert aber die Speichergröße anstatt der\n"
+msgstr ""
+"gleiches wie oben, limitiert aber die Speichergröße anstatt der\n"
"Anzahl der Einträge"
#: builtin/repack.c:165
@@ -8829,7 +8927,7 @@ msgstr "limitiert die maximale Delta-Tiefe"
msgid "maximum size of each packfile"
msgstr "maximale Größe für jede Paketdatei"
-#: builtin/repack.c:345
+#: builtin/repack.c:343
#, c-format
msgid "removing '%s' failed"
msgstr "Löschen von '%s' fehlgeschlagen"
@@ -8843,21 +8941,25 @@ msgid "git replace -d <object>..."
msgstr "git replace -d <Objekt>..."
#: builtin/replace.c:19
-msgid "git replace -l [<pattern>]"
-msgstr "git replace -l [<Muster>]"
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
+msgstr "git replace [--format=<Format>] [-l [<Muster>]]"
-#: builtin/replace.c:131
+#: builtin/replace.c:174
msgid "list replace refs"
msgstr "listet ersetzende Referenzen auf"
-#: builtin/replace.c:132
+#: builtin/replace.c:175
msgid "delete replace refs"
msgstr "löscht ersetzende Referenzen"
-#: builtin/replace.c:133
+#: builtin/replace.c:176
msgid "replace the ref if it exists"
msgstr "ersetzt die Referenz, wenn sie existiert"
+#: builtin/replace.c:177
+msgid "use this format"
+msgstr "benutzt das angegebene Format"
+
#: builtin/rerere.c:12
msgid "git rerere [clear | forget path... | status | remaining | diff | gc]"
msgstr "git rerere [clean | forget path... | status | remaining | diff | gc]"
@@ -8991,19 +9093,23 @@ msgstr "Konnte Staging-Area-Datei nicht zu Commit '%s' setzen."
msgid "Could not write new index file."
msgstr "Konnte neue Staging-Area-Datei nicht schreiben."
-#: builtin/rev-parse.c:345
+#: builtin/rev-parse.c:359
msgid "git rev-parse --parseopt [options] -- [<args>...]"
msgstr "git rev-parse --parseopt [Optionen] -- [<Argumente>...]"
-#: builtin/rev-parse.c:350
+#: builtin/rev-parse.c:364
msgid "keep the `--` passed as an arg"
msgstr "lässt `--` als Argument"
-#: builtin/rev-parse.c:352
+#: builtin/rev-parse.c:366
msgid "stop parsing after the first non-option argument"
msgstr "stoppt das Parsen nach dem ersten Argument was keine Option ist"
-#: builtin/rev-parse.c:470
+#: builtin/rev-parse.c:369
+msgid "output in stuck long form"
+msgstr "Ausgabe in Langform mit Argumenten an den Optionen (getrennt durch '=')"
+
+#: builtin/rev-parse.c:486
msgid ""
"git rev-parse --parseopt [options] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
@@ -9253,67 +9359,67 @@ msgstr ""
msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g|--reflog)[=<n>[,<Basis>]] [--list] [<Referenz>]"
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:649
msgid "show remote-tracking and local branches"
msgstr "zeigt Remote-Tracking und lokale Branches an"
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:651
msgid "show remote-tracking branches"
msgstr "zeigt Remote-Tracking-Branches an"
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "color '*!+-' corresponding to the branch"
msgstr "färbt '*!+-' entsprechend des Branches ein"
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "show <n> more commits after the common ancestor"
msgstr "zeigt <n> weitere Commits nach dem gemeinsamen Vorgänger-Commit"
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "synonym to more=-1"
msgstr "Synonym für more=-1"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "suppress naming strings"
msgstr "unterdrückt Namen"
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:660
msgid "include the current branch"
msgstr "bezieht den aktuellen Branch ein"
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:662
msgid "name commits with their object names"
msgstr "benennt Commits nach ihren Objektnamen"
-#: builtin/show-branch.c:665
+#: builtin/show-branch.c:664
msgid "show possible merge bases"
msgstr "zeigt mögliche Merge-Basen an"
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show refs unreachable from any other ref"
msgstr "zeigt Referenzen die unerreichbar von allen anderen Referenzen sind"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show commits in topological order"
msgstr "zeigt Commits in topologischer Ordnung"
-#: builtin/show-branch.c:672
+#: builtin/show-branch.c:671
msgid "show only commits not on the first branch"
msgstr "zeigt nur Commits, die sich nicht im ersten Branch befinden"
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "show merges reachable from only one tip"
msgstr "zeigt Merges, die nur von einem Branch aus erreichbar sind"
-#: builtin/show-branch.c:676
+#: builtin/show-branch.c:675
msgid "topologically sort, maintaining date order where possible"
msgstr "topologische Sortierung, Beibehaltung Datumsordnung wo möglich"
-#: builtin/show-branch.c:679
+#: builtin/show-branch.c:678
msgid "<n>[,<base>]"
msgstr "<n>[,<Basis>]"
-#: builtin/show-branch.c:680
+#: builtin/show-branch.c:679
msgid "show <n> most recent ref-log entries starting at base"
msgstr "zeigt die <n> jüngsten Einträge im Reflog beginnend an der Basis"
@@ -9815,15 +9921,15 @@ msgstr "Verfallsdatum"
msgid "no-op (backward compatibility)"
msgstr "Kein Effekt (Rückwärtskompatibilität)"
-#: parse-options.h:238
+#: parse-options.h:235
msgid "be more verbose"
msgstr "erweiterte Ausgaben"
-#: parse-options.h:240
+#: parse-options.h:237
msgid "be more quiet"
msgstr "weniger Ausgaben"
-#: parse-options.h:246
+#: parse-options.h:243
msgid "use <n> digits to display SHA-1s"
msgstr "benutze <n> Ziffern zur Anzeige von SHA-1s"
@@ -10141,8 +10247,9 @@ msgstr ""
"<gueltigerbranch>'."
#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
-msgstr "binäre Suche auf gesuchtem Branch nicht möglich"
+msgid "won't bisect on cg-seek'ed tree"
+msgstr ""
+"binäre Suche auf einem durch 'cg-seek' geändertem Verzeichnis nicht möglich"
#: git-bisect.sh:144
msgid "Bad HEAD - strange symbolic ref"
@@ -10292,7 +10399,7 @@ msgstr ""
#. The working tree and the index file is still based on the
#. $orig_head commit, but we are merging into $curr_head.
#. First update the working tree to match $curr_head.
-#: git-pull.sh:255
+#: git-pull.sh:247
#, sh-format
msgid ""
"Warning: fetch updated the current branch head.\n"
@@ -10302,15 +10409,15 @@ msgstr ""
"Warnung: \"fetch\" aktualisierte die Spitze des aktuellen Branches.\n"
"Warnung: Spule Ihr Arbeitsverzeichnis von Commit $orig_head vor."
-#: git-pull.sh:280
+#: git-pull.sh:272
msgid "Cannot merge multiple branches into empty head"
msgstr "Kann nicht mehrere Branches in einen ungeborenen Branch zusammenführen"
-#: git-pull.sh:284
+#: git-pull.sh:276
msgid "Cannot rebase onto multiple branches"
msgstr "kann Rebase nicht auf mehrere Branches ausführen"
-#: git-rebase.sh:54
+#: git-rebase.sh:55
msgid ""
"When you have resolved this problem, run \"git rebase --continue\".\n"
"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
@@ -10324,16 +10431,16 @@ msgstr ""
"Um den ursprünglichen Branch wiederherzustellen und den Rebase abzubrechen,\n"
"führen Sie \"git rebase --abort\" aus."
-#: git-rebase.sh:156
+#: git-rebase.sh:158
msgid "Applied autostash."
msgstr "\"autostash\" angewendet."
-#: git-rebase.sh:159
+#: git-rebase.sh:161
#, sh-format
msgid "Cannot store $stash_sha1"
msgstr "Kann $stash_sha1 nicht speichern."
-#: git-rebase.sh:160
+#: git-rebase.sh:162
msgid ""
"Applying autostash resulted in conflicts.\n"
"Your changes are safe in the stash.\n"
@@ -10343,33 +10450,33 @@ msgstr ""
"Ihre Änderungen sind im Stash sicher.\n"
"Sie können jederzeit \"git stash pop\" oder \"git stash drop\" ausführen.\n"
-#: git-rebase.sh:199
+#: git-rebase.sh:201
msgid "The pre-rebase hook refused to rebase."
msgstr "Der \"pre-rebase hook\" hat den Rebase zurückgewiesen."
-#: git-rebase.sh:204
+#: git-rebase.sh:206
msgid "It looks like git-am is in progress. Cannot rebase."
msgstr "\"git-am\" scheint im Gange zu sein. Kann Rebase nicht durchführen."
-#: git-rebase.sh:338
+#: git-rebase.sh:346
msgid "The --exec option must be used with the --interactive option"
msgstr "Die Option --exec muss mit --interactive verwendet werden."
-#: git-rebase.sh:343
+#: git-rebase.sh:351
msgid "No rebase in progress?"
msgstr "Kein Rebase im Gange?"
-#: git-rebase.sh:354
+#: git-rebase.sh:362
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"Die --edit-todo Aktion kann nur während eines interaktiven Rebase verwendet "
"werden."
-#: git-rebase.sh:361
+#: git-rebase.sh:369
msgid "Cannot read HEAD"
msgstr "Kann HEAD nicht lesen"
-#: git-rebase.sh:364
+#: git-rebase.sh:372
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -10377,12 +10484,12 @@ msgstr ""
"Sie müssen alle Merge-Konflikte editieren und diese dann\n"
"mittels \"git add\" als aufgelöst markieren"
-#: git-rebase.sh:382
+#: git-rebase.sh:390
#, sh-format
msgid "Could not move back to $head_name"
msgstr "Konnte nicht zu $head_name zurückgehen"
-#: git-rebase.sh:401
+#: git-rebase.sh:409
#, sh-format
msgid ""
"It seems that there is already a $state_dir_base directory, and\n"
@@ -10403,68 +10510,68 @@ msgstr ""
"und führen Sie dieses Kommando nochmal aus. Es wird angehalten, falls noch\n"
"etwas Schützenswertes vorhanden ist."
-#: git-rebase.sh:446
+#: git-rebase.sh:456
#, sh-format
msgid "invalid upstream $upstream_name"
msgstr "ungültiger Upstream-Branch $upstream_name"
-#: git-rebase.sh:470
+#: git-rebase.sh:480
#, sh-format
msgid "$onto_name: there are more than one merge bases"
msgstr "$onto_name: es gibt mehr als eine Merge-Basis"
-#: git-rebase.sh:473 git-rebase.sh:477
+#: git-rebase.sh:483 git-rebase.sh:487
#, sh-format
msgid "$onto_name: there is no merge base"
msgstr "$onto_name: es gibt keine Merge-Basis"
-#: git-rebase.sh:482
+#: git-rebase.sh:492
#, sh-format
msgid "Does not point to a valid commit: $onto_name"
msgstr "$onto_name zeigt auf keinen gültigen Commit"
-#: git-rebase.sh:505
+#: git-rebase.sh:515
#, sh-format
msgid "fatal: no such branch: $branch_name"
msgstr "fatal: Branch $branch_name nicht gefunden"
-#: git-rebase.sh:528
+#: git-rebase.sh:548
msgid "Cannot autostash"
msgstr "Kann \"autostash\" nicht ausführen."
-#: git-rebase.sh:533
+#: git-rebase.sh:553
#, sh-format
msgid "Created autostash: $stash_abbrev"
msgstr "\"autostash\" erzeugt: $stash_abbrev"
-#: git-rebase.sh:537
+#: git-rebase.sh:557
msgid "Please commit or stash them."
msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
-#: git-rebase.sh:557
+#: git-rebase.sh:577
#, sh-format
msgid "Current branch $branch_name is up to date."
msgstr "Aktueller Branch $branch_name ist auf dem neusten Stand."
-#: git-rebase.sh:561
+#: git-rebase.sh:581
#, sh-format
msgid "Current branch $branch_name is up to date, rebase forced."
msgstr ""
"Aktueller Branch $branch_name ist auf dem neusten Stand, Rebase erzwungen."
-#: git-rebase.sh:572
+#: git-rebase.sh:592
#, sh-format
msgid "Changes from $mb to $onto:"
msgstr "Änderungen von $mb zu $onto:"
#. Detach HEAD and reset the tree
-#: git-rebase.sh:581
+#: git-rebase.sh:601
msgid "First, rewinding head to replay your work on top of it..."
msgstr ""
"Zunächst wird der Branch zurückgespult, um Ihre Änderungen\n"
"darauf neu anzuwenden..."
-#: git-rebase.sh:591
+#: git-rebase.sh:611
#, sh-format
msgid "Fast-forwarded $branch_name to $onto_name."
msgstr "$branch_name zu $onto_name vorgespult."
@@ -10718,52 +10825,52 @@ msgstr "Fehler beim Eintragen von Submodul '$sm_path' in die Konfiguration."
msgid "Entering '$prefix$displaypath'"
msgstr "Betrete '$prefix$displaypath'"
-#: git-submodule.sh:554
+#: git-submodule.sh:559
#, sh-format
msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
msgstr "Stoppe bei '$prefix$displaypath'; Skript gab nicht-Null Status zurück."
-#: git-submodule.sh:600
+#: git-submodule.sh:605
#, sh-format
msgid "No url found for submodule path '$displaypath' in .gitmodules"
msgstr "Keine URL für Submodul-Pfad '$displaypath' in .gitmodules gefunden"
-#: git-submodule.sh:609
+#: git-submodule.sh:614
#, sh-format
msgid "Failed to register url for submodule path '$displaypath'"
msgstr ""
"Fehler beim Eintragen der URL für Submodul-Pfad '$displaypath' in die "
"Konfiguration."
-#: git-submodule.sh:611
+#: git-submodule.sh:616
#, sh-format
msgid "Submodule '$name' ($url) registered for path '$displaypath'"
msgstr ""
"Submodul '$name' ($url) für Pfad '$displaypath' in die Konfiguration "
"eingetragen."
-#: git-submodule.sh:619
+#: git-submodule.sh:633
#, sh-format
msgid "Failed to register update mode for submodule path '$displaypath'"
msgstr ""
"Fehler bei Änderung des Aktualisierungsmodus für Submodul-Pfad "
"'$displaypath' in der Konfiguration."
-#: git-submodule.sh:656
+#: git-submodule.sh:671
#, sh-format
msgid "Use '.' if you really want to deinitialize all submodules"
msgstr ""
"Verwenden Sie '.' wenn Sie wirklich alle Submodule\n"
"deinitialisieren möchten."
-#: git-submodule.sh:673
+#: git-submodule.sh:688
#, sh-format
msgid "Submodule work tree '$displaypath' contains a .git directory"
msgstr ""
"Arbeitsverzeichnis des Submoduls in '$displaypath' enthält ein .git-"
"Verzeichnis"
-#: git-submodule.sh:674
+#: git-submodule.sh:689
#, sh-format
msgid ""
"(use 'rm -rf' if you really want to remove it including all of its history)"
@@ -10771,7 +10878,7 @@ msgstr ""
"(benutzen Sie 'rm -rf' wenn Sie dieses Submodul wirklich mitsamt\n"
"seiner Historie löschen möchten)"
-#: git-submodule.sh:680
+#: git-submodule.sh:695
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
@@ -10780,31 +10887,31 @@ msgstr ""
"Arbeitsverzeichnis von Submodul in '$displaypath' enthält lokale Änderungen; "
"verwenden Sie '-f' um diese zu verwerfen"
-#: git-submodule.sh:683
+#: git-submodule.sh:698
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "Verzeichnis '$displaypath' bereinigt."
-#: git-submodule.sh:684
+#: git-submodule.sh:699
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr ""
"Konnte Arbeitsverzeichnis des Submoduls in '$displaypath' nicht löschen."
-#: git-submodule.sh:687
+#: git-submodule.sh:702
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr ""
"Konnte kein leeres Verzeichnis für Submodul in '$displaypath' erstellen."
-#: git-submodule.sh:696
+#: git-submodule.sh:711
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr ""
"Submodul '$name' ($url) für Pfad '$displaypath' wurde aus der Konfiguration "
"entfernt."
-#: git-submodule.sh:811
+#: git-submodule.sh:834
#, sh-format
msgid ""
"Submodule path '$displaypath' not initialized\n"
@@ -10813,42 +10920,42 @@ msgstr ""
"Submodul-Pfad '$displaypath' ist nicht initialisiert.\n"
"Vielleicht möchten Sie 'update --init' benutzen?"
-#: git-submodule.sh:824
+#: git-submodule.sh:847
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr "Konnte aktuellen Commit in Submodul-Pfad '$displaypath' nicht finden."
-#: git-submodule.sh:833
+#: git-submodule.sh:856
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "Konnte \"fetch\" in Submodul-Pfad '$sm_path' nicht ausführen"
-#: git-submodule.sh:857
+#: git-submodule.sh:880
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "Konnte \"fetch\" in Submodul-Pfad '$displaypath' nicht ausführen"
-#: git-submodule.sh:871
+#: git-submodule.sh:894
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr "Rebase auf '$sha1' in Submodul-Pfad '$displaypath' nicht möglich"
-#: git-submodule.sh:872
+#: git-submodule.sh:895
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Submodul-Pfad '$displaypath': Rebase auf '$sha1'"
-#: git-submodule.sh:877
+#: git-submodule.sh:900
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr "Merge von '$sha1' in Submodul-Pfad '$displaypath' fehlgeschlagen"
-#: git-submodule.sh:878
+#: git-submodule.sh:901
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Submodul-Pfad '$displaypath': zusammengeführt in '$sha1'"
-#: git-submodule.sh:883
+#: git-submodule.sh:906
#, sh-format
msgid ""
"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
@@ -10856,67 +10963,82 @@ msgstr ""
"Ausführung von '$command $sha1' in Submodul-Pfad '$prefix$sm_path' "
"fehlgeschlagen"
-#: git-submodule.sh:884
+#: git-submodule.sh:907
#, sh-format
msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
msgstr "Submodul-Pfad '$prefix$sm_path': '$command $sha1'"
-#: git-submodule.sh:889
+#: git-submodule.sh:912
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "Konnte '$sha1' in Submodul-Pfad '$displaypath' nicht auschecken."
-#: git-submodule.sh:890
+#: git-submodule.sh:913
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Submodul-Pfad: '$displaypath': '$sha1' ausgecheckt"
-#: git-submodule.sh:917
+#: git-submodule.sh:940
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "Fehler bei Rekursion in Submodul-Pfad '$displaypath'"
-#: git-submodule.sh:1025
+#: git-submodule.sh:1048
msgid "The --cached option cannot be used with the --files option"
msgstr ""
"Die Optionen --cached und --files können nicht gemeinsam verwendet werden."
#. unexpected type
-#: git-submodule.sh:1073
+#: git-submodule.sh:1096
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "unerwarteter Modus $mod_dst"
-#: git-submodule.sh:1093
+#: git-submodule.sh:1116
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_src"
-#: git-submodule.sh:1096
+#: git-submodule.sh:1119
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_dst"
-#: git-submodule.sh:1099
+#: git-submodule.sh:1122
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr ""
" Warnung: $display_name beinhaltet nicht die Commits $sha1_src und $sha1_dst"
-#: git-submodule.sh:1124
+#: git-submodule.sh:1147
msgid "blob"
msgstr "Blob"
-#: git-submodule.sh:1238
+#: git-submodule.sh:1261
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "Fehler bei Rekursion in Submodul-Pfad '$sm_path'"
-#: git-submodule.sh:1302
+#: git-submodule.sh:1325
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "Synchronisiere Submodul-URL für '$displaypath'"
+#~ msgid "copied: %s -> %s"
+#~ msgstr "kopiert: %s -> %s"
+
+#~ msgid "deleted: %s"
+#~ msgstr "gelöscht: %s"
+
+#~ msgid "modified: %s"
+#~ msgstr "geändert: %s"
+
+#~ msgid "renamed: %s -> %s"
+#~ msgstr "umbenannt: %s -> %s"
+
+#~ msgid "unmerged: %s"
+#~ msgstr "nicht zusammengeführt: %s"
+
#~ msgid "input paths are terminated by a null character"
#~ msgstr "Eingabepfade sind durch ein NUL Zeichen abgeschlossen"
diff --git a/po/fr.po b/po/fr.po
index 44995ba61..0b9d59e8f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -53,6 +53,7 @@
# repository | dépôt
# remote | distante (ou serveur distant)
# revision | révision
+# shallow | superficiel
# shell | interpréteur de commandes
# stash | remisage
# to stash | remiser
@@ -72,16 +73,15 @@ msgid ""
msgstr ""
"Project-Id-Version: git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2013-11-02 08:06+0800\n"
-"PO-Revision-Date: 2013-11-07 21:41+0100\n"
-"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
+"POT-Creation-Date: 2014-02-01 08:06+0800\n"
+"PO-Revision-Date: 2014-02-02 14:35+0100\n"
+"Last-Translator: Jean-Noël Avila <jn.avila@free.fr>\n"
"Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n<=1 ?0 : 1;\n"
-"X-Generator: Poedit 1.5.4\n"
#: advice.c:57
#, c-format
@@ -123,7 +123,7 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote <dépôt> [--exec <commande>] --list"
-#: archive.c:242 builtin/add.c:240 builtin/add.c:556 builtin/rm.c:328
+#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "le chemin '%s' ne correspond à aucun fichier"
@@ -144,8 +144,8 @@ msgstr "préfixe"
msgid "prepend prefix to each pathname in the archive"
msgstr "préfixer chaque chemin de fichier dans l'archive"
-#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2264
-#: builtin/blame.c:2265 builtin/config.c:58 builtin/fast-export.c:680
+#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265
+#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680
#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77
#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408
#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154
@@ -335,64 +335,64 @@ msgstr "Échec du verrouillage de la référence pour mise à jour"
msgid "Failed to write ref"
msgstr "Échec de l'écriture de la référence"
-#: bundle.c:36
+#: bundle.c:37
#, c-format
msgid "'%s' does not look like a v2 bundle file"
msgstr "'%s' ne semble pas être un fichier bundle v2"
-#: bundle.c:63
+#: bundle.c:64
#, c-format
msgid "unrecognized header: %s%s (%d)"
msgstr "en-tête non reconnu : %s%s (%d)"
-#: bundle.c:89 builtin/commit.c:706
+#: bundle.c:90 builtin/commit.c:706
#, c-format
msgid "could not open '%s'"
msgstr "impossible d'ouvrir '%s'"
-#: bundle.c:140
+#: bundle.c:141
msgid "Repository lacks these prerequisite commits:"
msgstr "Le dépôt ne dispose pas des commits prérequis :"
-#: bundle.c:164 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
-#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:364
+#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
+#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357
#: builtin/shortlog.c:158
msgid "revision walk setup failed"
msgstr "échec de la préparation du parcours des révisions"
-#: bundle.c:186
+#: bundle.c:187
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "Le colis contient cette référence :"
msgstr[1] "Le colis contient ces %d références :"
-#: bundle.c:193
+#: bundle.c:194
msgid "The bundle records a complete history."
msgstr "Le colis enregistre l'historique complet."
-#: bundle.c:195
+#: bundle.c:196
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "Le colis exige cette référence :"
msgstr[1] "Le colis exige ces %d références :"
-#: bundle.c:294
+#: bundle.c:296
msgid "rev-list died"
msgstr "rev-list a disparu"
-#: bundle.c:300 builtin/log.c:1329 builtin/shortlog.c:261
+#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261
#, c-format
msgid "unrecognized argument: %s"
msgstr "argument non reconnu : %s"
-#: bundle.c:335
+#: bundle.c:337
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "la référence '%s' est exclue par les options de rev-list"
-#: bundle.c:380
+#: bundle.c:382
msgid "Refusing to create empty bundle."
msgstr "Refus de créer un colis vide."
@@ -427,16 +427,16 @@ msgstr "%s %s n'est pas un commit !"
msgid "memory exhausted"
msgstr "plus de mémoire"
-#: connected.c:60
+#: connected.c:70
msgid "Could not run 'git rev-list'"
msgstr "Impossible de lancer 'git rev-list'"
-#: connected.c:80
+#: connected.c:90
#, c-format
msgid "failed write to rev-list: %s"
msgstr "impossible d'écrire dans la rev-list : %s"
-#: connected.c:88
+#: connected.c:98
#, c-format
msgid "failed to close rev-list's stdin: %s"
msgstr "impossible de fermer l'entrée standard du rev-list : %s"
@@ -508,24 +508,29 @@ msgid_plural "%lu years ago"
msgstr[0] "il y a %lu an"
msgstr[1] "il y a %lu ans"
-#: diff.c:112
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr "impossible de lire le fichier de commande '%s'"
+
+#: diff.c:113
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr ""
" Impossible d'analyser le pourcentage de modification de dirstat '%s'\n"
-#: diff.c:117
+#: diff.c:118
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr " Paramètre dirstat inconnu '%s'\n"
-#: diff.c:210
+#: diff.c:213
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr ""
"Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'"
-#: diff.c:260
+#: diff.c:263
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -534,7 +539,7 @@ msgstr ""
"Erreurs dans la variable de configuration 'diff.dirstat' :\n"
"%s"
-#: diff.c:3490
+#: diff.c:3509
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -543,7 +548,7 @@ msgstr ""
"Impossible d'analyser le paramètre de l'option --dirstat/-X :\n"
"%s"
-#: diff.c:3504
+#: diff.c:3523
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "Impossible d'analyser le paramètre de l'option --submodule : '%s'"
@@ -655,7 +660,7 @@ msgid "failed to read the cache"
msgstr "impossible de lire le cache"
#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559
-#: builtin/clone.c:655
+#: builtin/clone.c:661
msgid "unable to write new index file"
msgstr "impossible d'écrire le nouveau fichier d'index"
@@ -704,7 +709,7 @@ msgstr "impossible de lire l'objet %s '%s'"
msgid "blob expected for %s '%s'"
msgstr "blob attendu pour %s '%s'"
-#: merge-recursive.c:774 builtin/clone.c:311
+#: merge-recursive.c:774 builtin/clone.c:317
#, c-format
msgid "failed to open '%s'"
msgstr "échec à l'ouverture de '%s'"
@@ -754,7 +759,7 @@ msgstr ""
msgid "rename"
msgstr "renommage"
-#: merge-recursive.c:1082
+#: merge-recursive.c:1082 wt-status.c:283
msgid "renamed"
msgstr "renommé"
@@ -818,7 +823,7 @@ msgstr "l'objet %s n'est pas un blob"
msgid "modify"
msgstr "modification"
-#: merge-recursive.c:1565
+#: merge-recursive.c:1565 wt-status.c:281
msgid "modified"
msgstr "modifié"
@@ -840,7 +845,7 @@ msgstr "%s sauté (fusion identique à l'existant)"
msgid "Auto-merging %s"
msgstr "Fusion automatique de %s"
-#: merge-recursive.c:1634 git-submodule.sh:1125
+#: merge-recursive.c:1634 git-submodule.sh:1148
msgid "submodule"
msgstr "sous-module"
@@ -911,7 +916,7 @@ msgstr "la fusion n'a pas retourné de commit"
msgid "Could not parse object '%s'"
msgstr "Impossible d'analyser l'objet '%s'"
-#: merge-recursive.c:2010 builtin/merge.c:672
+#: merge-recursive.c:2010 builtin/merge.c:665
msgid "Unable to write index."
msgstr "Impossible d'écrire l'index."
@@ -966,46 +971,50 @@ msgstr " %s"
msgid "-NUM"
msgstr "-NUM"
-#: pathspec.c:118
+#: pathspec.c:133
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
-msgstr "les réglages de spécificateurs de chemin généraux 'glob' et 'noglob' sont incompatibles"
+msgstr ""
+"les réglages de spécificateurs de chemin généraux 'glob' et 'noglob' sont "
+"incompatibles"
-#: pathspec.c:128
+#: pathspec.c:143
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
-msgstr "le réglage global de spécificateur de chemin 'literal' est incompatible avec tous les autres réglages globaux de spécificateur de chemin"
+msgstr ""
+"le réglage global de spécificateur de chemin 'literal' est incompatible avec "
+"tous les autres réglages globaux de spécificateur de chemin"
-#: pathspec.c:158
+#: pathspec.c:177
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "paramètre invalide pour le spécificateur magique de chemin 'prefix'"
-#: pathspec.c:164
+#: pathspec.c:183
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "La spécification magique de chemin '%.*s' est invalide dans '%s'"
-#: pathspec.c:168
+#: pathspec.c:187
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "')' manquante à la fin du spécificateur magique de chemin dans '%s'"
-#: pathspec.c:186
+#: pathspec.c:205
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "Spécificateur magique '%c' non implémenté dans '%s'"
-#: pathspec.c:211
+#: pathspec.c:230
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s : 'literal' et 'glob' sont incompatibles"
-#: pathspec.c:222
+#: pathspec.c:241
#, c-format
msgid "%s: '%s' is outside repository"
msgstr "%s : '%s' est hors du dépôt"
-#: pathspec.c:278
+#: pathspec.c:291
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Le chemin '%s' est dans le sous-module '%.*s'"
@@ -1015,42 +1024,76 @@ msgstr "Le chemin '%s' est dans le sous-module '%.*s'"
#. * name. E.g. when add--interactive dies when running
#. * "checkout -p"
#.
-#: pathspec.c:340
+#: pathspec.c:353
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
-msgstr "%s : le spécificateur magique de chemin n'est pas supporté par cette commande : %s"
+msgstr ""
+"%s : le spécificateur magique de chemin n'est pas supporté par cette "
+"commande : %s"
-#: pathspec.c:415
+#: pathspec.c:433
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "le chemin '%s' est au-delà d'un lien symbolique"
-#: remote.c:1833
+#: pathspec.c:442
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr ""
+"Il n'y a rien dont il faut exclure par des motifs :(exclure).\n"
+"Peut-être avez-vous oublié d'ajouter ':/' ou '.' ?"
+
+#: remote.c:753
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "Impossible de récupérer à la fois %s et %s pour %s"
+
+#: remote.c:757
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s suit habituellement %s, pas %s"
+
+#: remote.c:761
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "%s suit à la fois %s et %s"
+
+#.
+#. * This last possibility doesn't occur because
+#. * FETCH_HEAD_IGNORE entries always appear at
+#. * the end of the list.
+#.
+#: remote.c:769
+msgid "Internal error"
+msgstr "Erreur interne"
+
+#: remote.c:1871
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Votre branche est basée sur '%s', mais la branche amont a disparu.\n"
-#: remote.c:1837
+#: remote.c:1875
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
-msgstr " (utilisez \"git branch -unset-upstream\" pour corriger)\n"
+msgstr " (utilisez \"git branch --unset-upstream\" pour corriger)\n"
-#: remote.c:1840
+#: remote.c:1878
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr "Votre branche est à jour avec '%s'.\n"
-#: remote.c:1844
+#: remote.c:1882
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] "Votre branche est en avance sur '%s' de %d commit.\n"
msgstr[1] "Votre branche est en avance sur '%s' de %d commits.\n"
-#: remote.c:1850
+#: remote.c:1888
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (utilisez \"git push\" pour publier vos commits locaux)\n"
-#: remote.c:1853
+#: remote.c:1891
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -1062,11 +1105,11 @@ msgstr[1] ""
"Votre branche est en retard sur '%s' de %d commits, et peut être mise à jour "
"en avance rapide.\n"
-#: remote.c:1861
+#: remote.c:1899
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (utilisez \"git pull\" pour mettre à jour votre branche locale)\n"
-#: remote.c:1864
+#: remote.c:1902
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -1081,7 +1124,7 @@ msgstr[1] ""
"Votre branche et '%s' ont divergé,\n"
"et ont %d et %d commits différents chacune respectivement.\n"
-#: remote.c:1874
+#: remote.c:1912
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr ""
" (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n"
@@ -1095,14 +1138,14 @@ msgstr "échec de l'ouverture de /dev/null"
msgid "dup2(%d,%d) failed"
msgstr "échec de dup2(%d,%d)"
-#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903
-#: builtin/merge.c:1013 builtin/merge.c:1023
+#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896
+#: builtin/merge.c:1006 builtin/merge.c:1016
#, c-format
msgid "Could not open '%s' for writing"
msgstr "Impossible d'ouvrir '%s' en écriture"
-#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793
-#: builtin/merge.c:1015 builtin/merge.c:1028
+#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786
+#: builtin/merge.c:1008 builtin/merge.c:1021
#, c-format
msgid "Could not write to '%s'"
msgstr "Impossible d'écrire dans '%s'"
@@ -1344,7 +1387,7 @@ msgstr "Impossible d'annuler en tant que commit initial"
msgid "Can't cherry-pick into empty head"
msgstr "Impossible de picorer vers une HEAD vide"
-#: sha1_name.c:440
+#: sha1_name.c:439
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -1369,28 +1412,30 @@ msgstr ""
"message\n"
"en lançant \"git config advice.objectNameWarning false\""
-#: sha1_name.c:1112
+#: sha1_name.c:1070
msgid "HEAD does not point to a branch"
msgstr "HEAD ne pointe pas sur une branche"
-#: sha1_name.c:1115
+#: sha1_name.c:1073
#, c-format
msgid "No such branch: '%s'"
msgstr "Branche inconnue : '%s'"
-#: sha1_name.c:1117
+#: sha1_name.c:1075
#, c-format
msgid "No upstream configured for branch '%s'"
msgstr "Aucune branche amont configurée pour la branche '%s'"
-#: sha1_name.c:1121
+#: sha1_name.c:1079
#, c-format
msgid "Upstream branch '%s' not stored as a remote-tracking branch"
msgstr "La branche amont '%s' n'est pas stockée comme branche de suivi"
#: submodule.c:64 submodule.c:98
msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
-msgstr "Modification impossible de .gitmodules non fusionné, résolvez les conflits d'abord"
+msgstr ""
+"Modification impossible de .gitmodules non fusionné, résolvez les conflits "
+"d'abord"
#: submodule.c:68 submodule.c:102
#, c-format
@@ -1494,229 +1539,221 @@ msgstr ""
msgid "no such user"
msgstr "utilisateur inconnu"
-#: wt-status.c:146
+#: wt-status.c:150
msgid "Unmerged paths:"
msgstr "Chemins non fusionnés :"
-#: wt-status.c:173 wt-status.c:200
+#: wt-status.c:177 wt-status.c:204
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
msgstr " (utilisez \"git reset %s <fichier>...\" pour désindexer)"
-#: wt-status.c:175 wt-status.c:202
+#: wt-status.c:179 wt-status.c:206
msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr " (utilisez \"git rm --cached <fichier>...\" pour désindexer)"
-#: wt-status.c:179
+#: wt-status.c:183
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr " (utilisez \"git add <fichier>...\" pour marquer comme résolu)"
-#: wt-status.c:181 wt-status.c:185
+#: wt-status.c:185 wt-status.c:189
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr ""
" (utilisez \"git add/rm <fichier>...\" si nécessaire pour marquer comme "
"résolu)"
-#: wt-status.c:183
+#: wt-status.c:187
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr " (utilisez \"git rm <fichier>...\" pour marquer comme résolu)"
-#: wt-status.c:194
+#: wt-status.c:198
msgid "Changes to be committed:"
msgstr "Modifications qui seront validées :"
-#: wt-status.c:212
+#: wt-status.c:216
msgid "Changes not staged for commit:"
msgstr "Modifications qui ne seront pas validées :"
-#: wt-status.c:216
+#: wt-status.c:220
msgid " (use \"git add <file>...\" to update what will be committed)"
msgstr ""
" (utilisez \"git add <fichier>...\" pour mettre à jour ce qui sera validé)"
-#: wt-status.c:218
+#: wt-status.c:222
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr ""
" (utilisez \"git add/rm <fichier>...\" pour mettre à jour ce qui sera "
"validé)"
-#: wt-status.c:219
+#: wt-status.c:223
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr ""
" (utilisez \"git checkout -- <fichier>...\" pour annuler les modifications "
"dans la copie de travail)"
-#: wt-status.c:221
+#: wt-status.c:225
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
" (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)"
-#: wt-status.c:233
+#: wt-status.c:237
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr ""
" (utilisez \"git %s <fichier>...\" pour inclure dans ce qui sera validé)"
-#: wt-status.c:250
+#: wt-status.c:254
msgid "bug"
msgstr "bogue"
-#: wt-status.c:255
+#: wt-status.c:259
msgid "both deleted:"
msgstr "supprimé des deux côtés :"
-#: wt-status.c:256
+#: wt-status.c:260
msgid "added by us:"
msgstr "ajouté par nous :"
-#: wt-status.c:257
+#: wt-status.c:261
msgid "deleted by them:"
msgstr "supprimé par eux :"
-#: wt-status.c:258
+#: wt-status.c:262
msgid "added by them:"
msgstr "ajouté par eux :"
-#: wt-status.c:259
+#: wt-status.c:263
msgid "deleted by us:"
msgstr "supprimé par nous :"
-#: wt-status.c:260
+#: wt-status.c:264
msgid "both added:"
msgstr "ajouté de deux côtés :"
-#: wt-status.c:261
+#: wt-status.c:265
msgid "both modified:"
msgstr "modifié des deux côtés :"
-#: wt-status.c:291
-msgid "new commits, "
-msgstr "nouveaux commits, "
+#: wt-status.c:275
+msgid "new file"
+msgstr "nouveau fichier"
-#: wt-status.c:293
-msgid "modified content, "
-msgstr "contenu modifié, "
+#: wt-status.c:277
+msgid "copied"
+msgstr "copié"
-#: wt-status.c:295
-msgid "untracked content, "
-msgstr "contenu non suivi, "
+#: wt-status.c:279
+msgid "deleted"
+msgstr "supprimé"
-#: wt-status.c:312
-#, c-format
-msgid "new file: %s"
-msgstr "nouveau : %s"
+#: wt-status.c:285
+msgid "typechange"
+msgstr "modif. type"
-#: wt-status.c:315
-#, c-format
-msgid "copied: %s -> %s"
-msgstr "copié : %s -> %s"
+#: wt-status.c:287
+msgid "unknown"
+msgstr "inconnu"
-#: wt-status.c:318
-#, c-format
-msgid "deleted: %s"
-msgstr "supprimé : %s"
+#: wt-status.c:289
+msgid "unmerged"
+msgstr "non fusionné"
-#: wt-status.c:321
-#, c-format
-msgid "modified: %s"
-msgstr "modifié : %s"
-
-#: wt-status.c:324
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr "renommé : %s -> %s"
-
-#: wt-status.c:327
-#, c-format
-msgid "typechange: %s"
-msgstr "nv type : %s"
+#: wt-status.c:336
+msgid "new commits, "
+msgstr "nouveaux commits, "
-#: wt-status.c:330
-#, c-format
-msgid "unknown: %s"
-msgstr "inconnu : %s"
+#: wt-status.c:338
+msgid "modified content, "
+msgstr "contenu modifié, "
-#: wt-status.c:333
-#, c-format
-msgid "unmerged: %s"
-msgstr "non fus. : %s"
+#: wt-status.c:340
+msgid "untracked content, "
+msgstr "contenu non suivi, "
-#: wt-status.c:336
+#: wt-status.c:357
#, c-format
msgid "bug: unhandled diff status %c"
msgstr "bogue : état de diff non géré %c"
-#: wt-status.c:703
+#: wt-status.c:732
msgid "Submodules changed but not updated:"
msgstr "Sous-modules modifiés mais non mis à jour :"
-#: wt-status.c:705
+#: wt-status.c:734
msgid "Submodule changes to be committed:"
msgstr "Changements du sous-module à valider :"
-#: wt-status.c:848
+#: wt-status.c:836
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr ""
+"Ne touchez pas à la ligne ci-dessus\n"
+"Tout se qui suit sera éliminé."
+
+#: wt-status.c:899
msgid "You have unmerged paths."
msgstr "Vous avez des chemins non fusionnés."
-#: wt-status.c:851
+#: wt-status.c:902
msgid " (fix conflicts and run \"git commit\")"
msgstr " (réglez les conflits puis lancez \"git commit\")"
-#: wt-status.c:854
+#: wt-status.c:905
msgid "All conflicts fixed but you are still merging."
msgstr "Tous les conflits sont réglés mais la fusion n'est pas terminée."
-#: wt-status.c:857
+#: wt-status.c:908
msgid " (use \"git commit\" to conclude merge)"
msgstr " (utilisez \"git commit\" pour terminer la fusion)"
-#: wt-status.c:867
+#: wt-status.c:918
msgid "You are in the middle of an am session."
msgstr "Vous êtes au milieu d'une session am."
-#: wt-status.c:870
+#: wt-status.c:921
msgid "The current patch is empty."
msgstr "Le patch actuel est vide."
-#: wt-status.c:874
+#: wt-status.c:925
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (réglez les conflits puis lancez \"git am --continue\")"
-#: wt-status.c:876
+#: wt-status.c:927
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (utilisez \"git am --skip\" pour sauter ce patch)"
-#: wt-status.c:878
+#: wt-status.c:929
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr " (utilisez \"git am --abort\" pour restaurer la branche d'origine)"
-#: wt-status.c:938 wt-status.c:955
+#: wt-status.c:989 wt-status.c:1006
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "Vous êtes en train de rebaser la branche '%s' sur '%s'."
-#: wt-status.c:943 wt-status.c:960
+#: wt-status.c:994 wt-status.c:1011
msgid "You are currently rebasing."
msgstr "Vous êtes en train de rebaser."
-#: wt-status.c:946
+#: wt-status.c:997
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (réglez les conflits puis lancez \"git rebase --continue\")"
-#: wt-status.c:948
+#: wt-status.c:999
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (utilisez \"git rebase --skip\" pour sauter ce patch)"
-#: wt-status.c:950
+#: wt-status.c:1001
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr " (utilisez \"git rebase --abort\" pour extraire la branche d'origine)"
-#: wt-status.c:963
+#: wt-status.c:1014
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (tous les conflits sont réglés : lancez \"git rebase --continue\")"
-#: wt-status.c:967
+#: wt-status.c:1018
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -1724,120 +1761,120 @@ msgstr ""
"Vous êtes actuellement en train de fractionner un commit pendant un rebasage "
"de la branche '%s' sur '%s'."
-#: wt-status.c:972
+#: wt-status.c:1023
msgid "You are currently splitting a commit during a rebase."
msgstr ""
"Vous êtes actuellement en train de fractionner un commit pendant un rebasage."
-#: wt-status.c:975
+#: wt-status.c:1026
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")"
-#: wt-status.c:979
+#: wt-status.c:1030
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"Vous êtes actuellement en train d'éditer un commit pendant un rebasage de la "
"branche '%s' sur '%s'."
-#: wt-status.c:984
+#: wt-status.c:1035
msgid "You are currently editing a commit during a rebase."
msgstr ""
"Vous êtes actuellement en train d'éditer un commit pendant un rebasage."
-#: wt-status.c:987
+#: wt-status.c:1038
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr " (utilisez \"git commit --amend\" pour corriger le commit actuel)"
-#: wt-status.c:989
+#: wt-status.c:1040
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (utilisez \"git rebase --continue\" quand vous êtes satisfait de vos "
"modifications)"
-#: wt-status.c:999
+#: wt-status.c:1050
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "Vous êtes actuellement en train de picorer le commit %s."
-#: wt-status.c:1004
+#: wt-status.c:1055
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (réglez les conflits puis lancez \"git cherry-pick --continue\")"
-#: wt-status.c:1007
+#: wt-status.c:1058
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (tous les conflits sont réglés : lancez \"git cherry-pick --continue\")"
-#: wt-status.c:1009
+#: wt-status.c:1060
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr " (utilisez \"git cherry-pick --abort\" pour annuler le picorage)"
-#: wt-status.c:1018
+#: wt-status.c:1069
#, c-format
msgid "You are currently reverting commit %s."
msgstr "Vous êtes actuellement en train de rétablir le commit %s."
-#: wt-status.c:1023
+#: wt-status.c:1074
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (réglez les conflits puis lancez \"git revert --continue\")"
-#: wt-status.c:1026
+#: wt-status.c:1077
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (tous les conflits sont réglés : lancez \"git revert --continue\")"
-#: wt-status.c:1028
+#: wt-status.c:1079
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr " (utilisez \"git revert --abort\" pour annuler le rétablissement)"
-#: wt-status.c:1039
+#: wt-status.c:1090
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "Vous êtes en cours de bissection, depuis la branche '%s'."
-#: wt-status.c:1043
+#: wt-status.c:1094
msgid "You are currently bisecting."
msgstr "Vous êtes en cours de bissection."
-#: wt-status.c:1046
+#: wt-status.c:1097
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr " (utilisez \"git bisect reset\" pour revenir à la branche d'origine)"
-#: wt-status.c:1221
+#: wt-status.c:1272
msgid "On branch "
msgstr "Sur la branche "
-#: wt-status.c:1228
+#: wt-status.c:1279
msgid "rebase in progress; onto "
msgstr "rebasage en cours ; sur "
-#: wt-status.c:1235
+#: wt-status.c:1286
msgid "HEAD detached at "
msgstr "HEAD détachée sur "
-#: wt-status.c:1237
+#: wt-status.c:1288
msgid "HEAD detached from "
msgstr "HEAD détachée depuis "
-#: wt-status.c:1240
+#: wt-status.c:1291
msgid "Not currently on any branch."
msgstr "Actuellement sur aucun branche."
-#: wt-status.c:1257
+#: wt-status.c:1308
msgid "Initial commit"
msgstr "Validation initiale"
-#: wt-status.c:1271
+#: wt-status.c:1322
msgid "Untracked files"
msgstr "Fichiers non suivis"
-#: wt-status.c:1273
+#: wt-status.c:1324
msgid "Ignored files"
msgstr "Fichiers ignorés"
-#: wt-status.c:1277
+#: wt-status.c:1328
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1849,32 +1886,32 @@ msgstr ""
"oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help "
"status')."
-#: wt-status.c:1283
+#: wt-status.c:1334
#, c-format
msgid "Untracked files not listed%s"
msgstr "Fichiers non suivis non affichés%s"
-#: wt-status.c:1285
+#: wt-status.c:1336
msgid " (use -u option to show untracked files)"
msgstr " (utilisez -u pour afficher les fichiers non suivis)"
-#: wt-status.c:1291
+#: wt-status.c:1342
msgid "No changes"
msgstr "Aucune modification"
-#: wt-status.c:1296
+#: wt-status.c:1347
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
"aucune modification n'a été ajoutée à la validation (utilisez \"git add\" ou "
"\"git commit -a\")\n"
-#: wt-status.c:1299
+#: wt-status.c:1350
#, c-format
msgid "no changes added to commit\n"
msgstr "aucune modification ajoutée à la validation\n"
-#: wt-status.c:1302
+#: wt-status.c:1353
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -1883,61 +1920,61 @@ msgstr ""
"aucune modification ajoutée à la validation mais des fichiers non suivis "
"sont présents (utilisez \"git add\" pour les suivre)\n"
-#: wt-status.c:1305
+#: wt-status.c:1356
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr ""
"aucune modification ajoutée à la validation mais des fichiers non suivis "
"sont présents\n"
-#: wt-status.c:1308
+#: wt-status.c:1359
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"rien à valider (créez/copiez des fichiers et utilisez \"git add\" pour les "
"suivre)\n"
-#: wt-status.c:1311 wt-status.c:1316
+#: wt-status.c:1362 wt-status.c:1367
#, c-format
msgid "nothing to commit\n"
msgstr "rien à valider\n"
-#: wt-status.c:1314
+#: wt-status.c:1365
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr "rien à valider (utilisez -u pour afficher les fichiers non suivis)\n"
-#: wt-status.c:1318
+#: wt-status.c:1369
#, c-format
msgid "nothing to commit, working directory clean\n"
msgstr "rien à valider, la copie de travail est propre\n"
-#: wt-status.c:1427
+#: wt-status.c:1478
msgid "HEAD (no branch)"
msgstr "HEAD (aucune branche)"
-#: wt-status.c:1433
+#: wt-status.c:1484
msgid "Initial commit on "
msgstr "Validation initiale sur "
# à priori on parle d'une branche ici
-#: wt-status.c:1463
+#: wt-status.c:1514
msgid "gone"
msgstr "disparue"
-#: wt-status.c:1465
+#: wt-status.c:1516
msgid "behind "
msgstr "derrière "
-#: wt-status.c:1468 wt-status.c:1471
+#: wt-status.c:1519 wt-status.c:1522
msgid "ahead "
msgstr "devant "
-#: wt-status.c:1473
+#: wt-status.c:1524
msgid ", behind "
msgstr ", derrière "
-#: compat/precompose_utf8.c:55 builtin/clone.c:350
+#: compat/precompose_utf8.c:55 builtin/clone.c:356
#, c-format
msgid "failed to unlink '%s'"
msgstr "échec lors de l'unlink de '%s'"
@@ -2071,15 +2108,15 @@ msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n"
-#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:92 builtin/mv.c:66
-#: builtin/prune-packed.c:73 builtin/push.c:459 builtin/remote.c:1253
+#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70
+#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344
#: builtin/rm.c:269
msgid "dry run"
msgstr "simuler l'action"
#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19
#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612
-#: builtin/log.c:1592 builtin/mv.c:65 builtin/read-tree.c:113
+#: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113
msgid "be verbose"
msgstr "mode verbeux"
@@ -2164,11 +2201,11 @@ msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "Vous vouliez sûrement dire 'git add .' ?\n"
#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919
-#: builtin/commit.c:320 builtin/mv.c:86 builtin/reset.c:224 builtin/rm.c:299
+#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299
msgid "index file corrupt"
msgstr "fichier d'index corrompu"
-#: builtin/add.c:589 builtin/apply.c:4506 builtin/mv.c:259 builtin/rm.c:432
+#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432
msgid "Unable to write new index file"
msgstr "Impossible d'écrire le nouveau fichier d'index"
@@ -2513,7 +2550,7 @@ msgid "unable to read index file"
msgstr "lecture du fichier d'index impossible"
#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90
-#: builtin/fetch.c:77
+#: builtin/fetch.c:78
msgid "path"
msgstr "chemin"
@@ -2717,100 +2754,100 @@ msgstr "git blame [options] [options-de-révision] [rev] [--] fichier"
msgid "[rev-opts] are documented in git-rev-list(1)"
msgstr "[options-de-révision] sont documentés dans git-rev-list(1)"
-#: builtin/blame.c:2248
+#: builtin/blame.c:2249
msgid "Show blame entries as we find them, incrementally"
msgstr ""
"Montrer les éléments de blâme au fur et à mesure de leur découverte, de "
"manière incrémentale"
-#: builtin/blame.c:2249
+#: builtin/blame.c:2250
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr "Montrer un SHA-1 blanc pour les commits de limite (Défaut : désactivé)"
-#: builtin/blame.c:2250
+#: builtin/blame.c:2251
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr ""
"Ne pas traiter les commits racine comme des limites (Défaut : désactivé)"
-#: builtin/blame.c:2251
+#: builtin/blame.c:2252
msgid "Show work cost statistics"
msgstr "Montrer les statistiques de coût d'activité"
-#: builtin/blame.c:2252
+#: builtin/blame.c:2253
msgid "Show output score for blame entries"
msgstr "Montrer le score de sortie pour les éléments de blâme"
-#: builtin/blame.c:2253
+#: builtin/blame.c:2254
msgid "Show original filename (Default: auto)"
msgstr "Montrer les noms de fichier originaux (Défaut : auto)"
-#: builtin/blame.c:2254
+#: builtin/blame.c:2255
msgid "Show original linenumber (Default: off)"
msgstr "Montrer les numéros de lignes originaux (Défaut : désactivé)"
-#: builtin/blame.c:2255
+#: builtin/blame.c:2256
msgid "Show in a format designed for machine consumption"
msgstr "Afficher dans un format propice à la consommation par machine"
-#: builtin/blame.c:2256
+#: builtin/blame.c:2257
msgid "Show porcelain format with per-line commit information"
msgstr "Afficher en format porcelaine avec l'information de commit par ligne"
-#: builtin/blame.c:2257
+#: builtin/blame.c:2258
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr "Utiliser le même mode de sortie que git-annotate (Défaut : désactivé)"
-#: builtin/blame.c:2258
+#: builtin/blame.c:2259
msgid "Show raw timestamp (Default: off)"
msgstr "Afficher les horodatages bruts (Défaut : désactivé)"
-#: builtin/blame.c:2259
+#: builtin/blame.c:2260
msgid "Show long commit SHA1 (Default: off)"
msgstr "Afficher les longs SHA1 de commits (Défaut : désactivé)"
-#: builtin/blame.c:2260
+#: builtin/blame.c:2261
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)"
-#: builtin/blame.c:2261
+#: builtin/blame.c:2262
msgid "Show author email instead of name (Default: off)"
msgstr "Afficher l'e-mail de l'auteur au lieu du nom (Défaut : désactivé)"
-#: builtin/blame.c:2262
+#: builtin/blame.c:2263
msgid "Ignore whitespace differences"
msgstr "Ignorer les différences d'espace"
-#: builtin/blame.c:2263
+#: builtin/blame.c:2264
msgid "Spend extra cycles to find better match"
msgstr ""
"Dépenser des cycles supplémentaires pour trouver une meilleure correspondance"
-#: builtin/blame.c:2264
+#: builtin/blame.c:2265
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr ""
"Utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list"
-#: builtin/blame.c:2265
+#: builtin/blame.c:2266
msgid "Use <file>'s contents as the final image"
msgstr "Utiliser le contenu de <fichier> comme image finale"
-#: builtin/blame.c:2266 builtin/blame.c:2267
+#: builtin/blame.c:2267 builtin/blame.c:2268
msgid "score"
msgstr "score"
-#: builtin/blame.c:2266
+#: builtin/blame.c:2267
msgid "Find line copies within and across files"
msgstr "Trouver les copies de ligne dans et entre les fichiers"
-#: builtin/blame.c:2267
+#: builtin/blame.c:2268
msgid "Find line movements within and across files"
msgstr "Trouver les mouvements de ligne dans et entre les fichiers"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "Process only line range n,m, counting from 1"
msgstr ""
"Traiter seulement l'intervalle de ligne n,m en commençant le compte à 1"
@@ -2916,250 +2953,250 @@ msgid "branch '%s' does not point at a commit"
msgstr "la branche '%s' ne pointe pas sur un commit"
# féminin pour une branche
-#: builtin/branch.c:453
+#: builtin/branch.c:454
#, c-format
msgid "[%s: gone]"
msgstr "[%s: disparue]"
-#: builtin/branch.c:456
+#: builtin/branch.c:459
#, c-format
msgid "[%s]"
msgstr "[%s]"
-#: builtin/branch.c:459
+#: builtin/branch.c:464
#, c-format
msgid "[%s: behind %d]"
msgstr "[%s: en retard de %d]"
-#: builtin/branch.c:461
+#: builtin/branch.c:466
#, c-format
msgid "[behind %d]"
msgstr "[en retard de %d]"
-#: builtin/branch.c:465
+#: builtin/branch.c:470
#, c-format
msgid "[%s: ahead %d]"
msgstr "[%s : en avance de %d]"
-#: builtin/branch.c:467
+#: builtin/branch.c:472
#, c-format
msgid "[ahead %d]"
msgstr "[en avance de %d]"
-#: builtin/branch.c:470
+#: builtin/branch.c:475
#, c-format
msgid "[%s: ahead %d, behind %d]"
msgstr "[%s : en avance de %d, en retard de %d]"
-#: builtin/branch.c:473
+#: builtin/branch.c:478
#, c-format
msgid "[ahead %d, behind %d]"
msgstr "[en avance de %d, en retard de %d]"
-#: builtin/branch.c:496
+#: builtin/branch.c:502
msgid " **** invalid ref ****"
msgstr " **** référence invalide ****"
-#: builtin/branch.c:588
+#: builtin/branch.c:594
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(aucune branche, rebasage de %s)"
-#: builtin/branch.c:591
+#: builtin/branch.c:597
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(aucune branche, bisect a démarré sur %s)"
-#: builtin/branch.c:594
+#: builtin/branch.c:600
#, c-format
msgid "(detached from %s)"
msgstr "(détaché de %s)"
-#: builtin/branch.c:597
+#: builtin/branch.c:603
msgid "(no branch)"
msgstr "(aucune branche)"
-#: builtin/branch.c:643
+#: builtin/branch.c:649
#, c-format
msgid "object '%s' does not point to a commit"
msgstr "l'objet '%s' ne pointe pas sur un commit"
-#: builtin/branch.c:675
+#: builtin/branch.c:681
msgid "some refs could not be read"
msgstr "des références n'ont pas pu être lues"
-#: builtin/branch.c:688
+#: builtin/branch.c:694
msgid "cannot rename the current branch while not on any."
msgstr "impossible de renommer la branche actuelle, il n'y en a pas."
-#: builtin/branch.c:698
+#: builtin/branch.c:704
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Nom de branche invalide : '%s'"
-#: builtin/branch.c:713
+#: builtin/branch.c:719
msgid "Branch rename failed"
msgstr "Échec de renommage de la branche"
-#: builtin/branch.c:717
+#: builtin/branch.c:723
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "Renommage d'un branche mal nommée '%s'"
-#: builtin/branch.c:721
+#: builtin/branch.c:727
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "La branche a été renommée en %s, mais HEAD n'est pas mise à jour !"
-#: builtin/branch.c:728
+#: builtin/branch.c:734
msgid "Branch is renamed, but update of config-file failed"
msgstr ""
"La branche est renommée, mais la mise à jour du fichier de configuration a "
"échoué"
-#: builtin/branch.c:743
+#: builtin/branch.c:749
#, c-format
msgid "malformed object name %s"
msgstr "nom d'objet malformé %s"
-#: builtin/branch.c:767
+#: builtin/branch.c:773
#, c-format
msgid "could not write branch description template: %s"
msgstr "impossible d'écrire le modèle de description de branche : %s"
-#: builtin/branch.c:797
+#: builtin/branch.c:803
msgid "Generic options"
msgstr "Options génériques"
-#: builtin/branch.c:799
+#: builtin/branch.c:805
msgid "show hash and subject, give twice for upstream branch"
msgstr "afficher le hachage et le sujet, doublé pour la branche amont"
-#: builtin/branch.c:800
+#: builtin/branch.c:806
msgid "suppress informational messages"
msgstr "supprimer les messages d'information"
-#: builtin/branch.c:801
+#: builtin/branch.c:807
msgid "set up tracking mode (see git-pull(1))"
msgstr "régler le mode de suivi (voir git-pull(1))"
-#: builtin/branch.c:803
+#: builtin/branch.c:809
msgid "change upstream info"
msgstr "modifier l'information amont"
-#: builtin/branch.c:807
+#: builtin/branch.c:813
msgid "use colored output"
msgstr "utiliser la coloration dans la sortie"
-#: builtin/branch.c:808
+#: builtin/branch.c:814
msgid "act on remote-tracking branches"
msgstr "agir sur les branches de suivi distantes"
-#: builtin/branch.c:811 builtin/branch.c:817 builtin/branch.c:838
-#: builtin/branch.c:844 builtin/commit.c:1460 builtin/commit.c:1461
+#: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844
+#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461
#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468
msgid "commit"
msgstr "commit"
-#: builtin/branch.c:812 builtin/branch.c:818
+#: builtin/branch.c:818 builtin/branch.c:824
msgid "print only branches that contain the commit"
msgstr "afficher seulement les branches qui contiennent le commit"
-#: builtin/branch.c:824
+#: builtin/branch.c:830
msgid "Specific git-branch actions:"
msgstr "Actions spécifiques à git-branch :"
-#: builtin/branch.c:825
+#: builtin/branch.c:831
msgid "list both remote-tracking and local branches"
msgstr "afficher à la fois les branches de suivi et les branches locales"
-#: builtin/branch.c:827
+#: builtin/branch.c:833
msgid "delete fully merged branch"
msgstr "supprimer une branche totalement fusionnée"
-#: builtin/branch.c:828
+#: builtin/branch.c:834
msgid "delete branch (even if not merged)"
msgstr "supprimer une branche (même non fusionnée)"
-#: builtin/branch.c:829
+#: builtin/branch.c:835
msgid "move/rename a branch and its reflog"
msgstr "déplacer/renommer une branche et son reflog"
-#: builtin/branch.c:830
+#: builtin/branch.c:836
msgid "move/rename a branch, even if target exists"
msgstr "déplacer/renommer une branche, même si la cible existe"
-#: builtin/branch.c:831
+#: builtin/branch.c:837
msgid "list branch names"
msgstr "afficher les noms des branches"
-#: builtin/branch.c:832
+#: builtin/branch.c:838
msgid "create the branch's reflog"
msgstr "créer le reflog de la branche"
-#: builtin/branch.c:834
+#: builtin/branch.c:840
msgid "edit the description for the branch"
msgstr "éditer la description de la branche"
-#: builtin/branch.c:835
+#: builtin/branch.c:841
msgid "force creation (when already exists)"
msgstr "forcer la création (même si la cible existe)"
-#: builtin/branch.c:838
+#: builtin/branch.c:844
msgid "print only not merged branches"
msgstr "afficher seulement les branches non fusionnées"
-#: builtin/branch.c:844
+#: builtin/branch.c:850
msgid "print only merged branches"
msgstr "afficher seulement les branches fusionnées"
-#: builtin/branch.c:848
+#: builtin/branch.c:854
msgid "list branches in columns"
msgstr "afficher les branches en colonnes"
-#: builtin/branch.c:861
+#: builtin/branch.c:867
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Échec de résolution de HEAD comme référence valide."
-#: builtin/branch.c:866 builtin/clone.c:629
+#: builtin/branch.c:872 builtin/clone.c:635
msgid "HEAD not found below refs/heads!"
msgstr "HEAD non trouvée sous refs/heads !"
-#: builtin/branch.c:890
+#: builtin/branch.c:896
msgid "--column and --verbose are incompatible"
msgstr "--column et --verbose sont incompatibles"
-#: builtin/branch.c:896 builtin/branch.c:935
+#: builtin/branch.c:902 builtin/branch.c:941
msgid "branch name required"
msgstr "le nom de branche est requis"
-#: builtin/branch.c:911
+#: builtin/branch.c:917
msgid "Cannot give description to detached HEAD"
msgstr "Impossible de décrire une HEAD détachée"
-#: builtin/branch.c:916
+#: builtin/branch.c:922
msgid "cannot edit description of more than one branch"
msgstr "impossible d'éditer la description de plus d'une branche"
-#: builtin/branch.c:923
+#: builtin/branch.c:929
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Aucun commit sur la branche '%s'."
-#: builtin/branch.c:926
+#: builtin/branch.c:932
#, c-format
msgid "No branch named '%s'."
msgstr "Aucune branche nommée '%s'."
-#: builtin/branch.c:941
+#: builtin/branch.c:947
msgid "too many branches for a rename operation"
msgstr "trop de branches pour une opération de renommage"
-#: builtin/branch.c:946
+#: builtin/branch.c:952
msgid "too many branches to set new upstream"
msgstr "trop de branches pour spécifier une branche amont"
-#: builtin/branch.c:950
+#: builtin/branch.c:956
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
@@ -3167,41 +3204,41 @@ msgstr ""
"impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur "
"aucune branche."
-#: builtin/branch.c:953 builtin/branch.c:975 builtin/branch.c:997
+#: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002
#, c-format
msgid "no such branch '%s'"
msgstr "pas de branche '%s'"
-#: builtin/branch.c:957
+#: builtin/branch.c:963
#, c-format
msgid "branch '%s' does not exist"
msgstr "la branche '%s' n'existe pas"
-#: builtin/branch.c:969
+#: builtin/branch.c:975
msgid "too many branches to unset upstream"
msgstr "trop de branches pour désactiver un amont"
-#: builtin/branch.c:973
+#: builtin/branch.c:979
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"impossible de désactiver une branche amont de HEAD quand elle ne pointe sur "
"aucune branche."
-#: builtin/branch.c:979
+#: builtin/branch.c:985
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "La branche '%s' n'a aucune information de branche amont"
-#: builtin/branch.c:994
+#: builtin/branch.c:999
msgid "it does not make sense to create 'HEAD' manually"
msgstr "créer manuellement 'HEAD' n'a pas de sens"
-#: builtin/branch.c:1000
+#: builtin/branch.c:1005
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr ""
"les options -a et -r de 'git branch' n'ont pas de sens avec un nom de branche"
-#: builtin/branch.c:1003
+#: builtin/branch.c:1008
#, c-format
msgid ""
"The --set-upstream flag is deprecated and will be removed. Consider using --"
@@ -3210,7 +3247,7 @@ msgstr ""
"l'option --set-upstream est obsolète et va disparaître. Utilisez plutôt --"
"track ou --set-upstream-to\n"
-#: builtin/branch.c:1020
+#: builtin/branch.c:1025
#, c-format
msgid ""
"\n"
@@ -3221,15 +3258,15 @@ msgstr ""
"Si vous vouliez que '%s' suive '%s', faîtes ceci :\n"
"\n"
-#: builtin/branch.c:1021
+#: builtin/branch.c:1026
#, c-format
msgid " git branch -d %s\n"
msgstr " git branch -d %s\n"
-#: builtin/branch.c:1022
+#: builtin/branch.c:1027
#, c-format
msgid " git branch --set-upstream-to %s\n"
-msgstr " git branch -set-upstream-to %s\n"
+msgstr " git branch --set-upstream-to %s\n"
#: builtin/bundle.c:47
#, c-format
@@ -3244,44 +3281,44 @@ msgstr "La création d'un colis requiert un dépôt."
msgid "Need a repository to unbundle."
msgstr "Le dépaquetage d'un colis requiert un dépôt."
-#: builtin/cat-file.c:312
+#: builtin/cat-file.c:328
msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
msgstr "git cat-file (-t|-s|-e|-p|<type>|--textconv) <objet>"
-#: builtin/cat-file.c:313
+#: builtin/cat-file.c:329
msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
msgstr "git cat-file (--batch|--batch-check) < <liste_d_objets>"
-#: builtin/cat-file.c:350
+#: builtin/cat-file.c:366
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<type> peut être : blob, tree, commit ou tag"
-#: builtin/cat-file.c:351
+#: builtin/cat-file.c:367
msgid "show object type"
msgstr "afficher le type de l'objet"
-#: builtin/cat-file.c:352
+#: builtin/cat-file.c:368
msgid "show object size"
msgstr "afficher la taille de l'objet"
-#: builtin/cat-file.c:354
+#: builtin/cat-file.c:370
msgid "exit with zero when there's no error"
msgstr "sortir avec un code d'erreur nul quand il n'y a aucune erreur"
-#: builtin/cat-file.c:355
+#: builtin/cat-file.c:371
msgid "pretty-print object's content"
msgstr "afficher avec mise en forme le contenu de l'objet"
-#: builtin/cat-file.c:357
+#: builtin/cat-file.c:373
msgid "for blob objects, run textconv on object's content"
msgstr "pour les objets blob, lancer textconv sur le contenu de l'objet"
-#: builtin/cat-file.c:359
+#: builtin/cat-file.c:375
msgid "show info and content of objects fed from the standard input"
msgstr ""
"afficher l'information et le contenu des objets passés en entrée standard"
-#: builtin/cat-file.c:362
+#: builtin/cat-file.c:378
msgid "show info about objects fed from the standard input"
msgstr "afficher l'information des objets passés en entrée standard"
@@ -3308,9 +3345,10 @@ msgstr "lire les noms de fichier depuis l'entrée standard"
#: builtin/check-attr.c:23 builtin/check-ignore.c:24
msgid "terminate input and output records by a NUL character"
-msgstr "terminer les enregistrements en entrée et en sortie par un caractère NUL"
+msgstr ""
+"terminer les enregistrements en entrée et en sortie par un caractère NUL"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:259
+#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260
msgid "suppress progress reporting"
msgstr "supprimer l'état d'avancement"
@@ -3606,7 +3644,7 @@ msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Impossible de basculer de branche vers '%s' qui n'est pas un commit"
#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88
-#: builtin/remote.c:169 builtin/remote.c:171
+#: builtin/remote.c:159 builtin/remote.c:161
msgid "branch"
msgstr "branche"
@@ -3654,11 +3692,11 @@ msgstr "forcer l'extraction (laisser tomber les modifications locales)"
msgid "perform a 3-way merge with the new branch"
msgstr "effectuer une fusion à 3 points avec la nouvelle branche"
-#: builtin/checkout.c:1106 builtin/merge.c:232
+#: builtin/checkout.c:1106 builtin/merge.c:225
msgid "update ignored files (default)"
msgstr "mettre à jour les fichiers ignorés (par défaut)"
-#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:251
+#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248
msgid "style"
msgstr "style"
@@ -3857,7 +3895,7 @@ msgid "remove whole directories"
msgstr "supprimer les répertoires entiers"
#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718
-#: builtin/ls-files.c:483 builtin/name-rev.c:315 builtin/show-ref.c:185
+#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185
msgid "pattern"
msgstr "motif"
@@ -3897,8 +3935,8 @@ msgstr ""
msgid "git clone [options] [--] <repo> [<dir>]"
msgstr "git clone [options] [--] <dépôt> [<répertoire>]"
-#: builtin/clone.c:64 builtin/fetch.c:96 builtin/merge.c:229
-#: builtin/push.c:474
+#: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222
+#: builtin/push.c:521
msgid "force progress reporting"
msgstr "forcer l'état d'avancement"
@@ -3958,7 +3996,7 @@ msgstr "extraire <branche> au lieu de la HEAD du répertoire distant"
msgid "path to git-upload-pack on the remote"
msgstr "chemin vers git-upload-pack sur le serveur distant"
-#: builtin/clone.c:92 builtin/fetch.c:97 builtin/grep.c:663
+#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663
msgid "depth"
msgstr "profondeur"
@@ -3991,42 +4029,52 @@ msgstr "régler la configuration dans le nouveau dépôt"
msgid "reference repository '%s' is not a local repository."
msgstr "le dépôt de référence '%s' n'est pas un dépôt local."
-#: builtin/clone.c:315
+#: builtin/clone.c:256
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "le dépôt de référence '%s' est superficiel"
+
+#: builtin/clone.c:259
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "le dépôt de référence '%s' est greffé"
+
+#: builtin/clone.c:321
#, c-format
msgid "failed to create directory '%s'"
msgstr "échec de la création du répertoire '%s'"
-#: builtin/clone.c:317 builtin/diff.c:77
+#: builtin/clone.c:323 builtin/diff.c:83
#, c-format
msgid "failed to stat '%s'"
msgstr "échec du stat de '%s'"
-#: builtin/clone.c:319
+#: builtin/clone.c:325
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s existe et n'est pas un répertoire"
-#: builtin/clone.c:333
+#: builtin/clone.c:339
#, c-format
msgid "failed to stat %s\n"
msgstr "échec du stat de %s\n"
-#: builtin/clone.c:355
+#: builtin/clone.c:361
#, c-format
msgid "failed to create link '%s'"
msgstr "échec de la création du lien '%s'"
-#: builtin/clone.c:359
+#: builtin/clone.c:365
#, c-format
msgid "failed to copy file to '%s'"
msgstr "échec de la copie vers '%s'"
-#: builtin/clone.c:382 builtin/clone.c:559
+#: builtin/clone.c:388 builtin/clone.c:565
#, c-format
msgid "done.\n"
msgstr "fait.\n"
-#: builtin/clone.c:395
+#: builtin/clone.c:401
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -4036,103 +4084,112 @@ msgstr ""
"Vous pouvez inspecter ce qui a été extrait avec 'git status'\n"
"et réessayer l'extraction avec 'git checkout -f HEAD'\n"
-#: builtin/clone.c:474
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "Impossible de trouver la branche distante '%s' à cloner."
-#: builtin/clone.c:554
+#: builtin/clone.c:560
#, c-format
msgid "Checking connectivity... "
msgstr "Vérification de la connectivité... "
-#: builtin/clone.c:557
+#: builtin/clone.c:563
msgid "remote did not send all necessary objects"
msgstr "le serveur distant n'a pas envoyé tous les objets nécessaires"
-#: builtin/clone.c:620
+#: builtin/clone.c:626
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"la HEAD distante réfère à une référence non existante, impossible de "
"l'extraire.\n"
-#: builtin/clone.c:651
+#: builtin/clone.c:657
msgid "unable to checkout working tree"
msgstr "impossible d'extraire la copie de travail"
-#: builtin/clone.c:759
+#: builtin/clone.c:765
msgid "Too many arguments."
msgstr "Trop d'arguments."
-#: builtin/clone.c:763
+#: builtin/clone.c:769
msgid "You must specify a repository to clone."
msgstr "Vous devez spécifier un dépôt à cloner."
-#: builtin/clone.c:774
+#: builtin/clone.c:780
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "les options --bare et --origin %s sont incompatibles."
-#: builtin/clone.c:777
+#: builtin/clone.c:783
msgid "--bare and --separate-git-dir are incompatible."
msgstr "--bare et --separate-git-dir sont incompatibles."
-#: builtin/clone.c:790
+#: builtin/clone.c:796
#, c-format
msgid "repository '%s' does not exist"
msgstr "le dépôt '%s' n'existe pas"
-#: builtin/clone.c:795
+#: builtin/clone.c:802
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
"--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
-#: builtin/clone.c:797
+#: builtin/clone.c:805
+msgid "source repository is shallow, ignoring --local"
+msgstr "le dépôt source est superficiel, option --local ignorée"
+
+#: builtin/clone.c:810
msgid "--local is ignored"
msgstr "--local est ignoré"
-#: builtin/clone.c:807
+#: builtin/clone.c:814 builtin/fetch.c:1119
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr "la profondeur %s n'est pas un entier positif"
+
+#: builtin/clone.c:824
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr ""
"le chemin de destination '%s' existe déjà et n'est pas un répertoire vide."
-#: builtin/clone.c:817
+#: builtin/clone.c:834
#, c-format
msgid "working tree '%s' already exists."
msgstr "la copie de travail '%s' existe déjà."
-#: builtin/clone.c:830 builtin/clone.c:842
+#: builtin/clone.c:847 builtin/clone.c:859
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "impossible de créer les répertoires de premier niveau dans '%s'"
-#: builtin/clone.c:833
+#: builtin/clone.c:850
#, c-format
msgid "could not create work tree dir '%s'."
msgstr "impossible de créer le répertoire de la copie de travail '%s'."
-#: builtin/clone.c:852
+#: builtin/clone.c:869
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Clonage dans le dépôt nu '%s'\n"
-#: builtin/clone.c:854
+#: builtin/clone.c:871
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Clonage dans '%s'...\n"
-#: builtin/clone.c:888
+#: builtin/clone.c:906
#, c-format
msgid "Don't know how to clone %s"
msgstr "Je ne sais pas cloner %s"
-#: builtin/clone.c:939 builtin/clone.c:947
+#: builtin/clone.c:957 builtin/clone.c:965
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "La branche distante %s n'a pas été trouvée dans le dépôt amont %s"
-#: builtin/clone.c:950
+#: builtin/clone.c:968
msgid "You appear to have cloned an empty repository."
msgstr "Vous semblez avoir cloné un dépôt vide."
@@ -4489,7 +4546,7 @@ msgstr "afficher le statut avec concision"
msgid "show branch information"
msgstr "afficher l'information de branche"
-#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:460
+#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507
msgid "machine-readable output"
msgstr "sortie pour traitement automatique"
@@ -4572,7 +4629,7 @@ msgstr "auteur"
msgid "override author for commit"
msgstr "remplacer l'auteur pour la validation"
-#: builtin/commit.c:1458 builtin/gc.c:260
+#: builtin/commit.c:1458 builtin/gc.c:261
msgid "date"
msgstr "date"
@@ -4580,7 +4637,7 @@ msgstr "date"
msgid "override date for commit"
msgstr "remplacer la date pour la validation"
-#: builtin/commit.c:1459 builtin/merge.c:223 builtin/notes.c:405
+#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405
#: builtin/notes.c:562 builtin/tag.c:455
msgid "message"
msgstr "message"
@@ -4636,11 +4693,11 @@ msgstr "comment éliminer les espaces et les commentaires # du message"
msgid "include status in commit message template"
msgstr "inclure le statut dans le modèle de message de validation"
-#: builtin/commit.c:1470 builtin/merge.c:230 builtin/tag.c:461
+#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461
msgid "key id"
msgstr "identifiant de clé"
-#: builtin/commit.c:1471 builtin/merge.c:231
+#: builtin/commit.c:1471 builtin/merge.c:224
msgid "GPG sign commit"
msgstr "signer la validation avec GPG"
@@ -4697,7 +4754,7 @@ msgstr "accepter d'enregistrer une modification avec un message vide"
msgid "could not parse HEAD commit"
msgstr "impossible d'analyser le commit HEAD"
-#: builtin/commit.c:1567 builtin/merge.c:525
+#: builtin/commit.c:1567 builtin/merge.c:518
#, c-format
msgid "could not open '%s' for reading"
msgstr "impossible d'ouvrir '%s' en lecture"
@@ -4716,29 +4773,29 @@ msgstr "impossible de lire MERGE_MODE"
msgid "could not read commit message: %s"
msgstr "impossible de lire le message de validation : %s"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1611
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Abandon de la validation ; vous n'avez pas édité le message\n"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1616
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Abandon de la validation du à un message de validation vide\n"
-#: builtin/commit.c:1634 builtin/merge.c:861 builtin/merge.c:886
+#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879
msgid "failed to write commit object"
msgstr "échec de l'écriture de l'objet commit"
-#: builtin/commit.c:1655
+#: builtin/commit.c:1652
msgid "cannot lock HEAD ref"
msgstr "impossible de verrouiller la référence HEAD"
-#: builtin/commit.c:1659
+#: builtin/commit.c:1656
msgid "cannot update HEAD ref"
msgstr "impossible de mettre à jour la référence HEAD"
-#: builtin/commit.c:1670
+#: builtin/commit.c:1667
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full or quota is\n"
@@ -5003,7 +5060,7 @@ msgstr ""
msgid "only consider tags matching <pattern>"
msgstr "ne considérer que les étiquettes correspondant à <motif>"
-#: builtin/describe.c:423 builtin/name-rev.c:322
+#: builtin/describe.c:423 builtin/name-rev.c:321
msgid "show abbreviated commit object as fallback"
msgstr "afficher les objets commits abrégés en dernier recours"
@@ -5027,31 +5084,31 @@ msgstr "aucun nom trouvé, impossible de décrire quoi que ce soit."
msgid "--dirty is incompatible with commit-ishes"
msgstr "--dirty est incompatible avec la spécification de commits ou assimilés"
-#: builtin/diff.c:79
+#: builtin/diff.c:85
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "'%s' : n'est pas un fichier régulier ni un lien symbolique"
-#: builtin/diff.c:230
+#: builtin/diff.c:236
#, c-format
msgid "invalid option: %s"
msgstr "option invalide : %s"
-#: builtin/diff.c:307
+#: builtin/diff.c:357
msgid "Not a git repository"
msgstr "Ce n'est pas un dépôt git !"
-#: builtin/diff.c:350
+#: builtin/diff.c:400
#, c-format
msgid "invalid object '%s' given."
msgstr "objet spécifié '%s' invalide."
-#: builtin/diff.c:359
+#: builtin/diff.c:409
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "plus de deux blobs spécifiés : '%s'"
-#: builtin/diff.c:366
+#: builtin/diff.c:416
#, c-format
msgid "unhandled object '%s' given."
msgstr "objet non géré '%s' spécifié."
@@ -5113,146 +5170,156 @@ msgstr "git fetch --multiple [<options>] [(<dépôt> | <groupe>)...]"
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<options>]"
-#: builtin/fetch.c:74
+#: builtin/fetch.c:75
msgid "fetch from all remotes"
msgstr "récupérer depuis tous le dépôts distants"
-#: builtin/fetch.c:76
+#: builtin/fetch.c:77
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "ajouter à .git/FETCH_HEAD au lieu de l'écraser"
-#: builtin/fetch.c:78
+#: builtin/fetch.c:79
msgid "path to upload pack on remote end"
msgstr "chemin vers lequel télécharger le paquet sur le poste distant"
-#: builtin/fetch.c:79
+#: builtin/fetch.c:80
msgid "force overwrite of local branch"
msgstr "forcer l'écrasement de la branche locale"
-#: builtin/fetch.c:81
+#: builtin/fetch.c:82
msgid "fetch from multiple remotes"
msgstr "récupérer depuis plusieurs dépôts distants"
-#: builtin/fetch.c:83
+#: builtin/fetch.c:84
msgid "fetch all tags and associated objects"
msgstr "récupérer toutes les étiquettes et leurs objets associés"
-#: builtin/fetch.c:85
+#: builtin/fetch.c:86
msgid "do not fetch all tags (--no-tags)"
msgstr "ne pas récupérer toutes les étiquettes (--no-tags)"
-#: builtin/fetch.c:87
+#: builtin/fetch.c:88
msgid "prune remote-tracking branches no longer on remote"
msgstr ""
"éliminer les branches de suivi distant si la branche n'existe plus dans le "
"dépôt distant"
-#: builtin/fetch.c:88
+#: builtin/fetch.c:89
msgid "on-demand"
msgstr "à la demande"
-#: builtin/fetch.c:89
+#: builtin/fetch.c:90
msgid "control recursive fetching of submodules"
msgstr "contrôler la récupération récursive dans les sous-modules"
-#: builtin/fetch.c:93
+#: builtin/fetch.c:94
msgid "keep downloaded pack"
msgstr "conserver le paquet téléchargé"
-#: builtin/fetch.c:95
+#: builtin/fetch.c:96
msgid "allow updating of HEAD ref"
msgstr "permettre la mise à jour de la référence HEAD"
-#: builtin/fetch.c:98
+#: builtin/fetch.c:99
msgid "deepen history of shallow clone"
msgstr "approfondir l'historique d'un clone superficiel"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:101
msgid "convert to a complete repository"
msgstr "convertir en un dépôt complet"
-#: builtin/fetch.c:102 builtin/log.c:1197
+#: builtin/fetch.c:103 builtin/log.c:1197
msgid "dir"
msgstr "dir"
-#: builtin/fetch.c:103
+#: builtin/fetch.c:104
msgid "prepend this to submodule path output"
msgstr "préfixer ceci à la sortie du chemin du sous-module"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:107
msgid "default mode for recursion"
msgstr "mode par défaut pour la récursion"
-#: builtin/fetch.c:236
+#: builtin/fetch.c:109
+msgid "accept refs that update .git/shallow"
+msgstr "accepter les références qui mettent à jour .git/shallow"
+
+#: builtin/fetch.c:347
msgid "Couldn't find remote ref HEAD"
msgstr "impossible de trouver la référence HEAD distante"
-#: builtin/fetch.c:290
+#: builtin/fetch.c:411
#, c-format
msgid "object %s not found"
msgstr "objet %s non trouvé"
-#: builtin/fetch.c:295
+#: builtin/fetch.c:416
msgid "[up to date]"
msgstr "[à jour]"
-#: builtin/fetch.c:309
+#: builtin/fetch.c:430
#, c-format
msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
msgstr "! %-*s %-*s -> %s (impossible de récupérer la branche actuelle)"
-#: builtin/fetch.c:310 builtin/fetch.c:396
+#: builtin/fetch.c:431 builtin/fetch.c:517
msgid "[rejected]"
msgstr "[rejeté]"
-#: builtin/fetch.c:321
+#: builtin/fetch.c:442
msgid "[tag update]"
msgstr "[mise à jour de l'étiquette]"
-#: builtin/fetch.c:323 builtin/fetch.c:358 builtin/fetch.c:376
+#: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497
msgid " (unable to update local ref)"
msgstr " (impossible de mettre à jour la référence locale)"
-#: builtin/fetch.c:341
+#: builtin/fetch.c:462
msgid "[new tag]"
msgstr "[nouvelle étiquette]"
-#: builtin/fetch.c:344
+#: builtin/fetch.c:465
msgid "[new branch]"
msgstr "[nouvelle branche]"
-#: builtin/fetch.c:347
+#: builtin/fetch.c:468
msgid "[new ref]"
msgstr "[nouvelle référence]"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "unable to update local ref"
msgstr "impossible de mettre à jour la référence locale"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "forced update"
msgstr "mise à jour forcée"
-#: builtin/fetch.c:398
+#: builtin/fetch.c:519
msgid "(non-fast-forward)"
msgstr "(pas d'avance rapide)"
-#: builtin/fetch.c:429 builtin/fetch.c:735
+#: builtin/fetch.c:552 builtin/fetch.c:785
#, c-format
msgid "cannot open %s: %s\n"
msgstr "impossible d'ouvrir %s : %s\n"
-#: builtin/fetch.c:438
+#: builtin/fetch.c:561
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s n'a pas envoyé tous les objets nécessaires\n"
-#: builtin/fetch.c:537
+#: builtin/fetch.c:579
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr ""
+"%s rejeté parce que les racines superficielles ne sont pas mises à jour"
+
+#: builtin/fetch.c:667 builtin/fetch.c:750
#, c-format
msgid "From %.*s\n"
msgstr "Depuis %.*s\n"
-#: builtin/fetch.c:548
+#: builtin/fetch.c:678
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -5261,55 +5328,55 @@ msgstr ""
"des références locales n'ont pas pu être mises à jour ; essayez de lancer\n"
" 'git remote prune %s' pour supprimer des branches anciennes en conflit"
-#: builtin/fetch.c:598
+#: builtin/fetch.c:730
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s sera en suspens)"
-#: builtin/fetch.c:599
+#: builtin/fetch.c:731
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s est devenu en suspens)"
-#: builtin/fetch.c:606
+#: builtin/fetch.c:755
msgid "[deleted]"
msgstr "[supprimé]"
-#: builtin/fetch.c:607 builtin/remote.c:1055
+#: builtin/fetch.c:756 builtin/remote.c:1050
msgid "(none)"
msgstr "(aucun(e))"
-#: builtin/fetch.c:725
+#: builtin/fetch.c:775
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Refus de récupérer dans la branche courant %s d'un dépôt non nu"
-#: builtin/fetch.c:744
+#: builtin/fetch.c:794
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "La valeur \"%2$s\" de l'option \"%1$s\" est invalide pour %3$s"
-#: builtin/fetch.c:747
+#: builtin/fetch.c:797
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "L'option \"%s\" est ignorée pour %s\n"
-#: builtin/fetch.c:801
+#: builtin/fetch.c:853
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "Je ne sais pas récupérer depuis %s"
-#: builtin/fetch.c:976
+#: builtin/fetch.c:1015
#, c-format
msgid "Fetching %s\n"
msgstr "Récupération de %s\n"
-#: builtin/fetch.c:978 builtin/remote.c:100
+#: builtin/fetch.c:1017 builtin/remote.c:90
#, c-format
msgid "Could not fetch %s"
msgstr "Impossible de récupérer %s"
-#: builtin/fetch.c:997
+#: builtin/fetch.c:1036
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -5317,32 +5384,32 @@ msgstr ""
"Aucun dépôt distant spécifié. Veuillez spécifier une URL ou un nom\n"
"distant depuis lesquels les nouvelles révisions devraient être récupérées."
-#: builtin/fetch.c:1020
+#: builtin/fetch.c:1059
msgid "You need to specify a tag name."
msgstr "Vous devez spécifier un nom d'étiquette."
-#: builtin/fetch.c:1068
+#: builtin/fetch.c:1107
msgid "--depth and --unshallow cannot be used together"
msgstr "--depth et --unshallow ne peuvent pas être utilisés ensemble"
-#: builtin/fetch.c:1070
+#: builtin/fetch.c:1109
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow sur un dépôt complet n'a pas de sens"
-#: builtin/fetch.c:1089
+#: builtin/fetch.c:1132
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all n'accepte pas d'argument de dépôt"
-#: builtin/fetch.c:1091
+#: builtin/fetch.c:1134
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all n'a pas de sens avec des spécifications de référence"
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1145
#, c-format
msgid "No such remote or remote group: %s"
msgstr "distant ou groupe distant inexistant : %s"
-#: builtin/fetch.c:1110
+#: builtin/fetch.c:1153
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr ""
"La récupération d'un groupe et les spécifications de référence n'ont pas de "
@@ -5354,8 +5421,9 @@ msgstr ""
"git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <fichier>]"
#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702
-#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:178
-#: builtin/tag.c:446 parse-options.h:135 parse-options.h:245
+#: builtin/merge.c:196 builtin/repack.c:160 builtin/repack.c:164
+#: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:446
+#: parse-options.h:135 parse-options.h:242
msgid "n"
msgstr "n"
@@ -5379,43 +5447,43 @@ msgstr "utiliser <texte> comme début de message"
msgid "file to read from"
msgstr "fichier d'où lire"
-#: builtin/for-each-ref.c:995
+#: builtin/for-each-ref.c:1063
msgid "git for-each-ref [options] [<pattern>]"
msgstr "git for-each-ref [options] [<motif>]"
-#: builtin/for-each-ref.c:1010
+#: builtin/for-each-ref.c:1078
msgid "quote placeholders suitably for shells"
msgstr "échapper les champs réservés pour les interpréteurs de commandes"
-#: builtin/for-each-ref.c:1012
+#: builtin/for-each-ref.c:1080
msgid "quote placeholders suitably for perl"
msgstr "échapper les champs réservés pour perl"
-#: builtin/for-each-ref.c:1014
+#: builtin/for-each-ref.c:1082
msgid "quote placeholders suitably for python"
msgstr "échapper les champs réservés pour python"
-#: builtin/for-each-ref.c:1016
+#: builtin/for-each-ref.c:1084
msgid "quote placeholders suitably for tcl"
msgstr "échapper les champs réservés pour tcl"
-#: builtin/for-each-ref.c:1019
+#: builtin/for-each-ref.c:1087
msgid "show only <n> matched refs"
msgstr "n'afficher que <n> références correspondant"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088 builtin/replace.c:177
msgid "format"
msgstr "format"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088
msgid "format to use for the output"
msgstr "format à utiliser pour la sortie"
-#: builtin/for-each-ref.c:1021
+#: builtin/for-each-ref.c:1089
msgid "key"
msgstr "clé"
-#: builtin/for-each-ref.c:1022
+#: builtin/for-each-ref.c:1090
msgid "field name to sort on"
msgstr "nom du champ servant à trier"
@@ -5460,41 +5528,43 @@ msgstr "activer une vérification plus strict"
msgid "write dangling objects in .git/lost-found"
msgstr "écrire les objets en suspens dans .git/lost-found"
-#: builtin/fsck.c:623 builtin/prune.c:134
+#: builtin/fsck.c:623 builtin/prune.c:144
msgid "show progress"
msgstr "afficher la progression"
-#: builtin/gc.c:23
+#: builtin/gc.c:24
msgid "git gc [options]"
msgstr "git gc [options]"
-#: builtin/gc.c:79
+#: builtin/gc.c:80
#, c-format
msgid "Invalid %s: '%s'"
msgstr "%s invalide : '%s'"
-#: builtin/gc.c:106
+#: builtin/gc.c:107
#, c-format
msgid "insanely long object directory %.*s"
msgstr "objet répertoire démentiellement long %.*s"
-#: builtin/gc.c:261
+#: builtin/gc.c:262
msgid "prune unreferenced objects"
msgstr "éliminer les objets non référencés"
-#: builtin/gc.c:263
+#: builtin/gc.c:264
msgid "be more thorough (increased runtime)"
msgstr "être plus consciencieux (durée de traitement allongée)"
-#: builtin/gc.c:264
+#: builtin/gc.c:265
msgid "enable auto-gc mode"
msgstr "activer le mode auto-gc"
-#: builtin/gc.c:265
+#: builtin/gc.c:266
msgid "force running gc even if there may be another gc running"
-msgstr "forcer le lancement du ramasse-miettes même si un autre ramasse-miettes tourne déjà"
+msgstr ""
+"forcer le lancement du ramasse-miettes même si un autre ramasse-miettes "
+"tourne déjà"
-#: builtin/gc.c:305
+#: builtin/gc.c:306
#, c-format
msgid ""
"Auto packing the repository for optimum performance. You may also\n"
@@ -5506,13 +5576,15 @@ msgstr ""
"d'information.\n"
#. be quiet on --auto
-#: builtin/gc.c:315
+#: builtin/gc.c:316
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
-msgstr "un ramasse-miettes est déjà en cours sur la machine '%s' pid %<PRIuMAX> (utilisez --force si ce n'est pas le cas)"
+msgstr ""
+"un ramasse-miettes est déjà en cours sur la machine '%s' pid %<PRIuMAX> "
+"(utilisez --force si ce n'est pas le cas)"
-#: builtin/gc.c:340
+#: builtin/gc.c:341
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
@@ -5859,58 +5931,58 @@ msgstr ""
"'%s' : chemin pour l'utilitaire de visualisation de manuel supporté.\n"
"Veuillez utiliser plutôt 'man.<outil>.cmd'."
-#: builtin/help.c:349
+#: builtin/help.c:353
#, c-format
msgid "'%s': unknown man viewer."
msgstr "'%s' : visualiseur de manuel inconnu."
-#: builtin/help.c:366
+#: builtin/help.c:370
msgid "no man viewer handled the request"
msgstr "aucun visualiseur de manuel n'a pris en charge la demande"
-#: builtin/help.c:374
+#: builtin/help.c:378
msgid "no info viewer handled the request"
msgstr "aucun visualiseur de 'info' n'a pris en charge la demande"
-#: builtin/help.c:420
+#: builtin/help.c:424
msgid "Defining attributes per path"
msgstr "Définition des attributs par chemin"
-#: builtin/help.c:421
+#: builtin/help.c:425
msgid "A Git glossary"
msgstr "Un glossaire Git"
-#: builtin/help.c:422
+#: builtin/help.c:426
msgid "Specifies intentionally untracked files to ignore"
msgstr "Spécifie les fichiers non-suivis à ignorer intentionnellement"
-#: builtin/help.c:423
+#: builtin/help.c:427
msgid "Defining submodule properties"
msgstr "Définition des propriétés de sous-module"
-#: builtin/help.c:424
+#: builtin/help.c:428
msgid "Specifying revisions and ranges for Git"
msgstr "Spécification des révisions et portées pour Git"
-#: builtin/help.c:425
+#: builtin/help.c:429
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr ""
"Une introduction pratique à Git (pour les versions 1.5.1 et supérieures)"
-#: builtin/help.c:426
+#: builtin/help.c:430
msgid "An overview of recommended workflows with Git"
msgstr "Un aperçu des flux de travail recommandés avec Git"
-#: builtin/help.c:438
+#: builtin/help.c:442
msgid "The common Git guides are:\n"
msgstr "Les guides Git populaires sont : \n"
-#: builtin/help.c:460 builtin/help.c:476
+#: builtin/help.c:463 builtin/help.c:480
#, c-format
msgid "usage: %s%s"
msgstr "usage : %s%s"
-#: builtin/help.c:492
+#: builtin/help.c:496
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "`git %s\" est un alias de `%s'"
@@ -6321,21 +6393,21 @@ msgstr "permissions"
msgid "specify that the git repository is to be shared amongst several users"
msgstr "spécifier que le dépôt git sera partagé entre plusieurs utilisateurs"
-#: builtin/init-db.c:493 builtin/prune-packed.c:75 builtin/repack.c:155
+#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155
msgid "be quiet"
msgstr "être silencieux"
-#: builtin/init-db.c:522 builtin/init-db.c:529
+#: builtin/init-db.c:525 builtin/init-db.c:530
#, c-format
msgid "cannot mkdir %s"
msgstr "impossible de créer le répertoire (mkdir) %s"
-#: builtin/init-db.c:533
+#: builtin/init-db.c:534
#, c-format
msgid "cannot chdir to %s"
msgstr "impossible de se déplacer vers le répertoire (chdir) %s"
-#: builtin/init-db.c:555
+#: builtin/init-db.c:556
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -6344,11 +6416,11 @@ msgstr ""
"%s (ou --work-tree=<répertoire>) n'est pas autorisé sans spécifier %s (ou --"
"git-dir=<répertoire>)"
-#: builtin/init-db.c:579
+#: builtin/init-db.c:580
msgid "Cannot access current working directory"
msgstr "Impossible d'accéder au répertoire de travail courant"
-#: builtin/init-db.c:586
+#: builtin/init-db.c:587
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "Impossible d'accéder à l'arbre de travail '%s'"
@@ -6521,7 +6593,8 @@ msgstr "ident"
#: builtin/log.c:1217
msgid "set From address to <ident> (or committer ident if absent)"
-msgstr "renseigner l'adresse From à <ident> (ou à l'ident du validateur si absent)"
+msgstr ""
+"renseigner l'adresse From à <ident> (ou à l'ident du validateur si absent)"
#: builtin/log.c:1219
msgid "message-id"
@@ -6779,153 +6852,153 @@ msgstr "Les stratégies disponibles sont :"
msgid "Available custom strategies are:"
msgstr "Les stratégies personnalisées sont :"
-#: builtin/merge.c:198
+#: builtin/merge.c:191
msgid "do not show a diffstat at the end of the merge"
msgstr "ne pas afficher un diffstat à la fin de la fusion"
-#: builtin/merge.c:201
+#: builtin/merge.c:194
msgid "show a diffstat at the end of the merge"
msgstr "afficher un diffstat à la fin de la fusion"
-#: builtin/merge.c:202
+#: builtin/merge.c:195
msgid "(synonym to --stat)"
msgstr "(synonyme de --stat)"
-#: builtin/merge.c:204
+#: builtin/merge.c:197
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"ajouter (au plus <n>) éléments du journal court au message de validation de "
"la fusion"
-#: builtin/merge.c:207
+#: builtin/merge.c:200
msgid "create a single commit instead of doing a merge"
msgstr "créer une validation unique au lieu de faire une fusion"
-#: builtin/merge.c:209
+#: builtin/merge.c:202
msgid "perform a commit if the merge succeeds (default)"
msgstr "effectuer une validation si la fusion réussit (défaut)"
-#: builtin/merge.c:211
+#: builtin/merge.c:204
msgid "edit message before committing"
msgstr "éditer le message avant la validation"
-#: builtin/merge.c:212
+#: builtin/merge.c:205
msgid "allow fast-forward (default)"
msgstr "autoriser l'avance rapide (défaut)"
-#: builtin/merge.c:214
+#: builtin/merge.c:207
msgid "abort if fast-forward is not possible"
msgstr "abandonner si l'avance rapide n'est pas possible"
-#: builtin/merge.c:218
+#: builtin/merge.c:211
msgid "Verify that the named commit has a valid GPG signature"
msgstr "Vérifier que la validation a une signature GPG valide"
-#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:89
+#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89
msgid "strategy"
msgstr "stratégie"
-#: builtin/merge.c:220
+#: builtin/merge.c:213
msgid "merge strategy to use"
msgstr "stratégie de fusion à utiliser"
-#: builtin/merge.c:221
+#: builtin/merge.c:214
msgid "option=value"
msgstr "option=valeur"
-#: builtin/merge.c:222
+#: builtin/merge.c:215
msgid "option for selected merge strategy"
msgstr "option pour la stratégie de fusion sélectionnée"
-#: builtin/merge.c:224
+#: builtin/merge.c:217
msgid "merge commit message (for a non-fast-forward merge)"
msgstr ""
"message de validation de la fusion (pour une fusion sans avance rapide)"
-#: builtin/merge.c:228
+#: builtin/merge.c:221
msgid "abort the current in-progress merge"
msgstr "abandonner la fusion en cours"
-#: builtin/merge.c:257
+#: builtin/merge.c:250
msgid "could not run stash."
msgstr "impossible de lancer le remisage."
-#: builtin/merge.c:262
+#: builtin/merge.c:255
msgid "stash failed"
msgstr "échec du remisage"
-#: builtin/merge.c:267
+#: builtin/merge.c:260
#, c-format
msgid "not a valid object: %s"
msgstr "pas un objet valide : %s"
-#: builtin/merge.c:286 builtin/merge.c:303
+#: builtin/merge.c:279 builtin/merge.c:296
msgid "read-tree failed"
msgstr "read-tree a échoué"
-#: builtin/merge.c:333
+#: builtin/merge.c:326
msgid " (nothing to squash)"
msgstr " (rien à compresser)"
-#: builtin/merge.c:346
+#: builtin/merge.c:339
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Validation compressée -- HEAD non mise à jour\n"
-#: builtin/merge.c:378
+#: builtin/merge.c:371
msgid "Writing SQUASH_MSG"
msgstr "Écriture de SQUASH_MSG"
-#: builtin/merge.c:380
+#: builtin/merge.c:373
msgid "Finishing SQUASH_MSG"
msgstr "Finition de SQUASH_MSG"
-#: builtin/merge.c:403
+#: builtin/merge.c:396
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr "Pas de message de fusion -- pas de mise à jour de HEAD\n"
-#: builtin/merge.c:453
+#: builtin/merge.c:446
#, c-format
msgid "'%s' does not point to a commit"
msgstr "'%s' ne pointe pas sur un commit"
-#: builtin/merge.c:565
+#: builtin/merge.c:558
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Mauvaise chaîne branch.%s.mergeoptions : %s"
-#: builtin/merge.c:657
+#: builtin/merge.c:650
msgid "git write-tree failed to write a tree"
msgstr "git write-tree a échoué à écrire un arbre"
-#: builtin/merge.c:685
+#: builtin/merge.c:678
msgid "Not handling anything other than two heads merge."
msgstr "Impossible de gérer autre chose que la fusion de deux têtes."
-#: builtin/merge.c:699
+#: builtin/merge.c:692
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Options inconnue pour merge-recursive : -X%s"
-#: builtin/merge.c:713
+#: builtin/merge.c:706
#, c-format
msgid "unable to write %s"
msgstr "impossible d'écrire %s"
-#: builtin/merge.c:802
+#: builtin/merge.c:795
#, c-format
msgid "Could not read from '%s'"
msgstr "Impossible de lire depuis '%s'"
-#: builtin/merge.c:811
+#: builtin/merge.c:804
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"Pas de validation de la fusion ; utilisez 'git commit' pour terminer la "
"fusion.\n"
-#: builtin/merge.c:817
+#: builtin/merge.c:810
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -6942,49 +7015,49 @@ msgstr ""
"Les lignes commençant par '%c' seront ignorées, et un message vide\n"
"abandonne la validation.\n"
-#: builtin/merge.c:841
+#: builtin/merge.c:834
msgid "Empty commit message."
msgstr "Message de validation vide."
-#: builtin/merge.c:853
+#: builtin/merge.c:846
#, c-format
msgid "Wonderful.\n"
msgstr "Merveilleux.\n"
-#: builtin/merge.c:918
+#: builtin/merge.c:911
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"La fusion automatique a échoué ; réglez les conflits et validez le "
"résultat.\n"
-#: builtin/merge.c:934
+#: builtin/merge.c:927
#, c-format
msgid "'%s' is not a commit"
msgstr "'%s' n'est pas une validation"
-#: builtin/merge.c:975
+#: builtin/merge.c:968
msgid "No current branch."
msgstr "Pas de branche courante."
-#: builtin/merge.c:977
+#: builtin/merge.c:970
msgid "No remote for the current branch."
msgstr "Pas de branche distante pour la branche courante."
-#: builtin/merge.c:979
+#: builtin/merge.c:972
msgid "No default upstream defined for the current branch."
msgstr "Pas de branche amont par défaut définie pour la branche courante."
-#: builtin/merge.c:984
+#: builtin/merge.c:977
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "Pas de branche de suivi pour %s depuis %s"
-#: builtin/merge.c:1140
+#: builtin/merge.c:1133
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "Il n'y a pas de fusion à abandonner (MERGE_HEAD manquant)."
-#: builtin/merge.c:1156 git-pull.sh:31
+#: builtin/merge.c:1149 git-pull.sh:31
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -6992,11 +7065,11 @@ msgstr ""
"Vous n'avez pas terminé votre fusion (MERGE_HEAD existe).\n"
"Veuillez valider vos changements avant de pouvoir fusionner."
-#: builtin/merge.c:1159 git-pull.sh:34
+#: builtin/merge.c:1152 git-pull.sh:34
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe)."
-#: builtin/merge.c:1163
+#: builtin/merge.c:1156
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -7004,140 +7077,148 @@ msgstr ""
"Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe).\n"
"Veuillez valider vos changements avant de pouvoir fusionner."
-#: builtin/merge.c:1166
+#: builtin/merge.c:1159
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe)."
-#: builtin/merge.c:1175
+#: builtin/merge.c:1168
msgid "You cannot combine --squash with --no-ff."
msgstr "Vous ne pouvez pas combiner --squash avec --no-ff."
-#: builtin/merge.c:1184
+#: builtin/merge.c:1177
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
"Pas de validation spécifiée et merge.defaultToUpstream n'est pas défini."
-#: builtin/merge.c:1216
+#: builtin/merge.c:1209
msgid "Can merge only exactly one commit into empty head"
msgstr ""
"Possible de fusionner exactement une seule validation dans une tête vide"
-#: builtin/merge.c:1219
+#: builtin/merge.c:1212
msgid "Squash commit into empty head not supported yet"
msgstr "La validation compressée vers une tête vide n'est pas encore supportée"
-#: builtin/merge.c:1221
+#: builtin/merge.c:1214
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr "Une validation sans avance rapide n'a pas de sens dans une tête vide"
-#: builtin/merge.c:1226
+#: builtin/merge.c:1219
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - pas possible de fusionner ceci"
-#: builtin/merge.c:1277
+#: builtin/merge.c:1270
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr "La validation %s a une signature GPG non fiable, prétendument par %s."
-#: builtin/merge.c:1280
+#: builtin/merge.c:1273
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "La validation %s a une mauvaise signature GPG prétendument par %s."
#. 'N'
-#: builtin/merge.c:1283
+#: builtin/merge.c:1276
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "La validation %s n'a pas de signature GPG."
-#: builtin/merge.c:1286
+#: builtin/merge.c:1279
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "La validation %s a une signature GPG correcte par %s\n"
-#: builtin/merge.c:1370
+#: builtin/merge.c:1363
#, c-format
msgid "Updating %s..%s\n"
msgstr "Mise à jour %s..%s\n"
-#: builtin/merge.c:1409
+#: builtin/merge.c:1402
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Essai de fusion vraiment triviale dans l'index...\n"
-#: builtin/merge.c:1416
+#: builtin/merge.c:1409
#, c-format
msgid "Nope.\n"
msgstr "Non.\n"
-#: builtin/merge.c:1448
+#: builtin/merge.c:1441
msgid "Not possible to fast-forward, aborting."
msgstr "Pas possible d'avancer rapidement, abandon."
-#: builtin/merge.c:1471 builtin/merge.c:1550
+#: builtin/merge.c:1464 builtin/merge.c:1543
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Retour de l'arbre à l'original...\n"
-#: builtin/merge.c:1475
+#: builtin/merge.c:1468
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Essai de la stratégie de fusion %s...\n"
-#: builtin/merge.c:1541
+#: builtin/merge.c:1534
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Aucune stratégie de fusion n'a pris en charge la fusion.\n"
-#: builtin/merge.c:1543
+#: builtin/merge.c:1536
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "La fusion avec la stratégie %s a échoué.\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1545
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Utilisation de %s pour préparer la résolution à la main.\n"
-#: builtin/merge.c:1564
+#: builtin/merge.c:1557
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"La fusion automatique a réussi ; stoppée avant la validation comme demandé\n"
-#: builtin/merge-base.c:26
+#: builtin/merge-base.c:29
msgid "git merge-base [-a|--all] <commit> <commit>..."
msgstr "git merge-base [-a|--all] <validation> <validation>..."
-#: builtin/merge-base.c:27
+#: builtin/merge-base.c:30
msgid "git merge-base [-a|--all] --octopus <commit>..."
msgstr "git merge-base [-a|--all] --octopus <validation>..."
-#: builtin/merge-base.c:28
+#: builtin/merge-base.c:31
msgid "git merge-base --independent <commit>..."
msgstr "git merge-base --independent <validation>..."
-#: builtin/merge-base.c:29
+#: builtin/merge-base.c:32
msgid "git merge-base --is-ancestor <commit> <commit>"
msgstr "git merge-base --is-ancestor <validation> <validation>"
-#: builtin/merge-base.c:98
+#: builtin/merge-base.c:33
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr "git merge-base --fork-point <référence> [<validation>]"
+
+#: builtin/merge-base.c:214
msgid "output all common ancestors"
msgstr "afficher tous les ancêtres communs"
-#: builtin/merge-base.c:99
+#: builtin/merge-base.c:216
msgid "find ancestors for a single n-way merge"
msgstr "trouver les ancêtres pour une fusion simple à n points"
-#: builtin/merge-base.c:100
+#: builtin/merge-base.c:218
msgid "list revs not reachable from others"
msgstr "afficher les révisions inaccessibles depuis les autres"
-#: builtin/merge-base.c:102
+#: builtin/merge-base.c:220
msgid "is the first one ancestor of the other?"
msgstr "est le premier ancêtre de l'autre ?"
+#: builtin/merge-base.c:222
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr "trouver où <validation> a divergé du reflog de <référence>"
+
#: builtin/merge-file.c:8
msgid ""
"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
@@ -7198,123 +7279,130 @@ msgstr "autoriser la création de plus d'un arbre"
msgid "git mv [options] <source>... <destination>"
msgstr "git mv [options] <source>... <destination>"
-#: builtin/mv.c:67
+#: builtin/mv.c:71
msgid "force move/rename even if target exists"
msgstr "forcer le déplacement/renommage même si la cible existe"
-#: builtin/mv.c:68
+#: builtin/mv.c:72
msgid "skip move/rename errors"
msgstr "sauter les erreurs de déplacement/renommage"
-#: builtin/mv.c:113
+#: builtin/mv.c:122
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Vérification du renommage de '%s' en '%s'\n"
-#: builtin/mv.c:117
+#: builtin/mv.c:126
msgid "bad source"
msgstr "mauvaise source"
-#: builtin/mv.c:120
+#: builtin/mv.c:129
msgid "can not move directory into itself"
msgstr "impossible de déplacer un répertoire dans lui-même"
-#: builtin/mv.c:123
+#: builtin/mv.c:132
msgid "cannot move directory over file"
msgstr "impossible de déplacer un répertoire sur un fichier"
-#: builtin/mv.c:129
+#: builtin/mv.c:138
#, c-format
msgid "Huh? Directory %s is in index and no submodule?"
-msgstr "Hein ? Le répertoire %s est dans l'index et pourtant aucun sous-module ?"
+msgstr ""
+"Hein ? Le répertoire %s est dans l'index et pourtant aucun sous-module ?"
-#: builtin/mv.c:131 builtin/rm.c:318
+#: builtin/mv.c:140 builtin/rm.c:318
msgid "Please, stage your changes to .gitmodules or stash them to proceed"
-msgstr "Veuillez indexer vos modifications de .gitmodules ou remisez-les pour continuer"
+msgstr ""
+"Veuillez indexer vos modifications de .gitmodules ou remisez-les pour "
+"continuer"
-#: builtin/mv.c:147
+#: builtin/mv.c:156
#, c-format
msgid "Huh? %.*s is in index?"
msgstr "Hein ? %.*s est dans l'index ?"
-#: builtin/mv.c:159
+#: builtin/mv.c:168
msgid "source directory is empty"
msgstr "le répertoire source est vide"
-#: builtin/mv.c:191
+#: builtin/mv.c:200
msgid "not under version control"
msgstr "pas sous le contrôle de version"
-#: builtin/mv.c:193
+#: builtin/mv.c:202
msgid "destination exists"
msgstr "la destination existe"
-#: builtin/mv.c:201
+#: builtin/mv.c:210
#, c-format
msgid "overwriting '%s'"
msgstr "écrasement de '%s'"
-#: builtin/mv.c:204
+#: builtin/mv.c:213
msgid "Cannot overwrite"
msgstr "Impossible d'écraser"
-#: builtin/mv.c:207
+#: builtin/mv.c:216
msgid "multiple sources for the same target"
msgstr "multiples sources pour la même destination"
-#: builtin/mv.c:222
+#: builtin/mv.c:218
+msgid "destination directory does not exist"
+msgstr "le répertoire de destination n'existe pas"
+
+#: builtin/mv.c:233
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, source=%s, destination=%s"
-#: builtin/mv.c:232
+#: builtin/mv.c:243
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Renommage de %s en %s\n"
-#: builtin/mv.c:235 builtin/remote.c:731 builtin/repack.c:330
+#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328
#, c-format
msgid "renaming '%s' failed"
msgstr "le renommage de '%s' a échoué"
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [options] <commit>..."
msgstr "git name-rev [options] <validation>..."
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [options] --all"
msgstr "git name-rev [options] --all"
-#: builtin/name-rev.c:261
+#: builtin/name-rev.c:260
msgid "git name-rev [options] --stdin"
msgstr "git name-rev [options] --stdin"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "print only names (no SHA-1)"
msgstr "afficher seulement les noms (pas de SHA-1)"
-#: builtin/name-rev.c:314
+#: builtin/name-rev.c:313
msgid "only use tags to name the commits"
msgstr "utiliser seulement les étiquettes pour nommer les validations"
-#: builtin/name-rev.c:316
+#: builtin/name-rev.c:315
msgid "only use refs matching <pattern>"
msgstr "utiliser seulement les références correspondant à <motif>"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "list all commits reachable from all refs"
msgstr ""
"afficher toutes les validations accessibles depuis toutes les références"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "read from stdin"
msgstr "lire depuis l'entrée standard"
-#: builtin/name-rev.c:320
+#: builtin/name-rev.c:319
msgid "allow to print `undefined` names (default)"
msgstr "autoriser l'affichage des noms `non définis` (par défaut)"
-#: builtin/name-rev.c:326
+#: builtin/name-rev.c:325
msgid "dereference tags in the input (internal use)"
msgstr "déréférencer les étiquettes en entrée (usage interne)"
@@ -7640,7 +7728,7 @@ msgstr "références_notes"
msgid "use notes from <notes_ref>"
msgstr "utiliser les notes depuis <références_notes>"
-#: builtin/notes.c:974 builtin/remote.c:1598
+#: builtin/notes.c:974 builtin/remote.c:1593
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Sous-commande inconnue : %s"
@@ -7660,149 +7748,149 @@ msgstr ""
msgid "deflate error (%d)"
msgstr "erreur de compression (%d)"
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2396
#, c-format
msgid "unsupported index version %s"
msgstr "version d'index non supportée %s"
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2400
#, c-format
msgid "bad index version '%s'"
msgstr "mauvaise version d'index '%s'"
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2423
#, c-format
msgid "option %s does not accept negative form"
msgstr "l'option %s n'accepte pas de valeur négative"
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2427
#, c-format
msgid "unable to parse value '%s' for option %s"
msgstr "impossible d'analyser la valeur '%s' pour l'option %s"
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2446
msgid "do not show progress meter"
msgstr "ne pas afficher la barre de progression"
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2448
msgid "show progress meter"
msgstr "afficher la barre de progression"
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2450
msgid "show progress meter during object writing phase"
msgstr "afficher la barre de progression durant la phase d'écrite des objets"
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2453
msgid "similar to --all-progress when progress meter is shown"
msgstr "similaire à --all-progress quand la barre de progression est affichée"
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2454
msgid "version[,offset]"
msgstr "version[,offset]"
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2455
msgid "write the pack index file in the specified idx format version"
msgstr ""
"écrire le fichier d'index du paquet dans le format d'index de version "
"spécifié"
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2458
msgid "maximum size of each output pack file"
msgstr "taille maximum de chaque fichier paquet en sortie"
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2460
msgid "ignore borrowed objects from alternate object store"
msgstr "ignorer les objets empruntés à un autre magasin d'objets"
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2462
msgid "ignore packed objects"
msgstr "ignorer les objets empaquetés"
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2464
msgid "limit pack window by objects"
msgstr "limiter la fenêtre d'empaquetage par objets"
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2466
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"limiter la fenêtre d'empaquetage par mémoire en plus de la limite d'objets"
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2468
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
"longueur maximum de la chaîne de delta autorisée dans le paquet résultant"
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2470
msgid "reuse existing deltas"
msgstr "réutiliser les deltas existants"
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2472
msgid "reuse existing objects"
msgstr "réutiliser les objets existants"
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2474
msgid "use OFS_DELTA objects"
msgstr "utiliser les objets OFS_DELTA"
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2476
msgid "use threads when searching for best delta matches"
msgstr ""
"utiliser des fils lors de la recherche pour une meilleurs correspondance des "
"deltas"
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2478
msgid "do not create an empty pack output"
msgstr "ne pas créer un paquet vide"
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2480
msgid "read revision arguments from standard input"
msgstr "lire les paramètres de révision depuis l'entrée standard"
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2482
msgid "limit the objects to those that are not yet packed"
msgstr "limiter les objets à ceux qui ne sont pas encore empaquetés"
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2485
msgid "include objects reachable from any reference"
msgstr "inclure les objets accessibles depuis toute référence"
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2488
msgid "include objects referred by reflog entries"
msgstr "inclure les objets référencés par les éléments de reflog"
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2491
msgid "output pack to stdout"
msgstr "afficher l'empaquetage sur la sortie standard"
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2493
msgid "include tag objects that refer to objects to be packed"
msgstr "inclure les objets d'étiquettes qui réfèrent à des objets à empaqueter"
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2495
msgid "keep unreachable objects"
msgstr "garder les objets inaccessibles"
-#: builtin/pack-objects.c:2498 parse-options.h:143
+#: builtin/pack-objects.c:2496 parse-options.h:143
msgid "time"
msgstr "heure"
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2497
msgid "unpack unreachable objects newer than <time>"
msgstr "dépaqueter les objets inaccessibles plus récents que <heure>"
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2500
msgid "create thin packs"
msgstr "créer des paquets légers"
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2502
msgid "ignore packs that have companion .keep file"
msgstr "ignorer les paquets qui ont un fichier .keep"
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2504
msgid "pack compression level"
msgstr "niveau de compression du paquet"
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2506
msgid "do not hide commits by grafts"
msgstr "ne pas cacher les validations par greffes"
@@ -7826,15 +7914,15 @@ msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]"
msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
msgstr "git prune [-n] [-v] [--expire <heure>] [--] [<head>...]"
-#: builtin/prune.c:132
+#: builtin/prune.c:142
msgid "do not remove, show only"
msgstr "ne pas supprimer, afficher seulement"
-#: builtin/prune.c:133
+#: builtin/prune.c:143
msgid "report pruned objects"
msgstr "afficher les objets éliminés"
-#: builtin/prune.c:136
+#: builtin/prune.c:146
msgid "expire objects older than <time>"
msgstr "faire expirer les objets plus vieux que <heure>"
@@ -7842,15 +7930,15 @@ msgstr "faire expirer les objets plus vieux que <heure>"
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr "git push [<options>] [<dépôt> [<spécification-de-référence>...]]"
-#: builtin/push.c:47
+#: builtin/push.c:86
msgid "tag shorthand without <tag>"
msgstr "raccourci d'étiquette sans <étiquette>"
-#: builtin/push.c:66
+#: builtin/push.c:96
msgid "--delete only accepts plain target ref names"
msgstr "--delete accepte seulement des noms entiers de références cibles"
-#: builtin/push.c:101
+#: builtin/push.c:141
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
@@ -7859,7 +7947,7 @@ msgstr ""
"Pour choisir l'option de manière permanente, voir push.default dans 'git "
"help config'."
-#: builtin/push.c:104
+#: builtin/push.c:144
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -7884,7 +7972,7 @@ msgstr ""
" git push %s %s\n"
"%s"
-#: builtin/push.c:119
+#: builtin/push.c:159
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -7899,7 +7987,7 @@ msgstr ""
"\n"
" git push %s HEAD:<nom-de-la-branche-amont>\n"
-#: builtin/push.c:133
+#: builtin/push.c:173
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -7913,13 +8001,13 @@ msgstr ""
"\n"
" git push --set-upstream %s %s\n"
-#: builtin/push.c:141
+#: builtin/push.c:181
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
msgstr ""
"La branche courante %s a de multiples branches amont, impossible de pousser."
-#: builtin/push.c:144
+#: builtin/push.c:184
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -7930,7 +8018,7 @@ msgstr ""
"pas une branche amont de votre branche courante '%s', sans me dire\n"
"quoi pousser pour mettre à jour quelle branche amont."
-#: builtin/push.c:167
+#: builtin/push.c:207
msgid ""
"push.default is unset; its implicit value is changing in\n"
"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7942,6 +8030,13 @@ msgid ""
"\n"
" git config --global push.default simple\n"
"\n"
+"When push.default is set to 'matching', git will push local branches\n"
+"to the remote branches that already exist with the same name.\n"
+"\n"
+"In Git 2.0, Git will default to the more conservative 'simple'\n"
+"behavior, which only pushes the current branch to the corresponding\n"
+"remote branch that 'git pull' uses to update the current branch.\n"
+"\n"
"See 'git help config' and search for 'push.default' for further "
"information.\n"
"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
@@ -7949,7 +8044,8 @@ msgid ""
msgstr ""
"push.default n'est pas défini ; sa valeur implicite change dans Git 2.0\n"
"de 'matching' vers 'simple'. Pour supprimer ce message et maintenir\n"
-"le comportement actuel après les changements par défaut, utilisez :\n"
+"le comportement actuel après la modification de la valeur de défaut, "
+"utilisez :\n"
"\n"
" git config --global push.default matching\n"
"\n"
@@ -7958,20 +8054,29 @@ msgstr ""
"\n"
" git config --global push.default simple\n"
"\n"
+"Quand push.default vaudra 'matching', git poussera les branches locales\n"
+"sur les branches distantes qui existent déjà avec le même nom.\n"
+"\n"
+"Dans Git 2.0 Git utilisera par défaut le comportement plus conservatif "
+"'simple'\n"
+"qui ne pousse la branche courante vers la branche distante que 'git pull' "
+"utilise\n"
+"pour mettre à jour la branche courante.\n"
+" \n"
"Voir 'git help config' et chercher 'push.default' pour plus d'information.\n"
"(le mode 'simple' a été introduit dans Git 1.7.11. Utilisez le mode "
"similaire\n"
"'current' au lieu de 'simple' si vous utilisez de temps en temps d'anciennes "
"versions de Git)"
-#: builtin/push.c:227
+#: builtin/push.c:274
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\"."
-#: builtin/push.c:234
+#: builtin/push.c:281
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -7986,7 +8091,7 @@ msgstr ""
"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus "
"d'information."
-#: builtin/push.c:240
+#: builtin/push.c:287
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. If you did not intend to push that branch, you may want to\n"
@@ -8002,7 +8107,7 @@ msgstr ""
"'push.default' à 'simple', 'current' ou 'upstream' pour pousser seulement la "
"branche courante."
-#: builtin/push.c:246
+#: builtin/push.c:293
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -8017,7 +8122,7 @@ msgstr ""
"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus "
"d'information."
-#: builtin/push.c:252
+#: builtin/push.c:299
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -8035,13 +8140,13 @@ msgstr ""
"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus "
"d'information."
-#: builtin/push.c:259
+#: builtin/push.c:306
msgid "Updates were rejected because the tag already exists in the remote."
msgstr ""
"Les mises à jour ont été rejetées car l'étiquette existe déjà dans la "
"branche distante."
-#: builtin/push.c:262
+#: builtin/push.c:309
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
@@ -8053,22 +8158,22 @@ msgstr ""
"pointer\n"
"vers un objet qui n'est pas un commit, sans utiliser l'option '--force'.\n"
-#: builtin/push.c:328
+#: builtin/push.c:375
#, c-format
msgid "Pushing to %s\n"
msgstr "Poussage vers %s\n"
-#: builtin/push.c:332
+#: builtin/push.c:379
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "impossible de pousser des références vers '%s'"
-#: builtin/push.c:365
+#: builtin/push.c:412
#, c-format
msgid "bad repository '%s'"
msgstr "mauvais dépôt '%s'"
-#: builtin/push.c:366
+#: builtin/push.c:413
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -8090,96 +8195,96 @@ msgstr ""
"\n"
" git push <nom>\n"
-#: builtin/push.c:381
+#: builtin/push.c:428
msgid "--all and --tags are incompatible"
msgstr "--all et --tags sont incompatibles"
-#: builtin/push.c:382
+#: builtin/push.c:429
msgid "--all can't be combined with refspecs"
msgstr "--all ne peut pas être combiné avec des spécifications de référence"
-#: builtin/push.c:387
+#: builtin/push.c:434
msgid "--mirror and --tags are incompatible"
msgstr "--mirror et --tags sont incompatibles"
-#: builtin/push.c:388
+#: builtin/push.c:435
msgid "--mirror can't be combined with refspecs"
msgstr "--mirror ne peut pas être combiné avec des spécifications de référence"
-#: builtin/push.c:393
+#: builtin/push.c:440
msgid "--all and --mirror are incompatible"
msgstr "--all et --mirror sont incompatibles"
-#: builtin/push.c:453
+#: builtin/push.c:500
msgid "repository"
msgstr "dépôt"
-#: builtin/push.c:454
+#: builtin/push.c:501
msgid "push all refs"
msgstr "pousser toutes les références"
-#: builtin/push.c:455
+#: builtin/push.c:502
msgid "mirror all refs"
msgstr "refléter toutes les références"
-#: builtin/push.c:457
+#: builtin/push.c:504
msgid "delete refs"
msgstr "supprimer les références"
-#: builtin/push.c:458
+#: builtin/push.c:505
msgid "push tags (can't be used with --all or --mirror)"
msgstr ""
"pousser les étiquettes (ne peut pas être utilisé avec --all ou --mirror)"
-#: builtin/push.c:461
+#: builtin/push.c:508
msgid "force updates"
msgstr "forcer les mises à jour"
-#: builtin/push.c:463
+#: builtin/push.c:510
msgid "refname>:<expect"
msgstr "nom de référence>:<attendu"
-#: builtin/push.c:464
+#: builtin/push.c:511
msgid "require old value of ref to be at this value"
msgstr "exiger que l'ancienne valeur de la référence soit à cette valeur"
-#: builtin/push.c:466
+#: builtin/push.c:513
msgid "check"
msgstr "check"
-#: builtin/push.c:467
+#: builtin/push.c:514
msgid "control recursive pushing of submodules"
msgstr "contrôler le poussage récursif des sous-modules"
-#: builtin/push.c:469
+#: builtin/push.c:516
msgid "use thin pack"
msgstr "utiliser un empaquetage léger"
-#: builtin/push.c:470 builtin/push.c:471
+#: builtin/push.c:517 builtin/push.c:518
msgid "receive pack program"
msgstr "recevoir le programme d'empaquetage"
-#: builtin/push.c:472
+#: builtin/push.c:519
msgid "set upstream for git pull/status"
msgstr "définir la branche amont pour git pull/status"
-#: builtin/push.c:475
+#: builtin/push.c:522
msgid "prune locally removed refs"
msgstr "éliminer les références locales supprimées"
-#: builtin/push.c:477
+#: builtin/push.c:524
msgid "bypass pre-push hook"
msgstr "éviter d'utiliser le crochet pre-push"
-#: builtin/push.c:478
+#: builtin/push.c:525
msgid "push missing but relevant tags"
msgstr "pousser les étiquettes manquantes mais pertinentes"
-#: builtin/push.c:488
+#: builtin/push.c:535
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "--delete est incompatible avec --all, --mirror et --tags"
-#: builtin/push.c:490
+#: builtin/push.c:537
msgid "--delete doesn't make sense without any refs"
msgstr "--delete n'a pas de sens sans aucune référence"
@@ -8268,11 +8373,11 @@ msgstr "%s' pour '%s' n'est pas un horodatage valide"
msgid "'%s' is not a valid timestamp"
msgstr "'%s' n'est pas un horodatage valide"
-#: builtin/remote.c:11
+#: builtin/remote.c:12
msgid "git remote [-v | --verbose]"
msgstr "git remote [-v | --verbose]"
-#: builtin/remote.c:12
+#: builtin/remote.c:13
msgid ""
"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <name> <url>"
@@ -8280,83 +8385,83 @@ msgstr ""
"git remote add [-t <branche>] [-m <maîtresse>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <nom> <URL>"
-#: builtin/remote.c:13 builtin/remote.c:32
+#: builtin/remote.c:14 builtin/remote.c:33
msgid "git remote rename <old> <new>"
msgstr "git remote rename <ancienne> <nouvelle>"
-#: builtin/remote.c:14 builtin/remote.c:37
+#: builtin/remote.c:15 builtin/remote.c:38
msgid "git remote remove <name>"
msgstr "git remote remove <nom>"
-#: builtin/remote.c:15
+#: builtin/remote.c:16
msgid "git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"
msgstr "git remote set-head <nom> (-a | --auto | -d | --delete |<branche>)"
-#: builtin/remote.c:16
+#: builtin/remote.c:17
msgid "git remote [-v | --verbose] show [-n] <name>"
msgstr "git remote [-v | --verbose] show [-n] <nom>"
-#: builtin/remote.c:17
+#: builtin/remote.c:18
msgid "git remote prune [-n | --dry-run] <name>"
msgstr "git remote prune [-n | --dry-run] <nom>"
-#: builtin/remote.c:18
+#: builtin/remote.c:19
msgid ""
"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
msgstr ""
"git remote [-v | --verbose] update [-p | --prune] [(<groupe> | "
"<distante>)...]"
-#: builtin/remote.c:19
+#: builtin/remote.c:20
msgid "git remote set-branches [--add] <name> <branch>..."
msgstr "git remote set-branches [--add] <nom> <branche>..."
-#: builtin/remote.c:20 builtin/remote.c:68
+#: builtin/remote.c:21 builtin/remote.c:69
msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
msgstr "git remote set-url [--push] <nom> <nouvelle-URL> [<ancienne-URL>]"
-#: builtin/remote.c:21 builtin/remote.c:69
+#: builtin/remote.c:22 builtin/remote.c:70
msgid "git remote set-url --add <name> <newurl>"
msgstr "git remote set-url --add <nom> <nouvelle-URL>"
-#: builtin/remote.c:22 builtin/remote.c:70
+#: builtin/remote.c:23 builtin/remote.c:71
msgid "git remote set-url --delete <name> <url>"
msgstr "git remote set-url --delete <nom> <URL>"
-#: builtin/remote.c:27
+#: builtin/remote.c:28
msgid "git remote add [<options>] <name> <url>"
msgstr "git remote add [<options>] <nom> <URL>"
-#: builtin/remote.c:42
+#: builtin/remote.c:43
msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
msgstr "git remote set-head <nom> (-a | --auto | -d | --delete | <branche>)"
-#: builtin/remote.c:47
+#: builtin/remote.c:48
msgid "git remote set-branches <name> <branch>..."
msgstr "git remote set-branches <nom> <branche>..."
-#: builtin/remote.c:48
+#: builtin/remote.c:49
msgid "git remote set-branches --add <name> <branch>..."
msgstr "git remote set-branches --add <nom> <branche>..."
-#: builtin/remote.c:53
+#: builtin/remote.c:54
msgid "git remote show [<options>] <name>"
msgstr "git remote show [<options>] <nom>"
-#: builtin/remote.c:58
+#: builtin/remote.c:59
msgid "git remote prune [<options>] <name>"
msgstr "git remote prune [<options>] <nom>"
-#: builtin/remote.c:63
+#: builtin/remote.c:64
msgid "git remote update [<options>] [<group> | <remote>]..."
msgstr "git remote update [<options>] [<groupe> | <distante>]..."
-#: builtin/remote.c:98
+#: builtin/remote.c:88
#, c-format
msgid "Updating %s"
msgstr "Mise à jour de %s"
-#: builtin/remote.c:130
+#: builtin/remote.c:120
msgid ""
"--mirror is dangerous and deprecated; please\n"
"\t use --mirror=fetch or --mirror=push instead"
@@ -8364,107 +8469,107 @@ msgstr ""
"--mirror est dangereux et obsolète ; merci\n"
"\t d'utiliser --mirror=fetch ou --mirror=push à la place"
-#: builtin/remote.c:147
+#: builtin/remote.c:137
#, c-format
msgid "unknown mirror argument: %s"
msgstr "argument miroir inconnu : %s"
-#: builtin/remote.c:163
+#: builtin/remote.c:153
msgid "fetch the remote branches"
msgstr "rapatrier les branches distantes"
-#: builtin/remote.c:165
+#: builtin/remote.c:155
msgid "import all tags and associated objects when fetching"
msgstr ""
"importer toutes les étiquettes et les objets associés lors du rapatriement"
-#: builtin/remote.c:168
+#: builtin/remote.c:158
msgid "or do not fetch any tag at all (--no-tags)"
msgstr "ou ne rapatrier aucune étiquette (--no-tags)"
-#: builtin/remote.c:170
+#: builtin/remote.c:160
msgid "branch(es) to track"
msgstr "branche(s) à suivre"
-#: builtin/remote.c:171
+#: builtin/remote.c:161
msgid "master branch"
msgstr "branche maîtresse"
-#: builtin/remote.c:172
+#: builtin/remote.c:162
msgid "push|fetch"
msgstr "push|fetch"
-#: builtin/remote.c:173
+#: builtin/remote.c:163
msgid "set up remote as a mirror to push to or fetch from"
msgstr ""
"paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis"
-#: builtin/remote.c:185
+#: builtin/remote.c:175
msgid "specifying a master branch makes no sense with --mirror"
msgstr "spécifier une branche maîtresse n'a pas de sens avec --mirror"
-#: builtin/remote.c:187
+#: builtin/remote.c:177
msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr ""
"spécifier les branches à suivre n'a de sens qu'avec des miroirs de "
"rapatriement"
-#: builtin/remote.c:195 builtin/remote.c:646
+#: builtin/remote.c:185 builtin/remote.c:641
#, c-format
msgid "remote %s already exists."
msgstr "la distante %s existe déjà."
-#: builtin/remote.c:199 builtin/remote.c:650
+#: builtin/remote.c:189 builtin/remote.c:645
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "'%s' n'est pas un nom valide de distante"
-#: builtin/remote.c:243
+#: builtin/remote.c:233
#, c-format
msgid "Could not setup master '%s'"
msgstr "Impossible de paramétrer la maîtresse '%s'"
-#: builtin/remote.c:299
+#: builtin/remote.c:289
#, c-format
msgid "more than one %s"
msgstr "plus d'un %s"
-#: builtin/remote.c:339
+#: builtin/remote.c:334
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr ""
"Impossible d'obtenir une correspondance distante pour la spécification de "
"référence %s"
-#: builtin/remote.c:440 builtin/remote.c:448
+#: builtin/remote.c:435 builtin/remote.c:443
msgid "(matching)"
msgstr "(correspond)"
-#: builtin/remote.c:452
+#: builtin/remote.c:447
msgid "(delete)"
msgstr "(supprimer)"
-#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607
+#: builtin/remote.c:590 builtin/remote.c:596 builtin/remote.c:602
#, c-format
msgid "Could not append '%s' to '%s'"
msgstr "Impossible d'ajouter '%s' à '%s'"
-#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890
+#: builtin/remote.c:634 builtin/remote.c:787 builtin/remote.c:885
#, c-format
msgid "No such remote: %s"
msgstr "Distante inconnue : %s"
-#: builtin/remote.c:656
+#: builtin/remote.c:651
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "Impossible de renommer la section de configuration '%s' en '%s'"
-#: builtin/remote.c:662 builtin/remote.c:799
+#: builtin/remote.c:657 builtin/remote.c:794
#, c-format
msgid "Could not remove config section '%s'"
msgstr "Impossible de supprimer la section de configuration '%s'"
-#: builtin/remote.c:677
+#: builtin/remote.c:672
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -8475,32 +8580,32 @@ msgstr ""
"\t%s\n"
"\tVeuillez mettre à jour la configuration manuellement si nécessaire."
-#: builtin/remote.c:683
+#: builtin/remote.c:678
#, c-format
msgid "Could not append '%s'"
msgstr "Impossible d'ajouter '%s'"
-#: builtin/remote.c:694
+#: builtin/remote.c:689
#, c-format
msgid "Could not set '%s'"
msgstr "Impossible de définir '%s'"
-#: builtin/remote.c:716
+#: builtin/remote.c:711
#, c-format
msgid "deleting '%s' failed"
msgstr "échec de suppression de '%s'"
-#: builtin/remote.c:750
+#: builtin/remote.c:745
#, c-format
msgid "creating '%s' failed"
msgstr "échec de création de '%s'"
-#: builtin/remote.c:764
+#: builtin/remote.c:759
#, c-format
msgid "Could not remove branch %s"
msgstr "Impossible de supprimer la branche %s"
-#: builtin/remote.c:834
+#: builtin/remote.c:829
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -8515,120 +8620,120 @@ msgstr[1] ""
"supprimées ;\n"
"pour les supprimer, utilisez :"
-#: builtin/remote.c:943
+#: builtin/remote.c:938
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " nouveau (le prochain rapatriement (fetch) stockera dans remotes/%s)"
-#: builtin/remote.c:946
+#: builtin/remote.c:941
msgid " tracked"
msgstr " suivi"
-#: builtin/remote.c:948
+#: builtin/remote.c:943
msgid " stale (use 'git remote prune' to remove)"
msgstr " dépassé (utilisez 'git remote prune' pour supprimer)"
-#: builtin/remote.c:950
+#: builtin/remote.c:945
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:991
+#: builtin/remote.c:986
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "branch.%s.merge invalide ; ne peut pas rebaser sur plus d'une branche"
-#: builtin/remote.c:998
+#: builtin/remote.c:993
#, c-format
msgid "rebases onto remote %s"
msgstr "rebase sur la distante %s"
-#: builtin/remote.c:1001
+#: builtin/remote.c:996
#, c-format
msgid " merges with remote %s"
msgstr " fusionne avec la distante %s"
-#: builtin/remote.c:1002
+#: builtin/remote.c:997
msgid " and with remote"
msgstr " et avec la distante"
-#: builtin/remote.c:1004
+#: builtin/remote.c:999
#, c-format
msgid "merges with remote %s"
msgstr "fusionne avec la distante %s"
-#: builtin/remote.c:1005
+#: builtin/remote.c:1000
msgid " and with remote"
msgstr " et avec la distante"
-#: builtin/remote.c:1051
+#: builtin/remote.c:1046
msgid "create"
msgstr "créer"
-#: builtin/remote.c:1054
+#: builtin/remote.c:1049
msgid "delete"
msgstr "supprimer"
-#: builtin/remote.c:1058
+#: builtin/remote.c:1053
msgid "up to date"
msgstr "à jour"
-#: builtin/remote.c:1061
+#: builtin/remote.c:1056
msgid "fast-forwardable"
msgstr "peut être mis à jour en avance rapide"
-#: builtin/remote.c:1064
+#: builtin/remote.c:1059
msgid "local out of date"
msgstr "le local n'est pas à jour"
-#: builtin/remote.c:1071
+#: builtin/remote.c:1066
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s force vers %-*s (%s)"
-#: builtin/remote.c:1074
+#: builtin/remote.c:1069
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s pousse vers %-*s (%s)"
-#: builtin/remote.c:1078
+#: builtin/remote.c:1073
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s force vers %s"
-#: builtin/remote.c:1081
+#: builtin/remote.c:1076
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s pousse vers %s"
-#: builtin/remote.c:1091
+#: builtin/remote.c:1144
msgid "do not query remotes"
msgstr "ne pas interroger les distantes"
-#: builtin/remote.c:1118
+#: builtin/remote.c:1171
#, c-format
msgid "* remote %s"
msgstr "* distante %s"
-#: builtin/remote.c:1119
+#: builtin/remote.c:1172
#, c-format
msgid " Fetch URL: %s"
msgstr " URL de rapatriement : %s"
-#: builtin/remote.c:1120 builtin/remote.c:1285
+#: builtin/remote.c:1173 builtin/remote.c:1318
msgid "(no URL)"
msgstr "(pas d'URL)"
-#: builtin/remote.c:1129 builtin/remote.c:1131
+#: builtin/remote.c:1182 builtin/remote.c:1184
#, c-format
msgid " Push URL: %s"
msgstr " URL push : %s"
-#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137
+#: builtin/remote.c:1186 builtin/remote.c:1188 builtin/remote.c:1190
#, c-format
msgid " HEAD branch: %s"
msgstr " Branche HEAD : %s"
-#: builtin/remote.c:1139
+#: builtin/remote.c:1192
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
@@ -8636,145 +8741,145 @@ msgstr ""
" Branche HEAD (la HEAD distante est ambiguë, peut être l'une des "
"suivantes) :\n"
-#: builtin/remote.c:1151
+#: builtin/remote.c:1204
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Branche distante :%s"
msgstr[1] " Branches distantes :%s"
-#: builtin/remote.c:1154 builtin/remote.c:1181
+#: builtin/remote.c:1207 builtin/remote.c:1234
msgid " (status not queried)"
msgstr " (statut non demandé)"
-#: builtin/remote.c:1163
+#: builtin/remote.c:1216
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Branche locale configurée pour 'git pull' :"
msgstr[1] " Branches locales configurées pour 'git pull' :"
-#: builtin/remote.c:1171
+#: builtin/remote.c:1224
msgid " Local refs will be mirrored by 'git push'"
msgstr " Les références locales seront reflétées par 'git push'"
-#: builtin/remote.c:1178
+#: builtin/remote.c:1231
#, c-format
msgid " Local ref configured for 'git push'%s:"
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 :"
-#: builtin/remote.c:1199
+#: builtin/remote.c:1252
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "définir refs/remotes/<nom>/HEAD selon la distante"
-#: builtin/remote.c:1201
+#: builtin/remote.c:1254
msgid "delete refs/remotes/<name>/HEAD"
msgstr "supprimer refs/remotes/<nom>/HEAD"
-#: builtin/remote.c:1216
+#: builtin/remote.c:1269
msgid "Cannot determine remote HEAD"
msgstr "Impossible de déterminer la HEAD distante"
-#: builtin/remote.c:1218
+#: builtin/remote.c:1271
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr ""
"Il y a de multiples branches HEAD distantes. Veuillez en choisir une "
"explicitement avec :"
-#: builtin/remote.c:1228
+#: builtin/remote.c:1281
#, c-format
msgid "Could not delete %s"
msgstr "Impossible de supprimer %s"
-#: builtin/remote.c:1236
+#: builtin/remote.c:1289
#, c-format
msgid "Not a valid ref: %s"
msgstr "Référence non valide : %s"
-#: builtin/remote.c:1238
+#: builtin/remote.c:1291
#, c-format
msgid "Could not setup %s"
msgstr "Impossible de paramétrer %s"
-#: builtin/remote.c:1274
+#: builtin/remote.c:1307
#, c-format
msgid " %s will become dangling!"
msgstr " %s deviendra en suspens !"
-#: builtin/remote.c:1275
+#: builtin/remote.c:1308
#, c-format
msgid " %s has become dangling!"
msgstr " %s est devenu en suspens !"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1314
#, c-format
msgid "Pruning %s"
msgstr "Élimination de %s"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1315
#, c-format
msgid "URL: %s"
msgstr "URL : %s"
-#: builtin/remote.c:1295
+#: builtin/remote.c:1328
#, c-format
msgid " * [would prune] %s"
msgstr " * [serait éliminé] %s"
-#: builtin/remote.c:1298
+#: builtin/remote.c:1331
#, c-format
msgid " * [pruned] %s"
msgstr " * [éliminé] %s"
-#: builtin/remote.c:1321
+#: builtin/remote.c:1374
msgid "prune remotes after fetching"
msgstr "éliminer les distants après le rapatriement"
-#: builtin/remote.c:1387 builtin/remote.c:1461
+#: builtin/remote.c:1440 builtin/remote.c:1514
#, c-format
msgid "No such remote '%s'"
msgstr "Pas de serveur remote '%s'"
-#: builtin/remote.c:1407
+#: builtin/remote.c:1460
msgid "add branch"
msgstr "ajouter une branche"
-#: builtin/remote.c:1414
+#: builtin/remote.c:1467
msgid "no remote specified"
msgstr "pas de serveur distant spécifié"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1489
msgid "manipulate push URLs"
msgstr "manipuler les URLs push"
-#: builtin/remote.c:1438
+#: builtin/remote.c:1491
msgid "add URL"
msgstr "ajouter une URL"
-#: builtin/remote.c:1440
+#: builtin/remote.c:1493
msgid "delete URLs"
msgstr "supprimer des URLs"
-#: builtin/remote.c:1447
+#: builtin/remote.c:1500
msgid "--add --delete doesn't make sense"
msgstr "--add --delete n'a aucun sens"
-#: builtin/remote.c:1487
+#: builtin/remote.c:1540
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Motif d'URL ancien invalide : %s"
-#: builtin/remote.c:1495
+#: builtin/remote.c:1548
#, c-format
msgid "No such URL found: %s"
msgstr "Pas d'URL trouvée : %s"
-#: builtin/remote.c:1497
+#: builtin/remote.c:1550
msgid "Will not delete all non-push URLs"
msgstr "Pas de suppression de toutes les URLs non-push"
-#: builtin/remote.c:1569
+#: builtin/remote.c:1564
msgid "be verbose; must be placed before a subcommand"
msgstr "être verbeux : doit être placé avant une sous-commande"
@@ -8822,9 +8927,14 @@ msgstr "avec -A, ne pas suspendre les objets plus vieux que celui-ci"
msgid "size of the window used for delta compression"
msgstr "taille de la fenêtre utilisée pour la compression des deltas"
+#: builtin/repack.c:162 builtin/repack.c:166
+msgid "bytes"
+msgstr "octets"
+
#: builtin/repack.c:163
msgid "same as the above, but limit memory size instead of entries count"
-msgstr "idem ci-dessus, mais limiter la taille mémoire au lieu du nombre d'éléments"
+msgstr ""
+"idem ci-dessus, mais limiter la taille mémoire au lieu du nombre d'éléments"
#: builtin/repack.c:165
msgid "limits the maximum delta depth"
@@ -8834,7 +8944,7 @@ msgstr "limite la profondeur maximale des deltas"
msgid "maximum size of each packfile"
msgstr "taille maximum de chaque fichier paquet"
-#: builtin/repack.c:345
+#: builtin/repack.c:343
#, c-format
msgid "removing '%s' failed"
msgstr "la suppression de '%s' a échoué"
@@ -8848,21 +8958,25 @@ msgid "git replace -d <object>..."
msgstr "git replace -d <objet>..."
#: builtin/replace.c:19
-msgid "git replace -l [<pattern>]"
-msgstr "git replace -l [<motif>]"
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
+msgstr "git replace [--format=<format>] [-l [<motif>]]"
-#: builtin/replace.c:131
+#: builtin/replace.c:174
msgid "list replace refs"
msgstr "afficher les références de remplacement"
-#: builtin/replace.c:132
+#: builtin/replace.c:175
msgid "delete replace refs"
msgstr "supprimer les références de remplacement"
-#: builtin/replace.c:133
+#: builtin/replace.c:176
msgid "replace the ref if it exists"
msgstr "remplacer la référence si elle existe"
+#: builtin/replace.c:177
+msgid "use this format"
+msgstr "utiliser ce format"
+
#: builtin/rerere.c:12
msgid "git rerere [clear | forget path... | status | remaining | diff | gc]"
msgstr "git rerere [clear | forget chemin... | status | remaining | diff | gc]"
@@ -8996,19 +9110,23 @@ msgstr "Impossible de réinitialiser le fichier d'index à la révision '%s'."
msgid "Could not write new index file."
msgstr "Impossible d'écrire le nouveau fichier d'index."
-#: builtin/rev-parse.c:345
+#: builtin/rev-parse.c:359
msgid "git rev-parse --parseopt [options] -- [<args>...]"
msgstr "git rev-parse --parseopt [options] -- [<arguments>...]"
-#: builtin/rev-parse.c:350
+#: builtin/rev-parse.c:364
msgid "keep the `--` passed as an arg"
msgstr "garder le `--` passé en argument"
-#: builtin/rev-parse.c:352
+#: builtin/rev-parse.c:366
msgid "stop parsing after the first non-option argument"
msgstr "arrêt de l'analyse après le premier argument qui n'est pas une option"
-#: builtin/rev-parse.c:470
+#: builtin/rev-parse.c:369
+msgid "output in stuck long form"
+msgstr "sortie en forme longue fixée"
+
+#: builtin/rev-parse.c:486
msgid ""
"git rev-parse --parseopt [options] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
@@ -9258,68 +9376,68 @@ msgstr ""
msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<référence>]"
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:649
msgid "show remote-tracking and local branches"
msgstr "afficher les branches de suivi distantes et les branches locales"
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:651
msgid "show remote-tracking branches"
msgstr "afficher les branches de suivi distantes"
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "color '*!+-' corresponding to the branch"
msgstr "couleur '*!+-' correspondant à la branche"
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "show <n> more commits after the common ancestor"
msgstr "afficher <n> validations de plus après l'ancêtre commun"
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "synonym to more=-1"
msgstr "synonyme de more=-1"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "suppress naming strings"
msgstr "supprimer les chaînes de nommage"
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:660
msgid "include the current branch"
msgstr "inclure la branche courante"
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:662
msgid "name commits with their object names"
msgstr "nommer les validations avec leurs noms d'objet"
-#: builtin/show-branch.c:665
+#: builtin/show-branch.c:664
msgid "show possible merge bases"
msgstr "afficher les bases possibles de fusion"
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show refs unreachable from any other ref"
msgstr "afficher les références inaccessibles depuis toute autre référence"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show commits in topological order"
msgstr "afficher les validations dans l'ordre topologique"
-#: builtin/show-branch.c:672
+#: builtin/show-branch.c:671
msgid "show only commits not on the first branch"
msgstr ""
"afficher seulement les validations qui ne sont pas sur la première branche"
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "show merges reachable from only one tip"
msgstr "afficher les fusions accessibles depuis une seule pointe"
-#: builtin/show-branch.c:676
+#: builtin/show-branch.c:675
msgid "topologically sort, maintaining date order where possible"
msgstr "tri topologique, maintenant l'ordre par date si possible"
-#: builtin/show-branch.c:679
+#: builtin/show-branch.c:678
msgid "<n>[,<base>]"
msgstr "<n>[,<base>]"
-#: builtin/show-branch.c:680
+#: builtin/show-branch.c:679
msgid "show <n> most recent ref-log entries starting at base"
msgstr ""
"afficher les <n> plus récents éléments de ref-log en commençant à la base"
@@ -9821,15 +9939,15 @@ msgstr "date d'expiration"
msgid "no-op (backward compatibility)"
msgstr "sans action (rétrocompatibilité)"
-#: parse-options.h:238
+#: parse-options.h:235
msgid "be more verbose"
msgstr "être plus verbeux"
-#: parse-options.h:240
+#: parse-options.h:237
msgid "be more quiet"
msgstr "être plus silencieux"
-#: parse-options.h:246
+#: parse-options.h:243
msgid "use <n> digits to display SHA-1s"
msgstr "utiliser <n> chiffres pour afficher les SHA-1s"
@@ -10139,8 +10257,8 @@ msgstr ""
"<branchevalide>'."
#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
-msgstr "refus de bissecter sur un arbre 'seeked'"
+msgid "won't bisect on cg-seek'ed tree"
+msgstr "refus de bissecter sur un arbre 'cg-seeked'"
#: git-bisect.sh:144
msgid "Bad HEAD - strange symbolic ref"
@@ -10287,7 +10405,7 @@ msgstr ""
#. The working tree and the index file is still based on the
#. $orig_head commit, but we are merging into $curr_head.
#. First update the working tree to match $curr_head.
-#: git-pull.sh:255
+#: git-pull.sh:247
#, sh-format
msgid ""
"Warning: fetch updated the current branch head.\n"
@@ -10298,15 +10416,15 @@ msgstr ""
"Attention : mise à jour en avance rapide de votre copie de travail\n"
"Attention : depuis la validation $orig_head."
-#: git-pull.sh:280
+#: git-pull.sh:272
msgid "Cannot merge multiple branches into empty head"
msgstr "Impossible de fusionner de multiples branches sur une tête vide"
-#: git-pull.sh:284
+#: git-pull.sh:276
msgid "Cannot rebase onto multiple branches"
msgstr "Impossible de rebaser sur de multiples branches"
-#: git-rebase.sh:54
+#: git-rebase.sh:55
msgid ""
"When you have resolved this problem, run \"git rebase --continue\".\n"
"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
@@ -10318,16 +10436,16 @@ msgstr ""
"Pour extraire la branche d'origine et stopper le rebasage, lancez \"git "
"rebase --abort\"."
-#: git-rebase.sh:156
+#: git-rebase.sh:158
msgid "Applied autostash."
msgstr "Autoremisage appliqué."
-#: git-rebase.sh:159
+#: git-rebase.sh:161
#, sh-format
msgid "Cannot store $stash_sha1"
msgstr "Impossible de stocker $stash_sha1"
-#: git-rebase.sh:160
+#: git-rebase.sh:162
msgid ""
"Applying autostash resulted in conflicts.\n"
"Your changes are safe in the stash.\n"
@@ -10337,33 +10455,33 @@ msgstr ""
"Vos modifications sont à l'abri dans la remise.\n"
"Vous pouvez lancer \"git stash pop\" ou \"git stash drop\" à tout moment.\n"
-#: git-rebase.sh:199
+#: git-rebase.sh:201
msgid "The pre-rebase hook refused to rebase."
msgstr "Le crochet pre-rebase a refusé de rebaser."
-#: git-rebase.sh:204
+#: git-rebase.sh:206
msgid "It looks like git-am is in progress. Cannot rebase."
msgstr "Il semble que git-am soit en cours. Impossible de rebaser."
-#: git-rebase.sh:338
+#: git-rebase.sh:346
msgid "The --exec option must be used with the --interactive option"
msgstr "L'option --exec doit être utilisée avec l'option --interactive"
-#: git-rebase.sh:343
+#: git-rebase.sh:351
msgid "No rebase in progress?"
msgstr "Pas de rebasage en cours ?"
-#: git-rebase.sh:354
+#: git-rebase.sh:362
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"L'action --edit-todo peut seulement être utilisée lors d'un rebasage "
"interactif."
-#: git-rebase.sh:361
+#: git-rebase.sh:369
msgid "Cannot read HEAD"
msgstr "Impossible de lire HEAD"
-#: git-rebase.sh:364
+#: git-rebase.sh:372
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -10371,12 +10489,12 @@ msgstr ""
"Vous devez éditer tous les conflits de fusion et\n"
"les marquer comme résolus avec git add"
-#: git-rebase.sh:382
+#: git-rebase.sh:390
#, sh-format
msgid "Could not move back to $head_name"
msgstr "Impossible de revenir à $head_name"
-#: git-rebase.sh:401
+#: git-rebase.sh:409
#, sh-format
msgid ""
"It seems that there is already a $state_dir_base directory, and\n"
@@ -10398,66 +10516,66 @@ msgstr ""
"chose\n"
"d'important ici."
-#: git-rebase.sh:446
+#: git-rebase.sh:456
#, sh-format
msgid "invalid upstream $upstream_name"
msgstr "invalide $upstream_name en amont"
-#: git-rebase.sh:470
+#: git-rebase.sh:480
#, sh-format
msgid "$onto_name: there are more than one merge bases"
msgstr "$onto_name : il y a plus d'une base de fusion"
-#: git-rebase.sh:473 git-rebase.sh:477
+#: git-rebase.sh:483 git-rebase.sh:487
#, sh-format
msgid "$onto_name: there is no merge base"
msgstr "$onto_name : il n'y a pas de base de fusion"
-#: git-rebase.sh:482
+#: git-rebase.sh:492
#, sh-format
msgid "Does not point to a valid commit: $onto_name"
msgstr "Ne pointe pas sur une validation valide : $onto_name"
-#: git-rebase.sh:505
+#: git-rebase.sh:515
#, sh-format
msgid "fatal: no such branch: $branch_name"
msgstr "fatal : pas de branche : $branch_name"
-#: git-rebase.sh:528
+#: git-rebase.sh:548
msgid "Cannot autostash"
msgstr "Autoremisage impossible"
-#: git-rebase.sh:533
+#: git-rebase.sh:553
#, sh-format
msgid "Created autostash: $stash_abbrev"
msgstr "Autoremisage créé : $stash_abbrev"
-#: git-rebase.sh:537
+#: git-rebase.sh:557
msgid "Please commit or stash them."
msgstr "Veuillez les valider ou les remiser."
-#: git-rebase.sh:557
+#: git-rebase.sh:577
#, sh-format
msgid "Current branch $branch_name is up to date."
msgstr "La branche courante $branch_name est à jour."
-#: git-rebase.sh:561
+#: git-rebase.sh:581
#, sh-format
msgid "Current branch $branch_name is up to date, rebase forced."
msgstr "La branche courante $branch_name est à jour, rebasage forcé."
-#: git-rebase.sh:572
+#: git-rebase.sh:592
#, sh-format
msgid "Changes from $mb to $onto:"
msgstr "Changements de $mb sur $onto :"
#. Detach HEAD and reset the tree
-#: git-rebase.sh:581
+#: git-rebase.sh:601
msgid "First, rewinding head to replay your work on top of it..."
msgstr ""
"Premièrement, rembobinons head pour rejouer votre travail par-dessus..."
-#: git-rebase.sh:591
+#: git-rebase.sh:611
#, sh-format
msgid "Fast-forwarded $branch_name to $onto_name."
msgstr "$branch_name mise à jour en avance rapide sur $onto_name."
@@ -10714,49 +10832,49 @@ msgstr "Échec d'enregistrement du sous-module '$sm_path'"
msgid "Entering '$prefix$displaypath'"
msgstr "Entrée dans '$prefix$displaypath'"
-#: git-submodule.sh:554
+#: git-submodule.sh:559
#, sh-format
msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
msgstr ""
"Arrêt sur '$prefix$displaypath' ; le script a retourné un statut non nul."
-#: git-submodule.sh:600
+#: git-submodule.sh:605
#, sh-format
msgid "No url found for submodule path '$displaypath' in .gitmodules"
msgstr ""
"URL non trouvé pour le chemin de sous-module '$displaypath' dans .gitmodules"
-#: git-submodule.sh:609
+#: git-submodule.sh:614
#, sh-format
msgid "Failed to register url for submodule path '$displaypath'"
msgstr ""
"Échec d'enregistrement de l'URL pour le chemin de sous-module '$displaypath'"
-#: git-submodule.sh:611
+#: git-submodule.sh:616
#, sh-format
msgid "Submodule '$name' ($url) registered for path '$displaypath'"
msgstr "Sous-module '$name' ($url) enregistré pour le chemin '$displaypath'"
-#: git-submodule.sh:619
+#: git-submodule.sh:633
#, sh-format
msgid "Failed to register update mode for submodule path '$displaypath'"
msgstr ""
"Échec d'enregistrement du mode de mise à jour pour le chemin de sous-module "
"'$displaypath'"
-#: git-submodule.sh:656
+#: git-submodule.sh:671
#, sh-format
msgid "Use '.' if you really want to deinitialize all submodules"
msgstr ""
"Utilisez '.' si vous voulez vraiment réinitialiser tous les sous-modules"
-#: git-submodule.sh:673
+#: git-submodule.sh:688
#, sh-format
msgid "Submodule work tree '$displaypath' contains a .git directory"
msgstr ""
"La copie de travail du sous-module '$displaypath' contient un répertoire .git"
-#: git-submodule.sh:674
+#: git-submodule.sh:689
#, sh-format
msgid ""
"(use 'rm -rf' if you really want to remove it including all of its history)"
@@ -10764,7 +10882,7 @@ msgstr ""
"(utilisez 'rm -rf' si vous voulez vraiment le supprimer en incluant tout son "
"historique)"
-#: git-submodule.sh:680
+#: git-submodule.sh:695
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
@@ -10773,30 +10891,30 @@ msgstr ""
"La copie de travail du sous-module '$displaypath' contient des modifications "
"locales ; utilisez '-f' pour les annuler"
-#: git-submodule.sh:683
+#: git-submodule.sh:698
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "Répertoire '$displaypath' nettoyé"
-#: git-submodule.sh:684
+#: git-submodule.sh:699
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr ""
"Impossible de supprimer la copie de travail du sous-module '$displaypath'"
-#: git-submodule.sh:687
+#: git-submodule.sh:702
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr "Impossible de créer le répertoire vide du sous-module '$displaypath'"
-#: git-submodule.sh:696
+#: git-submodule.sh:711
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr ""
"Le sous-module '$name' ($url) n'est pas enregistré pour le chemin "
"'$displaypath'"
-#: git-submodule.sh:811
+#: git-submodule.sh:834
#, sh-format
msgid ""
"Submodule path '$displaypath' not initialized\n"
@@ -10805,46 +10923,46 @@ msgstr ""
"Chemin de sous-module '$displaypath' non initialisé\n"
"Peut-être souhaitez-vous utiliser 'update --init' ?"
-#: git-submodule.sh:824
+#: git-submodule.sh:847
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr ""
"Impossible de trouver la révision courante dans le chemin de sous-module "
"'$displaypath'"
-#: git-submodule.sh:833
+#: git-submodule.sh:856
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "Impossible de rapatrier dans le chemin de sous-module '$sm_path'"
-#: git-submodule.sh:857
+#: git-submodule.sh:880
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "Impossible de rapatrier dans le chemin de sous-module '$displaypath'"
-#: git-submodule.sh:871
+#: git-submodule.sh:894
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr ""
"Impossible de rebaser '$sha1' dans le chemin de sous-module '$displaypath'"
-#: git-submodule.sh:872
+#: git-submodule.sh:895
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Chemin de sous-module '$displaypath' : rebasé dans '$sha1'"
-#: git-submodule.sh:877
+#: git-submodule.sh:900
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr ""
"Impossible de fusionner '$sha1' dans le chemin de sous-module '$displaypath'"
-#: git-submodule.sh:878
+#: git-submodule.sh:901
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Chemin de sous-module '$displaypath' : fusionné dans '$sha1'"
-#: git-submodule.sh:883
+#: git-submodule.sh:906
#, sh-format
msgid ""
"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
@@ -10852,68 +10970,83 @@ msgstr ""
"L'exécution de '$command $sha1' a échoué dans le chemin de sous-module "
"'$prefix$sm_path'"
-#: git-submodule.sh:884
+#: git-submodule.sh:907
#, sh-format
msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
msgstr "Chemin de sous-module '$prefix$sm_path' : '$command $sha1'"
-#: git-submodule.sh:889
+#: git-submodule.sh:912
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr ""
"Impossible d'extraire '$sha1' dans le chemin de sous-module '$displaypath'"
-#: git-submodule.sh:890
+#: git-submodule.sh:913
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Chemin de sous-module '$displaypath' : '$sha1' extrait"
-#: git-submodule.sh:917
+#: git-submodule.sh:940
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "Échec de parcours dans le chemin du sous-module '$displaypath'"
-#: git-submodule.sh:1025
+#: git-submodule.sh:1048
msgid "The --cached option cannot be used with the --files option"
msgstr "L'option --cached ne peut pas être utilisée avec l'option --files"
#. unexpected type
-#: git-submodule.sh:1073
+#: git-submodule.sh:1096
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "mode $mod_dst inattendu"
-#: git-submodule.sh:1093
+#: git-submodule.sh:1116
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " Attention : $display_name ne contient pas la validation $sha1_src"
-#: git-submodule.sh:1096
+#: git-submodule.sh:1119
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " Attention : $display_name ne contient pas la validation $sha1_dst"
-#: git-submodule.sh:1099
+#: git-submodule.sh:1122
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr ""
" Attention : $display_name ne contient pas les validations $sha1_src et "
"$sha1_dst"
-#: git-submodule.sh:1124
+#: git-submodule.sh:1147
msgid "blob"
msgstr "blob"
-#: git-submodule.sh:1238
+#: git-submodule.sh:1261
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "Échec de parcours dans le chemin du sous-module '$sm_path'"
-#: git-submodule.sh:1302
+#: git-submodule.sh:1325
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "Synchronisation de l'URL sous-module pour '$displaypath'"
+#~ msgid "copied: %s -> %s"
+#~ msgstr ""
+
+#~ msgid "deleted: %s"
+#~ msgstr "supprimé : %s"
+
+#~ msgid "modified: %s"
+#~ msgstr "modifié : %s"
+
+#~ msgid "renamed: %s -> %s"
+#~ msgstr "renommé : %s -> %s"
+
+#~ msgid "unmerged: %s"
+#~ msgstr "non fus. : %s"
+
#~ msgid "input paths are terminated by a null character"
#~ msgstr "les chemins en entrée sont terminés par le caractère nul"
diff --git a/po/git.pot b/po/git.pot
index 58af01a21..33cc31d51 100644
--- a/po/git.pot
+++ b/po/git.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2013-11-02 08:06+0800\n"
+"POT-Creation-Date: 2014-02-01 08:06+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -52,7 +52,7 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr ""
-#: archive.c:242 builtin/add.c:240 builtin/add.c:556 builtin/rm.c:328
+#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr ""
@@ -73,8 +73,8 @@ msgstr ""
msgid "prepend prefix to each pathname in the archive"
msgstr ""
-#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2264
-#: builtin/blame.c:2265 builtin/config.c:58 builtin/fast-export.c:680
+#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265
+#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680
#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77
#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408
#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154
@@ -245,64 +245,64 @@ msgstr ""
msgid "Failed to write ref"
msgstr ""
-#: bundle.c:36
+#: bundle.c:37
#, c-format
msgid "'%s' does not look like a v2 bundle file"
msgstr ""
-#: bundle.c:63
+#: bundle.c:64
#, c-format
msgid "unrecognized header: %s%s (%d)"
msgstr ""
-#: bundle.c:89 builtin/commit.c:706
+#: bundle.c:90 builtin/commit.c:706
#, c-format
msgid "could not open '%s'"
msgstr ""
-#: bundle.c:140
+#: bundle.c:141
msgid "Repository lacks these prerequisite commits:"
msgstr ""
-#: bundle.c:164 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
-#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:364
+#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
+#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357
#: builtin/shortlog.c:158
msgid "revision walk setup failed"
msgstr ""
-#: bundle.c:186
+#: bundle.c:187
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] ""
msgstr[1] ""
-#: bundle.c:193
+#: bundle.c:194
msgid "The bundle records a complete history."
msgstr ""
-#: bundle.c:195
+#: bundle.c:196
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] ""
msgstr[1] ""
-#: bundle.c:294
+#: bundle.c:296
msgid "rev-list died"
msgstr ""
-#: bundle.c:300 builtin/log.c:1329 builtin/shortlog.c:261
+#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261
#, c-format
msgid "unrecognized argument: %s"
msgstr ""
-#: bundle.c:335
+#: bundle.c:337
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr ""
-#: bundle.c:380
+#: bundle.c:382
msgid "Refusing to create empty bundle."
msgstr ""
@@ -337,16 +337,16 @@ msgstr ""
msgid "memory exhausted"
msgstr ""
-#: connected.c:60
+#: connected.c:70
msgid "Could not run 'git rev-list'"
msgstr ""
-#: connected.c:80
+#: connected.c:90
#, c-format
msgid "failed write to rev-list: %s"
msgstr ""
-#: connected.c:88
+#: connected.c:98
#, c-format
msgid "failed to close rev-list's stdin: %s"
msgstr ""
@@ -418,36 +418,41 @@ msgid_plural "%lu years ago"
msgstr[0] ""
msgstr[1] ""
-#: diff.c:112
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr ""
+
+#: diff.c:113
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr ""
-#: diff.c:117
+#: diff.c:118
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr ""
-#: diff.c:210
+#: diff.c:213
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr ""
-#: diff.c:260
+#: diff.c:263
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
"%s"
msgstr ""
-#: diff.c:3490
+#: diff.c:3509
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
"%s"
msgstr ""
-#: diff.c:3504
+#: diff.c:3523
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr ""
@@ -550,7 +555,7 @@ msgid "failed to read the cache"
msgstr ""
#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559
-#: builtin/clone.c:655
+#: builtin/clone.c:661
msgid "unable to write new index file"
msgstr ""
@@ -599,7 +604,7 @@ msgstr ""
msgid "blob expected for %s '%s'"
msgstr ""
-#: merge-recursive.c:774 builtin/clone.c:311
+#: merge-recursive.c:774 builtin/clone.c:317
#, c-format
msgid "failed to open '%s'"
msgstr ""
@@ -645,7 +650,7 @@ msgstr ""
msgid "rename"
msgstr ""
-#: merge-recursive.c:1082
+#: merge-recursive.c:1082 wt-status.c:283
msgid "renamed"
msgstr ""
@@ -704,7 +709,7 @@ msgstr ""
msgid "modify"
msgstr ""
-#: merge-recursive.c:1565
+#: merge-recursive.c:1565 wt-status.c:281
msgid "modified"
msgstr ""
@@ -726,7 +731,7 @@ msgstr ""
msgid "Auto-merging %s"
msgstr ""
-#: merge-recursive.c:1634 git-submodule.sh:1125
+#: merge-recursive.c:1634 git-submodule.sh:1148
msgid "submodule"
msgstr ""
@@ -796,7 +801,7 @@ msgstr ""
msgid "Could not parse object '%s'"
msgstr ""
-#: merge-recursive.c:2010 builtin/merge.c:672
+#: merge-recursive.c:2010 builtin/merge.c:665
msgid "Unable to write index."
msgstr ""
@@ -851,46 +856,46 @@ msgstr ""
msgid "-NUM"
msgstr ""
-#: pathspec.c:118
+#: pathspec.c:133
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr ""
-#: pathspec.c:128
+#: pathspec.c:143
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
msgstr ""
-#: pathspec.c:158
+#: pathspec.c:177
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr ""
-#: pathspec.c:164
+#: pathspec.c:183
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr ""
-#: pathspec.c:168
+#: pathspec.c:187
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr ""
-#: pathspec.c:186
+#: pathspec.c:205
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr ""
-#: pathspec.c:211
+#: pathspec.c:230
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr ""
-#: pathspec.c:222
+#: pathspec.c:241
#, c-format
msgid "%s: '%s' is outside repository"
msgstr ""
-#: pathspec.c:278
+#: pathspec.c:291
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr ""
@@ -900,42 +905,72 @@ msgstr ""
#. * name. E.g. when add--interactive dies when running
#. * "checkout -p"
#.
-#: pathspec.c:340
+#: pathspec.c:353
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr ""
-#: pathspec.c:415
+#: pathspec.c:433
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr ""
-#: remote.c:1833
+#: pathspec.c:442
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr ""
+
+#: remote.c:753
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr ""
+
+#: remote.c:757
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr ""
+
+#: remote.c:761
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr ""
+
+#.
+#. * This last possibility doesn't occur because
+#. * FETCH_HEAD_IGNORE entries always appear at
+#. * the end of the list.
+#.
+#: remote.c:769
+msgid "Internal error"
+msgstr ""
+
+#: remote.c:1871
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr ""
-#: remote.c:1837
+#: remote.c:1875
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr ""
-#: remote.c:1840
+#: remote.c:1878
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr ""
-#: remote.c:1844
+#: remote.c:1882
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] ""
msgstr[1] ""
-#: remote.c:1850
+#: remote.c:1888
msgid " (use \"git push\" to publish your local commits)\n"
msgstr ""
-#: remote.c:1853
+#: remote.c:1891
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -943,11 +978,11 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: remote.c:1861
+#: remote.c:1899
msgid " (use \"git pull\" to update your local branch)\n"
msgstr ""
-#: remote.c:1864
+#: remote.c:1902
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -958,7 +993,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: remote.c:1874
+#: remote.c:1912
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr ""
@@ -971,14 +1006,14 @@ msgstr ""
msgid "dup2(%d,%d) failed"
msgstr ""
-#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903
-#: builtin/merge.c:1013 builtin/merge.c:1023
+#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896
+#: builtin/merge.c:1006 builtin/merge.c:1016
#, c-format
msgid "Could not open '%s' for writing"
msgstr ""
-#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793
-#: builtin/merge.c:1015 builtin/merge.c:1028
+#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786
+#: builtin/merge.c:1008 builtin/merge.c:1021
#, c-format
msgid "Could not write to '%s'"
msgstr ""
@@ -1213,7 +1248,7 @@ msgstr ""
msgid "Can't cherry-pick into empty head"
msgstr ""
-#: sha1_name.c:440
+#: sha1_name.c:439
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -1226,21 +1261,21 @@ msgid ""
"running \"git config advice.objectNameWarning false\""
msgstr ""
-#: sha1_name.c:1112
+#: sha1_name.c:1070
msgid "HEAD does not point to a branch"
msgstr ""
-#: sha1_name.c:1115
+#: sha1_name.c:1073
#, c-format
msgid "No such branch: '%s'"
msgstr ""
-#: sha1_name.c:1117
+#: sha1_name.c:1075
#, c-format
msgid "No upstream configured for branch '%s'"
msgstr ""
-#: sha1_name.c:1121
+#: sha1_name.c:1079
#, c-format
msgid "Upstream branch '%s' not stored as a remote-tracking branch"
msgstr ""
@@ -1348,331 +1383,321 @@ msgstr ""
msgid "no such user"
msgstr ""
-#: wt-status.c:146
+#: wt-status.c:150
msgid "Unmerged paths:"
msgstr ""
-#: wt-status.c:173 wt-status.c:200
+#: wt-status.c:177 wt-status.c:204
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
msgstr ""
-#: wt-status.c:175 wt-status.c:202
+#: wt-status.c:179 wt-status.c:206
msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr ""
-#: wt-status.c:179
+#: wt-status.c:183
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr ""
-#: wt-status.c:181 wt-status.c:185
+#: wt-status.c:185 wt-status.c:189
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr ""
-#: wt-status.c:183
+#: wt-status.c:187
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr ""
-#: wt-status.c:194
+#: wt-status.c:198
msgid "Changes to be committed:"
msgstr ""
-#: wt-status.c:212
+#: wt-status.c:216
msgid "Changes not staged for commit:"
msgstr ""
-#: wt-status.c:216
+#: wt-status.c:220
msgid " (use \"git add <file>...\" to update what will be committed)"
msgstr ""
-#: wt-status.c:218
+#: wt-status.c:222
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr ""
-#: wt-status.c:219
+#: wt-status.c:223
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr ""
-#: wt-status.c:221
+#: wt-status.c:225
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
-#: wt-status.c:233
+#: wt-status.c:237
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr ""
-#: wt-status.c:250
+#: wt-status.c:254
msgid "bug"
msgstr ""
-#: wt-status.c:255
+#: wt-status.c:259
msgid "both deleted:"
msgstr ""
-#: wt-status.c:256
+#: wt-status.c:260
msgid "added by us:"
msgstr ""
-#: wt-status.c:257
+#: wt-status.c:261
msgid "deleted by them:"
msgstr ""
-#: wt-status.c:258
+#: wt-status.c:262
msgid "added by them:"
msgstr ""
-#: wt-status.c:259
+#: wt-status.c:263
msgid "deleted by us:"
msgstr ""
-#: wt-status.c:260
+#: wt-status.c:264
msgid "both added:"
msgstr ""
-#: wt-status.c:261
+#: wt-status.c:265
msgid "both modified:"
msgstr ""
-#: wt-status.c:291
-msgid "new commits, "
+#: wt-status.c:275
+msgid "new file"
msgstr ""
-#: wt-status.c:293
-msgid "modified content, "
+#: wt-status.c:277
+msgid "copied"
msgstr ""
-#: wt-status.c:295
-msgid "untracked content, "
+#: wt-status.c:279
+msgid "deleted"
msgstr ""
-#: wt-status.c:312
-#, c-format
-msgid "new file: %s"
+#: wt-status.c:285
+msgid "typechange"
msgstr ""
-#: wt-status.c:315
-#, c-format
-msgid "copied: %s -> %s"
+#: wt-status.c:287
+msgid "unknown"
msgstr ""
-#: wt-status.c:318
-#, c-format
-msgid "deleted: %s"
+#: wt-status.c:289
+msgid "unmerged"
msgstr ""
-#: wt-status.c:321
-#, c-format
-msgid "modified: %s"
-msgstr ""
-
-#: wt-status.c:324
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr ""
-
-#: wt-status.c:327
-#, c-format
-msgid "typechange: %s"
+#: wt-status.c:336
+msgid "new commits, "
msgstr ""
-#: wt-status.c:330
-#, c-format
-msgid "unknown: %s"
+#: wt-status.c:338
+msgid "modified content, "
msgstr ""
-#: wt-status.c:333
-#, c-format
-msgid "unmerged: %s"
+#: wt-status.c:340
+msgid "untracked content, "
msgstr ""
-#: wt-status.c:336
+#: wt-status.c:357
#, c-format
msgid "bug: unhandled diff status %c"
msgstr ""
-#: wt-status.c:703
+#: wt-status.c:732
msgid "Submodules changed but not updated:"
msgstr ""
-#: wt-status.c:705
+#: wt-status.c:734
msgid "Submodule changes to be committed:"
msgstr ""
-#: wt-status.c:848
+#: wt-status.c:836
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr ""
+
+#: wt-status.c:899
msgid "You have unmerged paths."
msgstr ""
-#: wt-status.c:851
+#: wt-status.c:902
msgid " (fix conflicts and run \"git commit\")"
msgstr ""
-#: wt-status.c:854
+#: wt-status.c:905
msgid "All conflicts fixed but you are still merging."
msgstr ""
-#: wt-status.c:857
+#: wt-status.c:908
msgid " (use \"git commit\" to conclude merge)"
msgstr ""
-#: wt-status.c:867
+#: wt-status.c:918
msgid "You are in the middle of an am session."
msgstr ""
-#: wt-status.c:870
+#: wt-status.c:921
msgid "The current patch is empty."
msgstr ""
-#: wt-status.c:874
+#: wt-status.c:925
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr ""
-#: wt-status.c:876
+#: wt-status.c:927
msgid " (use \"git am --skip\" to skip this patch)"
msgstr ""
-#: wt-status.c:878
+#: wt-status.c:929
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
-#: wt-status.c:938 wt-status.c:955
+#: wt-status.c:989 wt-status.c:1006
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr ""
-#: wt-status.c:943 wt-status.c:960
+#: wt-status.c:994 wt-status.c:1011
msgid "You are currently rebasing."
msgstr ""
-#: wt-status.c:946
+#: wt-status.c:997
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr ""
-#: wt-status.c:948
+#: wt-status.c:999
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr ""
-#: wt-status.c:950
+#: wt-status.c:1001
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr ""
-#: wt-status.c:963
+#: wt-status.c:1014
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr ""
-#: wt-status.c:967
+#: wt-status.c:1018
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
msgstr ""
-#: wt-status.c:972
+#: wt-status.c:1023
msgid "You are currently splitting a commit during a rebase."
msgstr ""
-#: wt-status.c:975
+#: wt-status.c:1026
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
-#: wt-status.c:979
+#: wt-status.c:1030
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
-#: wt-status.c:984
+#: wt-status.c:1035
msgid "You are currently editing a commit during a rebase."
msgstr ""
-#: wt-status.c:987
+#: wt-status.c:1038
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
-#: wt-status.c:989
+#: wt-status.c:1040
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
-#: wt-status.c:999
+#: wt-status.c:1050
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr ""
-#: wt-status.c:1004
+#: wt-status.c:1055
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr ""
-#: wt-status.c:1007
+#: wt-status.c:1058
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
-#: wt-status.c:1009
+#: wt-status.c:1060
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
-#: wt-status.c:1018
+#: wt-status.c:1069
#, c-format
msgid "You are currently reverting commit %s."
msgstr ""
-#: wt-status.c:1023
+#: wt-status.c:1074
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr ""
-#: wt-status.c:1026
+#: wt-status.c:1077
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr ""
-#: wt-status.c:1028
+#: wt-status.c:1079
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
-#: wt-status.c:1039
+#: wt-status.c:1090
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr ""
-#: wt-status.c:1043
+#: wt-status.c:1094
msgid "You are currently bisecting."
msgstr ""
-#: wt-status.c:1046
+#: wt-status.c:1097
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
-#: wt-status.c:1221
+#: wt-status.c:1272
msgid "On branch "
msgstr ""
-#: wt-status.c:1228
+#: wt-status.c:1279
msgid "rebase in progress; onto "
msgstr ""
-#: wt-status.c:1235
+#: wt-status.c:1286
msgid "HEAD detached at "
msgstr ""
-#: wt-status.c:1237
+#: wt-status.c:1288
msgid "HEAD detached from "
msgstr ""
-#: wt-status.c:1240
+#: wt-status.c:1291
msgid "Not currently on any branch."
msgstr ""
-#: wt-status.c:1257
+#: wt-status.c:1308
msgid "Initial commit"
msgstr ""
-#: wt-status.c:1271
+#: wt-status.c:1322
msgid "Untracked files"
msgstr ""
-#: wt-status.c:1273
+#: wt-status.c:1324
msgid "Ignored files"
msgstr ""
-#: wt-status.c:1277
+#: wt-status.c:1328
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1680,86 +1705,86 @@ msgid ""
"new files yourself (see 'git help status')."
msgstr ""
-#: wt-status.c:1283
+#: wt-status.c:1334
#, c-format
msgid "Untracked files not listed%s"
msgstr ""
-#: wt-status.c:1285
+#: wt-status.c:1336
msgid " (use -u option to show untracked files)"
msgstr ""
-#: wt-status.c:1291
+#: wt-status.c:1342
msgid "No changes"
msgstr ""
-#: wt-status.c:1296
+#: wt-status.c:1347
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
-#: wt-status.c:1299
+#: wt-status.c:1350
#, c-format
msgid "no changes added to commit\n"
msgstr ""
-#: wt-status.c:1302
+#: wt-status.c:1353
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
"track)\n"
msgstr ""
-#: wt-status.c:1305
+#: wt-status.c:1356
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr ""
-#: wt-status.c:1308
+#: wt-status.c:1359
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
-#: wt-status.c:1311 wt-status.c:1316
+#: wt-status.c:1362 wt-status.c:1367
#, c-format
msgid "nothing to commit\n"
msgstr ""
-#: wt-status.c:1314
+#: wt-status.c:1365
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
-#: wt-status.c:1318
+#: wt-status.c:1369
#, c-format
msgid "nothing to commit, working directory clean\n"
msgstr ""
-#: wt-status.c:1427
+#: wt-status.c:1478
msgid "HEAD (no branch)"
msgstr ""
-#: wt-status.c:1433
+#: wt-status.c:1484
msgid "Initial commit on "
msgstr ""
-#: wt-status.c:1463
+#: wt-status.c:1514
msgid "gone"
msgstr ""
-#: wt-status.c:1465
+#: wt-status.c:1516
msgid "behind "
msgstr ""
-#: wt-status.c:1468 wt-status.c:1471
+#: wt-status.c:1519 wt-status.c:1522
msgid "ahead "
msgstr ""
-#: wt-status.c:1473
+#: wt-status.c:1524
msgid ", behind "
msgstr ""
-#: compat/precompose_utf8.c:55 builtin/clone.c:350
+#: compat/precompose_utf8.c:55 builtin/clone.c:356
#, c-format
msgid "failed to unlink '%s'"
msgstr ""
@@ -1863,15 +1888,15 @@ msgstr ""
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
-#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:92 builtin/mv.c:66
-#: builtin/prune-packed.c:73 builtin/push.c:459 builtin/remote.c:1253
+#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70
+#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344
#: builtin/rm.c:269
msgid "dry run"
msgstr ""
#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19
#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612
-#: builtin/log.c:1592 builtin/mv.c:65 builtin/read-tree.c:113
+#: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113
msgid "be verbose"
msgstr ""
@@ -1952,11 +1977,11 @@ msgid "Maybe you wanted to say 'git add .'?\n"
msgstr ""
#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919
-#: builtin/commit.c:320 builtin/mv.c:86 builtin/reset.c:224 builtin/rm.c:299
+#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299
msgid "index file corrupt"
msgstr ""
-#: builtin/add.c:589 builtin/apply.c:4506 builtin/mv.c:259 builtin/rm.c:432
+#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432
msgid "Unable to write new index file"
msgstr ""
@@ -2283,7 +2308,7 @@ msgid "unable to read index file"
msgstr ""
#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90
-#: builtin/fetch.c:77
+#: builtin/fetch.c:78
msgid "path"
msgstr ""
@@ -2481,95 +2506,95 @@ msgstr ""
msgid "[rev-opts] are documented in git-rev-list(1)"
msgstr ""
-#: builtin/blame.c:2248
+#: builtin/blame.c:2249
msgid "Show blame entries as we find them, incrementally"
msgstr ""
-#: builtin/blame.c:2249
+#: builtin/blame.c:2250
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr ""
-#: builtin/blame.c:2250
+#: builtin/blame.c:2251
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr ""
-#: builtin/blame.c:2251
+#: builtin/blame.c:2252
msgid "Show work cost statistics"
msgstr ""
-#: builtin/blame.c:2252
+#: builtin/blame.c:2253
msgid "Show output score for blame entries"
msgstr ""
-#: builtin/blame.c:2253
+#: builtin/blame.c:2254
msgid "Show original filename (Default: auto)"
msgstr ""
-#: builtin/blame.c:2254
+#: builtin/blame.c:2255
msgid "Show original linenumber (Default: off)"
msgstr ""
-#: builtin/blame.c:2255
+#: builtin/blame.c:2256
msgid "Show in a format designed for machine consumption"
msgstr ""
-#: builtin/blame.c:2256
+#: builtin/blame.c:2257
msgid "Show porcelain format with per-line commit information"
msgstr ""
-#: builtin/blame.c:2257
+#: builtin/blame.c:2258
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr ""
-#: builtin/blame.c:2258
+#: builtin/blame.c:2259
msgid "Show raw timestamp (Default: off)"
msgstr ""
-#: builtin/blame.c:2259
+#: builtin/blame.c:2260
msgid "Show long commit SHA1 (Default: off)"
msgstr ""
-#: builtin/blame.c:2260
+#: builtin/blame.c:2261
msgid "Suppress author name and timestamp (Default: off)"
msgstr ""
-#: builtin/blame.c:2261
+#: builtin/blame.c:2262
msgid "Show author email instead of name (Default: off)"
msgstr ""
-#: builtin/blame.c:2262
+#: builtin/blame.c:2263
msgid "Ignore whitespace differences"
msgstr ""
-#: builtin/blame.c:2263
+#: builtin/blame.c:2264
msgid "Spend extra cycles to find better match"
msgstr ""
-#: builtin/blame.c:2264
+#: builtin/blame.c:2265
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr ""
-#: builtin/blame.c:2265
+#: builtin/blame.c:2266
msgid "Use <file>'s contents as the final image"
msgstr ""
-#: builtin/blame.c:2266 builtin/blame.c:2267
+#: builtin/blame.c:2267 builtin/blame.c:2268
msgid "score"
msgstr ""
-#: builtin/blame.c:2266
+#: builtin/blame.c:2267
msgid "Find line copies within and across files"
msgstr ""
-#: builtin/blame.c:2267
+#: builtin/blame.c:2268
msgid "Find line movements within and across files"
msgstr ""
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "n,m"
msgstr ""
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "Process only line range n,m, counting from 1"
msgstr ""
@@ -2667,292 +2692,292 @@ msgstr ""
msgid "branch '%s' does not point at a commit"
msgstr ""
-#: builtin/branch.c:453
+#: builtin/branch.c:454
#, c-format
msgid "[%s: gone]"
msgstr ""
-#: builtin/branch.c:456
+#: builtin/branch.c:459
#, c-format
msgid "[%s]"
msgstr ""
-#: builtin/branch.c:459
+#: builtin/branch.c:464
#, c-format
msgid "[%s: behind %d]"
msgstr ""
-#: builtin/branch.c:461
+#: builtin/branch.c:466
#, c-format
msgid "[behind %d]"
msgstr ""
-#: builtin/branch.c:465
+#: builtin/branch.c:470
#, c-format
msgid "[%s: ahead %d]"
msgstr ""
-#: builtin/branch.c:467
+#: builtin/branch.c:472
#, c-format
msgid "[ahead %d]"
msgstr ""
-#: builtin/branch.c:470
+#: builtin/branch.c:475
#, c-format
msgid "[%s: ahead %d, behind %d]"
msgstr ""
-#: builtin/branch.c:473
+#: builtin/branch.c:478
#, c-format
msgid "[ahead %d, behind %d]"
msgstr ""
-#: builtin/branch.c:496
+#: builtin/branch.c:502
msgid " **** invalid ref ****"
msgstr ""
-#: builtin/branch.c:588
+#: builtin/branch.c:594
#, c-format
msgid "(no branch, rebasing %s)"
msgstr ""
-#: builtin/branch.c:591
+#: builtin/branch.c:597
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr ""
-#: builtin/branch.c:594
+#: builtin/branch.c:600
#, c-format
msgid "(detached from %s)"
msgstr ""
-#: builtin/branch.c:597
+#: builtin/branch.c:603
msgid "(no branch)"
msgstr ""
-#: builtin/branch.c:643
+#: builtin/branch.c:649
#, c-format
msgid "object '%s' does not point to a commit"
msgstr ""
-#: builtin/branch.c:675
+#: builtin/branch.c:681
msgid "some refs could not be read"
msgstr ""
-#: builtin/branch.c:688
+#: builtin/branch.c:694
msgid "cannot rename the current branch while not on any."
msgstr ""
-#: builtin/branch.c:698
+#: builtin/branch.c:704
#, c-format
msgid "Invalid branch name: '%s'"
msgstr ""
-#: builtin/branch.c:713
+#: builtin/branch.c:719
msgid "Branch rename failed"
msgstr ""
-#: builtin/branch.c:717
+#: builtin/branch.c:723
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr ""
-#: builtin/branch.c:721
+#: builtin/branch.c:727
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr ""
-#: builtin/branch.c:728
+#: builtin/branch.c:734
msgid "Branch is renamed, but update of config-file failed"
msgstr ""
-#: builtin/branch.c:743
+#: builtin/branch.c:749
#, c-format
msgid "malformed object name %s"
msgstr ""
-#: builtin/branch.c:767
+#: builtin/branch.c:773
#, c-format
msgid "could not write branch description template: %s"
msgstr ""
-#: builtin/branch.c:797
+#: builtin/branch.c:803
msgid "Generic options"
msgstr ""
-#: builtin/branch.c:799
+#: builtin/branch.c:805
msgid "show hash and subject, give twice for upstream branch"
msgstr ""
-#: builtin/branch.c:800
+#: builtin/branch.c:806
msgid "suppress informational messages"
msgstr ""
-#: builtin/branch.c:801
+#: builtin/branch.c:807
msgid "set up tracking mode (see git-pull(1))"
msgstr ""
-#: builtin/branch.c:803
+#: builtin/branch.c:809
msgid "change upstream info"
msgstr ""
-#: builtin/branch.c:807
+#: builtin/branch.c:813
msgid "use colored output"
msgstr ""
-#: builtin/branch.c:808
+#: builtin/branch.c:814
msgid "act on remote-tracking branches"
msgstr ""
-#: builtin/branch.c:811 builtin/branch.c:817 builtin/branch.c:838
-#: builtin/branch.c:844 builtin/commit.c:1460 builtin/commit.c:1461
+#: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844
+#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461
#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468
msgid "commit"
msgstr ""
-#: builtin/branch.c:812 builtin/branch.c:818
+#: builtin/branch.c:818 builtin/branch.c:824
msgid "print only branches that contain the commit"
msgstr ""
-#: builtin/branch.c:824
+#: builtin/branch.c:830
msgid "Specific git-branch actions:"
msgstr ""
-#: builtin/branch.c:825
+#: builtin/branch.c:831
msgid "list both remote-tracking and local branches"
msgstr ""
-#: builtin/branch.c:827
+#: builtin/branch.c:833
msgid "delete fully merged branch"
msgstr ""
-#: builtin/branch.c:828
+#: builtin/branch.c:834
msgid "delete branch (even if not merged)"
msgstr ""
-#: builtin/branch.c:829
+#: builtin/branch.c:835
msgid "move/rename a branch and its reflog"
msgstr ""
-#: builtin/branch.c:830
+#: builtin/branch.c:836
msgid "move/rename a branch, even if target exists"
msgstr ""
-#: builtin/branch.c:831
+#: builtin/branch.c:837
msgid "list branch names"
msgstr ""
-#: builtin/branch.c:832
+#: builtin/branch.c:838
msgid "create the branch's reflog"
msgstr ""
-#: builtin/branch.c:834
+#: builtin/branch.c:840
msgid "edit the description for the branch"
msgstr ""
-#: builtin/branch.c:835
+#: builtin/branch.c:841
msgid "force creation (when already exists)"
msgstr ""
-#: builtin/branch.c:838
+#: builtin/branch.c:844
msgid "print only not merged branches"
msgstr ""
-#: builtin/branch.c:844
+#: builtin/branch.c:850
msgid "print only merged branches"
msgstr ""
-#: builtin/branch.c:848
+#: builtin/branch.c:854
msgid "list branches in columns"
msgstr ""
-#: builtin/branch.c:861
+#: builtin/branch.c:867
msgid "Failed to resolve HEAD as a valid ref."
msgstr ""
-#: builtin/branch.c:866 builtin/clone.c:629
+#: builtin/branch.c:872 builtin/clone.c:635
msgid "HEAD not found below refs/heads!"
msgstr ""
-#: builtin/branch.c:890
+#: builtin/branch.c:896
msgid "--column and --verbose are incompatible"
msgstr ""
-#: builtin/branch.c:896 builtin/branch.c:935
+#: builtin/branch.c:902 builtin/branch.c:941
msgid "branch name required"
msgstr ""
-#: builtin/branch.c:911
+#: builtin/branch.c:917
msgid "Cannot give description to detached HEAD"
msgstr ""
-#: builtin/branch.c:916
+#: builtin/branch.c:922
msgid "cannot edit description of more than one branch"
msgstr ""
-#: builtin/branch.c:923
+#: builtin/branch.c:929
#, c-format
msgid "No commit on branch '%s' yet."
msgstr ""
-#: builtin/branch.c:926
+#: builtin/branch.c:932
#, c-format
msgid "No branch named '%s'."
msgstr ""
-#: builtin/branch.c:941
+#: builtin/branch.c:947
msgid "too many branches for a rename operation"
msgstr ""
-#: builtin/branch.c:946
+#: builtin/branch.c:952
msgid "too many branches to set new upstream"
msgstr ""
-#: builtin/branch.c:950
+#: builtin/branch.c:956
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
msgstr ""
-#: builtin/branch.c:953 builtin/branch.c:975 builtin/branch.c:997
+#: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002
#, c-format
msgid "no such branch '%s'"
msgstr ""
-#: builtin/branch.c:957
+#: builtin/branch.c:963
#, c-format
msgid "branch '%s' does not exist"
msgstr ""
-#: builtin/branch.c:969
+#: builtin/branch.c:975
msgid "too many branches to unset upstream"
msgstr ""
-#: builtin/branch.c:973
+#: builtin/branch.c:979
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
-#: builtin/branch.c:979
+#: builtin/branch.c:985
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr ""
-#: builtin/branch.c:994
+#: builtin/branch.c:999
msgid "it does not make sense to create 'HEAD' manually"
msgstr ""
-#: builtin/branch.c:1000
+#: builtin/branch.c:1005
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr ""
-#: builtin/branch.c:1003
+#: builtin/branch.c:1008
#, c-format
msgid ""
"The --set-upstream flag is deprecated and will be removed. Consider using --"
"track or --set-upstream-to\n"
msgstr ""
-#: builtin/branch.c:1020
+#: builtin/branch.c:1025
#, c-format
msgid ""
"\n"
@@ -2960,12 +2985,12 @@ msgid ""
"\n"
msgstr ""
-#: builtin/branch.c:1021
+#: builtin/branch.c:1026
#, c-format
msgid " git branch -d %s\n"
msgstr ""
-#: builtin/branch.c:1022
+#: builtin/branch.c:1027
#, c-format
msgid " git branch --set-upstream-to %s\n"
msgstr ""
@@ -2983,43 +3008,43 @@ msgstr ""
msgid "Need a repository to unbundle."
msgstr ""
-#: builtin/cat-file.c:312
+#: builtin/cat-file.c:328
msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
msgstr ""
-#: builtin/cat-file.c:313
+#: builtin/cat-file.c:329
msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
msgstr ""
-#: builtin/cat-file.c:350
+#: builtin/cat-file.c:366
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr ""
-#: builtin/cat-file.c:351
+#: builtin/cat-file.c:367
msgid "show object type"
msgstr ""
-#: builtin/cat-file.c:352
+#: builtin/cat-file.c:368
msgid "show object size"
msgstr ""
-#: builtin/cat-file.c:354
+#: builtin/cat-file.c:370
msgid "exit with zero when there's no error"
msgstr ""
-#: builtin/cat-file.c:355
+#: builtin/cat-file.c:371
msgid "pretty-print object's content"
msgstr ""
-#: builtin/cat-file.c:357
+#: builtin/cat-file.c:373
msgid "for blob objects, run textconv on object's content"
msgstr ""
-#: builtin/cat-file.c:359
+#: builtin/cat-file.c:375
msgid "show info and content of objects fed from the standard input"
msgstr ""
-#: builtin/cat-file.c:362
+#: builtin/cat-file.c:378
msgid "show info about objects fed from the standard input"
msgstr ""
@@ -3047,7 +3072,7 @@ msgstr ""
msgid "terminate input and output records by a NUL character"
msgstr ""
-#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:259
+#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260
msgid "suppress progress reporting"
msgstr ""
@@ -3325,7 +3350,7 @@ msgid "Cannot switch branch to a non-commit '%s'"
msgstr ""
#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88
-#: builtin/remote.c:169 builtin/remote.c:171
+#: builtin/remote.c:159 builtin/remote.c:161
msgid "branch"
msgstr ""
@@ -3373,11 +3398,11 @@ msgstr ""
msgid "perform a 3-way merge with the new branch"
msgstr ""
-#: builtin/checkout.c:1106 builtin/merge.c:232
+#: builtin/checkout.c:1106 builtin/merge.c:225
msgid "update ignored files (default)"
msgstr ""
-#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:251
+#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248
msgid "style"
msgstr ""
@@ -3551,7 +3576,7 @@ msgid "remove whole directories"
msgstr ""
#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718
-#: builtin/ls-files.c:483 builtin/name-rev.c:315 builtin/show-ref.c:185
+#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185
msgid "pattern"
msgstr ""
@@ -3587,8 +3612,8 @@ msgstr ""
msgid "git clone [options] [--] <repo> [<dir>]"
msgstr ""
-#: builtin/clone.c:64 builtin/fetch.c:96 builtin/merge.c:229
-#: builtin/push.c:474
+#: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222
+#: builtin/push.c:521
msgid "force progress reporting"
msgstr ""
@@ -3648,7 +3673,7 @@ msgstr ""
msgid "path to git-upload-pack on the remote"
msgstr ""
-#: builtin/clone.c:92 builtin/fetch.c:97 builtin/grep.c:663
+#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663
msgid "depth"
msgstr ""
@@ -3681,141 +3706,160 @@ msgstr ""
msgid "reference repository '%s' is not a local repository."
msgstr ""
-#: builtin/clone.c:315
+#: builtin/clone.c:256
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr ""
+
+#: builtin/clone.c:259
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr ""
+
+#: builtin/clone.c:321
#, c-format
msgid "failed to create directory '%s'"
msgstr ""
-#: builtin/clone.c:317 builtin/diff.c:77
+#: builtin/clone.c:323 builtin/diff.c:83
#, c-format
msgid "failed to stat '%s'"
msgstr ""
-#: builtin/clone.c:319
+#: builtin/clone.c:325
#, c-format
msgid "%s exists and is not a directory"
msgstr ""
-#: builtin/clone.c:333
+#: builtin/clone.c:339
#, c-format
msgid "failed to stat %s\n"
msgstr ""
-#: builtin/clone.c:355
+#: builtin/clone.c:361
#, c-format
msgid "failed to create link '%s'"
msgstr ""
-#: builtin/clone.c:359
+#: builtin/clone.c:365
#, c-format
msgid "failed to copy file to '%s'"
msgstr ""
-#: builtin/clone.c:382 builtin/clone.c:559
+#: builtin/clone.c:388 builtin/clone.c:565
#, c-format
msgid "done.\n"
msgstr ""
-#: builtin/clone.c:395
+#: builtin/clone.c:401
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
"and retry the checkout with 'git checkout -f HEAD'\n"
msgstr ""
-#: builtin/clone.c:474
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr ""
-#: builtin/clone.c:554
+#: builtin/clone.c:560
#, c-format
msgid "Checking connectivity... "
msgstr ""
-#: builtin/clone.c:557
+#: builtin/clone.c:563
msgid "remote did not send all necessary objects"
msgstr ""
-#: builtin/clone.c:620
+#: builtin/clone.c:626
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
-#: builtin/clone.c:651
+#: builtin/clone.c:657
msgid "unable to checkout working tree"
msgstr ""
-#: builtin/clone.c:759
+#: builtin/clone.c:765
msgid "Too many arguments."
msgstr ""
-#: builtin/clone.c:763
+#: builtin/clone.c:769
msgid "You must specify a repository to clone."
msgstr ""
-#: builtin/clone.c:774
+#: builtin/clone.c:780
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr ""
-#: builtin/clone.c:777
+#: builtin/clone.c:783
msgid "--bare and --separate-git-dir are incompatible."
msgstr ""
-#: builtin/clone.c:790
+#: builtin/clone.c:796
#, c-format
msgid "repository '%s' does not exist"
msgstr ""
-#: builtin/clone.c:795
+#: builtin/clone.c:802
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
-#: builtin/clone.c:797
+#: builtin/clone.c:805
+msgid "source repository is shallow, ignoring --local"
+msgstr ""
+
+#: builtin/clone.c:810
msgid "--local is ignored"
msgstr ""
-#: builtin/clone.c:807
+#: builtin/clone.c:814 builtin/fetch.c:1119
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr ""
+
+#: builtin/clone.c:824
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr ""
-#: builtin/clone.c:817
+#: builtin/clone.c:834
#, c-format
msgid "working tree '%s' already exists."
msgstr ""
-#: builtin/clone.c:830 builtin/clone.c:842
+#: builtin/clone.c:847 builtin/clone.c:859
#, c-format
msgid "could not create leading directories of '%s'"
msgstr ""
-#: builtin/clone.c:833
+#: builtin/clone.c:850
#, c-format
msgid "could not create work tree dir '%s'."
msgstr ""
-#: builtin/clone.c:852
+#: builtin/clone.c:869
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr ""
-#: builtin/clone.c:854
+#: builtin/clone.c:871
#, c-format
msgid "Cloning into '%s'...\n"
msgstr ""
-#: builtin/clone.c:888
+#: builtin/clone.c:906
#, c-format
msgid "Don't know how to clone %s"
msgstr ""
-#: builtin/clone.c:939 builtin/clone.c:947
+#: builtin/clone.c:957 builtin/clone.c:965
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr ""
-#: builtin/clone.c:950
+#: builtin/clone.c:968
msgid "You appear to have cloned an empty repository."
msgstr ""
@@ -4126,7 +4170,7 @@ msgstr ""
msgid "show branch information"
msgstr ""
-#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:460
+#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507
msgid "machine-readable output"
msgstr ""
@@ -4205,7 +4249,7 @@ msgstr ""
msgid "override author for commit"
msgstr ""
-#: builtin/commit.c:1458 builtin/gc.c:260
+#: builtin/commit.c:1458 builtin/gc.c:261
msgid "date"
msgstr ""
@@ -4213,7 +4257,7 @@ msgstr ""
msgid "override date for commit"
msgstr ""
-#: builtin/commit.c:1459 builtin/merge.c:223 builtin/notes.c:405
+#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405
#: builtin/notes.c:562 builtin/tag.c:455
msgid "message"
msgstr ""
@@ -4266,11 +4310,11 @@ msgstr ""
msgid "include status in commit message template"
msgstr ""
-#: builtin/commit.c:1470 builtin/merge.c:230 builtin/tag.c:461
+#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461
msgid "key id"
msgstr ""
-#: builtin/commit.c:1471 builtin/merge.c:231
+#: builtin/commit.c:1471 builtin/merge.c:224
msgid "GPG sign commit"
msgstr ""
@@ -4327,7 +4371,7 @@ msgstr ""
msgid "could not parse HEAD commit"
msgstr ""
-#: builtin/commit.c:1567 builtin/merge.c:525
+#: builtin/commit.c:1567 builtin/merge.c:518
#, c-format
msgid "could not open '%s' for reading"
msgstr ""
@@ -4346,29 +4390,29 @@ msgstr ""
msgid "could not read commit message: %s"
msgstr ""
-#: builtin/commit.c:1614
+#: builtin/commit.c:1611
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr ""
-#: builtin/commit.c:1619
+#: builtin/commit.c:1616
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr ""
-#: builtin/commit.c:1634 builtin/merge.c:861 builtin/merge.c:886
+#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879
msgid "failed to write commit object"
msgstr ""
-#: builtin/commit.c:1655
+#: builtin/commit.c:1652
msgid "cannot lock HEAD ref"
msgstr ""
-#: builtin/commit.c:1659
+#: builtin/commit.c:1656
msgid "cannot update HEAD ref"
msgstr ""
-#: builtin/commit.c:1670
+#: builtin/commit.c:1667
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full or quota is\n"
@@ -4621,7 +4665,7 @@ msgstr ""
msgid "only consider tags matching <pattern>"
msgstr ""
-#: builtin/describe.c:423 builtin/name-rev.c:322
+#: builtin/describe.c:423 builtin/name-rev.c:321
msgid "show abbreviated commit object as fallback"
msgstr ""
@@ -4645,31 +4689,31 @@ msgstr ""
msgid "--dirty is incompatible with commit-ishes"
msgstr ""
-#: builtin/diff.c:79
+#: builtin/diff.c:85
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr ""
-#: builtin/diff.c:230
+#: builtin/diff.c:236
#, c-format
msgid "invalid option: %s"
msgstr ""
-#: builtin/diff.c:307
+#: builtin/diff.c:357
msgid "Not a git repository"
msgstr ""
-#: builtin/diff.c:350
+#: builtin/diff.c:400
#, c-format
msgid "invalid object '%s' given."
msgstr ""
-#: builtin/diff.c:359
+#: builtin/diff.c:409
#, c-format
msgid "more than two blobs given: '%s'"
msgstr ""
-#: builtin/diff.c:366
+#: builtin/diff.c:416
#, c-format
msgid "unhandled object '%s' given."
msgstr ""
@@ -4730,230 +4774,239 @@ msgstr ""
msgid "git fetch --all [<options>]"
msgstr ""
-#: builtin/fetch.c:74
+#: builtin/fetch.c:75
msgid "fetch from all remotes"
msgstr ""
-#: builtin/fetch.c:76
+#: builtin/fetch.c:77
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr ""
-#: builtin/fetch.c:78
+#: builtin/fetch.c:79
msgid "path to upload pack on remote end"
msgstr ""
-#: builtin/fetch.c:79
+#: builtin/fetch.c:80
msgid "force overwrite of local branch"
msgstr ""
-#: builtin/fetch.c:81
+#: builtin/fetch.c:82
msgid "fetch from multiple remotes"
msgstr ""
-#: builtin/fetch.c:83
+#: builtin/fetch.c:84
msgid "fetch all tags and associated objects"
msgstr ""
-#: builtin/fetch.c:85
+#: builtin/fetch.c:86
msgid "do not fetch all tags (--no-tags)"
msgstr ""
-#: builtin/fetch.c:87
+#: builtin/fetch.c:88
msgid "prune remote-tracking branches no longer on remote"
msgstr ""
-#: builtin/fetch.c:88
+#: builtin/fetch.c:89
msgid "on-demand"
msgstr ""
-#: builtin/fetch.c:89
+#: builtin/fetch.c:90
msgid "control recursive fetching of submodules"
msgstr ""
-#: builtin/fetch.c:93
+#: builtin/fetch.c:94
msgid "keep downloaded pack"
msgstr ""
-#: builtin/fetch.c:95
+#: builtin/fetch.c:96
msgid "allow updating of HEAD ref"
msgstr ""
-#: builtin/fetch.c:98
+#: builtin/fetch.c:99
msgid "deepen history of shallow clone"
msgstr ""
-#: builtin/fetch.c:100
+#: builtin/fetch.c:101
msgid "convert to a complete repository"
msgstr ""
-#: builtin/fetch.c:102 builtin/log.c:1197
+#: builtin/fetch.c:103 builtin/log.c:1197
msgid "dir"
msgstr ""
-#: builtin/fetch.c:103
+#: builtin/fetch.c:104
msgid "prepend this to submodule path output"
msgstr ""
-#: builtin/fetch.c:106
+#: builtin/fetch.c:107
msgid "default mode for recursion"
msgstr ""
-#: builtin/fetch.c:236
+#: builtin/fetch.c:109
+msgid "accept refs that update .git/shallow"
+msgstr ""
+
+#: builtin/fetch.c:347
msgid "Couldn't find remote ref HEAD"
msgstr ""
-#: builtin/fetch.c:290
+#: builtin/fetch.c:411
#, c-format
msgid "object %s not found"
msgstr ""
-#: builtin/fetch.c:295
+#: builtin/fetch.c:416
msgid "[up to date]"
msgstr ""
-#: builtin/fetch.c:309
+#: builtin/fetch.c:430
#, c-format
msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
msgstr ""
-#: builtin/fetch.c:310 builtin/fetch.c:396
+#: builtin/fetch.c:431 builtin/fetch.c:517
msgid "[rejected]"
msgstr ""
-#: builtin/fetch.c:321
+#: builtin/fetch.c:442
msgid "[tag update]"
msgstr ""
-#: builtin/fetch.c:323 builtin/fetch.c:358 builtin/fetch.c:376
+#: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497
msgid " (unable to update local ref)"
msgstr ""
-#: builtin/fetch.c:341
+#: builtin/fetch.c:462
msgid "[new tag]"
msgstr ""
-#: builtin/fetch.c:344
+#: builtin/fetch.c:465
msgid "[new branch]"
msgstr ""
-#: builtin/fetch.c:347
+#: builtin/fetch.c:468
msgid "[new ref]"
msgstr ""
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "unable to update local ref"
msgstr ""
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "forced update"
msgstr ""
-#: builtin/fetch.c:398
+#: builtin/fetch.c:519
msgid "(non-fast-forward)"
msgstr ""
-#: builtin/fetch.c:429 builtin/fetch.c:735
+#: builtin/fetch.c:552 builtin/fetch.c:785
#, c-format
msgid "cannot open %s: %s\n"
msgstr ""
-#: builtin/fetch.c:438
+#: builtin/fetch.c:561
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr ""
-#: builtin/fetch.c:537
+#: builtin/fetch.c:579
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr ""
+
+#: builtin/fetch.c:667 builtin/fetch.c:750
#, c-format
msgid "From %.*s\n"
msgstr ""
-#: builtin/fetch.c:548
+#: builtin/fetch.c:678
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
" 'git remote prune %s' to remove any old, conflicting branches"
msgstr ""
-#: builtin/fetch.c:598
+#: builtin/fetch.c:730
#, c-format
msgid " (%s will become dangling)"
msgstr ""
-#: builtin/fetch.c:599
+#: builtin/fetch.c:731
#, c-format
msgid " (%s has become dangling)"
msgstr ""
-#: builtin/fetch.c:606
+#: builtin/fetch.c:755
msgid "[deleted]"
msgstr ""
-#: builtin/fetch.c:607 builtin/remote.c:1055
+#: builtin/fetch.c:756 builtin/remote.c:1050
msgid "(none)"
msgstr ""
-#: builtin/fetch.c:725
+#: builtin/fetch.c:775
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr ""
-#: builtin/fetch.c:744
+#: builtin/fetch.c:794
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr ""
-#: builtin/fetch.c:747
+#: builtin/fetch.c:797
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr ""
-#: builtin/fetch.c:801
+#: builtin/fetch.c:853
#, c-format
msgid "Don't know how to fetch from %s"
msgstr ""
-#: builtin/fetch.c:976
+#: builtin/fetch.c:1015
#, c-format
msgid "Fetching %s\n"
msgstr ""
-#: builtin/fetch.c:978 builtin/remote.c:100
+#: builtin/fetch.c:1017 builtin/remote.c:90
#, c-format
msgid "Could not fetch %s"
msgstr ""
-#: builtin/fetch.c:997
+#: builtin/fetch.c:1036
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
msgstr ""
-#: builtin/fetch.c:1020
+#: builtin/fetch.c:1059
msgid "You need to specify a tag name."
msgstr ""
-#: builtin/fetch.c:1068
+#: builtin/fetch.c:1107
msgid "--depth and --unshallow cannot be used together"
msgstr ""
-#: builtin/fetch.c:1070
+#: builtin/fetch.c:1109
msgid "--unshallow on a complete repository does not make sense"
msgstr ""
-#: builtin/fetch.c:1089
+#: builtin/fetch.c:1132
msgid "fetch --all does not take a repository argument"
msgstr ""
-#: builtin/fetch.c:1091
+#: builtin/fetch.c:1134
msgid "fetch --all does not make sense with refspecs"
msgstr ""
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1145
#, c-format
msgid "No such remote or remote group: %s"
msgstr ""
-#: builtin/fetch.c:1110
+#: builtin/fetch.c:1153
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr ""
@@ -4962,8 +5015,9 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
msgstr ""
#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702
-#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:178
-#: builtin/tag.c:446 parse-options.h:135 parse-options.h:245
+#: builtin/merge.c:196 builtin/repack.c:160 builtin/repack.c:164
+#: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:446
+#: parse-options.h:135 parse-options.h:242
msgid "n"
msgstr ""
@@ -4987,43 +5041,43 @@ msgstr ""
msgid "file to read from"
msgstr ""
-#: builtin/for-each-ref.c:995
+#: builtin/for-each-ref.c:1063
msgid "git for-each-ref [options] [<pattern>]"
msgstr ""
-#: builtin/for-each-ref.c:1010
+#: builtin/for-each-ref.c:1078
msgid "quote placeholders suitably for shells"
msgstr ""
-#: builtin/for-each-ref.c:1012
+#: builtin/for-each-ref.c:1080
msgid "quote placeholders suitably for perl"
msgstr ""
-#: builtin/for-each-ref.c:1014
+#: builtin/for-each-ref.c:1082
msgid "quote placeholders suitably for python"
msgstr ""
-#: builtin/for-each-ref.c:1016
+#: builtin/for-each-ref.c:1084
msgid "quote placeholders suitably for tcl"
msgstr ""
-#: builtin/for-each-ref.c:1019
+#: builtin/for-each-ref.c:1087
msgid "show only <n> matched refs"
msgstr ""
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088 builtin/replace.c:177
msgid "format"
msgstr ""
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088
msgid "format to use for the output"
msgstr ""
-#: builtin/for-each-ref.c:1021
+#: builtin/for-each-ref.c:1089
msgid "key"
msgstr ""
-#: builtin/for-each-ref.c:1022
+#: builtin/for-each-ref.c:1090
msgid "field name to sort on"
msgstr ""
@@ -5067,41 +5121,41 @@ msgstr ""
msgid "write dangling objects in .git/lost-found"
msgstr ""
-#: builtin/fsck.c:623 builtin/prune.c:134
+#: builtin/fsck.c:623 builtin/prune.c:144
msgid "show progress"
msgstr ""
-#: builtin/gc.c:23
+#: builtin/gc.c:24
msgid "git gc [options]"
msgstr ""
-#: builtin/gc.c:79
+#: builtin/gc.c:80
#, c-format
msgid "Invalid %s: '%s'"
msgstr ""
-#: builtin/gc.c:106
+#: builtin/gc.c:107
#, c-format
msgid "insanely long object directory %.*s"
msgstr ""
-#: builtin/gc.c:261
+#: builtin/gc.c:262
msgid "prune unreferenced objects"
msgstr ""
-#: builtin/gc.c:263
+#: builtin/gc.c:264
msgid "be more thorough (increased runtime)"
msgstr ""
-#: builtin/gc.c:264
+#: builtin/gc.c:265
msgid "enable auto-gc mode"
msgstr ""
-#: builtin/gc.c:265
+#: builtin/gc.c:266
msgid "force running gc even if there may be another gc running"
msgstr ""
-#: builtin/gc.c:305
+#: builtin/gc.c:306
#, c-format
msgid ""
"Auto packing the repository for optimum performance. You may also\n"
@@ -5109,13 +5163,13 @@ msgid ""
msgstr ""
#. be quiet on --auto
-#: builtin/gc.c:315
+#: builtin/gc.c:316
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
msgstr ""
-#: builtin/gc.c:340
+#: builtin/gc.c:341
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
@@ -5445,57 +5499,57 @@ msgid ""
"Please consider using 'man.<tool>.path' instead."
msgstr ""
-#: builtin/help.c:349
+#: builtin/help.c:353
#, c-format
msgid "'%s': unknown man viewer."
msgstr ""
-#: builtin/help.c:366
+#: builtin/help.c:370
msgid "no man viewer handled the request"
msgstr ""
-#: builtin/help.c:374
+#: builtin/help.c:378
msgid "no info viewer handled the request"
msgstr ""
-#: builtin/help.c:420
+#: builtin/help.c:424
msgid "Defining attributes per path"
msgstr ""
-#: builtin/help.c:421
+#: builtin/help.c:425
msgid "A Git glossary"
msgstr ""
-#: builtin/help.c:422
+#: builtin/help.c:426
msgid "Specifies intentionally untracked files to ignore"
msgstr ""
-#: builtin/help.c:423
+#: builtin/help.c:427
msgid "Defining submodule properties"
msgstr ""
-#: builtin/help.c:424
+#: builtin/help.c:428
msgid "Specifying revisions and ranges for Git"
msgstr ""
-#: builtin/help.c:425
+#: builtin/help.c:429
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr ""
-#: builtin/help.c:426
+#: builtin/help.c:430
msgid "An overview of recommended workflows with Git"
msgstr ""
-#: builtin/help.c:438
+#: builtin/help.c:442
msgid "The common Git guides are:\n"
msgstr ""
-#: builtin/help.c:460 builtin/help.c:476
+#: builtin/help.c:463 builtin/help.c:480
#, c-format
msgid "usage: %s%s"
msgstr ""
-#: builtin/help.c:492
+#: builtin/help.c:496
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr ""
@@ -5902,32 +5956,32 @@ msgstr ""
msgid "specify that the git repository is to be shared amongst several users"
msgstr ""
-#: builtin/init-db.c:493 builtin/prune-packed.c:75 builtin/repack.c:155
+#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155
msgid "be quiet"
msgstr ""
-#: builtin/init-db.c:522 builtin/init-db.c:529
+#: builtin/init-db.c:525 builtin/init-db.c:530
#, c-format
msgid "cannot mkdir %s"
msgstr ""
-#: builtin/init-db.c:533
+#: builtin/init-db.c:534
#, c-format
msgid "cannot chdir to %s"
msgstr ""
-#: builtin/init-db.c:555
+#: builtin/init-db.c:556
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
"dir=<directory>)"
msgstr ""
-#: builtin/init-db.c:579
+#: builtin/init-db.c:580
msgid "Cannot access current working directory"
msgstr ""
-#: builtin/init-db.c:586
+#: builtin/init-db.c:587
#, c-format
msgid "Cannot access work tree '%s'"
msgstr ""
@@ -6349,148 +6403,148 @@ msgstr ""
msgid "Available custom strategies are:"
msgstr ""
-#: builtin/merge.c:198
+#: builtin/merge.c:191
msgid "do not show a diffstat at the end of the merge"
msgstr ""
-#: builtin/merge.c:201
+#: builtin/merge.c:194
msgid "show a diffstat at the end of the merge"
msgstr ""
-#: builtin/merge.c:202
+#: builtin/merge.c:195
msgid "(synonym to --stat)"
msgstr ""
-#: builtin/merge.c:204
+#: builtin/merge.c:197
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
-#: builtin/merge.c:207
+#: builtin/merge.c:200
msgid "create a single commit instead of doing a merge"
msgstr ""
-#: builtin/merge.c:209
+#: builtin/merge.c:202
msgid "perform a commit if the merge succeeds (default)"
msgstr ""
-#: builtin/merge.c:211
+#: builtin/merge.c:204
msgid "edit message before committing"
msgstr ""
-#: builtin/merge.c:212
+#: builtin/merge.c:205
msgid "allow fast-forward (default)"
msgstr ""
-#: builtin/merge.c:214
+#: builtin/merge.c:207
msgid "abort if fast-forward is not possible"
msgstr ""
-#: builtin/merge.c:218
+#: builtin/merge.c:211
msgid "Verify that the named commit has a valid GPG signature"
msgstr ""
-#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:89
+#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89
msgid "strategy"
msgstr ""
-#: builtin/merge.c:220
+#: builtin/merge.c:213
msgid "merge strategy to use"
msgstr ""
-#: builtin/merge.c:221
+#: builtin/merge.c:214
msgid "option=value"
msgstr ""
-#: builtin/merge.c:222
+#: builtin/merge.c:215
msgid "option for selected merge strategy"
msgstr ""
-#: builtin/merge.c:224
+#: builtin/merge.c:217
msgid "merge commit message (for a non-fast-forward merge)"
msgstr ""
-#: builtin/merge.c:228
+#: builtin/merge.c:221
msgid "abort the current in-progress merge"
msgstr ""
-#: builtin/merge.c:257
+#: builtin/merge.c:250
msgid "could not run stash."
msgstr ""
-#: builtin/merge.c:262
+#: builtin/merge.c:255
msgid "stash failed"
msgstr ""
-#: builtin/merge.c:267
+#: builtin/merge.c:260
#, c-format
msgid "not a valid object: %s"
msgstr ""
-#: builtin/merge.c:286 builtin/merge.c:303
+#: builtin/merge.c:279 builtin/merge.c:296
msgid "read-tree failed"
msgstr ""
-#: builtin/merge.c:333
+#: builtin/merge.c:326
msgid " (nothing to squash)"
msgstr ""
-#: builtin/merge.c:346
+#: builtin/merge.c:339
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr ""
-#: builtin/merge.c:378
+#: builtin/merge.c:371
msgid "Writing SQUASH_MSG"
msgstr ""
-#: builtin/merge.c:380
+#: builtin/merge.c:373
msgid "Finishing SQUASH_MSG"
msgstr ""
-#: builtin/merge.c:403
+#: builtin/merge.c:396
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr ""
-#: builtin/merge.c:453
+#: builtin/merge.c:446
#, c-format
msgid "'%s' does not point to a commit"
msgstr ""
-#: builtin/merge.c:565
+#: builtin/merge.c:558
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr ""
-#: builtin/merge.c:657
+#: builtin/merge.c:650
msgid "git write-tree failed to write a tree"
msgstr ""
-#: builtin/merge.c:685
+#: builtin/merge.c:678
msgid "Not handling anything other than two heads merge."
msgstr ""
-#: builtin/merge.c:699
+#: builtin/merge.c:692
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr ""
-#: builtin/merge.c:713
+#: builtin/merge.c:706
#, c-format
msgid "unable to write %s"
msgstr ""
-#: builtin/merge.c:802
+#: builtin/merge.c:795
#, c-format
msgid "Could not read from '%s'"
msgstr ""
-#: builtin/merge.c:811
+#: builtin/merge.c:804
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
-#: builtin/merge.c:817
+#: builtin/merge.c:810
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -6500,193 +6554,201 @@ msgid ""
"the commit.\n"
msgstr ""
-#: builtin/merge.c:841
+#: builtin/merge.c:834
msgid "Empty commit message."
msgstr ""
-#: builtin/merge.c:853
+#: builtin/merge.c:846
#, c-format
msgid "Wonderful.\n"
msgstr ""
-#: builtin/merge.c:918
+#: builtin/merge.c:911
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
-#: builtin/merge.c:934
+#: builtin/merge.c:927
#, c-format
msgid "'%s' is not a commit"
msgstr ""
-#: builtin/merge.c:975
+#: builtin/merge.c:968
msgid "No current branch."
msgstr ""
-#: builtin/merge.c:977
+#: builtin/merge.c:970
msgid "No remote for the current branch."
msgstr ""
-#: builtin/merge.c:979
+#: builtin/merge.c:972
msgid "No default upstream defined for the current branch."
msgstr ""
-#: builtin/merge.c:984
+#: builtin/merge.c:977
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr ""
-#: builtin/merge.c:1140
+#: builtin/merge.c:1133
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr ""
-#: builtin/merge.c:1156 git-pull.sh:31
+#: builtin/merge.c:1149 git-pull.sh:31
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you can merge."
msgstr ""
-#: builtin/merge.c:1159 git-pull.sh:34
+#: builtin/merge.c:1152 git-pull.sh:34
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr ""
-#: builtin/merge.c:1163
+#: builtin/merge.c:1156
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you can merge."
msgstr ""
-#: builtin/merge.c:1166
+#: builtin/merge.c:1159
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr ""
-#: builtin/merge.c:1175
+#: builtin/merge.c:1168
msgid "You cannot combine --squash with --no-ff."
msgstr ""
-#: builtin/merge.c:1184
+#: builtin/merge.c:1177
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
-#: builtin/merge.c:1216
+#: builtin/merge.c:1209
msgid "Can merge only exactly one commit into empty head"
msgstr ""
-#: builtin/merge.c:1219
+#: builtin/merge.c:1212
msgid "Squash commit into empty head not supported yet"
msgstr ""
-#: builtin/merge.c:1221
+#: builtin/merge.c:1214
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr ""
-#: builtin/merge.c:1226
+#: builtin/merge.c:1219
#, c-format
msgid "%s - not something we can merge"
msgstr ""
-#: builtin/merge.c:1277
+#: builtin/merge.c:1270
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
-#: builtin/merge.c:1280
+#: builtin/merge.c:1273
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr ""
#. 'N'
-#: builtin/merge.c:1283
+#: builtin/merge.c:1276
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr ""
-#: builtin/merge.c:1286
+#: builtin/merge.c:1279
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr ""
-#: builtin/merge.c:1370
+#: builtin/merge.c:1363
#, c-format
msgid "Updating %s..%s\n"
msgstr ""
-#: builtin/merge.c:1409
+#: builtin/merge.c:1402
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr ""
-#: builtin/merge.c:1416
+#: builtin/merge.c:1409
#, c-format
msgid "Nope.\n"
msgstr ""
-#: builtin/merge.c:1448
+#: builtin/merge.c:1441
msgid "Not possible to fast-forward, aborting."
msgstr ""
-#: builtin/merge.c:1471 builtin/merge.c:1550
+#: builtin/merge.c:1464 builtin/merge.c:1543
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr ""
-#: builtin/merge.c:1475
+#: builtin/merge.c:1468
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr ""
-#: builtin/merge.c:1541
+#: builtin/merge.c:1534
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr ""
-#: builtin/merge.c:1543
+#: builtin/merge.c:1536
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr ""
-#: builtin/merge.c:1552
+#: builtin/merge.c:1545
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr ""
-#: builtin/merge.c:1564
+#: builtin/merge.c:1557
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
-#: builtin/merge-base.c:26
+#: builtin/merge-base.c:29
msgid "git merge-base [-a|--all] <commit> <commit>..."
msgstr ""
-#: builtin/merge-base.c:27
+#: builtin/merge-base.c:30
msgid "git merge-base [-a|--all] --octopus <commit>..."
msgstr ""
-#: builtin/merge-base.c:28
+#: builtin/merge-base.c:31
msgid "git merge-base --independent <commit>..."
msgstr ""
-#: builtin/merge-base.c:29
+#: builtin/merge-base.c:32
msgid "git merge-base --is-ancestor <commit> <commit>"
msgstr ""
-#: builtin/merge-base.c:98
+#: builtin/merge-base.c:33
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr ""
+
+#: builtin/merge-base.c:214
msgid "output all common ancestors"
msgstr ""
-#: builtin/merge-base.c:99
+#: builtin/merge-base.c:216
msgid "find ancestors for a single n-way merge"
msgstr ""
-#: builtin/merge-base.c:100
+#: builtin/merge-base.c:218
msgid "list revs not reachable from others"
msgstr ""
-#: builtin/merge-base.c:102
+#: builtin/merge-base.c:220
msgid "is the first one ancestor of the other?"
msgstr ""
+#: builtin/merge-base.c:222
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr ""
+
#: builtin/merge-file.c:8
msgid ""
"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
@@ -6745,122 +6807,126 @@ msgstr ""
msgid "git mv [options] <source>... <destination>"
msgstr ""
-#: builtin/mv.c:67
+#: builtin/mv.c:71
msgid "force move/rename even if target exists"
msgstr ""
-#: builtin/mv.c:68
+#: builtin/mv.c:72
msgid "skip move/rename errors"
msgstr ""
-#: builtin/mv.c:113
+#: builtin/mv.c:122
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr ""
-#: builtin/mv.c:117
+#: builtin/mv.c:126
msgid "bad source"
msgstr ""
-#: builtin/mv.c:120
+#: builtin/mv.c:129
msgid "can not move directory into itself"
msgstr ""
-#: builtin/mv.c:123
+#: builtin/mv.c:132
msgid "cannot move directory over file"
msgstr ""
-#: builtin/mv.c:129
+#: builtin/mv.c:138
#, c-format
msgid "Huh? Directory %s is in index and no submodule?"
msgstr ""
-#: builtin/mv.c:131 builtin/rm.c:318
+#: builtin/mv.c:140 builtin/rm.c:318
msgid "Please, stage your changes to .gitmodules or stash them to proceed"
msgstr ""
-#: builtin/mv.c:147
+#: builtin/mv.c:156
#, c-format
msgid "Huh? %.*s is in index?"
msgstr ""
-#: builtin/mv.c:159
+#: builtin/mv.c:168
msgid "source directory is empty"
msgstr ""
-#: builtin/mv.c:191
+#: builtin/mv.c:200
msgid "not under version control"
msgstr ""
-#: builtin/mv.c:193
+#: builtin/mv.c:202
msgid "destination exists"
msgstr ""
-#: builtin/mv.c:201
+#: builtin/mv.c:210
#, c-format
msgid "overwriting '%s'"
msgstr ""
-#: builtin/mv.c:204
+#: builtin/mv.c:213
msgid "Cannot overwrite"
msgstr ""
-#: builtin/mv.c:207
+#: builtin/mv.c:216
msgid "multiple sources for the same target"
msgstr ""
-#: builtin/mv.c:222
+#: builtin/mv.c:218
+msgid "destination directory does not exist"
+msgstr ""
+
+#: builtin/mv.c:233
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr ""
-#: builtin/mv.c:232
+#: builtin/mv.c:243
#, c-format
msgid "Renaming %s to %s\n"
msgstr ""
-#: builtin/mv.c:235 builtin/remote.c:731 builtin/repack.c:330
+#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328
#, c-format
msgid "renaming '%s' failed"
msgstr ""
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [options] <commit>..."
msgstr ""
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [options] --all"
msgstr ""
-#: builtin/name-rev.c:261
+#: builtin/name-rev.c:260
msgid "git name-rev [options] --stdin"
msgstr ""
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "print only names (no SHA-1)"
msgstr ""
-#: builtin/name-rev.c:314
+#: builtin/name-rev.c:313
msgid "only use tags to name the commits"
msgstr ""
-#: builtin/name-rev.c:316
+#: builtin/name-rev.c:315
msgid "only use refs matching <pattern>"
msgstr ""
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "list all commits reachable from all refs"
msgstr ""
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "read from stdin"
msgstr ""
-#: builtin/name-rev.c:320
+#: builtin/name-rev.c:319
msgid "allow to print `undefined` names (default)"
msgstr ""
-#: builtin/name-rev.c:326
+#: builtin/name-rev.c:325
msgid "dereference tags in the input (internal use)"
msgstr ""
@@ -7169,7 +7235,7 @@ msgstr ""
msgid "use notes from <notes_ref>"
msgstr ""
-#: builtin/notes.c:974 builtin/remote.c:1598
+#: builtin/notes.c:974 builtin/remote.c:1593
#, c-format
msgid "Unknown subcommand: %s"
msgstr ""
@@ -7187,143 +7253,143 @@ msgstr ""
msgid "deflate error (%d)"
msgstr ""
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2396
#, c-format
msgid "unsupported index version %s"
msgstr ""
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2400
#, c-format
msgid "bad index version '%s'"
msgstr ""
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2423
#, c-format
msgid "option %s does not accept negative form"
msgstr ""
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2427
#, c-format
msgid "unable to parse value '%s' for option %s"
msgstr ""
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2446
msgid "do not show progress meter"
msgstr ""
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2448
msgid "show progress meter"
msgstr ""
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2450
msgid "show progress meter during object writing phase"
msgstr ""
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2453
msgid "similar to --all-progress when progress meter is shown"
msgstr ""
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2454
msgid "version[,offset]"
msgstr ""
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2455
msgid "write the pack index file in the specified idx format version"
msgstr ""
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2458
msgid "maximum size of each output pack file"
msgstr ""
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2460
msgid "ignore borrowed objects from alternate object store"
msgstr ""
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2462
msgid "ignore packed objects"
msgstr ""
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2464
msgid "limit pack window by objects"
msgstr ""
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2466
msgid "limit pack window by memory in addition to object limit"
msgstr ""
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2468
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr ""
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2470
msgid "reuse existing deltas"
msgstr ""
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2472
msgid "reuse existing objects"
msgstr ""
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2474
msgid "use OFS_DELTA objects"
msgstr ""
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2476
msgid "use threads when searching for best delta matches"
msgstr ""
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2478
msgid "do not create an empty pack output"
msgstr ""
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2480
msgid "read revision arguments from standard input"
msgstr ""
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2482
msgid "limit the objects to those that are not yet packed"
msgstr ""
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2485
msgid "include objects reachable from any reference"
msgstr ""
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2488
msgid "include objects referred by reflog entries"
msgstr ""
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2491
msgid "output pack to stdout"
msgstr ""
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2493
msgid "include tag objects that refer to objects to be packed"
msgstr ""
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2495
msgid "keep unreachable objects"
msgstr ""
-#: builtin/pack-objects.c:2498 parse-options.h:143
+#: builtin/pack-objects.c:2496 parse-options.h:143
msgid "time"
msgstr ""
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2497
msgid "unpack unreachable objects newer than <time>"
msgstr ""
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2500
msgid "create thin packs"
msgstr ""
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2502
msgid "ignore packs that have companion .keep file"
msgstr ""
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2504
msgid "pack compression level"
msgstr ""
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2506
msgid "do not hide commits by grafts"
msgstr ""
@@ -7347,15 +7413,15 @@ msgstr ""
msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
msgstr ""
-#: builtin/prune.c:132
+#: builtin/prune.c:142
msgid "do not remove, show only"
msgstr ""
-#: builtin/prune.c:133
+#: builtin/prune.c:143
msgid "report pruned objects"
msgstr ""
-#: builtin/prune.c:136
+#: builtin/prune.c:146
msgid "expire objects older than <time>"
msgstr ""
@@ -7363,21 +7429,21 @@ msgstr ""
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr ""
-#: builtin/push.c:47
+#: builtin/push.c:86
msgid "tag shorthand without <tag>"
msgstr ""
-#: builtin/push.c:66
+#: builtin/push.c:96
msgid "--delete only accepts plain target ref names"
msgstr ""
-#: builtin/push.c:101
+#: builtin/push.c:141
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
msgstr ""
-#: builtin/push.c:104
+#: builtin/push.c:144
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -7392,7 +7458,7 @@ msgid ""
"%s"
msgstr ""
-#: builtin/push.c:119
+#: builtin/push.c:159
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -7402,7 +7468,7 @@ msgid ""
" git push %s HEAD:<name-of-remote-branch>\n"
msgstr ""
-#: builtin/push.c:133
+#: builtin/push.c:173
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -7411,12 +7477,12 @@ msgid ""
" git push --set-upstream %s %s\n"
msgstr ""
-#: builtin/push.c:141
+#: builtin/push.c:181
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
msgstr ""
-#: builtin/push.c:144
+#: builtin/push.c:184
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -7424,7 +7490,7 @@ msgid ""
"to update which remote branch."
msgstr ""
-#: builtin/push.c:167
+#: builtin/push.c:207
msgid ""
"push.default is unset; its implicit value is changing in\n"
"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7436,18 +7502,25 @@ msgid ""
"\n"
" git config --global push.default simple\n"
"\n"
+"When push.default is set to 'matching', git will push local branches\n"
+"to the remote branches that already exist with the same name.\n"
+"\n"
+"In Git 2.0, Git will default to the more conservative 'simple'\n"
+"behavior, which only pushes the current branch to the corresponding\n"
+"remote branch that 'git pull' uses to update the current branch.\n"
+"\n"
"See 'git help config' and search for 'push.default' for further "
"information.\n"
"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
"'current' instead of 'simple' if you sometimes use older versions of Git)"
msgstr ""
-#: builtin/push.c:227
+#: builtin/push.c:274
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr ""
-#: builtin/push.c:234
+#: builtin/push.c:281
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -7455,7 +7528,7 @@ msgid ""
"See the 'Note about fast-forwards' in 'git push --help' for details."
msgstr ""
-#: builtin/push.c:240
+#: builtin/push.c:287
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. If you did not intend to push that branch, you may want to\n"
@@ -7463,7 +7536,7 @@ msgid ""
"to 'simple', 'current' or 'upstream' to push only the current branch."
msgstr ""
-#: builtin/push.c:246
+#: builtin/push.c:293
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -7471,7 +7544,7 @@ msgid ""
"See the 'Note about fast-forwards' in 'git push --help' for details."
msgstr ""
-#: builtin/push.c:252
+#: builtin/push.c:299
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -7480,33 +7553,33 @@ msgid ""
"See the 'Note about fast-forwards' in 'git push --help' for details."
msgstr ""
-#: builtin/push.c:259
+#: builtin/push.c:306
msgid "Updates were rejected because the tag already exists in the remote."
msgstr ""
-#: builtin/push.c:262
+#: builtin/push.c:309
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
"without using the '--force' option.\n"
msgstr ""
-#: builtin/push.c:328
+#: builtin/push.c:375
#, c-format
msgid "Pushing to %s\n"
msgstr ""
-#: builtin/push.c:332
+#: builtin/push.c:379
#, c-format
msgid "failed to push some refs to '%s'"
msgstr ""
-#: builtin/push.c:365
+#: builtin/push.c:412
#, c-format
msgid "bad repository '%s'"
msgstr ""
-#: builtin/push.c:366
+#: builtin/push.c:413
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -7519,95 +7592,95 @@ msgid ""
" git push <name>\n"
msgstr ""
-#: builtin/push.c:381
+#: builtin/push.c:428
msgid "--all and --tags are incompatible"
msgstr ""
-#: builtin/push.c:382
+#: builtin/push.c:429
msgid "--all can't be combined with refspecs"
msgstr ""
-#: builtin/push.c:387
+#: builtin/push.c:434
msgid "--mirror and --tags are incompatible"
msgstr ""
-#: builtin/push.c:388
+#: builtin/push.c:435
msgid "--mirror can't be combined with refspecs"
msgstr ""
-#: builtin/push.c:393
+#: builtin/push.c:440
msgid "--all and --mirror are incompatible"
msgstr ""
-#: builtin/push.c:453
+#: builtin/push.c:500
msgid "repository"
msgstr ""
-#: builtin/push.c:454
+#: builtin/push.c:501
msgid "push all refs"
msgstr ""
-#: builtin/push.c:455
+#: builtin/push.c:502
msgid "mirror all refs"
msgstr ""
-#: builtin/push.c:457
+#: builtin/push.c:504
msgid "delete refs"
msgstr ""
-#: builtin/push.c:458
+#: builtin/push.c:505
msgid "push tags (can't be used with --all or --mirror)"
msgstr ""
-#: builtin/push.c:461
+#: builtin/push.c:508
msgid "force updates"
msgstr ""
-#: builtin/push.c:463
+#: builtin/push.c:510
msgid "refname>:<expect"
msgstr ""
-#: builtin/push.c:464
+#: builtin/push.c:511
msgid "require old value of ref to be at this value"
msgstr ""
-#: builtin/push.c:466
+#: builtin/push.c:513
msgid "check"
msgstr ""
-#: builtin/push.c:467
+#: builtin/push.c:514
msgid "control recursive pushing of submodules"
msgstr ""
-#: builtin/push.c:469
+#: builtin/push.c:516
msgid "use thin pack"
msgstr ""
-#: builtin/push.c:470 builtin/push.c:471
+#: builtin/push.c:517 builtin/push.c:518
msgid "receive pack program"
msgstr ""
-#: builtin/push.c:472
+#: builtin/push.c:519
msgid "set upstream for git pull/status"
msgstr ""
-#: builtin/push.c:475
+#: builtin/push.c:522
msgid "prune locally removed refs"
msgstr ""
-#: builtin/push.c:477
+#: builtin/push.c:524
msgid "bypass pre-push hook"
msgstr ""
-#: builtin/push.c:478
+#: builtin/push.c:525
msgid "push missing but relevant tags"
msgstr ""
-#: builtin/push.c:488
+#: builtin/push.c:535
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr ""
-#: builtin/push.c:490
+#: builtin/push.c:537
msgid "--delete doesn't make sense without any refs"
msgstr ""
@@ -7692,191 +7765,191 @@ msgstr ""
msgid "'%s' is not a valid timestamp"
msgstr ""
-#: builtin/remote.c:11
+#: builtin/remote.c:12
msgid "git remote [-v | --verbose]"
msgstr ""
-#: builtin/remote.c:12
+#: builtin/remote.c:13
msgid ""
"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <name> <url>"
msgstr ""
-#: builtin/remote.c:13 builtin/remote.c:32
+#: builtin/remote.c:14 builtin/remote.c:33
msgid "git remote rename <old> <new>"
msgstr ""
-#: builtin/remote.c:14 builtin/remote.c:37
+#: builtin/remote.c:15 builtin/remote.c:38
msgid "git remote remove <name>"
msgstr ""
-#: builtin/remote.c:15
+#: builtin/remote.c:16
msgid "git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"
msgstr ""
-#: builtin/remote.c:16
+#: builtin/remote.c:17
msgid "git remote [-v | --verbose] show [-n] <name>"
msgstr ""
-#: builtin/remote.c:17
+#: builtin/remote.c:18
msgid "git remote prune [-n | --dry-run] <name>"
msgstr ""
-#: builtin/remote.c:18
+#: builtin/remote.c:19
msgid ""
"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
msgstr ""
-#: builtin/remote.c:19
+#: builtin/remote.c:20
msgid "git remote set-branches [--add] <name> <branch>..."
msgstr ""
-#: builtin/remote.c:20 builtin/remote.c:68
+#: builtin/remote.c:21 builtin/remote.c:69
msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
msgstr ""
-#: builtin/remote.c:21 builtin/remote.c:69
+#: builtin/remote.c:22 builtin/remote.c:70
msgid "git remote set-url --add <name> <newurl>"
msgstr ""
-#: builtin/remote.c:22 builtin/remote.c:70
+#: builtin/remote.c:23 builtin/remote.c:71
msgid "git remote set-url --delete <name> <url>"
msgstr ""
-#: builtin/remote.c:27
+#: builtin/remote.c:28
msgid "git remote add [<options>] <name> <url>"
msgstr ""
-#: builtin/remote.c:42
+#: builtin/remote.c:43
msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
msgstr ""
-#: builtin/remote.c:47
+#: builtin/remote.c:48
msgid "git remote set-branches <name> <branch>..."
msgstr ""
-#: builtin/remote.c:48
+#: builtin/remote.c:49
msgid "git remote set-branches --add <name> <branch>..."
msgstr ""
-#: builtin/remote.c:53
+#: builtin/remote.c:54
msgid "git remote show [<options>] <name>"
msgstr ""
-#: builtin/remote.c:58
+#: builtin/remote.c:59
msgid "git remote prune [<options>] <name>"
msgstr ""
-#: builtin/remote.c:63
+#: builtin/remote.c:64
msgid "git remote update [<options>] [<group> | <remote>]..."
msgstr ""
-#: builtin/remote.c:98
+#: builtin/remote.c:88
#, c-format
msgid "Updating %s"
msgstr ""
-#: builtin/remote.c:130
+#: builtin/remote.c:120
msgid ""
"--mirror is dangerous and deprecated; please\n"
"\t use --mirror=fetch or --mirror=push instead"
msgstr ""
-#: builtin/remote.c:147
+#: builtin/remote.c:137
#, c-format
msgid "unknown mirror argument: %s"
msgstr ""
-#: builtin/remote.c:163
+#: builtin/remote.c:153
msgid "fetch the remote branches"
msgstr ""
-#: builtin/remote.c:165
+#: builtin/remote.c:155
msgid "import all tags and associated objects when fetching"
msgstr ""
-#: builtin/remote.c:168
+#: builtin/remote.c:158
msgid "or do not fetch any tag at all (--no-tags)"
msgstr ""
-#: builtin/remote.c:170
+#: builtin/remote.c:160
msgid "branch(es) to track"
msgstr ""
-#: builtin/remote.c:171
+#: builtin/remote.c:161
msgid "master branch"
msgstr ""
-#: builtin/remote.c:172
+#: builtin/remote.c:162
msgid "push|fetch"
msgstr ""
-#: builtin/remote.c:173
+#: builtin/remote.c:163
msgid "set up remote as a mirror to push to or fetch from"
msgstr ""
-#: builtin/remote.c:185
+#: builtin/remote.c:175
msgid "specifying a master branch makes no sense with --mirror"
msgstr ""
-#: builtin/remote.c:187
+#: builtin/remote.c:177
msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr ""
-#: builtin/remote.c:195 builtin/remote.c:646
+#: builtin/remote.c:185 builtin/remote.c:641
#, c-format
msgid "remote %s already exists."
msgstr ""
-#: builtin/remote.c:199 builtin/remote.c:650
+#: builtin/remote.c:189 builtin/remote.c:645
#, c-format
msgid "'%s' is not a valid remote name"
msgstr ""
-#: builtin/remote.c:243
+#: builtin/remote.c:233
#, c-format
msgid "Could not setup master '%s'"
msgstr ""
-#: builtin/remote.c:299
+#: builtin/remote.c:289
#, c-format
msgid "more than one %s"
msgstr ""
-#: builtin/remote.c:339
+#: builtin/remote.c:334
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr ""
-#: builtin/remote.c:440 builtin/remote.c:448
+#: builtin/remote.c:435 builtin/remote.c:443
msgid "(matching)"
msgstr ""
-#: builtin/remote.c:452
+#: builtin/remote.c:447
msgid "(delete)"
msgstr ""
-#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607
+#: builtin/remote.c:590 builtin/remote.c:596 builtin/remote.c:602
#, c-format
msgid "Could not append '%s' to '%s'"
msgstr ""
-#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890
+#: builtin/remote.c:634 builtin/remote.c:787 builtin/remote.c:885
#, c-format
msgid "No such remote: %s"
msgstr ""
-#: builtin/remote.c:656
+#: builtin/remote.c:651
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr ""
-#: builtin/remote.c:662 builtin/remote.c:799
+#: builtin/remote.c:657 builtin/remote.c:794
#, c-format
msgid "Could not remove config section '%s'"
msgstr ""
-#: builtin/remote.c:677
+#: builtin/remote.c:672
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -7884,32 +7957,32 @@ msgid ""
"\tPlease update the configuration manually if necessary."
msgstr ""
-#: builtin/remote.c:683
+#: builtin/remote.c:678
#, c-format
msgid "Could not append '%s'"
msgstr ""
-#: builtin/remote.c:694
+#: builtin/remote.c:689
#, c-format
msgid "Could not set '%s'"
msgstr ""
-#: builtin/remote.c:716
+#: builtin/remote.c:711
#, c-format
msgid "deleting '%s' failed"
msgstr ""
-#: builtin/remote.c:750
+#: builtin/remote.c:745
#, c-format
msgid "creating '%s' failed"
msgstr ""
-#: builtin/remote.c:764
+#: builtin/remote.c:759
#, c-format
msgid "Could not remove branch %s"
msgstr ""
-#: builtin/remote.c:834
+#: builtin/remote.c:829
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -7919,262 +7992,262 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: builtin/remote.c:943
+#: builtin/remote.c:938
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr ""
-#: builtin/remote.c:946
+#: builtin/remote.c:941
msgid " tracked"
msgstr ""
-#: builtin/remote.c:948
+#: builtin/remote.c:943
msgid " stale (use 'git remote prune' to remove)"
msgstr ""
-#: builtin/remote.c:950
+#: builtin/remote.c:945
msgid " ???"
msgstr ""
-#: builtin/remote.c:991
+#: builtin/remote.c:986
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr ""
-#: builtin/remote.c:998
+#: builtin/remote.c:993
#, c-format
msgid "rebases onto remote %s"
msgstr ""
-#: builtin/remote.c:1001
+#: builtin/remote.c:996
#, c-format
msgid " merges with remote %s"
msgstr ""
-#: builtin/remote.c:1002
+#: builtin/remote.c:997
msgid " and with remote"
msgstr ""
-#: builtin/remote.c:1004
+#: builtin/remote.c:999
#, c-format
msgid "merges with remote %s"
msgstr ""
-#: builtin/remote.c:1005
+#: builtin/remote.c:1000
msgid " and with remote"
msgstr ""
-#: builtin/remote.c:1051
+#: builtin/remote.c:1046
msgid "create"
msgstr ""
-#: builtin/remote.c:1054
+#: builtin/remote.c:1049
msgid "delete"
msgstr ""
-#: builtin/remote.c:1058
+#: builtin/remote.c:1053
msgid "up to date"
msgstr ""
-#: builtin/remote.c:1061
+#: builtin/remote.c:1056
msgid "fast-forwardable"
msgstr ""
-#: builtin/remote.c:1064
+#: builtin/remote.c:1059
msgid "local out of date"
msgstr ""
-#: builtin/remote.c:1071
+#: builtin/remote.c:1066
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr ""
-#: builtin/remote.c:1074
+#: builtin/remote.c:1069
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr ""
-#: builtin/remote.c:1078
+#: builtin/remote.c:1073
#, c-format
msgid " %-*s forces to %s"
msgstr ""
-#: builtin/remote.c:1081
+#: builtin/remote.c:1076
#, c-format
msgid " %-*s pushes to %s"
msgstr ""
-#: builtin/remote.c:1091
+#: builtin/remote.c:1144
msgid "do not query remotes"
msgstr ""
-#: builtin/remote.c:1118
+#: builtin/remote.c:1171
#, c-format
msgid "* remote %s"
msgstr ""
-#: builtin/remote.c:1119
+#: builtin/remote.c:1172
#, c-format
msgid " Fetch URL: %s"
msgstr ""
-#: builtin/remote.c:1120 builtin/remote.c:1285
+#: builtin/remote.c:1173 builtin/remote.c:1318
msgid "(no URL)"
msgstr ""
-#: builtin/remote.c:1129 builtin/remote.c:1131
+#: builtin/remote.c:1182 builtin/remote.c:1184
#, c-format
msgid " Push URL: %s"
msgstr ""
-#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137
+#: builtin/remote.c:1186 builtin/remote.c:1188 builtin/remote.c:1190
#, c-format
msgid " HEAD branch: %s"
msgstr ""
-#: builtin/remote.c:1139
+#: builtin/remote.c:1192
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
msgstr ""
-#: builtin/remote.c:1151
+#: builtin/remote.c:1204
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] ""
msgstr[1] ""
-#: builtin/remote.c:1154 builtin/remote.c:1181
+#: builtin/remote.c:1207 builtin/remote.c:1234
msgid " (status not queried)"
msgstr ""
-#: builtin/remote.c:1163
+#: builtin/remote.c:1216
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] ""
msgstr[1] ""
-#: builtin/remote.c:1171
+#: builtin/remote.c:1224
msgid " Local refs will be mirrored by 'git push'"
msgstr ""
-#: builtin/remote.c:1178
+#: builtin/remote.c:1231
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] ""
msgstr[1] ""
-#: builtin/remote.c:1199
+#: builtin/remote.c:1252
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr ""
-#: builtin/remote.c:1201
+#: builtin/remote.c:1254
msgid "delete refs/remotes/<name>/HEAD"
msgstr ""
-#: builtin/remote.c:1216
+#: builtin/remote.c:1269
msgid "Cannot determine remote HEAD"
msgstr ""
-#: builtin/remote.c:1218
+#: builtin/remote.c:1271
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr ""
-#: builtin/remote.c:1228
+#: builtin/remote.c:1281
#, c-format
msgid "Could not delete %s"
msgstr ""
-#: builtin/remote.c:1236
+#: builtin/remote.c:1289
#, c-format
msgid "Not a valid ref: %s"
msgstr ""
-#: builtin/remote.c:1238
+#: builtin/remote.c:1291
#, c-format
msgid "Could not setup %s"
msgstr ""
-#: builtin/remote.c:1274
+#: builtin/remote.c:1307
#, c-format
msgid " %s will become dangling!"
msgstr ""
-#: builtin/remote.c:1275
+#: builtin/remote.c:1308
#, c-format
msgid " %s has become dangling!"
msgstr ""
-#: builtin/remote.c:1281
+#: builtin/remote.c:1314
#, c-format
msgid "Pruning %s"
msgstr ""
-#: builtin/remote.c:1282
+#: builtin/remote.c:1315
#, c-format
msgid "URL: %s"
msgstr ""
-#: builtin/remote.c:1295
+#: builtin/remote.c:1328
#, c-format
msgid " * [would prune] %s"
msgstr ""
-#: builtin/remote.c:1298
+#: builtin/remote.c:1331
#, c-format
msgid " * [pruned] %s"
msgstr ""
-#: builtin/remote.c:1321
+#: builtin/remote.c:1374
msgid "prune remotes after fetching"
msgstr ""
-#: builtin/remote.c:1387 builtin/remote.c:1461
+#: builtin/remote.c:1440 builtin/remote.c:1514
#, c-format
msgid "No such remote '%s'"
msgstr ""
-#: builtin/remote.c:1407
+#: builtin/remote.c:1460
msgid "add branch"
msgstr ""
-#: builtin/remote.c:1414
+#: builtin/remote.c:1467
msgid "no remote specified"
msgstr ""
-#: builtin/remote.c:1436
+#: builtin/remote.c:1489
msgid "manipulate push URLs"
msgstr ""
-#: builtin/remote.c:1438
+#: builtin/remote.c:1491
msgid "add URL"
msgstr ""
-#: builtin/remote.c:1440
+#: builtin/remote.c:1493
msgid "delete URLs"
msgstr ""
-#: builtin/remote.c:1447
+#: builtin/remote.c:1500
msgid "--add --delete doesn't make sense"
msgstr ""
-#: builtin/remote.c:1487
+#: builtin/remote.c:1540
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr ""
-#: builtin/remote.c:1495
+#: builtin/remote.c:1548
#, c-format
msgid "No such URL found: %s"
msgstr ""
-#: builtin/remote.c:1497
+#: builtin/remote.c:1550
msgid "Will not delete all non-push URLs"
msgstr ""
-#: builtin/remote.c:1569
+#: builtin/remote.c:1564
msgid "be verbose; must be placed before a subcommand"
msgstr ""
@@ -8222,6 +8295,10 @@ msgstr ""
msgid "size of the window used for delta compression"
msgstr ""
+#: builtin/repack.c:162 builtin/repack.c:166
+msgid "bytes"
+msgstr ""
+
#: builtin/repack.c:163
msgid "same as the above, but limit memory size instead of entries count"
msgstr ""
@@ -8234,7 +8311,7 @@ msgstr ""
msgid "maximum size of each packfile"
msgstr ""
-#: builtin/repack.c:345
+#: builtin/repack.c:343
#, c-format
msgid "removing '%s' failed"
msgstr ""
@@ -8248,21 +8325,25 @@ msgid "git replace -d <object>..."
msgstr ""
#: builtin/replace.c:19
-msgid "git replace -l [<pattern>]"
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
msgstr ""
-#: builtin/replace.c:131
+#: builtin/replace.c:174
msgid "list replace refs"
msgstr ""
-#: builtin/replace.c:132
+#: builtin/replace.c:175
msgid "delete replace refs"
msgstr ""
-#: builtin/replace.c:133
+#: builtin/replace.c:176
msgid "replace the ref if it exists"
msgstr ""
+#: builtin/replace.c:177
+msgid "use this format"
+msgstr ""
+
#: builtin/rerere.c:12
msgid "git rerere [clear | forget path... | status | remaining | diff | gc]"
msgstr ""
@@ -8393,19 +8474,23 @@ msgstr ""
msgid "Could not write new index file."
msgstr ""
-#: builtin/rev-parse.c:345
+#: builtin/rev-parse.c:359
msgid "git rev-parse --parseopt [options] -- [<args>...]"
msgstr ""
-#: builtin/rev-parse.c:350
+#: builtin/rev-parse.c:364
msgid "keep the `--` passed as an arg"
msgstr ""
-#: builtin/rev-parse.c:352
+#: builtin/rev-parse.c:366
msgid "stop parsing after the first non-option argument"
msgstr ""
-#: builtin/rev-parse.c:470
+#: builtin/rev-parse.c:369
+msgid "output in stuck long form"
+msgstr ""
+
+#: builtin/rev-parse.c:486
msgid ""
"git rev-parse --parseopt [options] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
@@ -8628,67 +8713,67 @@ msgstr ""
msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr ""
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:649
msgid "show remote-tracking and local branches"
msgstr ""
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:651
msgid "show remote-tracking branches"
msgstr ""
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "color '*!+-' corresponding to the branch"
msgstr ""
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "show <n> more commits after the common ancestor"
msgstr ""
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "synonym to more=-1"
msgstr ""
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "suppress naming strings"
msgstr ""
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:660
msgid "include the current branch"
msgstr ""
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:662
msgid "name commits with their object names"
msgstr ""
-#: builtin/show-branch.c:665
+#: builtin/show-branch.c:664
msgid "show possible merge bases"
msgstr ""
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show refs unreachable from any other ref"
msgstr ""
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show commits in topological order"
msgstr ""
-#: builtin/show-branch.c:672
+#: builtin/show-branch.c:671
msgid "show only commits not on the first branch"
msgstr ""
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "show merges reachable from only one tip"
msgstr ""
-#: builtin/show-branch.c:676
+#: builtin/show-branch.c:675
msgid "topologically sort, maintaining date order where possible"
msgstr ""
-#: builtin/show-branch.c:679
+#: builtin/show-branch.c:678
msgid "<n>[,<base>]"
msgstr ""
-#: builtin/show-branch.c:680
+#: builtin/show-branch.c:679
msgid "show <n> most recent ref-log entries starting at base"
msgstr ""
@@ -9161,15 +9246,15 @@ msgstr ""
msgid "no-op (backward compatibility)"
msgstr ""
-#: parse-options.h:238
+#: parse-options.h:235
msgid "be more verbose"
msgstr ""
-#: parse-options.h:240
+#: parse-options.h:237
msgid "be more quiet"
msgstr ""
-#: parse-options.h:246
+#: parse-options.h:243
msgid "use <n> digits to display SHA-1s"
msgstr ""
@@ -9442,7 +9527,7 @@ msgid ""
msgstr ""
#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
+msgid "won't bisect on cg-seek'ed tree"
msgstr ""
#: git-bisect.sh:144
@@ -9573,7 +9658,7 @@ msgstr ""
#. The working tree and the index file is still based on the
#. $orig_head commit, but we are merging into $curr_head.
#. First update the working tree to match $curr_head.
-#: git-pull.sh:255
+#: git-pull.sh:247
#, sh-format
msgid ""
"Warning: fetch updated the current branch head.\n"
@@ -9581,15 +9666,15 @@ msgid ""
"Warning: commit $orig_head."
msgstr ""
-#: git-pull.sh:280
+#: git-pull.sh:272
msgid "Cannot merge multiple branches into empty head"
msgstr ""
-#: git-pull.sh:284
+#: git-pull.sh:276
msgid "Cannot rebase onto multiple branches"
msgstr ""
-#: git-rebase.sh:54
+#: git-rebase.sh:55
msgid ""
"When you have resolved this problem, run \"git rebase --continue\".\n"
"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
@@ -9597,58 +9682,58 @@ msgid ""
"\"."
msgstr ""
-#: git-rebase.sh:156
+#: git-rebase.sh:158
msgid "Applied autostash."
msgstr ""
-#: git-rebase.sh:159
+#: git-rebase.sh:161
#, sh-format
msgid "Cannot store $stash_sha1"
msgstr ""
-#: git-rebase.sh:160
+#: git-rebase.sh:162
msgid ""
"Applying autostash resulted in conflicts.\n"
"Your changes are safe in the stash.\n"
"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
msgstr ""
-#: git-rebase.sh:199
+#: git-rebase.sh:201
msgid "The pre-rebase hook refused to rebase."
msgstr ""
-#: git-rebase.sh:204
+#: git-rebase.sh:206
msgid "It looks like git-am is in progress. Cannot rebase."
msgstr ""
-#: git-rebase.sh:338
+#: git-rebase.sh:346
msgid "The --exec option must be used with the --interactive option"
msgstr ""
-#: git-rebase.sh:343
+#: git-rebase.sh:351
msgid "No rebase in progress?"
msgstr ""
-#: git-rebase.sh:354
+#: git-rebase.sh:362
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
-#: git-rebase.sh:361
+#: git-rebase.sh:369
msgid "Cannot read HEAD"
msgstr ""
-#: git-rebase.sh:364
+#: git-rebase.sh:372
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
msgstr ""
-#: git-rebase.sh:382
+#: git-rebase.sh:390
#, sh-format
msgid "Could not move back to $head_name"
msgstr ""
-#: git-rebase.sh:401
+#: git-rebase.sh:409
#, sh-format
msgid ""
"It seems that there is already a $state_dir_base directory, and\n"
@@ -9661,65 +9746,65 @@ msgid ""
"valuable there."
msgstr ""
-#: git-rebase.sh:446
+#: git-rebase.sh:456
#, sh-format
msgid "invalid upstream $upstream_name"
msgstr ""
-#: git-rebase.sh:470
+#: git-rebase.sh:480
#, sh-format
msgid "$onto_name: there are more than one merge bases"
msgstr ""
-#: git-rebase.sh:473 git-rebase.sh:477
+#: git-rebase.sh:483 git-rebase.sh:487
#, sh-format
msgid "$onto_name: there is no merge base"
msgstr ""
-#: git-rebase.sh:482
+#: git-rebase.sh:492
#, sh-format
msgid "Does not point to a valid commit: $onto_name"
msgstr ""
-#: git-rebase.sh:505
+#: git-rebase.sh:515
#, sh-format
msgid "fatal: no such branch: $branch_name"
msgstr ""
-#: git-rebase.sh:528
+#: git-rebase.sh:548
msgid "Cannot autostash"
msgstr ""
-#: git-rebase.sh:533
+#: git-rebase.sh:553
#, sh-format
msgid "Created autostash: $stash_abbrev"
msgstr ""
-#: git-rebase.sh:537
+#: git-rebase.sh:557
msgid "Please commit or stash them."
msgstr ""
-#: git-rebase.sh:557
+#: git-rebase.sh:577
#, sh-format
msgid "Current branch $branch_name is up to date."
msgstr ""
-#: git-rebase.sh:561
+#: git-rebase.sh:581
#, sh-format
msgid "Current branch $branch_name is up to date, rebase forced."
msgstr ""
-#: git-rebase.sh:572
+#: git-rebase.sh:592
#, sh-format
msgid "Changes from $mb to $onto:"
msgstr ""
#. Detach HEAD and reset the tree
-#: git-rebase.sh:581
+#: git-rebase.sh:601
msgid "First, rewinding head to replay your work on top of it..."
msgstr ""
-#: git-rebase.sh:591
+#: git-rebase.sh:611
#, sh-format
msgid "Fast-forwarded $branch_name to $onto_name."
msgstr ""
@@ -9957,177 +10042,177 @@ msgstr ""
msgid "Entering '$prefix$displaypath'"
msgstr ""
-#: git-submodule.sh:554
+#: git-submodule.sh:559
#, sh-format
msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
msgstr ""
-#: git-submodule.sh:600
+#: git-submodule.sh:605
#, sh-format
msgid "No url found for submodule path '$displaypath' in .gitmodules"
msgstr ""
-#: git-submodule.sh:609
+#: git-submodule.sh:614
#, sh-format
msgid "Failed to register url for submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:611
+#: git-submodule.sh:616
#, sh-format
msgid "Submodule '$name' ($url) registered for path '$displaypath'"
msgstr ""
-#: git-submodule.sh:619
+#: git-submodule.sh:633
#, sh-format
msgid "Failed to register update mode for submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:656
+#: git-submodule.sh:671
#, sh-format
msgid "Use '.' if you really want to deinitialize all submodules"
msgstr ""
-#: git-submodule.sh:673
+#: git-submodule.sh:688
#, sh-format
msgid "Submodule work tree '$displaypath' contains a .git directory"
msgstr ""
-#: git-submodule.sh:674
+#: git-submodule.sh:689
#, sh-format
msgid ""
"(use 'rm -rf' if you really want to remove it including all of its history)"
msgstr ""
-#: git-submodule.sh:680
+#: git-submodule.sh:695
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
"discard them"
msgstr ""
-#: git-submodule.sh:683
+#: git-submodule.sh:698
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr ""
-#: git-submodule.sh:684
+#: git-submodule.sh:699
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr ""
-#: git-submodule.sh:687
+#: git-submodule.sh:702
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr ""
-#: git-submodule.sh:696
+#: git-submodule.sh:711
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr ""
-#: git-submodule.sh:811
+#: git-submodule.sh:834
#, sh-format
msgid ""
"Submodule path '$displaypath' not initialized\n"
"Maybe you want to use 'update --init'?"
msgstr ""
-#: git-submodule.sh:824
+#: git-submodule.sh:847
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:833
+#: git-submodule.sh:856
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr ""
-#: git-submodule.sh:857
+#: git-submodule.sh:880
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:871
+#: git-submodule.sh:894
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:872
+#: git-submodule.sh:895
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr ""
-#: git-submodule.sh:877
+#: git-submodule.sh:900
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:878
+#: git-submodule.sh:901
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr ""
-#: git-submodule.sh:883
+#: git-submodule.sh:906
#, sh-format
msgid ""
"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
msgstr ""
-#: git-submodule.sh:884
+#: git-submodule.sh:907
#, sh-format
msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
msgstr ""
-#: git-submodule.sh:889
+#: git-submodule.sh:912
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:890
+#: git-submodule.sh:913
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr ""
-#: git-submodule.sh:917
+#: git-submodule.sh:940
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr ""
-#: git-submodule.sh:1025
+#: git-submodule.sh:1048
msgid "The --cached option cannot be used with the --files option"
msgstr ""
#. unexpected type
-#: git-submodule.sh:1073
+#: git-submodule.sh:1096
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr ""
-#: git-submodule.sh:1093
+#: git-submodule.sh:1116
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr ""
-#: git-submodule.sh:1096
+#: git-submodule.sh:1119
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr ""
-#: git-submodule.sh:1099
+#: git-submodule.sh:1122
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr ""
-#: git-submodule.sh:1124
+#: git-submodule.sh:1147
msgid "blob"
msgstr ""
-#: git-submodule.sh:1238
+#: git-submodule.sh:1261
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr ""
-#: git-submodule.sh:1302
+#: git-submodule.sh:1325
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr ""
diff --git a/po/nl.po b/po/nl.po
deleted file mode 100644
index ad31c66cd..000000000
--- a/po/nl.po
+++ /dev/null
@@ -1,3493 +0,0 @@
-# Dutch translations for Git.
-# Copyright (C) 2012 Vincent van Ravesteijn <vfr@lyx.org>
-# This file is distributed under the same license as the Git package.
-# Vincent van Ravesteijn <vfr@lyx.org>, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Git\n"
-"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2012-02-28 09:17+0800\n"
-"PO-Revision-Date: 2012-03-07 12:02+0100\n"
-"Last-Translator: Vincent van Ravesteijn <vfr@lyx.org>\n"
-"Language-Team: Dutch\n"
-"Language: nl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ASCII\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: advice.c:34
-#, c-format
-msgid "hint: %.*s\n"
-msgstr ""
-
-#.
-#. * Message used both when 'git commit' fails and when
-#. * other commands doing a merge do.
-#.
-#: advice.c:64
-msgid ""
-"Fix them up in the work tree,\n"
-"and then use 'git add/rm <file>' as\n"
-"appropriate to mark resolution and make a commit,\n"
-"or use 'git commit -a'."
-msgstr ""
-
-#: commit.c:47
-#, c-format
-msgid "could not parse %s"
-msgstr ""
-
-#: commit.c:49
-#, c-format
-msgid "%s %s is not a commit!"
-msgstr ""
-
-#: compat/obstack.c:406 compat/obstack.c:408
-msgid "memory exhausted"
-msgstr ""
-
-#: connected.c:39
-msgid "Could not run 'git rev-list'"
-msgstr ""
-
-#: connected.c:48
-#, c-format
-msgid "failed write to rev-list: %s"
-msgstr ""
-
-#: connected.c:56
-#, c-format
-msgid "failed to close rev-list's stdin: %s"
-msgstr ""
-
-#: diff.c:104
-#, c-format
-msgid " Failed to parse dirstat cut-off percentage '%.*s'\n"
-msgstr ""
-
-#: diff.c:109
-#, c-format
-msgid " Unknown dirstat parameter '%.*s'\n"
-msgstr ""
-
-#: diff.c:205
-#, c-format
-msgid ""
-"Found errors in 'diff.dirstat' config variable:\n"
-"%s"
-msgstr ""
-
-#: diff.c:1331
-msgid " 0 files changed\n"
-msgstr ""
-
-#: diff.c:1335
-#, c-format
-msgid " %d file changed"
-msgid_plural " %d files changed"
-msgstr[0] ""
-msgstr[1] ""
-
-#: diff.c:1352
-#, c-format
-msgid ", %d insertion(+)"
-msgid_plural ", %d insertions(+)"
-msgstr[0] ""
-msgstr[1] ""
-
-#: diff.c:1363
-#, c-format
-msgid ", %d deletion(-)"
-msgid_plural ", %d deletions(-)"
-msgstr[0] ""
-msgstr[1] ""
-
-#: diff.c:3364
-#, c-format
-msgid ""
-"Failed to parse --dirstat/-X option parameter:\n"
-"%s"
-msgstr ""
-
-#: gpg-interface.c:59
-msgid "could not run gpg."
-msgstr ""
-
-#: gpg-interface.c:71
-msgid "gpg did not accept the data"
-msgstr ""
-
-#: gpg-interface.c:82
-msgid "gpg failed to sign the data"
-msgstr ""
-
-#: grep.c:1285
-#, c-format
-msgid "'%s': unable to read %s"
-msgstr ""
-
-#: grep.c:1302
-#, c-format
-msgid "'%s': %s"
-msgstr ""
-
-#: grep.c:1313
-#, c-format
-msgid "'%s': short read %s"
-msgstr ""
-
-#: help.c:287
-#, c-format
-msgid ""
-"'%s' appears to be a git command, but we were not\n"
-"able to execute it. Maybe git-%s is broken?"
-msgstr ""
-
-#: remote.c:1607
-#, c-format
-msgid "Your branch is ahead of '%s' by %d commit.\n"
-msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: remote.c:1613
-#, c-format
-msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
-msgid_plural ""
-"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: remote.c:1621
-#, c-format
-msgid ""
-"Your branch and '%s' have diverged,\n"
-"and have %d and %d different commit each, respectively.\n"
-msgid_plural ""
-"Your branch and '%s' have diverged,\n"
-"and have %d and %d different commits each, respectively.\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: sequencer.c:120 builtin/merge.c:862 builtin/merge.c:983
-#: builtin/merge.c:1093 builtin/merge.c:1103
-#, c-format
-msgid "Could not open '%s' for writing"
-msgstr ""
-
-#: sequencer.c:122 builtin/merge.c:334 builtin/merge.c:865
-#: builtin/merge.c:1095 builtin/merge.c:1108
-#, c-format
-msgid "Could not write to '%s'"
-msgstr ""
-
-#: sequencer.c:142
-msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
-msgstr ""
-
-#: sequencer.c:154 sequencer.c:680 sequencer.c:763
-#, c-format
-msgid "Could not write to %s"
-msgstr ""
-
-#: sequencer.c:157
-#, c-format
-msgid "Error wrapping up %s"
-msgstr ""
-
-#: sequencer.c:172
-msgid "Your local changes would be overwritten by cherry-pick."
-msgstr ""
-
-#: sequencer.c:174
-msgid "Your local changes would be overwritten by revert."
-msgstr ""
-
-#: sequencer.c:177
-msgid "Commit your changes or stash them to proceed."
-msgstr ""
-
-#. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:227
-#, c-format
-msgid "%s: Unable to write new index file"
-msgstr ""
-
-#: sequencer.c:293
-msgid "Your index file is unmerged."
-msgstr ""
-
-#: sequencer.c:296
-msgid "You do not have a valid HEAD"
-msgstr ""
-
-#: sequencer.c:311
-#, c-format
-msgid "Commit %s is a merge but no -m option was given."
-msgstr ""
-
-#: sequencer.c:319
-#, c-format
-msgid "Commit %s does not have parent %d"
-msgstr ""
-
-#: sequencer.c:323
-#, c-format
-msgid "Mainline was specified but commit %s is not a merge."
-msgstr ""
-
-#. TRANSLATORS: The first %s will be "revert" or
-#. "cherry-pick", the second %s a SHA1
-#: sequencer.c:334
-#, c-format
-msgid "%s: cannot parse parent commit %s"
-msgstr ""
-
-#: sequencer.c:338
-#, c-format
-msgid "Cannot get commit message for %s"
-msgstr ""
-
-#: sequencer.c:422
-#, c-format
-msgid "could not revert %s... %s"
-msgstr ""
-
-#: sequencer.c:423
-#, c-format
-msgid "could not apply %s... %s"
-msgstr ""
-
-#: sequencer.c:445 sequencer.c:904 builtin/log.c:286 builtin/log.c:709
-#: builtin/log.c:1325 builtin/log.c:1544 builtin/merge.c:348
-#: builtin/shortlog.c:181
-msgid "revision walk setup failed"
-msgstr ""
-
-#: sequencer.c:448
-msgid "empty commit set passed"
-msgstr ""
-
-#: sequencer.c:456
-#, c-format
-msgid "git %s: failed to read the index"
-msgstr ""
-
-#: sequencer.c:461
-#, c-format
-msgid "git %s: failed to refresh the index"
-msgstr ""
-
-#: sequencer.c:546
-#, c-format
-msgid "Cannot %s during a %s"
-msgstr ""
-
-#: sequencer.c:568
-#, c-format
-msgid "Could not parse line %d."
-msgstr ""
-
-#: sequencer.c:573
-msgid "No commits parsed."
-msgstr ""
-
-#: sequencer.c:586
-#, c-format
-msgid "Could not open %s"
-msgstr ""
-
-#: sequencer.c:590
-#, c-format
-msgid "Could not read %s."
-msgstr ""
-
-#: sequencer.c:597
-#, c-format
-msgid "Unusable instruction sheet: %s"
-msgstr ""
-
-#: sequencer.c:625
-#, c-format
-msgid "Invalid key: %s"
-msgstr ""
-
-#: sequencer.c:628
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr ""
-
-#: sequencer.c:640
-#, c-format
-msgid "Malformed options sheet: %s"
-msgstr ""
-
-#: sequencer.c:661
-msgid "a cherry-pick or revert is already in progress"
-msgstr ""
-
-#: sequencer.c:662
-msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
-msgstr ""
-
-#: sequencer.c:666
-#, c-format
-msgid "Could not create sequencer directory %s"
-msgstr ""
-
-#: sequencer.c:682 sequencer.c:767
-#, c-format
-msgid "Error wrapping up %s."
-msgstr ""
-
-#: sequencer.c:701 sequencer.c:835
-msgid "no cherry-pick or revert in progress"
-msgstr ""
-
-#: sequencer.c:703
-msgid "cannot resolve HEAD"
-msgstr ""
-
-#: sequencer.c:705
-msgid "cannot abort from a branch yet to be born"
-msgstr ""
-
-#: sequencer.c:727
-#, c-format
-msgid "cannot open %s: %s"
-msgstr ""
-
-#: sequencer.c:730
-#, c-format
-msgid "cannot read %s: %s"
-msgstr ""
-
-#: sequencer.c:731
-msgid "unexpected end of file"
-msgstr ""
-
-#: sequencer.c:737
-#, c-format
-msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
-msgstr ""
-
-#: sequencer.c:760
-#, c-format
-msgid "Could not format %s."
-msgstr ""
-
-#: sequencer.c:922
-msgid "Can't revert as initial commit"
-msgstr ""
-
-#: sequencer.c:923
-msgid "Can't cherry-pick into empty head"
-msgstr ""
-
-#: wt-status.c:134
-msgid "Unmerged paths:"
-msgstr ""
-
-#: wt-status.c:140 wt-status.c:157
-#, c-format
-msgid " (use \"git reset %s <file>...\" to unstage)"
-msgstr ""
-
-#: wt-status.c:142 wt-status.c:159
-msgid " (use \"git rm --cached <file>...\" to unstage)"
-msgstr ""
-
-#: wt-status.c:143
-msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
-msgstr ""
-
-#: wt-status.c:151
-msgid "Changes to be committed:"
-msgstr ""
-
-#: wt-status.c:169
-msgid "Changes not staged for commit:"
-msgstr ""
-
-#: wt-status.c:173
-msgid " (use \"git add <file>...\" to update what will be committed)"
-msgstr ""
-
-#: wt-status.c:175
-msgid " (use \"git add/rm <file>...\" to update what will be committed)"
-msgstr ""
-
-#: wt-status.c:176
-msgid ""
-" (use \"git checkout -- <file>...\" to discard changes in working directory)"
-msgstr ""
-
-#: wt-status.c:178
-msgid " (commit or discard the untracked or modified content in submodules)"
-msgstr ""
-
-#: wt-status.c:187
-#, c-format
-msgid "%s files:"
-msgstr ""
-
-#: wt-status.c:190
-#, c-format
-msgid " (use \"git %s <file>...\" to include in what will be committed)"
-msgstr ""
-
-#: wt-status.c:207
-msgid "bug"
-msgstr ""
-
-#: wt-status.c:212
-msgid "both deleted:"
-msgstr ""
-
-#: wt-status.c:213
-msgid "added by us:"
-msgstr ""
-
-#: wt-status.c:214
-msgid "deleted by them:"
-msgstr ""
-
-#: wt-status.c:215
-msgid "added by them:"
-msgstr ""
-
-#: wt-status.c:216
-msgid "deleted by us:"
-msgstr ""
-
-#: wt-status.c:217
-msgid "both added:"
-msgstr ""
-
-#: wt-status.c:218
-msgid "both modified:"
-msgstr ""
-
-#: wt-status.c:248
-msgid "new commits, "
-msgstr ""
-
-#: wt-status.c:250
-msgid "modified content, "
-msgstr ""
-
-#: wt-status.c:252
-msgid "untracked content, "
-msgstr ""
-
-#: wt-status.c:266
-#, c-format
-msgid "new file: %s"
-msgstr ""
-
-#: wt-status.c:269
-#, c-format
-msgid "copied: %s -> %s"
-msgstr ""
-
-#: wt-status.c:272
-#, c-format
-msgid "deleted: %s"
-msgstr ""
-
-#: wt-status.c:275
-#, c-format
-msgid "modified: %s"
-msgstr ""
-
-#: wt-status.c:278
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr ""
-
-#: wt-status.c:281
-#, c-format
-msgid "typechange: %s"
-msgstr ""
-
-#: wt-status.c:284
-#, c-format
-msgid "unknown: %s"
-msgstr ""
-
-#: wt-status.c:287
-#, c-format
-msgid "unmerged: %s"
-msgstr ""
-
-#: wt-status.c:290
-#, c-format
-msgid "bug: unhandled diff status %c"
-msgstr ""
-
-#: wt-status.c:713
-msgid "On branch "
-msgstr ""
-
-#: wt-status.c:720
-msgid "Not currently on any branch."
-msgstr ""
-
-#: wt-status.c:731
-msgid "Initial commit"
-msgstr ""
-
-#: wt-status.c:745
-msgid "Untracked"
-msgstr ""
-
-#: wt-status.c:747
-msgid "Ignored"
-msgstr ""
-
-#: wt-status.c:749
-#, c-format
-msgid "Untracked files not listed%s"
-msgstr ""
-
-#: wt-status.c:751
-msgid " (use -u option to show untracked files)"
-msgstr ""
-
-#: wt-status.c:757
-msgid "No changes"
-msgstr ""
-
-#: wt-status.c:761
-#, c-format
-msgid "no changes added to commit%s\n"
-msgstr ""
-
-#: wt-status.c:763
-msgid " (use \"git add\" and/or \"git commit -a\")"
-msgstr ""
-
-#: wt-status.c:765
-#, c-format
-msgid "nothing added to commit but untracked files present%s\n"
-msgstr ""
-
-#: wt-status.c:767
-msgid " (use \"git add\" to track)"
-msgstr ""
-
-#: wt-status.c:769 wt-status.c:772 wt-status.c:775
-#, c-format
-msgid "nothing to commit%s\n"
-msgstr ""
-
-#: wt-status.c:770
-msgid " (create/copy files and use \"git add\" to track)"
-msgstr ""
-
-#: wt-status.c:773
-msgid " (use -u to show untracked files)"
-msgstr ""
-
-#: wt-status.c:776
-msgid " (working directory clean)"
-msgstr ""
-
-#: wt-status.c:884
-msgid "HEAD (no branch)"
-msgstr ""
-
-#: wt-status.c:890
-msgid "Initial commit on "
-msgstr ""
-
-#: wt-status.c:905
-msgid "behind "
-msgstr ""
-
-#: wt-status.c:908 wt-status.c:911
-msgid "ahead "
-msgstr ""
-
-#: wt-status.c:913
-msgid ", behind "
-msgstr ""
-
-#: builtin/add.c:62
-#, c-format
-msgid "unexpected diff status %c"
-msgstr ""
-
-#: builtin/add.c:67 builtin/commit.c:298
-msgid "updating files failed"
-msgstr ""
-
-#: builtin/add.c:77
-#, c-format
-msgid "remove '%s'\n"
-msgstr ""
-
-#: builtin/add.c:176
-#, c-format
-msgid "Path '%s' is in submodule '%.*s'"
-msgstr ""
-
-#: builtin/add.c:192
-msgid "Unstaged changes after refreshing the index:"
-msgstr ""
-
-#: builtin/add.c:195 builtin/add.c:456 builtin/rm.c:186
-#, c-format
-msgid "pathspec '%s' did not match any files"
-msgstr ""
-
-#: builtin/add.c:209
-#, c-format
-msgid "'%s' is beyond a symbolic link"
-msgstr ""
-
-#: builtin/add.c:276
-msgid "Could not read the index"
-msgstr ""
-
-#: builtin/add.c:286
-#, c-format
-msgid "Could not open '%s' for writing."
-msgstr ""
-
-#: builtin/add.c:290
-msgid "Could not write patch"
-msgstr ""
-
-#: builtin/add.c:295
-#, c-format
-msgid "Could not stat '%s'"
-msgstr ""
-
-#: builtin/add.c:297
-msgid "Empty patch. Aborted."
-msgstr ""
-
-#: builtin/add.c:303
-#, c-format
-msgid "Could not apply '%s'"
-msgstr ""
-
-#: builtin/add.c:312
-msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr ""
-
-#: builtin/add.c:352
-#, c-format
-msgid "Use -f if you really want to add them.\n"
-msgstr ""
-
-#: builtin/add.c:353
-msgid "no files added"
-msgstr ""
-
-#: builtin/add.c:359
-msgid "adding files failed"
-msgstr ""
-
-#: builtin/add.c:391
-msgid "-A and -u are mutually incompatible"
-msgstr ""
-
-#: builtin/add.c:393
-msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr ""
-
-#: builtin/add.c:413
-#, c-format
-msgid "Nothing specified, nothing added.\n"
-msgstr ""
-
-#: builtin/add.c:414
-#, c-format
-msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr ""
-
-#: builtin/add.c:420 builtin/clean.c:95 builtin/commit.c:358 builtin/mv.c:82
-#: builtin/rm.c:162
-msgid "index file corrupt"
-msgstr ""
-
-#: builtin/add.c:476 builtin/mv.c:229 builtin/rm.c:260
-msgid "Unable to write new index file"
-msgstr ""
-
-#: builtin/archive.c:17
-#, c-format
-msgid "could not create archive file '%s'"
-msgstr ""
-
-#: builtin/archive.c:20
-msgid "could not redirect output"
-msgstr ""
-
-#: builtin/archive.c:37
-msgid "git archive: Remote with no URL"
-msgstr ""
-
-#: builtin/archive.c:58
-msgid "git archive: expected ACK/NAK, got EOF"
-msgstr ""
-
-#: builtin/archive.c:63
-#, c-format
-msgid "git archive: NACK %s"
-msgstr ""
-
-#: builtin/archive.c:65
-#, c-format
-msgid "remote error: %s"
-msgstr ""
-
-#: builtin/archive.c:66
-msgid "git archive: protocol error"
-msgstr ""
-
-#: builtin/archive.c:71
-msgid "git archive: expected a flush"
-msgstr ""
-
-#: builtin/branch.c:137
-#, c-format
-msgid ""
-"deleting branch '%s' that has been merged to\n"
-" '%s', but not yet merged to HEAD."
-msgstr ""
-
-#: builtin/branch.c:141
-#, c-format
-msgid ""
-"not deleting branch '%s' that is not yet merged to\n"
-" '%s', even though it is merged to HEAD."
-msgstr ""
-
-#. TRANSLATORS: This is "remote " in "remote branch '%s' not found"
-#: builtin/branch.c:163
-msgid "remote "
-msgstr ""
-
-#: builtin/branch.c:171
-msgid "cannot use -a with -d"
-msgstr ""
-
-#: builtin/branch.c:177
-msgid "Couldn't look up commit object for HEAD"
-msgstr ""
-
-#: builtin/branch.c:182
-#, c-format
-msgid "Cannot delete the branch '%s' which you are currently on."
-msgstr ""
-
-#: builtin/branch.c:192
-#, c-format
-msgid "%sbranch '%s' not found."
-msgstr ""
-
-#: builtin/branch.c:200
-#, c-format
-msgid "Couldn't look up commit object for '%s'"
-msgstr ""
-
-#: builtin/branch.c:206
-#, c-format
-msgid ""
-"The branch '%s' is not fully merged.\n"
-"If you are sure you want to delete it, run 'git branch -D %s'."
-msgstr ""
-
-#: builtin/branch.c:214
-#, c-format
-msgid "Error deleting %sbranch '%s'"
-msgstr ""
-
-#: builtin/branch.c:219
-#, c-format
-msgid "Deleted %sbranch %s (was %s).\n"
-msgstr ""
-
-#: builtin/branch.c:224
-msgid "Update of config-file failed"
-msgstr ""
-
-#: builtin/branch.c:322
-#, c-format
-msgid "branch '%s' does not point at a commit"
-msgstr ""
-
-#: builtin/branch.c:394
-#, c-format
-msgid "behind %d] "
-msgstr ""
-
-#: builtin/branch.c:396
-#, c-format
-msgid "ahead %d] "
-msgstr ""
-
-#: builtin/branch.c:398
-#, c-format
-msgid "ahead %d, behind %d] "
-msgstr ""
-
-#: builtin/branch.c:501
-msgid "(no branch)"
-msgstr ""
-
-#: builtin/branch.c:562
-msgid "some refs could not be read"
-msgstr ""
-
-#: builtin/branch.c:575
-msgid "cannot rename the current branch while not on any."
-msgstr ""
-
-#: builtin/branch.c:585
-#, c-format
-msgid "Invalid branch name: '%s'"
-msgstr ""
-
-#: builtin/branch.c:600
-msgid "Branch rename failed"
-msgstr ""
-
-#: builtin/branch.c:604
-#, c-format
-msgid "Renamed a misnamed branch '%s' away"
-msgstr ""
-
-#: builtin/branch.c:608
-#, c-format
-msgid "Branch renamed to %s, but HEAD is not updated!"
-msgstr ""
-
-#: builtin/branch.c:615
-msgid "Branch is renamed, but update of config-file failed"
-msgstr ""
-
-#: builtin/branch.c:630
-#, c-format
-msgid "malformed object name %s"
-msgstr ""
-
-#: builtin/branch.c:654
-#, c-format
-msgid "could not write branch description template: %s\n"
-msgstr ""
-
-#: builtin/branch.c:742
-msgid "Failed to resolve HEAD as a valid ref."
-msgstr ""
-
-#: builtin/branch.c:747 builtin/clone.c:558
-msgid "HEAD not found below refs/heads!"
-msgstr ""
-
-#: builtin/branch.c:805
-msgid "-a and -r options to 'git branch' do not make sense with a branch name"
-msgstr ""
-
-#: builtin/bundle.c:47
-#, c-format
-msgid "%s is okay\n"
-msgstr ""
-
-#: builtin/bundle.c:56
-msgid "Need a repository to create a bundle."
-msgstr ""
-
-#: builtin/bundle.c:60
-msgid "Need a repository to unbundle."
-msgstr ""
-
-#: builtin/checkout.c:113 builtin/checkout.c:146
-#, c-format
-msgid "path '%s' does not have our version"
-msgstr ""
-
-#: builtin/checkout.c:115 builtin/checkout.c:148
-#, c-format
-msgid "path '%s' does not have their version"
-msgstr ""
-
-#: builtin/checkout.c:131
-#, c-format
-msgid "path '%s' does not have all necessary versions"
-msgstr ""
-
-#: builtin/checkout.c:175
-#, c-format
-msgid "path '%s' does not have necessary versions"
-msgstr ""
-
-#: builtin/checkout.c:192
-#, c-format
-msgid "path '%s': cannot merge"
-msgstr ""
-
-#: builtin/checkout.c:209
-#, c-format
-msgid "Unable to add merge result for '%s'"
-msgstr ""
-
-#: builtin/checkout.c:212 builtin/reset.c:158
-#, c-format
-msgid "make_cache_entry failed for path '%s'"
-msgstr ""
-
-#: builtin/checkout.c:234 builtin/checkout.c:392
-msgid "corrupt index file"
-msgstr ""
-
-#: builtin/checkout.c:264 builtin/checkout.c:271
-#, c-format
-msgid "path '%s' is unmerged"
-msgstr ""
-
-#: builtin/checkout.c:302 builtin/checkout.c:498 builtin/clone.c:583
-#: builtin/merge.c:809
-msgid "unable to write new index file"
-msgstr ""
-
-#: builtin/checkout.c:319 builtin/diff.c:298 builtin/merge.c:406
-msgid "diff_setup_done failed"
-msgstr ""
-
-#: builtin/checkout.c:414
-msgid "you need to resolve your current index first"
-msgstr ""
-
-#: builtin/checkout.c:533
-#, c-format
-msgid "Can not do reflog for '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:565
-msgid "HEAD is now at"
-msgstr ""
-
-#: builtin/checkout.c:572
-#, c-format
-msgid "Reset branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:575
-#, c-format
-msgid "Already on '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:579
-#, c-format
-msgid "Switched to and reset branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:581
-#, c-format
-msgid "Switched to a new branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:583
-#, c-format
-msgid "Switched to branch '%s'\n"
-msgstr ""
-
-#: builtin/checkout.c:639
-#, c-format
-msgid " ... and %d more.\n"
-msgstr ""
-
-#. The singular version
-#: builtin/checkout.c:645
-#, c-format
-msgid ""
-"Warning: you are leaving %d commit behind, not connected to\n"
-"any of your branches:\n"
-"\n"
-"%s\n"
-msgid_plural ""
-"Warning: you are leaving %d commits behind, not connected to\n"
-"any of your branches:\n"
-"\n"
-"%s\n"
-msgstr[0] ""
-msgstr[1] ""
-
-#: builtin/checkout.c:663
-#, c-format
-msgid ""
-"If you want to keep them by creating a new branch, this may be a good time\n"
-"to do so with:\n"
-"\n"
-" git branch new_branch_name %s\n"
-"\n"
-msgstr ""
-
-#: builtin/checkout.c:692
-msgid "internal error in revision walk"
-msgstr ""
-
-#: builtin/checkout.c:696
-msgid "Previous HEAD position was"
-msgstr ""
-
-#: builtin/checkout.c:722
-msgid "You are on a branch yet to be born"
-msgstr ""
-
-#. case (1)
-#: builtin/checkout.c:853
-#, c-format
-msgid "invalid reference: %s"
-msgstr ""
-
-#. case (1): want a tree
-#: builtin/checkout.c:892
-#, c-format
-msgid "reference is not a tree: %s"
-msgstr ""
-
-#: builtin/checkout.c:972
-msgid "-B cannot be used with -b"
-msgstr ""
-
-#: builtin/checkout.c:981
-msgid "--patch is incompatible with all other options"
-msgstr ""
-
-#: builtin/checkout.c:984
-msgid "--detach cannot be used with -b/-B/--orphan"
-msgstr ""
-
-#: builtin/checkout.c:986
-msgid "--detach cannot be used with -t"
-msgstr ""
-
-#: builtin/checkout.c:992
-msgid "--track needs a branch name"
-msgstr ""
-
-#: builtin/checkout.c:999
-msgid "Missing branch name; try -b"
-msgstr ""
-
-#: builtin/checkout.c:1005
-msgid "--orphan and -b|-B are mutually exclusive"
-msgstr ""
-
-#: builtin/checkout.c:1007
-msgid "--orphan cannot be used with -t"
-msgstr ""
-
-#: builtin/checkout.c:1017
-msgid "git checkout: -f and -m are incompatible"
-msgstr ""
-
-#: builtin/checkout.c:1051
-msgid "invalid path specification"
-msgstr ""
-
-#: builtin/checkout.c:1059
-#, c-format
-msgid ""
-"git checkout: updating paths is incompatible with switching branches.\n"
-"Did you intend to checkout '%s' which can not be resolved as commit?"
-msgstr ""
-
-#: builtin/checkout.c:1061
-msgid "git checkout: updating paths is incompatible with switching branches."
-msgstr ""
-
-#: builtin/checkout.c:1066
-msgid "git checkout: --detach does not take a path argument"
-msgstr ""
-
-#: builtin/checkout.c:1069
-msgid ""
-"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
-"checking out of the index."
-msgstr ""
-
-#: builtin/checkout.c:1088
-msgid "Cannot switch branch to a non-commit."
-msgstr ""
-
-#: builtin/checkout.c:1091
-msgid "--ours/--theirs is incompatible with switching branches."
-msgstr ""
-
-#: builtin/clean.c:78
-msgid "-x and -X cannot be used together"
-msgstr ""
-
-#: builtin/clean.c:82
-msgid ""
-"clean.requireForce set to true and neither -n nor -f given; refusing to clean"
-msgstr ""
-
-#: builtin/clean.c:85
-msgid ""
-"clean.requireForce defaults to true and neither -n nor -f given; refusing to "
-"clean"
-msgstr ""
-
-#: builtin/clean.c:155 builtin/clean.c:176
-#, c-format
-msgid "Would remove %s\n"
-msgstr ""
-
-#: builtin/clean.c:159 builtin/clean.c:179
-#, c-format
-msgid "Removing %s\n"
-msgstr ""
-
-#: builtin/clean.c:162 builtin/clean.c:182
-#, c-format
-msgid "failed to remove %s"
-msgstr ""
-
-#: builtin/clean.c:166
-#, c-format
-msgid "Would not remove %s\n"
-msgstr ""
-
-#: builtin/clean.c:168
-#, c-format
-msgid "Not removing %s\n"
-msgstr ""
-
-#: builtin/clone.c:243
-#, c-format
-msgid "reference repository '%s' is not a local directory."
-msgstr ""
-
-#: builtin/clone.c:302
-#, c-format
-msgid "failed to open '%s'"
-msgstr ""
-
-#: builtin/clone.c:306
-#, c-format
-msgid "failed to create directory '%s'"
-msgstr ""
-
-#: builtin/clone.c:308 builtin/diff.c:75
-#, c-format
-msgid "failed to stat '%s'"
-msgstr ""
-
-#: builtin/clone.c:310
-#, c-format
-msgid "%s exists and is not a directory"
-msgstr ""
-
-#: builtin/clone.c:324
-#, c-format
-msgid "failed to stat %s\n"
-msgstr ""
-
-#: builtin/clone.c:341
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr ""
-
-#: builtin/clone.c:346
-#, c-format
-msgid "failed to create link '%s'"
-msgstr ""
-
-#: builtin/clone.c:350
-#, c-format
-msgid "failed to copy file to '%s'"
-msgstr ""
-
-#: builtin/clone.c:373
-#, c-format
-msgid "done.\n"
-msgstr ""
-
-#: builtin/clone.c:440
-#, c-format
-msgid "Could not find remote branch %s to clone."
-msgstr ""
-
-#: builtin/clone.c:549
-msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
-msgstr ""
-
-#: builtin/clone.c:639
-msgid "Too many arguments."
-msgstr ""
-
-#: builtin/clone.c:643
-msgid "You must specify a repository to clone."
-msgstr ""
-
-#: builtin/clone.c:654
-#, c-format
-msgid "--bare and --origin %s options are incompatible."
-msgstr ""
-
-#: builtin/clone.c:668
-#, c-format
-msgid "repository '%s' does not exist"
-msgstr ""
-
-#: builtin/clone.c:673
-msgid "--depth is ignored in local clones; use file:// instead."
-msgstr ""
-
-#: builtin/clone.c:683
-#, c-format
-msgid "destination path '%s' already exists and is not an empty directory."
-msgstr ""
-
-#: builtin/clone.c:693
-#, c-format
-msgid "working tree '%s' already exists."
-msgstr ""
-
-#: builtin/clone.c:706 builtin/clone.c:720
-#, c-format
-msgid "could not create leading directories of '%s'"
-msgstr ""
-
-#: builtin/clone.c:709
-#, c-format
-msgid "could not create work tree dir '%s'."
-msgstr ""
-
-#: builtin/clone.c:728
-#, c-format
-msgid "Cloning into bare repository '%s'...\n"
-msgstr ""
-
-#: builtin/clone.c:730
-#, c-format
-msgid "Cloning into '%s'...\n"
-msgstr ""
-
-#: builtin/clone.c:786
-#, c-format
-msgid "Don't know how to clone %s"
-msgstr ""
-
-#: builtin/clone.c:835
-#, c-format
-msgid "Remote branch %s not found in upstream %s"
-msgstr ""
-
-#: builtin/clone.c:842
-msgid "You appear to have cloned an empty repository."
-msgstr ""
-
-#: builtin/commit.c:42
-msgid ""
-"Your name and email address were configured automatically based\n"
-"on your username and hostname. Please check that they are accurate.\n"
-"You can suppress this message by setting them explicitly:\n"
-"\n"
-" git config --global user.name \"Your Name\"\n"
-" git config --global user.email you@example.com\n"
-"\n"
-"After doing this, you may fix the identity used for this commit with:\n"
-"\n"
-" git commit --amend --reset-author\n"
-msgstr ""
-
-#: builtin/commit.c:54
-msgid ""
-"You asked to amend the most recent commit, but doing so would make\n"
-"it empty. You can repeat your command with --allow-empty, or you can\n"
-"remove the commit entirely with \"git reset HEAD^\".\n"
-msgstr ""
-
-#: builtin/commit.c:59
-msgid ""
-"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
-"If you wish to commit it anyway, use:\n"
-"\n"
-" git commit --allow-empty\n"
-"\n"
-"Otherwise, please use 'git reset'\n"
-msgstr ""
-
-#: builtin/commit.c:205 builtin/reset.c:33
-msgid "merge"
-msgstr ""
-
-#: builtin/commit.c:208
-msgid "cherry-pick"
-msgstr ""
-
-#: builtin/commit.c:325
-msgid "failed to unpack HEAD tree object"
-msgstr ""
-
-#: builtin/commit.c:367
-msgid "unable to create temporary index"
-msgstr ""
-
-#: builtin/commit.c:373
-msgid "interactive add failed"
-msgstr ""
-
-#: builtin/commit.c:406 builtin/commit.c:427 builtin/commit.c:473
-msgid "unable to write new_index file"
-msgstr ""
-
-#: builtin/commit.c:457
-#, c-format
-msgid "cannot do a partial commit during a %s."
-msgstr ""
-
-#: builtin/commit.c:466
-msgid "cannot read the index"
-msgstr ""
-
-#: builtin/commit.c:486
-msgid "unable to write temporary index file"
-msgstr ""
-
-#: builtin/commit.c:550 builtin/commit.c:556
-#, c-format
-msgid "invalid commit: %s"
-msgstr ""
-
-#: builtin/commit.c:579
-msgid "malformed --author parameter"
-msgstr ""
-
-#: builtin/commit.c:635
-#, c-format
-msgid "Malformed ident string: '%s'"
-msgstr ""
-
-#: builtin/commit.c:670 builtin/commit.c:703 builtin/commit.c:1000
-#, c-format
-msgid "could not lookup commit %s"
-msgstr ""
-
-#: builtin/commit.c:682 builtin/shortlog.c:296
-#, c-format
-msgid "(reading log message from standard input)\n"
-msgstr ""
-
-#: builtin/commit.c:684
-msgid "could not read log from standard input"
-msgstr ""
-
-#: builtin/commit.c:688
-#, c-format
-msgid "could not read log file '%s'"
-msgstr ""
-
-#: builtin/commit.c:694
-msgid "commit has empty message"
-msgstr ""
-
-#: builtin/commit.c:710
-msgid "could not read MERGE_MSG"
-msgstr ""
-
-#: builtin/commit.c:714
-msgid "could not read SQUASH_MSG"
-msgstr ""
-
-#: builtin/commit.c:718
-#, c-format
-msgid "could not read '%s'"
-msgstr ""
-
-#: builtin/commit.c:746
-#, c-format
-msgid "could not open '%s'"
-msgstr ""
-
-#: builtin/commit.c:770
-msgid "could not write commit template"
-msgstr ""
-
-#: builtin/commit.c:783
-#, c-format
-msgid ""
-"\n"
-"It looks like you may be committing a %s.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
-"and try again.\n"
-msgstr ""
-
-#: builtin/commit.c:796
-msgid "Please enter the commit message for your changes."
-msgstr ""
-
-#: builtin/commit.c:799
-msgid ""
-" Lines starting\n"
-"with '#' will be ignored, and an empty message aborts the commit.\n"
-msgstr ""
-
-#: builtin/commit.c:804
-msgid ""
-" Lines starting\n"
-"with '#' will be kept; you may remove them yourself if you want to.\n"
-"An empty message aborts the commit.\n"
-msgstr ""
-
-#: builtin/commit.c:816
-#, c-format
-msgid "%sAuthor: %s"
-msgstr ""
-
-#: builtin/commit.c:823
-#, c-format
-msgid "%sCommitter: %s"
-msgstr ""
-
-#: builtin/commit.c:843
-msgid "Cannot read index"
-msgstr ""
-
-#: builtin/commit.c:880
-msgid "Error building trees"
-msgstr ""
-
-#: builtin/commit.c:895 builtin/tag.c:357
-#, c-format
-msgid "Please supply the message using either -m or -F option.\n"
-msgstr ""
-
-#: builtin/commit.c:975
-#, c-format
-msgid "No existing author found with '%s'"
-msgstr ""
-
-#: builtin/commit.c:990 builtin/commit.c:1182
-#, c-format
-msgid "Invalid untracked files mode '%s'"
-msgstr ""
-
-#: builtin/commit.c:1030
-msgid "Using both --reset-author and --author does not make sense"
-msgstr ""
-
-#: builtin/commit.c:1041
-msgid "You have nothing to amend."
-msgstr ""
-
-#: builtin/commit.c:1043
-#, c-format
-msgid "You are in the middle of a %s -- cannot amend."
-msgstr ""
-
-#: builtin/commit.c:1045
-msgid "Options --squash and --fixup cannot be used together"
-msgstr ""
-
-#: builtin/commit.c:1055
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr ""
-
-#: builtin/commit.c:1057
-msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
-msgstr ""
-
-#: builtin/commit.c:1063
-msgid "--reset-author can be used only with -C, -c or --amend."
-msgstr ""
-
-#: builtin/commit.c:1080
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-
-#: builtin/commit.c:1082
-msgid "No paths with --include/--only does not make sense."
-msgstr ""
-
-#: builtin/commit.c:1084
-msgid "Clever... amending the last one with dirty index."
-msgstr ""
-
-#: builtin/commit.c:1086
-msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
-msgstr ""
-
-#: builtin/commit.c:1096 builtin/tag.c:556
-#, c-format
-msgid "Invalid cleanup mode %s"
-msgstr ""
-
-#: builtin/commit.c:1101
-msgid "Paths with -a does not make sense."
-msgstr ""
-
-#: builtin/commit.c:1280
-msgid "couldn't look up newly created commit"
-msgstr ""
-
-#: builtin/commit.c:1282
-msgid "could not parse newly created commit"
-msgstr ""
-
-#: builtin/commit.c:1323
-msgid "detached HEAD"
-msgstr ""
-
-#: builtin/commit.c:1325
-msgid " (root-commit)"
-msgstr ""
-
-#: builtin/commit.c:1415
-msgid "could not parse HEAD commit"
-msgstr ""
-
-#: builtin/commit.c:1452 builtin/merge.c:507
-#, c-format
-msgid "could not open '%s' for reading"
-msgstr ""
-
-#: builtin/commit.c:1459
-#, c-format
-msgid "Corrupt MERGE_HEAD file (%s)"
-msgstr ""
-
-#: builtin/commit.c:1466
-msgid "could not read MERGE_MODE"
-msgstr ""
-
-#: builtin/commit.c:1485
-#, c-format
-msgid "could not read commit message: %s"
-msgstr ""
-
-#: builtin/commit.c:1499
-#, c-format
-msgid "Aborting commit due to empty commit message.\n"
-msgstr ""
-
-#: builtin/commit.c:1514 builtin/merge.c:933 builtin/merge.c:966
-msgid "failed to write commit object"
-msgstr ""
-
-#: builtin/commit.c:1535
-msgid "cannot lock HEAD ref"
-msgstr ""
-
-#: builtin/commit.c:1539
-msgid "cannot update HEAD ref"
-msgstr ""
-
-#: builtin/commit.c:1550
-msgid ""
-"Repository has been updated, but unable to write\n"
-"new_index file. Check that disk is not full or quota is\n"
-"not exceeded, and then \"git reset HEAD\" to recover."
-msgstr ""
-
-#: builtin/describe.c:234
-#, c-format
-msgid "annotated tag %s not available"
-msgstr ""
-
-#: builtin/describe.c:238
-#, c-format
-msgid "annotated tag %s has no embedded name"
-msgstr ""
-
-#: builtin/describe.c:240
-#, c-format
-msgid "tag '%s' is really '%s' here"
-msgstr ""
-
-#: builtin/describe.c:267
-#, c-format
-msgid "Not a valid object name %s"
-msgstr ""
-
-#: builtin/describe.c:270
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr ""
-
-#: builtin/describe.c:287
-#, c-format
-msgid "no tag exactly matches '%s'"
-msgstr ""
-
-#: builtin/describe.c:289
-#, c-format
-msgid "searching to describe %s\n"
-msgstr ""
-
-#: builtin/describe.c:329
-#, c-format
-msgid "finished search at %s\n"
-msgstr ""
-
-#: builtin/describe.c:353
-#, c-format
-msgid ""
-"No annotated tags can describe '%s'.\n"
-"However, there were unannotated tags: try --tags."
-msgstr ""
-
-#: builtin/describe.c:357
-#, c-format
-msgid ""
-"No tags can describe '%s'.\n"
-"Try --always, or create some tags."
-msgstr ""
-
-#: builtin/describe.c:378
-#, c-format
-msgid "traversed %lu commits\n"
-msgstr ""
-
-#: builtin/describe.c:381
-#, c-format
-msgid ""
-"more than %i tags found; listed %i most recent\n"
-"gave up search at %s\n"
-msgstr ""
-
-#: builtin/describe.c:436
-msgid "--long is incompatible with --abbrev=0"
-msgstr ""
-
-#: builtin/describe.c:462
-msgid "No names found, cannot describe anything."
-msgstr ""
-
-#: builtin/describe.c:482
-msgid "--dirty is incompatible with commit-ishes"
-msgstr ""
-
-#: builtin/diff.c:77
-#, c-format
-msgid "'%s': not a regular file or symlink"
-msgstr ""
-
-#: builtin/diff.c:220
-#, c-format
-msgid "invalid option: %s"
-msgstr ""
-
-#: builtin/diff.c:293
-msgid "Not a git repository"
-msgstr ""
-
-#: builtin/diff.c:343
-#, c-format
-msgid "invalid object '%s' given."
-msgstr ""
-
-#: builtin/diff.c:348
-#, c-format
-msgid "more than %d trees given: '%s'"
-msgstr ""
-
-#: builtin/diff.c:358
-#, c-format
-msgid "more than two blobs given: '%s'"
-msgstr ""
-
-#: builtin/diff.c:366
-#, c-format
-msgid "unhandled object '%s' given."
-msgstr ""
-
-#: builtin/fetch.c:200
-msgid "Couldn't find remote ref HEAD"
-msgstr ""
-
-#: builtin/fetch.c:252
-#, c-format
-msgid "object %s not found"
-msgstr ""
-
-#: builtin/fetch.c:258
-msgid "[up to date]"
-msgstr ""
-
-#: builtin/fetch.c:272
-#, c-format
-msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
-msgstr ""
-
-#: builtin/fetch.c:273 builtin/fetch.c:351
-msgid "[rejected]"
-msgstr ""
-
-#: builtin/fetch.c:284
-msgid "[tag update]"
-msgstr ""
-
-#: builtin/fetch.c:286 builtin/fetch.c:313 builtin/fetch.c:331
-msgid " (unable to update local ref)"
-msgstr ""
-
-#: builtin/fetch.c:298
-msgid "[new tag]"
-msgstr ""
-
-#: builtin/fetch.c:302
-msgid "[new branch]"
-msgstr ""
-
-#: builtin/fetch.c:347
-msgid "unable to update local ref"
-msgstr ""
-
-#: builtin/fetch.c:347
-msgid "forced update"
-msgstr ""
-
-#: builtin/fetch.c:353
-msgid "(non-fast-forward)"
-msgstr ""
-
-#: builtin/fetch.c:384 builtin/fetch.c:676
-#, c-format
-msgid "cannot open %s: %s\n"
-msgstr ""
-
-#: builtin/fetch.c:393
-#, c-format
-msgid "%s did not send all necessary objects\n"
-msgstr ""
-
-#: builtin/fetch.c:479
-#, c-format
-msgid "From %.*s\n"
-msgstr ""
-
-#: builtin/fetch.c:490
-#, c-format
-msgid ""
-"some local refs could not be updated; try running\n"
-" 'git remote prune %s' to remove any old, conflicting branches"
-msgstr ""
-
-#: builtin/fetch.c:540
-#, c-format
-msgid " (%s will become dangling)\n"
-msgstr ""
-
-#: builtin/fetch.c:541
-#, c-format
-msgid " (%s has become dangling)\n"
-msgstr ""
-
-#: builtin/fetch.c:548
-msgid "[deleted]"
-msgstr ""
-
-#: builtin/fetch.c:549
-msgid "(none)"
-msgstr ""
-
-#: builtin/fetch.c:666
-#, c-format
-msgid "Refusing to fetch into current branch %s of non-bare repository"
-msgstr ""
-
-#: builtin/fetch.c:700
-#, c-format
-msgid "Don't know how to fetch from %s"
-msgstr ""
-
-#: builtin/fetch.c:777
-#, c-format
-msgid "Option \"%s\" value \"%s\" is not valid for %s"
-msgstr ""
-
-#: builtin/fetch.c:780
-#, c-format
-msgid "Option \"%s\" is ignored for %s\n"
-msgstr ""
-
-#: builtin/fetch.c:879
-#, c-format
-msgid "Fetching %s\n"
-msgstr ""
-
-#: builtin/fetch.c:881
-#, c-format
-msgid "Could not fetch %s"
-msgstr ""
-
-#: builtin/fetch.c:898
-msgid ""
-"No remote repository specified. Please, specify either a URL or a\n"
-"remote name from which new revisions should be fetched."
-msgstr ""
-
-#: builtin/fetch.c:918
-msgid "You need to specify a tag name."
-msgstr ""
-
-#: builtin/fetch.c:970
-msgid "fetch --all does not take a repository argument"
-msgstr ""
-
-#: builtin/fetch.c:972
-msgid "fetch --all does not make sense with refspecs"
-msgstr ""
-
-#: builtin/fetch.c:983
-#, c-format
-msgid "No such remote or remote group: %s"
-msgstr ""
-
-#: builtin/fetch.c:991
-msgid "Fetching a group and specifying refspecs does not make sense"
-msgstr ""
-
-#: builtin/gc.c:63
-#, c-format
-msgid "Invalid %s: '%s'"
-msgstr ""
-
-#: builtin/gc.c:78
-msgid "Too many options specified"
-msgstr ""
-
-#: builtin/gc.c:103
-#, c-format
-msgid "insanely long object directory %.*s"
-msgstr ""
-
-#: builtin/gc.c:223
-#, c-format
-msgid "Auto packing the repository for optimum performance.\n"
-msgstr ""
-
-#: builtin/gc.c:226
-#, c-format
-msgid ""
-"Auto packing the repository for optimum performance. You may also\n"
-"run \"git gc\" manually. See \"git help gc\" for more information.\n"
-msgstr ""
-
-#: builtin/gc.c:256
-msgid ""
-"There are too many unreachable loose objects; run 'git prune' to remove them."
-msgstr ""
-
-#: builtin/grep.c:216
-#, c-format
-msgid "grep: failed to create thread: %s"
-msgstr ""
-
-#: builtin/grep.c:402
-#, c-format
-msgid "Failed to chdir: %s"
-msgstr ""
-
-#: builtin/grep.c:478 builtin/grep.c:512
-#, c-format
-msgid "unable to read tree (%s)"
-msgstr ""
-
-#: builtin/grep.c:526
-#, c-format
-msgid "unable to grep from object of type %s"
-msgstr ""
-
-#: builtin/grep.c:584
-#, c-format
-msgid "switch `%c' expects a numerical value"
-msgstr ""
-
-#: builtin/grep.c:601
-#, c-format
-msgid "cannot open '%s'"
-msgstr ""
-
-#: builtin/grep.c:889
-msgid "no pattern given."
-msgstr ""
-
-#: builtin/grep.c:903
-#, c-format
-msgid "bad object %s"
-msgstr ""
-
-#: builtin/grep.c:944
-msgid "--open-files-in-pager only works on the worktree"
-msgstr ""
-
-#: builtin/grep.c:967
-msgid "--cached or --untracked cannot be used with --no-index."
-msgstr ""
-
-#: builtin/grep.c:972
-msgid "--no-index or --untracked cannot be used with revs."
-msgstr ""
-
-#: builtin/grep.c:975
-msgid "--[no-]exclude-standard cannot be used for tracked contents."
-msgstr ""
-
-#: builtin/grep.c:983
-msgid "both --cached and trees are given."
-msgstr ""
-
-#: builtin/init-db.c:35
-#, c-format
-msgid "Could not make %s writable by group"
-msgstr ""
-
-#: builtin/init-db.c:62
-#, c-format
-msgid "insanely long template name %s"
-msgstr ""
-
-#: builtin/init-db.c:67
-#, c-format
-msgid "cannot stat '%s'"
-msgstr ""
-
-#: builtin/init-db.c:73
-#, c-format
-msgid "cannot stat template '%s'"
-msgstr ""
-
-#: builtin/init-db.c:80
-#, c-format
-msgid "cannot opendir '%s'"
-msgstr ""
-
-#: builtin/init-db.c:97
-#, c-format
-msgid "cannot readlink '%s'"
-msgstr ""
-
-#: builtin/init-db.c:99
-#, c-format
-msgid "insanely long symlink %s"
-msgstr ""
-
-#: builtin/init-db.c:102
-#, c-format
-msgid "cannot symlink '%s' '%s'"
-msgstr ""
-
-#: builtin/init-db.c:106
-#, c-format
-msgid "cannot copy '%s' to '%s'"
-msgstr ""
-
-#: builtin/init-db.c:110
-#, c-format
-msgid "ignoring template %s"
-msgstr ""
-
-#: builtin/init-db.c:133
-#, c-format
-msgid "insanely long template path %s"
-msgstr ""
-
-#: builtin/init-db.c:141
-#, c-format
-msgid "templates not found %s"
-msgstr ""
-
-#: builtin/init-db.c:154
-#, c-format
-msgid "not copying templates of a wrong format version %d from '%s'"
-msgstr ""
-
-#: builtin/init-db.c:192
-#, c-format
-msgid "insane git directory %s"
-msgstr ""
-
-#: builtin/init-db.c:322 builtin/init-db.c:325
-#, c-format
-msgid "%s already exists"
-msgstr ""
-
-#: builtin/init-db.c:354
-#, c-format
-msgid "unable to handle file type %d"
-msgstr ""
-
-#: builtin/init-db.c:357
-#, c-format
-msgid "unable to move %s to %s"
-msgstr ""
-
-#: builtin/init-db.c:362
-#, c-format
-msgid "Could not create git link %s"
-msgstr ""
-
-#.
-#. * TRANSLATORS: The first '%s' is either "Reinitialized
-#. * existing" or "Initialized empty", the second " shared" or
-#. * "", and the last '%s%s' is the verbatim directory name.
-#.
-#: builtin/init-db.c:419
-#, c-format
-msgid "%s%s Git repository in %s%s\n"
-msgstr ""
-
-#: builtin/init-db.c:420
-msgid "Reinitialized existing"
-msgstr ""
-
-#: builtin/init-db.c:420
-msgid "Initialized empty"
-msgstr ""
-
-#: builtin/init-db.c:421
-msgid " shared"
-msgstr ""
-
-#: builtin/init-db.c:440
-msgid "cannot tell cwd"
-msgstr ""
-
-#: builtin/init-db.c:521 builtin/init-db.c:528
-#, c-format
-msgid "cannot mkdir %s"
-msgstr ""
-
-#: builtin/init-db.c:532
-#, c-format
-msgid "cannot chdir to %s"
-msgstr ""
-
-#: builtin/init-db.c:554
-#, c-format
-msgid ""
-"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
-"dir=<directory>)"
-msgstr ""
-
-#: builtin/init-db.c:578
-msgid "Cannot access current working directory"
-msgstr ""
-
-#: builtin/init-db.c:585
-#, c-format
-msgid "Cannot access work tree '%s'"
-msgstr ""
-
-#: builtin/log.c:185
-#, c-format
-msgid "Final output: %d %s\n"
-msgstr ""
-
-#: builtin/log.c:393 builtin/log.c:479
-#, c-format
-msgid "Could not read object %s"
-msgstr ""
-
-#: builtin/log.c:503
-#, c-format
-msgid "Unknown type: %d"
-msgstr ""
-
-#: builtin/log.c:592
-msgid "format.headers without value"
-msgstr ""
-
-#: builtin/log.c:665
-msgid "name of output directory is too long"
-msgstr ""
-
-#: builtin/log.c:676
-#, c-format
-msgid "Cannot open patch file %s"
-msgstr ""
-
-#: builtin/log.c:690
-msgid "Need exactly one range."
-msgstr ""
-
-#: builtin/log.c:698
-msgid "Not a range."
-msgstr ""
-
-#: builtin/log.c:735
-msgid "Could not extract email from committer identity."
-msgstr ""
-
-#: builtin/log.c:781
-msgid "Cover letter needs email format"
-msgstr ""
-
-#: builtin/log.c:875
-#, c-format
-msgid "insane in-reply-to: %s"
-msgstr ""
-
-#: builtin/log.c:948
-msgid "Two output directories?"
-msgstr ""
-
-#: builtin/log.c:1169
-#, c-format
-msgid "bogus committer info %s"
-msgstr ""
-
-#: builtin/log.c:1214
-msgid "-n and -k are mutually exclusive."
-msgstr ""
-
-#: builtin/log.c:1216
-msgid "--subject-prefix and -k are mutually exclusive."
-msgstr ""
-
-#: builtin/log.c:1221 builtin/shortlog.c:284
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr ""
-
-#: builtin/log.c:1224
-msgid "--name-only does not make sense"
-msgstr ""
-
-#: builtin/log.c:1226
-msgid "--name-status does not make sense"
-msgstr ""
-
-#: builtin/log.c:1228
-msgid "--check does not make sense"
-msgstr ""
-
-#: builtin/log.c:1251
-msgid "standard output, or directory, which one?"
-msgstr ""
-
-#: builtin/log.c:1253
-#, c-format
-msgid "Could not create directory '%s'"
-msgstr ""
-
-#: builtin/log.c:1406
-msgid "Failed to create output files"
-msgstr ""
-
-#: builtin/log.c:1510
-#, c-format
-msgid ""
-"Could not find a tracked remote branch, please specify <upstream> manually.\n"
-msgstr ""
-
-#: builtin/log.c:1526 builtin/log.c:1528 builtin/log.c:1540
-#, c-format
-msgid "Unknown commit %s"
-msgstr ""
-
-#: builtin/merge.c:91
-msgid "switch `m' requires a value"
-msgstr ""
-
-#: builtin/merge.c:128
-#, c-format
-msgid "Could not find merge strategy '%s'.\n"
-msgstr ""
-
-#: builtin/merge.c:129
-#, c-format
-msgid "Available strategies are:"
-msgstr ""
-
-#: builtin/merge.c:134
-#, c-format
-msgid "Available custom strategies are:"
-msgstr ""
-
-#: builtin/merge.c:241
-msgid "could not run stash."
-msgstr ""
-
-#: builtin/merge.c:246
-msgid "stash failed"
-msgstr ""
-
-#: builtin/merge.c:251
-#, c-format
-msgid "not a valid object: %s"
-msgstr ""
-
-#: builtin/merge.c:270 builtin/merge.c:287
-msgid "read-tree failed"
-msgstr ""
-
-#: builtin/merge.c:317
-msgid " (nothing to squash)"
-msgstr ""
-
-#: builtin/merge.c:330
-#, c-format
-msgid "Squash commit -- not updating HEAD\n"
-msgstr ""
-
-#: builtin/merge.c:362
-msgid "Writing SQUASH_MSG"
-msgstr ""
-
-#: builtin/merge.c:364
-msgid "Finishing SQUASH_MSG"
-msgstr ""
-
-#: builtin/merge.c:386
-#, c-format
-msgid "No merge message -- not updating HEAD\n"
-msgstr ""
-
-#: builtin/merge.c:435
-#, c-format
-msgid "'%s' does not point to a commit"
-msgstr ""
-
-#: builtin/merge.c:534
-#, c-format
-msgid "Bad branch.%s.mergeoptions string: %s"
-msgstr ""
-
-#: builtin/merge.c:627
-msgid "git write-tree failed to write a tree"
-msgstr ""
-
-#: builtin/merge.c:677
-msgid "failed to read the cache"
-msgstr ""
-
-#: builtin/merge.c:694
-msgid "Unable to write index."
-msgstr ""
-
-#: builtin/merge.c:707
-msgid "Not handling anything other than two heads merge."
-msgstr ""
-
-#: builtin/merge.c:721
-#, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr ""
-
-#: builtin/merge.c:735
-#, c-format
-msgid "unable to write %s"
-msgstr ""
-
-#: builtin/merge.c:874
-#, c-format
-msgid "Could not read from '%s'"
-msgstr ""
-
-#: builtin/merge.c:883
-#, c-format
-msgid "Not committing merge; use 'git commit' to complete the merge.\n"
-msgstr ""
-
-#: builtin/merge.c:889
-msgid ""
-"Please enter a commit message to explain why this merge is necessary,\n"
-"especially if it merges an updated upstream into a topic branch.\n"
-"\n"
-"Lines starting with '#' will be ignored, and an empty message aborts\n"
-"the commit.\n"
-msgstr ""
-
-#: builtin/merge.c:913
-msgid "Empty commit message."
-msgstr ""
-
-#: builtin/merge.c:925
-#, c-format
-msgid "Wonderful.\n"
-msgstr ""
-
-#: builtin/merge.c:998
-#, c-format
-msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
-msgstr ""
-
-#: builtin/merge.c:1014
-#, c-format
-msgid "'%s' is not a commit"
-msgstr ""
-
-#: builtin/merge.c:1055
-msgid "No current branch."
-msgstr ""
-
-#: builtin/merge.c:1057
-msgid "No remote for the current branch."
-msgstr ""
-
-#: builtin/merge.c:1059
-msgid "No default upstream defined for the current branch."
-msgstr ""
-
-#: builtin/merge.c:1064
-#, c-format
-msgid "No remote tracking branch for %s from %s"
-msgstr ""
-
-#: builtin/merge.c:1186
-msgid "There is no merge to abort (MERGE_HEAD missing)."
-msgstr ""
-
-#: builtin/merge.c:1202 git-pull.sh:31
-msgid ""
-"You have not concluded your merge (MERGE_HEAD exists).\n"
-"Please, commit your changes before you can merge."
-msgstr ""
-
-#: builtin/merge.c:1205 git-pull.sh:34
-msgid "You have not concluded your merge (MERGE_HEAD exists)."
-msgstr ""
-
-#: builtin/merge.c:1209
-msgid ""
-"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
-"Please, commit your changes before you can merge."
-msgstr ""
-
-#: builtin/merge.c:1212
-msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
-msgstr ""
-
-#: builtin/merge.c:1221
-msgid "You cannot combine --squash with --no-ff."
-msgstr ""
-
-#: builtin/merge.c:1226
-msgid "You cannot combine --no-ff with --ff-only."
-msgstr ""
-
-#: builtin/merge.c:1233
-msgid "No commit specified and merge.defaultToUpstream not set."
-msgstr ""
-
-#: builtin/merge.c:1264
-msgid "Can merge only exactly one commit into empty head"
-msgstr ""
-
-#: builtin/merge.c:1267
-msgid "Squash commit into empty head not supported yet"
-msgstr ""
-
-#: builtin/merge.c:1269
-msgid "Non-fast-forward commit does not make sense into an empty head"
-msgstr ""
-
-#: builtin/merge.c:1273 builtin/merge.c:1317
-#, c-format
-msgid "%s - not something we can merge"
-msgstr ""
-
-#: builtin/merge.c:1383
-#, c-format
-msgid "Updating %s..%s\n"
-msgstr ""
-
-#: builtin/merge.c:1421
-#, c-format
-msgid "Trying really trivial in-index merge...\n"
-msgstr ""
-
-#: builtin/merge.c:1428
-#, c-format
-msgid "Nope.\n"
-msgstr ""
-
-#: builtin/merge.c:1460
-msgid "Not possible to fast-forward, aborting."
-msgstr ""
-
-#: builtin/merge.c:1483 builtin/merge.c:1560
-#, c-format
-msgid "Rewinding the tree to pristine...\n"
-msgstr ""
-
-#: builtin/merge.c:1487
-#, c-format
-msgid "Trying merge strategy %s...\n"
-msgstr ""
-
-#: builtin/merge.c:1551
-#, c-format
-msgid "No merge strategy handled the merge.\n"
-msgstr ""
-
-#: builtin/merge.c:1553
-#, c-format
-msgid "Merge with strategy %s failed.\n"
-msgstr ""
-
-#: builtin/merge.c:1562
-#, c-format
-msgid "Using the %s to prepare resolving by hand.\n"
-msgstr ""
-
-#: builtin/merge.c:1573
-#, c-format
-msgid "Automatic merge went well; stopped before committing as requested\n"
-msgstr ""
-
-#: builtin/mv.c:108
-#, c-format
-msgid "Checking rename of '%s' to '%s'\n"
-msgstr ""
-
-#: builtin/mv.c:112
-msgid "bad source"
-msgstr ""
-
-#: builtin/mv.c:115
-msgid "can not move directory into itself"
-msgstr ""
-
-#: builtin/mv.c:118
-msgid "cannot move directory over file"
-msgstr ""
-
-#: builtin/mv.c:128
-#, c-format
-msgid "Huh? %.*s is in index?"
-msgstr ""
-
-#: builtin/mv.c:140
-msgid "source directory is empty"
-msgstr ""
-
-#: builtin/mv.c:171
-msgid "not under version control"
-msgstr ""
-
-#: builtin/mv.c:173
-msgid "destination exists"
-msgstr ""
-
-#: builtin/mv.c:181
-#, c-format
-msgid "overwriting '%s'"
-msgstr ""
-
-#: builtin/mv.c:184
-msgid "Cannot overwrite"
-msgstr ""
-
-#: builtin/mv.c:187
-msgid "multiple sources for the same target"
-msgstr ""
-
-#: builtin/mv.c:202
-#, c-format
-msgid "%s, source=%s, destination=%s"
-msgstr ""
-
-#: builtin/mv.c:212
-#, c-format
-msgid "Renaming %s to %s\n"
-msgstr ""
-
-#: builtin/mv.c:215
-#, c-format
-msgid "renaming '%s' failed"
-msgstr ""
-
-#: builtin/notes.c:139
-#, c-format
-msgid "unable to start 'show' for object '%s'"
-msgstr ""
-
-#: builtin/notes.c:145
-msgid "can't fdopen 'show' output fd"
-msgstr ""
-
-#: builtin/notes.c:155
-#, c-format
-msgid "failed to close pipe to 'show' for object '%s'"
-msgstr ""
-
-#: builtin/notes.c:158
-#, c-format
-msgid "failed to finish 'show' for object '%s'"
-msgstr ""
-
-#: builtin/notes.c:175 builtin/tag.c:343
-#, c-format
-msgid "could not create file '%s'"
-msgstr ""
-
-#: builtin/notes.c:189
-msgid "Please supply the note contents using either -m or -F option"
-msgstr ""
-
-#: builtin/notes.c:210 builtin/notes.c:973
-#, c-format
-msgid "Removing note for object %s\n"
-msgstr ""
-
-#: builtin/notes.c:215
-msgid "unable to write note object"
-msgstr ""
-
-#: builtin/notes.c:217
-#, c-format
-msgid "The note contents has been left in %s"
-msgstr ""
-
-#: builtin/notes.c:251 builtin/tag.c:521
-#, c-format
-msgid "cannot read '%s'"
-msgstr ""
-
-#: builtin/notes.c:253 builtin/tag.c:524
-#, c-format
-msgid "could not open or read '%s'"
-msgstr ""
-
-#: builtin/notes.c:272 builtin/notes.c:445 builtin/notes.c:447
-#: builtin/notes.c:507 builtin/notes.c:561 builtin/notes.c:644
-#: builtin/notes.c:649 builtin/notes.c:724 builtin/notes.c:766
-#: builtin/notes.c:968 builtin/reset.c:293 builtin/tag.c:537
-#, c-format
-msgid "Failed to resolve '%s' as a valid ref."
-msgstr ""
-
-#: builtin/notes.c:275
-#, c-format
-msgid "Failed to read object '%s'."
-msgstr ""
-
-#: builtin/notes.c:299
-msgid "Cannot commit uninitialized/unreferenced notes tree"
-msgstr ""
-
-#: builtin/notes.c:340
-#, c-format
-msgid "Bad notes.rewriteMode value: '%s'"
-msgstr ""
-
-#: builtin/notes.c:350
-#, c-format
-msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
-msgstr ""
-
-#. TRANSLATORS: The first %s is the name of the
-#. environment variable, the second %s is its value
-#: builtin/notes.c:377
-#, c-format
-msgid "Bad %s value: '%s'"
-msgstr ""
-
-#: builtin/notes.c:441
-#, c-format
-msgid "Malformed input line: '%s'."
-msgstr ""
-
-#: builtin/notes.c:456
-#, c-format
-msgid "Failed to copy notes from '%s' to '%s'"
-msgstr ""
-
-#: builtin/notes.c:500 builtin/notes.c:554 builtin/notes.c:627
-#: builtin/notes.c:639 builtin/notes.c:712 builtin/notes.c:759
-#: builtin/notes.c:1033
-msgid "too many parameters"
-msgstr ""
-
-#: builtin/notes.c:513 builtin/notes.c:772
-#, c-format
-msgid "No note found for object %s."
-msgstr ""
-
-#: builtin/notes.c:580
-#, c-format
-msgid ""
-"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
-msgstr ""
-
-#: builtin/notes.c:585 builtin/notes.c:662
-#, c-format
-msgid "Overwriting existing notes for object %s\n"
-msgstr ""
-
-#: builtin/notes.c:635
-msgid "too few parameters"
-msgstr ""
-
-#: builtin/notes.c:656
-#, c-format
-msgid ""
-"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
-msgstr ""
-
-#: builtin/notes.c:668
-#, c-format
-msgid "Missing notes on source object %s. Cannot copy."
-msgstr ""
-
-#: builtin/notes.c:717
-#, c-format
-msgid ""
-"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
-"Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
-msgstr ""
-
-#: builtin/notes.c:971
-#, c-format
-msgid "Object %s has no note\n"
-msgstr ""
-
-#: builtin/notes.c:1103
-#, c-format
-msgid "Unknown subcommand: %s"
-msgstr ""
-
-#: builtin/pack-objects.c:2310
-#, c-format
-msgid "unsupported index version %s"
-msgstr ""
-
-#: builtin/pack-objects.c:2314
-#, c-format
-msgid "bad index version '%s'"
-msgstr ""
-
-#: builtin/pack-objects.c:2322
-#, c-format
-msgid "option %s does not accept negative form"
-msgstr ""
-
-#: builtin/pack-objects.c:2326
-#, c-format
-msgid "unable to parse value '%s' for option %s"
-msgstr ""
-
-#: builtin/push.c:44
-msgid "tag shorthand without <tag>"
-msgstr ""
-
-#: builtin/push.c:63
-msgid "--delete only accepts plain target ref names"
-msgstr ""
-
-#: builtin/push.c:73
-#, c-format
-msgid ""
-"You are not currently on a branch.\n"
-"To push the history leading to the current (detached HEAD)\n"
-"state now, use\n"
-"\n"
-" git push %s HEAD:<name-of-remote-branch>\n"
-msgstr ""
-
-#: builtin/push.c:80
-#, c-format
-msgid ""
-"The current branch %s has no upstream branch.\n"
-"To push the current branch and set the remote as upstream, use\n"
-"\n"
-" git push --set-upstream %s %s\n"
-msgstr ""
-
-#: builtin/push.c:88
-#, c-format
-msgid "The current branch %s has multiple upstream branches, refusing to push."
-msgstr ""
-
-#: builtin/push.c:111
-msgid ""
-"You didn't specify any refspecs to push, and push.default is \"nothing\"."
-msgstr ""
-
-#: builtin/push.c:131
-#, c-format
-msgid "Pushing to %s\n"
-msgstr ""
-
-#: builtin/push.c:135
-#, c-format
-msgid "failed to push some refs to '%s'"
-msgstr ""
-
-#: builtin/push.c:143
-#, c-format
-msgid ""
-"To prevent you from losing history, non-fast-forward updates were rejected\n"
-"Merge the remote changes (e.g. 'git pull') before pushing again. See the\n"
-"'Note about fast-forwards' section of 'git push --help' for details.\n"
-msgstr ""
-
-#: builtin/push.c:160
-#, c-format
-msgid "bad repository '%s'"
-msgstr ""
-
-#: builtin/push.c:161
-msgid ""
-"No configured push destination.\n"
-"Either specify the URL from the command-line or configure a remote "
-"repository using\n"
-"\n"
-" git remote add <name> <url>\n"
-"\n"
-"and then push using the remote name\n"
-"\n"
-" git push <name>\n"
-msgstr ""
-
-#: builtin/push.c:176
-msgid "--all and --tags are incompatible"
-msgstr ""
-
-#: builtin/push.c:177
-msgid "--all can't be combined with refspecs"
-msgstr ""
-
-#: builtin/push.c:182
-msgid "--mirror and --tags are incompatible"
-msgstr ""
-
-#: builtin/push.c:183
-msgid "--mirror can't be combined with refspecs"
-msgstr ""
-
-#: builtin/push.c:188
-msgid "--all and --mirror are incompatible"
-msgstr ""
-
-#: builtin/push.c:274
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr ""
-
-#: builtin/push.c:276
-msgid "--delete doesn't make sense without any refs"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "mixed"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "soft"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "hard"
-msgstr ""
-
-#: builtin/reset.c:33
-msgid "keep"
-msgstr ""
-
-#: builtin/reset.c:77
-msgid "You do not have a valid HEAD."
-msgstr ""
-
-#: builtin/reset.c:79
-msgid "Failed to find tree of HEAD."
-msgstr ""
-
-#: builtin/reset.c:85
-#, c-format
-msgid "Failed to find tree of %s."
-msgstr ""
-
-#: builtin/reset.c:96
-msgid "Could not write new index file."
-msgstr ""
-
-#: builtin/reset.c:106
-#, c-format
-msgid "HEAD is now at %s"
-msgstr ""
-
-#: builtin/reset.c:130
-msgid "Could not read index"
-msgstr ""
-
-#: builtin/reset.c:133
-msgid "Unstaged changes after reset:"
-msgstr ""
-
-#: builtin/reset.c:223
-#, c-format
-msgid "Cannot do a %s reset in the middle of a merge."
-msgstr ""
-
-#: builtin/reset.c:297
-#, c-format
-msgid "Could not parse object '%s'."
-msgstr ""
-
-#: builtin/reset.c:302
-msgid "--patch is incompatible with --{hard,mixed,soft}"
-msgstr ""
-
-#: builtin/reset.c:311
-msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
-msgstr ""
-
-#: builtin/reset.c:313
-#, c-format
-msgid "Cannot do %s reset with paths."
-msgstr ""
-
-#: builtin/reset.c:325
-#, c-format
-msgid "%s reset is not allowed in a bare repository"
-msgstr ""
-
-#: builtin/reset.c:341
-#, c-format
-msgid "Could not reset index file to revision '%s'."
-msgstr ""
-
-#: builtin/revert.c:70 builtin/revert.c:91
-#, c-format
-msgid "%s: %s cannot be used with %s"
-msgstr ""
-
-#: builtin/revert.c:126
-msgid "program error"
-msgstr ""
-
-#: builtin/revert.c:209
-msgid "revert failed"
-msgstr ""
-
-#: builtin/revert.c:224
-msgid "cherry-pick failed"
-msgstr ""
-
-#: builtin/rm.c:109
-#, c-format
-msgid ""
-"'%s' has staged content different from both the file and the HEAD\n"
-"(use -f to force removal)"
-msgstr ""
-
-#: builtin/rm.c:115
-#, c-format
-msgid ""
-"'%s' has changes staged in the index\n"
-"(use --cached to keep the file, or -f to force removal)"
-msgstr ""
-
-#: builtin/rm.c:119
-#, c-format
-msgid ""
-"'%s' has local modifications\n"
-"(use --cached to keep the file, or -f to force removal)"
-msgstr ""
-
-#: builtin/rm.c:194
-#, c-format
-msgid "not removing '%s' recursively without -r"
-msgstr ""
-
-#: builtin/rm.c:230
-#, c-format
-msgid "git rm: unable to remove %s"
-msgstr ""
-
-#: builtin/shortlog.c:157
-#, c-format
-msgid "Missing author: %s"
-msgstr ""
-
-#: builtin/tag.c:58
-#, c-format
-msgid "malformed object at '%s'"
-msgstr ""
-
-#: builtin/tag.c:205
-#, c-format
-msgid "tag name too long: %.*s..."
-msgstr ""
-
-#: builtin/tag.c:210
-#, c-format
-msgid "tag '%s' not found."
-msgstr ""
-
-#: builtin/tag.c:225
-#, c-format
-msgid "Deleted tag '%s' (was %s)\n"
-msgstr ""
-
-#: builtin/tag.c:237
-#, c-format
-msgid "could not verify the tag '%s'"
-msgstr ""
-
-#: builtin/tag.c:247
-msgid ""
-"\n"
-"#\n"
-"# Write a tag message\n"
-"# Lines starting with '#' will be ignored.\n"
-"#\n"
-msgstr ""
-
-#: builtin/tag.c:254
-msgid ""
-"\n"
-"#\n"
-"# Write a tag message\n"
-"# Lines starting with '#' will be kept; you may remove them yourself if you "
-"want to.\n"
-"#\n"
-msgstr ""
-
-#: builtin/tag.c:294
-msgid "unable to sign the tag"
-msgstr ""
-
-#: builtin/tag.c:296
-msgid "unable to write tag file"
-msgstr ""
-
-#: builtin/tag.c:321
-msgid "bad object type."
-msgstr ""
-
-#: builtin/tag.c:334
-msgid "tag header too big."
-msgstr ""
-
-#: builtin/tag.c:366
-msgid "no tag message?"
-msgstr ""
-
-#: builtin/tag.c:372
-#, c-format
-msgid "The tag message has been left in %s\n"
-msgstr ""
-
-#: builtin/tag.c:421
-msgid "switch 'points-at' requires an object"
-msgstr ""
-
-#: builtin/tag.c:423
-#, c-format
-msgid "malformed object name '%s'"
-msgstr ""
-
-#: builtin/tag.c:502
-msgid "-n option is only allowed with -l."
-msgstr ""
-
-#: builtin/tag.c:504
-msgid "--contains option is only allowed with -l."
-msgstr ""
-
-#: builtin/tag.c:506
-msgid "--points-at option is only allowed with -l."
-msgstr ""
-
-#: builtin/tag.c:514
-msgid "only one -F or -m option is allowed."
-msgstr ""
-
-#: builtin/tag.c:534
-msgid "too many params"
-msgstr ""
-
-#: builtin/tag.c:540
-#, c-format
-msgid "'%s' is not a valid tag name."
-msgstr ""
-
-#: builtin/tag.c:545
-#, c-format
-msgid "tag '%s' already exists"
-msgstr ""
-
-#: builtin/tag.c:563
-#, c-format
-msgid "%s: cannot lock the ref"
-msgstr ""
-
-#: builtin/tag.c:565
-#, c-format
-msgid "%s: cannot update the ref"
-msgstr ""
-
-#: builtin/tag.c:567
-#, c-format
-msgid "Updated tag '%s' (was %s)\n"
-msgstr ""
-
-#: git-am.sh:49
-msgid "You need to set your committer info first"
-msgstr ""
-
-#: git-am.sh:135
-msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr ""
-
-#: git-am.sh:144
-msgid ""
-"Did you hand edit your patch?\n"
-"It does not apply to blobs recorded in its index."
-msgstr ""
-
-#: git-am.sh:153
-msgid "Falling back to patching base and 3-way merge..."
-msgstr ""
-
-#: git-am.sh:265
-msgid "Only one StGIT patch series can be applied at once"
-msgstr ""
-
-#: git-am.sh:352
-#, sh-format
-msgid "Patch format $patch_format is not supported."
-msgstr ""
-
-#: git-am.sh:354
-msgid "Patch format detection failed."
-msgstr ""
-
-#: git-am.sh:406
-msgid "-d option is no longer supported. Do not use."
-msgstr ""
-
-#: git-am.sh:469
-#, sh-format
-msgid "previous rebase directory $dotest still exists but mbox given."
-msgstr ""
-
-#: git-am.sh:474
-msgid "Please make up your mind. --skip or --abort?"
-msgstr ""
-
-#: git-am.sh:501
-msgid "Resolve operation not in progress, we are not resuming."
-msgstr ""
-
-#: git-am.sh:567
-#, sh-format
-msgid "Dirty index: cannot apply patches (dirty: $files)"
-msgstr ""
-
-#: git-am.sh:743
-msgid "cannot be interactive without stdin connected to a terminal."
-msgstr ""
-
-#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
-#. in your translation. The program will only accept English
-#. input at this point.
-#: git-am.sh:754
-msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
-msgstr ""
-
-#: git-am.sh:790
-#, sh-format
-msgid "Applying: $FIRSTLINE"
-msgstr ""
-
-#: git-am.sh:835
-msgid "No changes -- Patch already applied."
-msgstr ""
-
-#: git-am.sh:861
-msgid "applying to an empty history"
-msgstr ""
-
-#. TRANSLATORS: Make sure to include [Y] and [n] in your
-#. translation. The program will only accept English input
-#. at this point.
-#: git-bisect.sh:54
-msgid "Do you want me to do it for you [Y/n]? "
-msgstr ""
-
-#: git-bisect.sh:95
-#, sh-format
-msgid "unrecognised option: '$arg'"
-msgstr ""
-
-#: git-bisect.sh:99
-#, sh-format
-msgid "'$arg' does not appear to be a valid revision"
-msgstr ""
-
-#: git-bisect.sh:117
-msgid "Bad HEAD - I need a HEAD"
-msgstr ""
-
-#: git-bisect.sh:130
-#, sh-format
-msgid ""
-"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'."
-msgstr ""
-
-#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
-msgstr ""
-
-#: git-bisect.sh:144
-msgid "Bad HEAD - strange symbolic ref"
-msgstr ""
-
-#: git-bisect.sh:189
-#, sh-format
-msgid "Bad bisect_write argument: $state"
-msgstr ""
-
-#: git-bisect.sh:218
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr ""
-
-#: git-bisect.sh:232
-msgid "Please call 'bisect_state' with at least one argument."
-msgstr ""
-
-#: git-bisect.sh:244
-#, sh-format
-msgid "Bad rev input: $rev"
-msgstr ""
-
-#: git-bisect.sh:250
-msgid "'git bisect bad' can take only one argument."
-msgstr ""
-
-#. TRANSLATORS: Make sure to include [Y] and [n] in your
-#. translation. The program will only accept English input
-#. at this point.
-#: git-bisect.sh:279
-msgid "Are you sure [Y/n]? "
-msgstr ""
-
-#: git-bisect.sh:354
-#, sh-format
-msgid "'$invalid' is not a valid commit"
-msgstr ""
-
-#: git-bisect.sh:363
-#, sh-format
-msgid ""
-"Could not check out original HEAD '$branch'.\n"
-"Try 'git bisect reset <commit>'."
-msgstr ""
-
-#: git-bisect.sh:390
-msgid "No logfile given"
-msgstr ""
-
-#: git-bisect.sh:391
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr ""
-
-#: git-bisect.sh:408
-msgid "?? what are you talking about?"
-msgstr ""
-
-#: git-bisect.sh:474
-msgid "We are not bisecting."
-msgstr ""
-
-#: git-pull.sh:21
-msgid ""
-"Pull is not possible because you have unmerged files.\n"
-"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n"
-"as appropriate to mark resolution, or use 'git commit -a'."
-msgstr ""
-
-#: git-pull.sh:25
-msgid "Pull is not possible because you have unmerged files."
-msgstr ""
-
-#: git-pull.sh:197
-msgid "updating an unborn branch with changes added to the index"
-msgstr ""
-
-#: git-pull.sh:253
-msgid "Cannot merge multiple branches into empty head"
-msgstr ""
-
-#: git-pull.sh:257
-msgid "Cannot rebase onto multiple branches"
-msgstr ""
-
-#: git-stash.sh:51
-msgid "git stash clear with parameters is unimplemented"
-msgstr ""
-
-#: git-stash.sh:74
-msgid "You do not have the initial commit yet"
-msgstr ""
-
-#: git-stash.sh:89
-msgid "Cannot save the current index state"
-msgstr ""
-
-#: git-stash.sh:123 git-stash.sh:136
-msgid "Cannot save the current worktree state"
-msgstr ""
-
-#: git-stash.sh:140
-msgid "No changes selected"
-msgstr ""
-
-#: git-stash.sh:143
-msgid "Cannot remove temporary index (can't happen)"
-msgstr ""
-
-#: git-stash.sh:156
-msgid "Cannot record working tree state"
-msgstr ""
-
-#: git-stash.sh:223
-msgid "No local changes to save"
-msgstr ""
-
-#: git-stash.sh:227
-msgid "Cannot initialize stash"
-msgstr ""
-
-#: git-stash.sh:235
-msgid "Cannot save the current status"
-msgstr ""
-
-#: git-stash.sh:253
-msgid "Cannot remove worktree changes"
-msgstr ""
-
-#: git-stash.sh:352
-msgid "No stash found."
-msgstr ""
-
-#: git-stash.sh:359
-#, sh-format
-msgid "Too many revisions specified: $REV"
-msgstr ""
-
-#: git-stash.sh:365
-#, sh-format
-msgid "$reference is not valid reference"
-msgstr ""
-
-#: git-stash.sh:393
-#, sh-format
-msgid "'$args' is not a stash-like commit"
-msgstr ""
-
-#: git-stash.sh:404
-#, sh-format
-msgid "'$args' is not a stash reference"
-msgstr ""
-
-#: git-stash.sh:412
-msgid "unable to refresh index"
-msgstr ""
-
-#: git-stash.sh:416
-msgid "Cannot apply a stash in the middle of a merge"
-msgstr ""
-
-#: git-stash.sh:424
-msgid "Conflicts in index. Try without --index."
-msgstr ""
-
-#: git-stash.sh:426
-msgid "Could not save index tree"
-msgstr ""
-
-#: git-stash.sh:460
-msgid "Cannot unstage modified files"
-msgstr ""
-
-#: git-stash.sh:491
-#, sh-format
-msgid "Dropped ${REV} ($s)"
-msgstr ""
-
-#: git-stash.sh:492
-#, sh-format
-msgid "${REV}: Could not drop stash entry"
-msgstr ""
-
-#: git-stash.sh:499
-msgid "No branch name specified"
-msgstr ""
-
-#: git-stash.sh:570
-msgid "(To restore them type \"git stash apply\")"
-msgstr ""
-
-#: git-submodule.sh:56
-#, sh-format
-msgid "cannot strip one component off url '$remoteurl'"
-msgstr ""
-
-#: git-submodule.sh:108
-#, sh-format
-msgid "No submodule mapping found in .gitmodules for path '$path'"
-msgstr ""
-
-#: git-submodule.sh:173
-#, sh-format
-msgid "Clone of '$url' into submodule path '$path' failed"
-msgstr ""
-
-#: git-submodule.sh:247
-#, sh-format
-msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr ""
-
-#: git-submodule.sh:264
-#, sh-format
-msgid "'$path' already exists in the index"
-msgstr ""
-
-#: git-submodule.sh:281
-#, sh-format
-msgid "'$path' already exists and is not a valid git repo"
-msgstr ""
-
-#: git-submodule.sh:295
-#, sh-format
-msgid "Unable to checkout submodule '$path'"
-msgstr ""
-
-#: git-submodule.sh:300
-#, sh-format
-msgid "Failed to add submodule '$path'"
-msgstr ""
-
-#: git-submodule.sh:305
-#, sh-format
-msgid "Failed to register submodule '$path'"
-msgstr ""
-
-#: git-submodule.sh:347
-#, sh-format
-msgid "Entering '$prefix$path'"
-msgstr ""
-
-#: git-submodule.sh:359
-#, sh-format
-msgid "Stopping at '$path'; script returned non-zero status."
-msgstr ""
-
-#: git-submodule.sh:401
-#, sh-format
-msgid "No url found for submodule path '$path' in .gitmodules"
-msgstr ""
-
-#: git-submodule.sh:410
-#, sh-format
-msgid "Failed to register url for submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:418
-#, sh-format
-msgid "Failed to register update mode for submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:420
-#, sh-format
-msgid "Submodule '$name' ($url) registered for path '$path'"
-msgstr ""
-
-#: git-submodule.sh:519
-#, sh-format
-msgid ""
-"Submodule path '$path' not initialized\n"
-"Maybe you want to use 'update --init'?"
-msgstr ""
-
-#: git-submodule.sh:532
-#, sh-format
-msgid "Unable to find current revision in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:551
-#, sh-format
-msgid "Unable to fetch in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:565
-#, sh-format
-msgid "Unable to rebase '$sha1' in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:566
-#, sh-format
-msgid "Submodule path '$path': rebased into '$sha1'"
-msgstr ""
-
-#: git-submodule.sh:571
-#, sh-format
-msgid "Unable to merge '$sha1' in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:572
-#, sh-format
-msgid "Submodule path '$path': merged in '$sha1'"
-msgstr ""
-
-#: git-submodule.sh:577
-#, sh-format
-msgid "Unable to checkout '$sha1' in submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:578
-#, sh-format
-msgid "Submodule path '$path': checked out '$sha1'"
-msgstr ""
-
-#: git-submodule.sh:600 git-submodule.sh:923
-#, sh-format
-msgid "Failed to recurse into submodule path '$path'"
-msgstr ""
-
-#: git-submodule.sh:708
-msgid "--"
-msgstr ""
-
-#: git-submodule.sh:766
-#, sh-format
-msgid " Warn: $name doesn't contain commit $sha1_src"
-msgstr ""
-
-#: git-submodule.sh:769
-#, sh-format
-msgid " Warn: $name doesn't contain commit $sha1_dst"
-msgstr ""
-
-#: git-submodule.sh:772
-#, sh-format
-msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst"
-msgstr ""
-
-#: git-submodule.sh:797
-msgid "blob"
-msgstr ""
-
-#: git-submodule.sh:798
-msgid "submodule"
-msgstr ""
-
-#: git-submodule.sh:969
-#, sh-format
-msgid "Synchronizing submodule url for '$name'"
-msgstr ""
diff --git a/po/sv.po b/po/sv.po
index 50cc8cbe1..8c3c59aa3 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,14 +1,14 @@
# Swedish translations for Git.
-# Copyright (C) 2010-2013 Peter krefting <peter@softwolves.pp.se>
+# Copyright (C) 2010-2014 Peter krefting <peter@softwolves.pp.se>
# This file is distributed under the same license as the Git package.
-# Peter Krefting <peter@softwolves.pp.se>, 2010, 2011, 2012, 2013.
+# Peter Krefting <peter@softwolves.pp.se>, 2010, 2011, 2012, 2013, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: git 1.8.4\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2013-11-02 08:06+0800\n"
-"PO-Revision-Date: 2013-11-09 19:02+0100\n"
+"POT-Creation-Date: 2014-02-01 08:06+0800\n"
+"PO-Revision-Date: 2014-02-02 17:21+0100\n"
"Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -57,7 +57,7 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote <arkiv> [--exec <kmd>] --list"
-#: archive.c:242 builtin/add.c:240 builtin/add.c:556 builtin/rm.c:328
+#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "sökvägsangivelsen \"%s\" motsvarade inte några filer"
@@ -78,8 +78,8 @@ msgstr "prefix"
msgid "prepend prefix to each pathname in the archive"
msgstr "lägg till prefix till varje sökväg i arkivet"
-#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2264
-#: builtin/blame.c:2265 builtin/config.c:58 builtin/fast-export.c:680
+#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265
+#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680
#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77
#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408
#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154
@@ -262,64 +262,64 @@ msgstr "Misslyckades låsa referens för uppdatering"
msgid "Failed to write ref"
msgstr "Misslyckades skriva referens"
-#: bundle.c:36
+#: bundle.c:37
#, c-format
msgid "'%s' does not look like a v2 bundle file"
msgstr "'%s' ser inte ut som en v2-bundle-fil"
-#: bundle.c:63
+#: bundle.c:64
#, c-format
msgid "unrecognized header: %s%s (%d)"
msgstr "okänt huvud: %s%s (%d)"
-#: bundle.c:89 builtin/commit.c:706
+#: bundle.c:90 builtin/commit.c:706
#, c-format
msgid "could not open '%s'"
msgstr "kunde inte öppna \"%s\""
-#: bundle.c:140
+#: bundle.c:141
msgid "Repository lacks these prerequisite commits:"
msgstr "Arkivet saknar dessa nödvändiga incheckningar:"
-#: bundle.c:164 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
-#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:364
+#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
+#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357
#: builtin/shortlog.c:158
msgid "revision walk setup failed"
msgstr "misslyckades skapa revisionstraversering"
-#: bundle.c:186
+#: bundle.c:187
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "Paketet (bundlen) denna referens:"
msgstr[1] "Paketet (bundlen) dessa %d referenser:"
-#: bundle.c:193
+#: bundle.c:194
msgid "The bundle records a complete history."
msgstr "Paketet (bundlen) beskriver en komplett historik."
-#: bundle.c:195
+#: bundle.c:196
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "Paketet (bundlen) kräver denna referens:"
msgstr[1] "Paketet (bundlen) kräver dessa %d referenser:"
-#: bundle.c:294
+#: bundle.c:296
msgid "rev-list died"
msgstr "rev-list dog"
-#: bundle.c:300 builtin/log.c:1329 builtin/shortlog.c:261
+#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261
#, c-format
msgid "unrecognized argument: %s"
msgstr "okänt argument: %s"
-#: bundle.c:335
+#: bundle.c:337
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "referensen \"%s\" exkluderas av argumenten till rev-list"
-#: bundle.c:380
+#: bundle.c:382
msgid "Refusing to create empty bundle."
msgstr "Vägrar skapa ett tomt paket (bundle)."
@@ -354,16 +354,16 @@ msgstr "%s %s är inte en incheckning!"
msgid "memory exhausted"
msgstr "minnet slut"
-#: connected.c:60
+#: connected.c:70
msgid "Could not run 'git rev-list'"
msgstr "Kunde inte köra \"git rev-list\""
-#: connected.c:80
+#: connected.c:90
#, c-format
msgid "failed write to rev-list: %s"
msgstr "kunde inte skriva till rev-list: %s"
-#: connected.c:88
+#: connected.c:98
#, c-format
msgid "failed to close rev-list's stdin: %s"
msgstr "kunde inte stänga rev-list:s standard in: %s"
@@ -435,22 +435,27 @@ msgid_plural "%lu years ago"
msgstr[0] "%lu år sedan"
msgstr[1] "%lu år sedan"
-#: diff.c:112
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr "kunde inte läsa orderfilen \"%s\""
+
+#: diff.c:113
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr " Misslyckades tolka dirstat-avskärningsprocentandel \"%s\"\n"
-#: diff.c:117
+#: diff.c:118
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr " Okänd dirstat-parameter \"%s\"\n"
-#: diff.c:210
+#: diff.c:213
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr "Okänt värde för konfigurationsvariabeln \"diff.submodule\": \"%s\""
-#: diff.c:260
+#: diff.c:263
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -459,7 +464,7 @@ msgstr ""
"Hittade fel i konfigurationsvariabeln \"diff.dirstat\":\n"
"%s"
-#: diff.c:3490
+#: diff.c:3509
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -468,7 +473,7 @@ msgstr ""
"Misslyckades tolka argument till flaggan --dirstat/-X;\n"
"%s"
-#: diff.c:3504
+#: diff.c:3523
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "Misslyckades tolka argument till flaggan --submodule: \"%s\""
@@ -579,7 +584,7 @@ msgid "failed to read the cache"
msgstr "misslyckads läsa cachen"
#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559
-#: builtin/clone.c:655
+#: builtin/clone.c:661
msgid "unable to write new index file"
msgstr "kunde inte skriva ny indexfil"
@@ -628,7 +633,7 @@ msgstr "kan inte läsa objektet %s: \"%s\""
msgid "blob expected for %s '%s'"
msgstr "blob förväntades för %s \"%s\""
-#: merge-recursive.c:774 builtin/clone.c:311
+#: merge-recursive.c:774 builtin/clone.c:317
#, c-format
msgid "failed to open '%s'"
msgstr "misslyckades öppna \"%s\""
@@ -678,7 +683,7 @@ msgstr ""
msgid "rename"
msgstr "namnbyte"
-#: merge-recursive.c:1082
+#: merge-recursive.c:1082 wt-status.c:283
msgid "renamed"
msgstr "namnbytt"
@@ -740,7 +745,7 @@ msgstr "objektet %s är inte en blob"
msgid "modify"
msgstr "ändra"
-#: merge-recursive.c:1565
+#: merge-recursive.c:1565 wt-status.c:281
msgid "modified"
msgstr "ändrad"
@@ -762,7 +767,7 @@ msgstr "Hoppade över %s (sammanslagen samma som befintlig)"
msgid "Auto-merging %s"
msgstr "Slår ihop %s automatiskt"
-#: merge-recursive.c:1634 git-submodule.sh:1125
+#: merge-recursive.c:1634 git-submodule.sh:1148
msgid "submodule"
msgstr "undermodul"
@@ -833,7 +838,7 @@ msgstr "sammanslagningen returnerade ingen incheckning"
msgid "Could not parse object '%s'"
msgstr "Kunde inte tolka objektet \"%s\""
-#: merge-recursive.c:2010 builtin/merge.c:672
+#: merge-recursive.c:2010 builtin/merge.c:665
msgid "Unable to write index."
msgstr "Kunde inte skriva indexet."
@@ -888,12 +893,12 @@ msgstr " %s"
msgid "-NUM"
msgstr "-TAL"
-#: pathspec.c:118
+#: pathspec.c:133
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr ""
"de globala sökvägsinställningarna \"glob\" och \"noglob\" är inkompatibla"
-#: pathspec.c:128
+#: pathspec.c:143
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
@@ -901,36 +906,36 @@ msgstr ""
"den globala sökvägsinställningen \"literal\" är inkompatibel med alla andra "
"globala sökvägsinställningar"
-#: pathspec.c:158
+#: pathspec.c:177
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "ogiltig parameter för sökvägsuttrycket för \"prefix\""
-#: pathspec.c:164
+#: pathspec.c:183
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "felaktigt sökvägsuttryck \"%.*s\" i \"%s\""
-#: pathspec.c:168
+#: pathspec.c:187
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "\")\" saknas i slutet av sökvägsuttrycket för \"%s\""
-#: pathspec.c:186
+#: pathspec.c:205
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "Tecknet \"%c\" i sökvägsuttrycket i \"%s\" har inte implementerats"
-#: pathspec.c:211
+#: pathspec.c:230
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s: \"literal\" och \"glob\" är inkompatibla"
-#: pathspec.c:222
+#: pathspec.c:241
#, c-format
msgid "%s: '%s' is outside repository"
msgstr "%s: \"%s\" är utanför arkivet"
-#: pathspec.c:278
+#: pathspec.c:291
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Sökvägsangivelsen \"%s\" är i undermodulen \"%.*s\""
@@ -940,42 +945,74 @@ msgstr "Sökvägsangivelsen \"%s\" är i undermodulen \"%.*s\""
#. * name. E.g. when add--interactive dies when running
#. * "checkout -p"
#.
-#: pathspec.c:340
+#: pathspec.c:353
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr "%s: sökvägsuttrycket hanteras inte av det här kommandot: %s"
-#: pathspec.c:415
+#: pathspec.c:433
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "sökvägsangivelsen \"%s\" är på andra sidan av en symbolisk länk"
-#: remote.c:1833
+#: pathspec.c:442
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr ""
+"Ingenting att exkludera från med :(exkludera)-mönster.\n"
+"Glömde du kanske att antingen lägga till \":/\" eller \".\"?"
+
+#: remote.c:753
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "Kan inte hämta både %s och %s till %s"
+
+#: remote.c:757
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s spårar vanligtvis %s, inte %s"
+
+#: remote.c:761
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "%s spårar både %s och %s"
+
+#.
+#. * This last possibility doesn't occur because
+#. * FETCH_HEAD_IGNORE entries always appear at
+#. * the end of the list.
+#.
+#: remote.c:769
+msgid "Internal error"
+msgstr "Internt fel"
+
+#: remote.c:1871
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Din gren är baserad på \"%s\", men den har försvunnit uppströms.\n"
-#: remote.c:1837
+#: remote.c:1875
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (använd \"git branch --unset-upstream\" för att rätta)\n"
-#: remote.c:1840
+#: remote.c:1878
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr "Din gren är à jour med \"%s\".\n"
-#: remote.c:1844
+#: remote.c:1882
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] "Din gren ligger före \"%s\" med %d incheckning.\n"
msgstr[1] "Din gren ligger före \"%s\" med %d incheckningar.\n"
-#: remote.c:1850
+#: remote.c:1888
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (använd \"git push\" för att publicera dina lokala incheckningar)\n"
-#: remote.c:1853
+#: remote.c:1891
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -985,11 +1022,11 @@ msgstr[0] ""
msgstr[1] ""
"Din gren ligger efter \"%s\" med %d incheckningar, och kan snabbspolas.\n"
-#: remote.c:1861
+#: remote.c:1899
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (använd \"git pull\" för att uppdatera din lokala gren)\n"
-#: remote.c:1864
+#: remote.c:1902
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -1004,7 +1041,7 @@ msgstr[1] ""
"Din gren och \"%s\" har divergerat,\n"
"och har %d respektive %d olika incheckningar.\n"
-#: remote.c:1874
+#: remote.c:1912
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (använd \"git pull\" för att slå ihop fjärrgrenen med din egen)\n"
@@ -1017,14 +1054,14 @@ msgstr "misslyckades öppna /dev/null"
msgid "dup2(%d,%d) failed"
msgstr "dup2(%d,%d) misslyckades"
-#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903
-#: builtin/merge.c:1013 builtin/merge.c:1023
+#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896
+#: builtin/merge.c:1006 builtin/merge.c:1016
#, c-format
msgid "Could not open '%s' for writing"
msgstr "Kunde inte öppna \"%s\" för skrivning"
-#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793
-#: builtin/merge.c:1015 builtin/merge.c:1028
+#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786
+#: builtin/merge.c:1008 builtin/merge.c:1021
#, c-format
msgid "Could not write to '%s'"
msgstr "Kunde inte skriva till \"%s\""
@@ -1264,7 +1301,7 @@ msgstr "Kan inte ångra som första incheckning"
msgid "Can't cherry-pick into empty head"
msgstr "Kan inte göra \"cherry-pick\" i ett tomt huvud"
-#: sha1_name.c:440
+#: sha1_name.c:439
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -1286,21 +1323,21 @@ msgstr ""
"Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n"
"genom att köra \"git config advice.objectNameWarning false\""
-#: sha1_name.c:1112
+#: sha1_name.c:1070
msgid "HEAD does not point to a branch"
msgstr "HEAD pekar inte på en gren"
-#: sha1_name.c:1115
+#: sha1_name.c:1073
#, c-format
msgid "No such branch: '%s'"
msgstr "Okänd gren: \"%s\""
-#: sha1_name.c:1117
+#: sha1_name.c:1075
#, c-format
msgid "No upstream configured for branch '%s'"
msgstr "Ingen standarduppström angiven för grenen \"%s\""
-#: sha1_name.c:1121
+#: sha1_name.c:1079
#, c-format
msgid "Upstream branch '%s' not stored as a remote-tracking branch"
msgstr "Uppströmsgrenen \"%s\" är inte lagrad som en fjärrspårande gren"
@@ -1410,226 +1447,218 @@ msgstr "kan inte slå upp aktuell användare i passwd-filen: %s"
msgid "no such user"
msgstr "okänd användare"
-#: wt-status.c:146
+#: wt-status.c:150
msgid "Unmerged paths:"
msgstr "Ej sammanslagna sökvägar:"
-#: wt-status.c:173 wt-status.c:200
+#: wt-status.c:177 wt-status.c:204
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
msgstr " (använd \"git reset %s <fil>...\" för att ta bort från kö)"
-#: wt-status.c:175 wt-status.c:202
+#: wt-status.c:179 wt-status.c:206
msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr " (använd \"git rm --cached <fil>...\" för att ta bort från kö)"
-#: wt-status.c:179
+#: wt-status.c:183
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr " (använd \"git add <fil>...\" för att ange lösning)"
-#: wt-status.c:181 wt-status.c:185
+#: wt-status.c:185 wt-status.c:189
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr " (använd \"git add/rm <fil>...\" som lämpligt för att ange lösning)"
-#: wt-status.c:183
+#: wt-status.c:187
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr " (använd \"git rm <fil>...\" för att ange lösning)"
-#: wt-status.c:194
+#: wt-status.c:198
msgid "Changes to be committed:"
msgstr "Ändringar att checka in:"
-#: wt-status.c:212
+#: wt-status.c:216
msgid "Changes not staged for commit:"
msgstr "Ändringar ej i incheckningskön:"
-#: wt-status.c:216
+#: wt-status.c:220
msgid " (use \"git add <file>...\" to update what will be committed)"
msgstr ""
" (använd \"git add <fil>...\" för att uppdatera vad som skall checkas in)"
-#: wt-status.c:218
+#: wt-status.c:222
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr ""
" (använd \"git add/rm <fil>...\" för att uppdatera vad som skall checkas in)"
-#: wt-status.c:219
+#: wt-status.c:223
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr ""
" (använd \"git checkout -- <fil>...\" för att förkasta ändringar i "
"arbetskatalogen)"
-#: wt-status.c:221
+#: wt-status.c:225
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
" (checka in eller förkasta ospårat eller ändrat innehåll i undermoduler)"
-#: wt-status.c:233
+#: wt-status.c:237
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr ""
" (använd \"git %s <fil>...\" för att ta med i det som skall checkas in)"
-#: wt-status.c:250
+#: wt-status.c:254
msgid "bug"
msgstr "programfel"
-#: wt-status.c:255
+#: wt-status.c:259
msgid "both deleted:"
msgstr "borttaget av bägge:"
-#: wt-status.c:256
+#: wt-status.c:260
msgid "added by us:"
msgstr "tillagt av oss:"
-#: wt-status.c:257
+#: wt-status.c:261
msgid "deleted by them:"
msgstr "borttaget av dem:"
-#: wt-status.c:258
+#: wt-status.c:262
msgid "added by them:"
msgstr "tillagt av dem:"
-#: wt-status.c:259
+#: wt-status.c:263
msgid "deleted by us:"
msgstr "borttaget av oss:"
-#: wt-status.c:260
+#: wt-status.c:264
msgid "both added:"
msgstr "tillagt av bägge:"
-#: wt-status.c:261
+#: wt-status.c:265
msgid "both modified:"
msgstr "ändrat av bägge:"
-#: wt-status.c:291
-msgid "new commits, "
-msgstr "nya incheckningar, "
-
-#: wt-status.c:293
-msgid "modified content, "
-msgstr "ändrat innehåll, "
+#: wt-status.c:275
+msgid "new file"
+msgstr "ny fil"
-#: wt-status.c:295
-msgid "untracked content, "
-msgstr "ospårat innehåll, "
+#: wt-status.c:277
+msgid "copied"
+msgstr "kopierad"
-#: wt-status.c:312
-#, c-format
-msgid "new file: %s"
-msgstr "ny fil: %s"
-
-#: wt-status.c:315
-#, c-format
-msgid "copied: %s -> %s"
-msgstr "kopierad: %s -> %s"
+#: wt-status.c:279
+msgid "deleted"
+msgstr "borttagen"
-#: wt-status.c:318
-#, c-format
-msgid "deleted: %s"
-msgstr "borttagen: %s"
+#: wt-status.c:285
+msgid "typechange"
+msgstr "typbyte"
-#: wt-status.c:321
-#, c-format
-msgid "modified: %s"
-msgstr "ändrad: %s"
+#: wt-status.c:287
+msgid "unknown"
+msgstr "okänd"
-#: wt-status.c:324
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr "namnbyte: %s -> %s"
+#: wt-status.c:289
+msgid "unmerged"
+msgstr "osammanslagen"
-#: wt-status.c:327
-#, c-format
-msgid "typechange: %s"
-msgstr "typbyte: %s"
+#: wt-status.c:336
+msgid "new commits, "
+msgstr "nya incheckningar, "
-#: wt-status.c:330
-#, c-format
-msgid "unknown: %s"
-msgstr "okänd: %s"
+#: wt-status.c:338
+msgid "modified content, "
+msgstr "ändrat innehåll, "
-#: wt-status.c:333
-#, c-format
-msgid "unmerged: %s"
-msgstr "osammansl.: %s"
+#: wt-status.c:340
+msgid "untracked content, "
+msgstr "ospårat innehåll, "
-#: wt-status.c:336
+#: wt-status.c:357
#, c-format
msgid "bug: unhandled diff status %c"
msgstr "programfel: diff-status %c ej hanterad"
-#: wt-status.c:703
+#: wt-status.c:732
msgid "Submodules changed but not updated:"
msgstr "Undermoduler ändrade men inte uppdaterade:"
-#: wt-status.c:705
+#: wt-status.c:734
msgid "Submodule changes to be committed:"
msgstr "Undermodulers ändringar att checka in:"
-#: wt-status.c:848
+#: wt-status.c:836
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr ""
+"Rör inte raden ovan.\n"
+"Allt nedan kommer tas bort."
+
+#: wt-status.c:899
msgid "You have unmerged paths."
msgstr "Du har ej sammanslagna sökvägar."
-#: wt-status.c:851
+#: wt-status.c:902
msgid " (fix conflicts and run \"git commit\")"
msgstr " (rätta konflikter och kör \"git commit\")"
-#: wt-status.c:854
+#: wt-status.c:905
msgid "All conflicts fixed but you are still merging."
msgstr "Alla konflikter har rättats men du är fortfarande i en sammanslagning."
-#: wt-status.c:857
+#: wt-status.c:908
msgid " (use \"git commit\" to conclude merge)"
msgstr " (använd \"git commit\" för att slutföra sammanslagningen)"
-#: wt-status.c:867
+#: wt-status.c:918
msgid "You are in the middle of an am session."
msgstr "Du är i mitten av en körning av \"git am\"."
-#: wt-status.c:870
+#: wt-status.c:921
msgid "The current patch is empty."
msgstr "Aktuell patch är tom."
-#: wt-status.c:874
+#: wt-status.c:925
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (rätta konflikter och kör sedan \"git am --continue\")"
-#: wt-status.c:876
+#: wt-status.c:927
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (använd \"git am --skip\" för att hoppa över patchen)"
-#: wt-status.c:878
+#: wt-status.c:929
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr " (använd \"git am --abort\" för att återställa ursprungsgrenen)"
-#: wt-status.c:938 wt-status.c:955
+#: wt-status.c:989 wt-status.c:1006
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "Du håller på att ombasera grenen \"%s\" ovanpå \"%s\"."
-#: wt-status.c:943 wt-status.c:960
+#: wt-status.c:994 wt-status.c:1011
msgid "You are currently rebasing."
msgstr "Du håller på med en ombasering."
-#: wt-status.c:946
+#: wt-status.c:997
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (rätta konflikter och kör sedan \"git rebase --continue\")"
-#: wt-status.c:948
+#: wt-status.c:999
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (använd \"git rebase --skip\" för att hoppa över patchen)"
-#: wt-status.c:950
+#: wt-status.c:1001
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr " (använd \"git rebase --abort\" för att checka ut ursprungsgrenen)"
-#: wt-status.c:963
+#: wt-status.c:1014
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (alla konflikter rättade: kör \"git rebase --continue\")"
-#: wt-status.c:967
+#: wt-status.c:1018
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -1637,118 +1666,118 @@ msgstr ""
"Du håller på att dela upp en incheckning medan du ombaserar grenen \"%s\" "
"ovanpå \"%s\"."
-#: wt-status.c:972
+#: wt-status.c:1023
msgid "You are currently splitting a commit during a rebase."
msgstr "Du håller på att dela upp en incheckning i en ombasering."
-#: wt-status.c:975
+#: wt-status.c:1026
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr " (Så fort din arbetskatalog är ren, kör \"git rebase --continue\")"
-#: wt-status.c:979
+#: wt-status.c:1030
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"Du håller på att redigera en incheckning medan du ombaserar grenen \"%s\" "
"ovanpå \"%s\"."
-#: wt-status.c:984
+#: wt-status.c:1035
msgid "You are currently editing a commit during a rebase."
msgstr "Du håller på att redigera en incheckning under en ombasering."
-#: wt-status.c:987
+#: wt-status.c:1038
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
" (använd \"git commit --amend\" för att lägga till på aktuell incheckning)"
-#: wt-status.c:989
+#: wt-status.c:1040
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr " (använd \"git rebase --continue\" när du är nöjd med dina ändringar)"
-#: wt-status.c:999
+#: wt-status.c:1050
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "Du håller på med en \"cherry-pick\" av incheckningen %s."
-#: wt-status.c:1004
+#: wt-status.c:1055
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (rätta konflikter och kör sedan \"git cherry-pick --continue\")"
-#: wt-status.c:1007
+#: wt-status.c:1058
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr " (alla konflikter rättade: kör \"git cherry-pick --continue\")"
-#: wt-status.c:1009
+#: wt-status.c:1060
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (använd \"git cherry-pick --abort\" för att avbryta \"cherry-pick\"-"
"operationen)"
-#: wt-status.c:1018
+#: wt-status.c:1069
#, c-format
msgid "You are currently reverting commit %s."
msgstr "Du håller på med att ångra incheckningen %s."
-#: wt-status.c:1023
+#: wt-status.c:1074
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (rätta konflikter och kör sedan \"git revert --continue\")"
-#: wt-status.c:1026
+#: wt-status.c:1077
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (alla konflikter rättade: kör \"git revert --continue\")"
-#: wt-status.c:1028
+#: wt-status.c:1079
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr " (använd \"git revert --abort\" för att avbryta ångrandet)"
-#: wt-status.c:1039
+#: wt-status.c:1090
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "Du håller på med en \"bisect\", startad från grenen \"%s\"."
-#: wt-status.c:1043
+#: wt-status.c:1094
msgid "You are currently bisecting."
msgstr "Du håller på med en \"bisect\"."
-#: wt-status.c:1046
+#: wt-status.c:1097
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
" (använd \"git bisect reset\" för att komma tillbaka till ursprungsgrenen)"
-#: wt-status.c:1221
+#: wt-status.c:1272
msgid "On branch "
msgstr "PÃ¥ grenen "
-#: wt-status.c:1228
+#: wt-status.c:1279
msgid "rebase in progress; onto "
msgstr "ombasering pågår; ovanpå"
-#: wt-status.c:1235
+#: wt-status.c:1286
msgid "HEAD detached at "
msgstr "HEAD frånkopplad vid "
-#: wt-status.c:1237
+#: wt-status.c:1288
msgid "HEAD detached from "
msgstr "HEAD frånkopplad från "
-#: wt-status.c:1240
+#: wt-status.c:1291
msgid "Not currently on any branch."
msgstr "Inte på någon gren för närvarande."
-#: wt-status.c:1257
+#: wt-status.c:1308
msgid "Initial commit"
msgstr "Första incheckning"
-#: wt-status.c:1271
+#: wt-status.c:1322
msgid "Untracked files"
msgstr "Ospårade filer"
-#: wt-status.c:1273
+#: wt-status.c:1324
msgid "Ignored files"
msgstr "Ignorerade filer"
-#: wt-status.c:1277
+#: wt-status.c:1328
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1760,32 +1789,32 @@ msgstr ""
"lägga till nya filer själv (se \"git help status\")."
# %s är nästa sträng eller tom.
-#: wt-status.c:1283
+#: wt-status.c:1334
#, c-format
msgid "Untracked files not listed%s"
msgstr "Ospårade filer visas ej%s"
-#: wt-status.c:1285
+#: wt-status.c:1336
msgid " (use -u option to show untracked files)"
msgstr " (använd flaggan -u för att visa ospårade filer)"
-#: wt-status.c:1291
+#: wt-status.c:1342
msgid "No changes"
msgstr "Inga ändringar"
-#: wt-status.c:1296
+#: wt-status.c:1347
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
"inga ändringar att checka in (använd \"git add\" och/eller \"git commit -a"
"\")\n"
-#: wt-status.c:1299
+#: wt-status.c:1350
#, c-format
msgid "no changes added to commit\n"
msgstr "inga ändringar att checka in\n"
-#: wt-status.c:1302
+#: wt-status.c:1353
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -1794,56 +1823,56 @@ msgstr ""
"inget köat för incheckning, men ospårade filer finns (spåra med \"git add"
"\")\n"
-#: wt-status.c:1305
+#: wt-status.c:1356
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "inget köat för incheckning, men ospårade filer finns\n"
-#: wt-status.c:1308
+#: wt-status.c:1359
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr "inget att checka in (skapa/kopiera filer och spåra med \"git add\")\n"
-#: wt-status.c:1311 wt-status.c:1316
+#: wt-status.c:1362 wt-status.c:1367
#, c-format
msgid "nothing to commit\n"
msgstr "inget att checka in\n"
-#: wt-status.c:1314
+#: wt-status.c:1365
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr "inget att checka in (använd -u för att visa ospårade filer)\n"
-#: wt-status.c:1318
+#: wt-status.c:1369
#, c-format
msgid "nothing to commit, working directory clean\n"
msgstr "inget att checka in, arbetskatalogen ren\n"
-#: wt-status.c:1427
+#: wt-status.c:1478
msgid "HEAD (no branch)"
msgstr "HEAD (ingen gren)"
-#: wt-status.c:1433
+#: wt-status.c:1484
msgid "Initial commit on "
msgstr "Första incheckning på "
-#: wt-status.c:1463
+#: wt-status.c:1514
msgid "gone"
msgstr "försvunnen"
-#: wt-status.c:1465
+#: wt-status.c:1516
msgid "behind "
msgstr "efter "
-#: wt-status.c:1468 wt-status.c:1471
+#: wt-status.c:1519 wt-status.c:1522
msgid "ahead "
msgstr "före "
-#: wt-status.c:1473
+#: wt-status.c:1524
msgid ", behind "
msgstr ", efter "
-#: compat/precompose_utf8.c:55 builtin/clone.c:350
+#: compat/precompose_utf8.c:55 builtin/clone.c:356
#, c-format
msgid "failed to unlink '%s'"
msgstr "misslyckades ta bort länken \"%s\""
@@ -1973,15 +2002,15 @@ msgstr "Kunde inte tillämpa \"%s\""
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr "Följande sökvägar ignoreras av en av dina .gitignore-filer:\n"
-#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:92 builtin/mv.c:66
-#: builtin/prune-packed.c:73 builtin/push.c:459 builtin/remote.c:1253
+#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70
+#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344
#: builtin/rm.c:269
msgid "dry run"
msgstr "testkörning"
#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19
#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612
-#: builtin/log.c:1592 builtin/mv.c:65 builtin/read-tree.c:113
+#: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113
msgid "be verbose"
msgstr "var pratsam"
@@ -2062,11 +2091,11 @@ msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "Kanske menade du att skriva \"git add .\"?\n"
#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919
-#: builtin/commit.c:320 builtin/mv.c:86 builtin/reset.c:224 builtin/rm.c:299
+#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299
msgid "index file corrupt"
msgstr "indexfilen trasig"
-#: builtin/add.c:589 builtin/apply.c:4506 builtin/mv.c:259 builtin/rm.c:432
+#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432
msgid "Unable to write new index file"
msgstr "Kunde inte skriva ny indexfil"
@@ -2400,7 +2429,7 @@ msgid "unable to read index file"
msgstr "kan inte läsa indexfilen"
#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90
-#: builtin/fetch.c:77
+#: builtin/fetch.c:78
msgid "path"
msgstr "sökväg"
@@ -2598,95 +2627,95 @@ msgstr "git blame [flaggor] [rev-flaggor] [rev] [--] fil"
msgid "[rev-opts] are documented in git-rev-list(1)"
msgstr "[rev-flaggor] dokumenteras i git-rev-list(1)"
-#: builtin/blame.c:2248
+#: builtin/blame.c:2249
msgid "Show blame entries as we find them, incrementally"
msgstr "Visa klandringsposter när vi hittar dem, interaktivt"
-#: builtin/blame.c:2249
+#: builtin/blame.c:2250
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr "Visa blank SHA-1 för gränsincheckningar (Standard: av)"
-#: builtin/blame.c:2250
+#: builtin/blame.c:2251
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr "Behandla inte rotincheckningar som gränser (Standard: av)"
-#: builtin/blame.c:2251
+#: builtin/blame.c:2252
msgid "Show work cost statistics"
msgstr "Visa statistik över arbetskostnad"
-#: builtin/blame.c:2252
+#: builtin/blame.c:2253
msgid "Show output score for blame entries"
msgstr "Visa utdatapoäng för klandringsposter"
-#: builtin/blame.c:2253
+#: builtin/blame.c:2254
msgid "Show original filename (Default: auto)"
msgstr "Visa originalfilnamn (Standard: auto)"
-#: builtin/blame.c:2254
+#: builtin/blame.c:2255
msgid "Show original linenumber (Default: off)"
msgstr "Visa ursprungligt radnummer (Standard: av)"
-#: builtin/blame.c:2255
+#: builtin/blame.c:2256
msgid "Show in a format designed for machine consumption"
msgstr "Visa i ett format avsett för maskinkonsumtion"
-#: builtin/blame.c:2256
+#: builtin/blame.c:2257
msgid "Show porcelain format with per-line commit information"
msgstr "Visa porslinsformat med per-rad-incheckningsinformation"
-#: builtin/blame.c:2257
+#: builtin/blame.c:2258
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr "Använd samma utdataläge som git-annotate (Standard: av)"
-#: builtin/blame.c:2258
+#: builtin/blame.c:2259
msgid "Show raw timestamp (Default: off)"
msgstr "Visa rå tidsstämpel (Standard: av)"
-#: builtin/blame.c:2259
+#: builtin/blame.c:2260
msgid "Show long commit SHA1 (Default: off)"
msgstr "Visa lång inchecknings-SHA1 (Standard: av)"
-#: builtin/blame.c:2260
+#: builtin/blame.c:2261
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Undertryck författarnamn och tidsstämpel (Standard: av)"
-#: builtin/blame.c:2261
+#: builtin/blame.c:2262
msgid "Show author email instead of name (Default: off)"
msgstr "Visa författarens e-post istället för namn (Standard: av)"
-#: builtin/blame.c:2262
+#: builtin/blame.c:2263
msgid "Ignore whitespace differences"
msgstr "Ignorera ändringar i blanksteg"
-#: builtin/blame.c:2263
+#: builtin/blame.c:2264
msgid "Spend extra cycles to find better match"
msgstr "Slösa extra cykler med att hitta bättre träff"
-#: builtin/blame.c:2264
+#: builtin/blame.c:2265
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Använd revisioner från <fil> istället för att anropa git-rev-list"
-#: builtin/blame.c:2265
+#: builtin/blame.c:2266
msgid "Use <file>'s contents as the final image"
msgstr "Använd <fil>s innehåll som slutgiltig bild"
-#: builtin/blame.c:2266 builtin/blame.c:2267
+#: builtin/blame.c:2267 builtin/blame.c:2268
msgid "score"
msgstr "poäng"
-#: builtin/blame.c:2266
+#: builtin/blame.c:2267
msgid "Find line copies within and across files"
msgstr "Hitta kopierade rader inuti och mellan filer"
-#: builtin/blame.c:2267
+#: builtin/blame.c:2268
msgid "Find line movements within and across files"
msgstr "Hitta flyttade rader inuti och mellan filer"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "Process only line range n,m, counting from 1"
msgstr "Behandla endast radintervallet n,m, med början på 1"
@@ -2790,290 +2819,290 @@ msgstr "Tog bort grenen %s (var %s).\n"
msgid "branch '%s' does not point at a commit"
msgstr "grenen \"%s\" pekar inte på en incheckning"
-#: builtin/branch.c:453
+#: builtin/branch.c:454
#, c-format
msgid "[%s: gone]"
msgstr "[%s: försvunnen]"
-#: builtin/branch.c:456
+#: builtin/branch.c:459
#, c-format
msgid "[%s]"
msgstr "[%s]"
-#: builtin/branch.c:459
+#: builtin/branch.c:464
#, c-format
msgid "[%s: behind %d]"
msgstr "[%s: bakom %d] "
-#: builtin/branch.c:461
+#: builtin/branch.c:466
#, c-format
msgid "[behind %d]"
msgstr "[bakom %d] "
-#: builtin/branch.c:465
+#: builtin/branch.c:470
#, c-format
msgid "[%s: ahead %d]"
msgstr "[%s: före %d] "
-#: builtin/branch.c:467
+#: builtin/branch.c:472
#, c-format
msgid "[ahead %d]"
msgstr "[före %d] "
-#: builtin/branch.c:470
+#: builtin/branch.c:475
#, c-format
msgid "[%s: ahead %d, behind %d]"
msgstr "[%s: före %d, bakom %d] "
-#: builtin/branch.c:473
+#: builtin/branch.c:478
#, c-format
msgid "[ahead %d, behind %d]"
msgstr "[före %d, bakom %d] "
-#: builtin/branch.c:496
+#: builtin/branch.c:502
msgid " **** invalid ref ****"
msgstr " **** ogiltig ref ****"
-#: builtin/branch.c:588
+#: builtin/branch.c:594
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(ingen gren, ombaserar %s)"
-#: builtin/branch.c:591
+#: builtin/branch.c:597
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(ingen gren, \"bisect\" startad på %s)"
-#: builtin/branch.c:594
+#: builtin/branch.c:600
#, c-format
msgid "(detached from %s)"
msgstr "(frånkopplad från %s)"
-#: builtin/branch.c:597
+#: builtin/branch.c:603
msgid "(no branch)"
msgstr "(ingen gren)"
-#: builtin/branch.c:643
+#: builtin/branch.c:649
#, c-format
msgid "object '%s' does not point to a commit"
msgstr "objektet \"%s\" pekar på en incheckning"
-#: builtin/branch.c:675
+#: builtin/branch.c:681
msgid "some refs could not be read"
msgstr "vissa referenser kunde inte läsas"
-#: builtin/branch.c:688
+#: builtin/branch.c:694
msgid "cannot rename the current branch while not on any."
msgstr ""
"kunde inte byta namn på aktuell gren när du inte befinner dig på någon."
-#: builtin/branch.c:698
+#: builtin/branch.c:704
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Felaktigt namn på gren: \"%s\""
-#: builtin/branch.c:713
+#: builtin/branch.c:719
msgid "Branch rename failed"
msgstr "Misslyckades byta namn på gren"
-#: builtin/branch.c:717
+#: builtin/branch.c:723
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "Bytte bort namn på en felaktigt namngiven gren \"%s\""
-#: builtin/branch.c:721
+#: builtin/branch.c:727
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "Grenen namnbytt till %s, men HEAD har inte uppdaterats!"
-#: builtin/branch.c:728
+#: builtin/branch.c:734
msgid "Branch is renamed, but update of config-file failed"
msgstr "Grenen namnbytt, men misslyckades uppdatera konfigurationsfilen"
-#: builtin/branch.c:743
+#: builtin/branch.c:749
#, c-format
msgid "malformed object name %s"
msgstr "felformat objektnamn %s"
-#: builtin/branch.c:767
+#: builtin/branch.c:773
#, c-format
msgid "could not write branch description template: %s"
msgstr "kunde inte skriva grenbeskrivningsmall: %s"
-#: builtin/branch.c:797
+#: builtin/branch.c:803
msgid "Generic options"
msgstr "Allmänna flaggor"
-#: builtin/branch.c:799
+#: builtin/branch.c:805
msgid "show hash and subject, give twice for upstream branch"
msgstr "visa hash och ärenderad, ange två gånger för uppströmsgren"
-#: builtin/branch.c:800
+#: builtin/branch.c:806
msgid "suppress informational messages"
msgstr "undertryck informationsmeddelanden"
-#: builtin/branch.c:801
+#: builtin/branch.c:807
msgid "set up tracking mode (see git-pull(1))"
msgstr "ställ in spårningsläge (se git-pull(1))"
-#: builtin/branch.c:803
+#: builtin/branch.c:809
msgid "change upstream info"
msgstr "ändra uppströmsinformation"
-#: builtin/branch.c:807
+#: builtin/branch.c:813
msgid "use colored output"
msgstr "använd färgad utdata"
-#: builtin/branch.c:808
+#: builtin/branch.c:814
msgid "act on remote-tracking branches"
msgstr "arbeta på fjärrspårande grenar"
-#: builtin/branch.c:811 builtin/branch.c:817 builtin/branch.c:838
-#: builtin/branch.c:844 builtin/commit.c:1460 builtin/commit.c:1461
+#: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844
+#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461
#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468
msgid "commit"
msgstr "incheckning"
-#: builtin/branch.c:812 builtin/branch.c:818
+#: builtin/branch.c:818 builtin/branch.c:824
msgid "print only branches that contain the commit"
msgstr "visa endast grenar som innehåller incheckningen"
-#: builtin/branch.c:824
+#: builtin/branch.c:830
msgid "Specific git-branch actions:"
msgstr "Specifika git-branch-åtgärder:"
-#: builtin/branch.c:825
+#: builtin/branch.c:831
msgid "list both remote-tracking and local branches"
msgstr "visa både fjärrspårande och lokala grenar"
-#: builtin/branch.c:827
+#: builtin/branch.c:833
msgid "delete fully merged branch"
msgstr "ta bort helt sammanslagen gren"
-#: builtin/branch.c:828
+#: builtin/branch.c:834
msgid "delete branch (even if not merged)"
msgstr "ta bort gren (även om inte helt sammanslagen)"
-#: builtin/branch.c:829
+#: builtin/branch.c:835
msgid "move/rename a branch and its reflog"
msgstr "flytta/ta bort en gren och dess reflogg"
-#: builtin/branch.c:830
+#: builtin/branch.c:836
msgid "move/rename a branch, even if target exists"
msgstr "flytta/ta bort en gren, även om målet finns"
-#: builtin/branch.c:831
+#: builtin/branch.c:837
msgid "list branch names"
msgstr "lista namn på grenar"
-#: builtin/branch.c:832
+#: builtin/branch.c:838
msgid "create the branch's reflog"
msgstr "skapa grenens reflogg"
-#: builtin/branch.c:834
+#: builtin/branch.c:840
msgid "edit the description for the branch"
msgstr "redigera beskrivning för grenen"
-#: builtin/branch.c:835
+#: builtin/branch.c:841
msgid "force creation (when already exists)"
msgstr "tvinga skapande (när den redan finns)"
-#: builtin/branch.c:838
+#: builtin/branch.c:844
msgid "print only not merged branches"
msgstr "visa endast ej sammanslagna grenar"
-#: builtin/branch.c:844
+#: builtin/branch.c:850
msgid "print only merged branches"
msgstr "visa endast sammanslagna grenar"
-#: builtin/branch.c:848
+#: builtin/branch.c:854
msgid "list branches in columns"
msgstr "visa grenar i spalter"
-#: builtin/branch.c:861
+#: builtin/branch.c:867
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Misslyckades slå upp HEAD som giltig referens"
-#: builtin/branch.c:866 builtin/clone.c:629
+#: builtin/branch.c:872 builtin/clone.c:635
msgid "HEAD not found below refs/heads!"
msgstr "HEAD hittades inte under refs/heads!"
-#: builtin/branch.c:890
+#: builtin/branch.c:896
msgid "--column and --verbose are incompatible"
msgstr "--column och --verbose är inkompatibla"
-#: builtin/branch.c:896 builtin/branch.c:935
+#: builtin/branch.c:902 builtin/branch.c:941
msgid "branch name required"
msgstr "grennamn krävs"
-#: builtin/branch.c:911
+#: builtin/branch.c:917
msgid "Cannot give description to detached HEAD"
msgstr "Kan inte beskriva frånkopplad HEAD"
-#: builtin/branch.c:916
+#: builtin/branch.c:922
msgid "cannot edit description of more than one branch"
msgstr "kan inte redigera beskrivning för mer än en gren"
-#: builtin/branch.c:923
+#: builtin/branch.c:929
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Inga incheckningar på grenen \"%s\" ännu"
-#: builtin/branch.c:926
+#: builtin/branch.c:932
#, c-format
msgid "No branch named '%s'."
msgstr "Ingen gren vid namnet \"%s\"."
-#: builtin/branch.c:941
+#: builtin/branch.c:947
msgid "too many branches for a rename operation"
msgstr "för många grenar för namnbyte"
-#: builtin/branch.c:946
+#: builtin/branch.c:952
msgid "too many branches to set new upstream"
msgstr "för många grenar för att byta uppström"
-#: builtin/branch.c:950
+#: builtin/branch.c:956
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
msgstr ""
"kunde inte sätta uppström för HEAD till %s när det inte pekar mot någon gren."
-#: builtin/branch.c:953 builtin/branch.c:975 builtin/branch.c:997
+#: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002
#, c-format
msgid "no such branch '%s'"
msgstr "okänd gren \"%s\""
-#: builtin/branch.c:957
+#: builtin/branch.c:963
#, c-format
msgid "branch '%s' does not exist"
msgstr "grenen \"%s\" finns inte"
-#: builtin/branch.c:969
+#: builtin/branch.c:975
msgid "too many branches to unset upstream"
msgstr "för många grenar för att ta bort uppström"
-#: builtin/branch.c:973
+#: builtin/branch.c:979
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"kunde inte ta bort uppström för HEAD när det inte pekar mot någon gren."
-#: builtin/branch.c:979
+#: builtin/branch.c:985
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Grenen \"%s\" har ingen uppströmsinformation"
-#: builtin/branch.c:994
+#: builtin/branch.c:999
msgid "it does not make sense to create 'HEAD' manually"
msgstr "kan inte skapa \"HEAD\" manuellt"
-#: builtin/branch.c:1000
+#: builtin/branch.c:1005
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr ""
"flaggorna -a och -r på \"git branch\" kan inte anges tillsammans med ett "
"grennamn"
-#: builtin/branch.c:1003
+#: builtin/branch.c:1008
#, c-format
msgid ""
"The --set-upstream flag is deprecated and will be removed. Consider using --"
@@ -3082,7 +3111,7 @@ msgstr ""
"Flaggan --set-upstream rekommenderas ej och kommer tas bort. Använd --track "
"eller --set-upstream-to\n"
-#: builtin/branch.c:1020
+#: builtin/branch.c:1025
#, c-format
msgid ""
"\n"
@@ -3093,12 +3122,12 @@ msgstr ""
"Om du vill göra så att \"%s\" spårar \"%s\" gör du så här:\n"
"\n"
-#: builtin/branch.c:1021
+#: builtin/branch.c:1026
#, c-format
msgid " git branch -d %s\n"
msgstr " git branch -d %s\n"
-#: builtin/branch.c:1022
+#: builtin/branch.c:1027
#, c-format
msgid " git branch --set-upstream-to %s\n"
msgstr " git branch --set-upstream-to %s\n"
@@ -3116,43 +3145,43 @@ msgstr "Behöver ett arkiv för att skapa ett paket (bundle)."
msgid "Need a repository to unbundle."
msgstr "Behöver ett arkiv för att packa upp ett paket (bundle)."
-#: builtin/cat-file.c:312
+#: builtin/cat-file.c:328
msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
msgstr "git cat-file (-t|-s|-e|-p|<typ>|--textconv) <objekt>"
-#: builtin/cat-file.c:313
+#: builtin/cat-file.c:329
msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
msgstr "git cat-file (--batch|--batch-check) < <objektlista>"
-#: builtin/cat-file.c:350
+#: builtin/cat-file.c:366
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<typ> kan vara en av: blob, tree, commit, tag"
-#: builtin/cat-file.c:351
+#: builtin/cat-file.c:367
msgid "show object type"
msgstr "visa objekttyp"
-#: builtin/cat-file.c:352
+#: builtin/cat-file.c:368
msgid "show object size"
msgstr "visa objektstorlek"
-#: builtin/cat-file.c:354
+#: builtin/cat-file.c:370
msgid "exit with zero when there's no error"
msgstr "avsluta med noll när det inte uppstått något fel"
-#: builtin/cat-file.c:355
+#: builtin/cat-file.c:371
msgid "pretty-print object's content"
msgstr "visa objektets innehåll snyggt"
-#: builtin/cat-file.c:357
+#: builtin/cat-file.c:373
msgid "for blob objects, run textconv on object's content"
msgstr "för blob-objekt, kör textconv på objektets innehåll"
-#: builtin/cat-file.c:359
+#: builtin/cat-file.c:375
msgid "show info and content of objects fed from the standard input"
msgstr "visa information och innehåll för objekt som listas på standard in"
-#: builtin/cat-file.c:362
+#: builtin/cat-file.c:378
msgid "show info about objects fed from the standard input"
msgstr "visa information för objekt som listas på standard in"
@@ -3180,7 +3209,7 @@ msgstr "läs filnamn från standard in"
msgid "terminate input and output records by a NUL character"
msgstr "avsluta in- och utdataposter med NUL-tecken"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:259
+#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260
msgid "suppress progress reporting"
msgstr "undertryck förloppsrapportering"
@@ -3471,7 +3500,7 @@ msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Kan inte växla gren till icke-incheckningen \"%s\""
#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88
-#: builtin/remote.c:169 builtin/remote.c:171
+#: builtin/remote.c:159 builtin/remote.c:161
msgid "branch"
msgstr "gren"
@@ -3519,11 +3548,11 @@ msgstr "tvinga utcheckning (kasta bort lokala ändringar)"
msgid "perform a 3-way merge with the new branch"
msgstr "utför en 3-vägssammanslagning för den nya grenen"
-#: builtin/checkout.c:1106 builtin/merge.c:232
+#: builtin/checkout.c:1106 builtin/merge.c:225
msgid "update ignored files (default)"
msgstr "uppdatera ignorerade filer (standard)"
-#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:251
+#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248
msgid "style"
msgstr "stil"
@@ -3722,7 +3751,7 @@ msgid "remove whole directories"
msgstr "ta bort hela kataloger"
#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718
-#: builtin/ls-files.c:483 builtin/name-rev.c:315 builtin/show-ref.c:185
+#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185
msgid "pattern"
msgstr "mönster"
@@ -3762,8 +3791,8 @@ msgstr ""
msgid "git clone [options] [--] <repo> [<dir>]"
msgstr "git clone [flaggor] [--] <arkiv> [<kat>]"
-#: builtin/clone.c:64 builtin/fetch.c:96 builtin/merge.c:229
-#: builtin/push.c:474
+#: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222
+#: builtin/push.c:521
msgid "force progress reporting"
msgstr "tvinga förloppsrapportering"
@@ -3823,7 +3852,7 @@ msgstr "checka ut <gren> istället för fjärrens HEAD"
msgid "path to git-upload-pack on the remote"
msgstr "sökväg till git-upload-pack på fjärren"
-#: builtin/clone.c:92 builtin/fetch.c:97 builtin/grep.c:663
+#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663
msgid "depth"
msgstr "djup"
@@ -3856,42 +3885,52 @@ msgstr "ställ in konfiguration i det nya arkivet"
msgid "reference repository '%s' is not a local repository."
msgstr "referensarkivet \"%s\" är inte ett lokalt arkiv."
-#: builtin/clone.c:315
+#: builtin/clone.c:256
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "referensarkivet \"%s\" är grunt"
+
+#: builtin/clone.c:259
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "referensarkivet \"%s\" är ympat"
+
+#: builtin/clone.c:321
#, c-format
msgid "failed to create directory '%s'"
msgstr "misslyckades skapa katalogen \"%s\""
-#: builtin/clone.c:317 builtin/diff.c:77
+#: builtin/clone.c:323 builtin/diff.c:83
#, c-format
msgid "failed to stat '%s'"
msgstr "misslyckades ta status på \"%s\""
-#: builtin/clone.c:319
+#: builtin/clone.c:325
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s finns och är ingen katalog"
-#: builtin/clone.c:333
+#: builtin/clone.c:339
#, c-format
msgid "failed to stat %s\n"
msgstr "misslyckades ta status på %s\n"
-#: builtin/clone.c:355
+#: builtin/clone.c:361
#, c-format
msgid "failed to create link '%s'"
msgstr "misslyckades skapa länken \"%s\""
-#: builtin/clone.c:359
+#: builtin/clone.c:365
#, c-format
msgid "failed to copy file to '%s'"
msgstr "misslyckades kopiera filen till \"%s\""
-#: builtin/clone.c:382 builtin/clone.c:559
+#: builtin/clone.c:388 builtin/clone.c:565
#, c-format
msgid "done.\n"
msgstr "klart.\n"
-#: builtin/clone.c:395
+#: builtin/clone.c:401
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -3901,100 +3940,109 @@ msgstr ""
"Du kan inspektera det som checkades ut med \"git status\"\n"
"och försöka checka ut igen med \"git checkout -f HEAD\"\n"
-#: builtin/clone.c:474
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "Kunde inte hitta fjärrgrenen %s för att klona."
-#: builtin/clone.c:554
+#: builtin/clone.c:560
#, c-format
msgid "Checking connectivity... "
msgstr "Kontrollerar anslutning..."
-#: builtin/clone.c:557
+#: builtin/clone.c:563
msgid "remote did not send all necessary objects"
msgstr "fjärren sände inte alla nödvändiga objekt"
-#: builtin/clone.c:620
+#: builtin/clone.c:626
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"HEAD hos fjärren pekar på en obefintlig referens, kan inte checka ut.\n"
-#: builtin/clone.c:651
+#: builtin/clone.c:657
msgid "unable to checkout working tree"
msgstr "kunde inte checka ut arbetskatalogen"
-#: builtin/clone.c:759
+#: builtin/clone.c:765
msgid "Too many arguments."
msgstr "För många argument."
-#: builtin/clone.c:763
+#: builtin/clone.c:769
msgid "You must specify a repository to clone."
msgstr "Du måste ange ett arkiv att klona."
-#: builtin/clone.c:774
+#: builtin/clone.c:780
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "flaggorna --bare och --origin %s är inkompatibla."
-#: builtin/clone.c:777
+#: builtin/clone.c:783
msgid "--bare and --separate-git-dir are incompatible."
msgstr "flaggorna --bare och --separate-git-dir är inkompatibla."
-#: builtin/clone.c:790
+#: builtin/clone.c:796
#, c-format
msgid "repository '%s' does not exist"
msgstr "arkivet \"%s\" finns inte"
-#: builtin/clone.c:795
+#: builtin/clone.c:802
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth ignoreras i lokala kloningar; använd file:// istället"
-#: builtin/clone.c:797
+#: builtin/clone.c:805
+msgid "source repository is shallow, ignoring --local"
+msgstr "källarkivet är grunt, ignorerar --local"
+
+#: builtin/clone.c:810
msgid "--local is ignored"
msgstr "--local ignoreras"
-#: builtin/clone.c:807
+#: builtin/clone.c:814 builtin/fetch.c:1119
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr "djupet %s är inte ett positivt tal"
+
+#: builtin/clone.c:824
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "destinationssökvägen \"%s\" finns redan och är inte en tom katalog."
-#: builtin/clone.c:817
+#: builtin/clone.c:834
#, c-format
msgid "working tree '%s' already exists."
msgstr "arbetsträdet \"%s\" finns redan."
-#: builtin/clone.c:830 builtin/clone.c:842
+#: builtin/clone.c:847 builtin/clone.c:859
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "kunde inte skapa inledande kataloger för \"%s\""
-#: builtin/clone.c:833
+#: builtin/clone.c:850
#, c-format
msgid "could not create work tree dir '%s'."
msgstr "kunde inte skapa arbetskatalogen \"%s\""
-#: builtin/clone.c:852
+#: builtin/clone.c:869
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Klonar till ett naket arkiv \"%s\"...\n"
-#: builtin/clone.c:854
+#: builtin/clone.c:871
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Klonar till \"%s\"...\n"
-#: builtin/clone.c:888
+#: builtin/clone.c:906
#, c-format
msgid "Don't know how to clone %s"
msgstr "Vet inte hur man klonar %s"
-#: builtin/clone.c:939 builtin/clone.c:947
+#: builtin/clone.c:957 builtin/clone.c:965
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Fjärrgrenen %s hittades inte i uppströmsarkivet %s"
-#: builtin/clone.c:950
+#: builtin/clone.c:968
msgid "You appear to have cloned an empty repository."
msgstr "Du verkar ha klonat ett tomt arkiv."
@@ -4347,7 +4395,7 @@ msgstr "visa koncis status"
msgid "show branch information"
msgstr "visa information om gren"
-#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:460
+#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507
msgid "machine-readable output"
msgstr "maskinläsbar utdata"
@@ -4428,7 +4476,7 @@ msgstr "författare"
msgid "override author for commit"
msgstr "överstyr författare för incheckningen"
-#: builtin/commit.c:1458 builtin/gc.c:260
+#: builtin/commit.c:1458 builtin/gc.c:261
msgid "date"
msgstr "datum"
@@ -4436,7 +4484,7 @@ msgstr "datum"
msgid "override date for commit"
msgstr "överstyr datum för inchecknignen"
-#: builtin/commit.c:1459 builtin/merge.c:223 builtin/notes.c:405
+#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405
#: builtin/notes.c:562 builtin/tag.c:455
msgid "message"
msgstr "meddelande"
@@ -4492,11 +4540,11 @@ msgstr "hur blanksteg och #kommentarer skall tas bort från meddelande"
msgid "include status in commit message template"
msgstr "inkludera status i mallen för incheckningsmeddelandet"
-#: builtin/commit.c:1470 builtin/merge.c:230 builtin/tag.c:461
+#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461
msgid "key id"
msgstr "nyckel-id"
-#: builtin/commit.c:1471 builtin/merge.c:231
+#: builtin/commit.c:1471 builtin/merge.c:224
msgid "GPG sign commit"
msgstr "GPG-signera incheckning"
@@ -4553,7 +4601,7 @@ msgstr "ok att registrera en ändring med tomt meddelande"
msgid "could not parse HEAD commit"
msgstr "kunde inte tolka HEAD:s incheckning"
-#: builtin/commit.c:1567 builtin/merge.c:525
+#: builtin/commit.c:1567 builtin/merge.c:518
#, c-format
msgid "could not open '%s' for reading"
msgstr "kunde inte öppna \"%s\" för läsning"
@@ -4572,29 +4620,29 @@ msgstr "kunde inte läsa MERGE_MODE"
msgid "could not read commit message: %s"
msgstr "kunde inte läsa incheckningsmeddelande: %s"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1611
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Avbryter incheckning; meddelandet inte redigerat.\n"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1616
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Avbryter på grund av tomt incheckningsmeddelande.\n"
-#: builtin/commit.c:1634 builtin/merge.c:861 builtin/merge.c:886
+#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879
msgid "failed to write commit object"
msgstr "kunde inte skriva incheckningsobjekt"
-#: builtin/commit.c:1655
+#: builtin/commit.c:1652
msgid "cannot lock HEAD ref"
msgstr "kunde inte låsa HEAD-referens"
-#: builtin/commit.c:1659
+#: builtin/commit.c:1656
msgid "cannot update HEAD ref"
msgstr "kunde inte uppdatera HEAD-referens"
-#: builtin/commit.c:1670
+#: builtin/commit.c:1667
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full or quota is\n"
@@ -4857,7 +4905,7 @@ msgstr "överväg de <n> nyaste taggarna (standard: 10)"
msgid "only consider tags matching <pattern>"
msgstr "överväg endast taggar som motsvarar <mönster>"
-#: builtin/describe.c:423 builtin/name-rev.c:322
+#: builtin/describe.c:423 builtin/name-rev.c:321
msgid "show abbreviated commit object as fallback"
msgstr "visa förkortade incheckningsobjekt som standard"
@@ -4881,31 +4929,31 @@ msgstr "Inga namn hittades, kan inte beskriva något."
msgid "--dirty is incompatible with commit-ishes"
msgstr "--dirty är inkompatibelt med \"commit-ish\"-värden"
-#: builtin/diff.c:79
+#: builtin/diff.c:85
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "\"%s\": inte en normal fil eller symbolisk länk"
-#: builtin/diff.c:230
+#: builtin/diff.c:236
#, c-format
msgid "invalid option: %s"
msgstr "ogiltig flagga: %s"
-#: builtin/diff.c:307
+#: builtin/diff.c:357
msgid "Not a git repository"
msgstr "Inte ett git-arkiv"
-#: builtin/diff.c:350
+#: builtin/diff.c:400
#, c-format
msgid "invalid object '%s' given."
msgstr "objektet \"%s\" som angavs är felaktigt."
-#: builtin/diff.c:359
+#: builtin/diff.c:409
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "mer än två blobbar angavs: \"%s\""
-#: builtin/diff.c:366
+#: builtin/diff.c:416
#, c-format
msgid "unhandled object '%s' given."
msgstr "ej hanterat objekt \"%s\" angavs."
@@ -4966,144 +5014,153 @@ msgstr "git fetch --multiple [<flaggor>] [(<arkiv> | <grupp>)...]"
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<flaggor>]"
-#: builtin/fetch.c:74
+#: builtin/fetch.c:75
msgid "fetch from all remotes"
msgstr "hämta från alla fjärrar"
-#: builtin/fetch.c:76
+#: builtin/fetch.c:77
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "lägg till i .git/FETCH_HEAD istället för att skriva över"
-#: builtin/fetch.c:78
+#: builtin/fetch.c:79
msgid "path to upload pack on remote end"
msgstr "sökväg till upload pack på fjärren"
-#: builtin/fetch.c:79
+#: builtin/fetch.c:80
msgid "force overwrite of local branch"
msgstr "tvinga överskrivning av lokal gren"
-#: builtin/fetch.c:81
+#: builtin/fetch.c:82
msgid "fetch from multiple remotes"
msgstr "hämta från flera fjärrar"
-#: builtin/fetch.c:83
+#: builtin/fetch.c:84
msgid "fetch all tags and associated objects"
msgstr "hämta alla taggar och associerade objekt"
-#: builtin/fetch.c:85
+#: builtin/fetch.c:86
msgid "do not fetch all tags (--no-tags)"
msgstr "hämta inte alla taggar (--no-tags)"
-#: builtin/fetch.c:87
+#: builtin/fetch.c:88
msgid "prune remote-tracking branches no longer on remote"
msgstr "rensa fjärrspårande grenar ej längre på fjärren"
-#: builtin/fetch.c:88
+#: builtin/fetch.c:89
msgid "on-demand"
msgstr "on-demand"
-#: builtin/fetch.c:89
+#: builtin/fetch.c:90
msgid "control recursive fetching of submodules"
msgstr "styr rekursiv hämtning av undermoduler"
-#: builtin/fetch.c:93
+#: builtin/fetch.c:94
msgid "keep downloaded pack"
msgstr "behåll hämtade paket"
-#: builtin/fetch.c:95
+#: builtin/fetch.c:96
msgid "allow updating of HEAD ref"
msgstr "tillåt uppdatering av HEAD-referens"
-#: builtin/fetch.c:98
+#: builtin/fetch.c:99
msgid "deepen history of shallow clone"
msgstr "fördjupa historik för grund klon"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:101
msgid "convert to a complete repository"
msgstr "konvertera till komplett arkiv"
-#: builtin/fetch.c:102 builtin/log.c:1197
+#: builtin/fetch.c:103 builtin/log.c:1197
msgid "dir"
msgstr "kat"
-#: builtin/fetch.c:103
+#: builtin/fetch.c:104
msgid "prepend this to submodule path output"
msgstr "lägg till i början av undermodulens sökvägsutdata"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:107
msgid "default mode for recursion"
msgstr "standardläge för rekursion"
-#: builtin/fetch.c:236
+#: builtin/fetch.c:109
+msgid "accept refs that update .git/shallow"
+msgstr "tar emot referenser som uppdaterar .git/shallow"
+
+#: builtin/fetch.c:347
msgid "Couldn't find remote ref HEAD"
msgstr "Kunde inte hitta fjärr-referensen HEAD"
-#: builtin/fetch.c:290
+#: builtin/fetch.c:411
#, c-format
msgid "object %s not found"
msgstr "objektet %s hittades inte"
-#: builtin/fetch.c:295
+#: builtin/fetch.c:416
msgid "[up to date]"
msgstr "[àjour]"
-#: builtin/fetch.c:309
+#: builtin/fetch.c:430
#, c-format
msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
msgstr "! %-*s %-*s -> %s (kan inte hämta i aktuell gren)"
-#: builtin/fetch.c:310 builtin/fetch.c:396
+#: builtin/fetch.c:431 builtin/fetch.c:517
msgid "[rejected]"
msgstr "[refuserad]"
-#: builtin/fetch.c:321
+#: builtin/fetch.c:442
msgid "[tag update]"
msgstr "[uppdaterad tagg]"
-#: builtin/fetch.c:323 builtin/fetch.c:358 builtin/fetch.c:376
+#: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497
msgid " (unable to update local ref)"
msgstr " (kunde inte uppdatera lokal ref)"
-#: builtin/fetch.c:341
+#: builtin/fetch.c:462
msgid "[new tag]"
msgstr "[ny tagg]"
-#: builtin/fetch.c:344
+#: builtin/fetch.c:465
msgid "[new branch]"
msgstr "[ny gren]"
-#: builtin/fetch.c:347
+#: builtin/fetch.c:468
msgid "[new ref]"
msgstr "[ny ref]"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "unable to update local ref"
msgstr "kunde inte uppdatera lokal ref"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "forced update"
msgstr "tvingad uppdatering"
-#: builtin/fetch.c:398
+#: builtin/fetch.c:519
msgid "(non-fast-forward)"
msgstr "(ej snabbspolad)"
-#: builtin/fetch.c:429 builtin/fetch.c:735
+#: builtin/fetch.c:552 builtin/fetch.c:785
#, c-format
msgid "cannot open %s: %s\n"
msgstr "kan inte öppna %s: %s\n"
-#: builtin/fetch.c:438
+#: builtin/fetch.c:561
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s sände inte alla nödvändiga objekt\n"
-#: builtin/fetch.c:537
+#: builtin/fetch.c:579
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr "avvisa %s då grunda rötter inte kan uppdateras"
+
+#: builtin/fetch.c:667 builtin/fetch.c:750
#, c-format
msgid "From %.*s\n"
msgstr "Från %.*s\n"
-#: builtin/fetch.c:548
+#: builtin/fetch.c:678
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -5112,55 +5169,55 @@ msgstr ""
"vissa lokala referenser kunde inte uppdateras; testa att köra\n"
" \"git remote prune %s\" för att ta bort gamla grenar som står i konflikt"
-#: builtin/fetch.c:598
+#: builtin/fetch.c:730
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s kommer bli dinglande)"
-#: builtin/fetch.c:599
+#: builtin/fetch.c:731
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s har blivit dinglande)"
-#: builtin/fetch.c:606
+#: builtin/fetch.c:755
msgid "[deleted]"
msgstr "[borttagen]"
-#: builtin/fetch.c:607 builtin/remote.c:1055
+#: builtin/fetch.c:756 builtin/remote.c:1050
msgid "(none)"
msgstr "(ingen)"
-#: builtin/fetch.c:725
+#: builtin/fetch.c:775
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Vägrar hämta till aktuell gren %s i ett icke-naket arkiv"
-#: builtin/fetch.c:744
+#: builtin/fetch.c:794
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Flaggan \"%s\" och värdet \"%s\" är inte giltigt för %s"
-#: builtin/fetch.c:747
+#: builtin/fetch.c:797
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Flaggan \"%s\" ignoreras för %s\n"
-#: builtin/fetch.c:801
+#: builtin/fetch.c:853
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "Vet inte hur man hämtar från %s"
-#: builtin/fetch.c:976
+#: builtin/fetch.c:1015
#, c-format
msgid "Fetching %s\n"
msgstr "Hämtar %s\n"
-#: builtin/fetch.c:978 builtin/remote.c:100
+#: builtin/fetch.c:1017 builtin/remote.c:90
#, c-format
msgid "Could not fetch %s"
msgstr "Kunde inte hämta %s"
-#: builtin/fetch.c:997
+#: builtin/fetch.c:1036
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -5168,32 +5225,32 @@ msgstr ""
"Inget fjärrarkiv angavs. Ange antingen en URL eller namnet på ett\n"
"fjärrarkiv som nya incheckningar skall hämtas från."
-#: builtin/fetch.c:1020
+#: builtin/fetch.c:1059
msgid "You need to specify a tag name."
msgstr "Du måste ange namnet på en tagg."
-#: builtin/fetch.c:1068
+#: builtin/fetch.c:1107
msgid "--depth and --unshallow cannot be used together"
msgstr "--depth och --unshallow kan inte användas samtidigt"
-#: builtin/fetch.c:1070
+#: builtin/fetch.c:1109
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow kan inte användas på ett komplett arkiv"
-#: builtin/fetch.c:1089
+#: builtin/fetch.c:1132
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all tar inte namnet på ett arkiv som argument"
-#: builtin/fetch.c:1091
+#: builtin/fetch.c:1134
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all kan inte anges med referensspecifikationer"
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1145
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Fjärren eller fjärrgruppen finns inte: %s"
-#: builtin/fetch.c:1110
+#: builtin/fetch.c:1153
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Kan inte hämta från grupp och ange referensspecifikationer"
@@ -5203,8 +5260,9 @@ msgstr ""
"git fmt-merge-msg [-m <meddelande>] [--log[=<n>]|--no-log] [--file <fil>]"
#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702
-#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:178
-#: builtin/tag.c:446 parse-options.h:135 parse-options.h:245
+#: builtin/merge.c:196 builtin/repack.c:160 builtin/repack.c:164
+#: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:446
+#: parse-options.h:135 parse-options.h:242
msgid "n"
msgstr "n"
@@ -5228,43 +5286,43 @@ msgstr "inled meddelande med <text>"
msgid "file to read from"
msgstr "fil att läsa från"
-#: builtin/for-each-ref.c:995
+#: builtin/for-each-ref.c:1063
msgid "git for-each-ref [options] [<pattern>]"
msgstr "git for-each-ref [flaggor] [<mönster>]"
-#: builtin/for-each-ref.c:1010
+#: builtin/for-each-ref.c:1078
msgid "quote placeholders suitably for shells"
msgstr "citera platshållare passande för skal"
-#: builtin/for-each-ref.c:1012
+#: builtin/for-each-ref.c:1080
msgid "quote placeholders suitably for perl"
msgstr "citera platshållare passande för perl"
-#: builtin/for-each-ref.c:1014
+#: builtin/for-each-ref.c:1082
msgid "quote placeholders suitably for python"
msgstr "citera platshållare passande för python"
-#: builtin/for-each-ref.c:1016
+#: builtin/for-each-ref.c:1084
msgid "quote placeholders suitably for tcl"
msgstr "citera platshållare passande för tcl"
-#: builtin/for-each-ref.c:1019
+#: builtin/for-each-ref.c:1087
msgid "show only <n> matched refs"
msgstr "visa endast <n> träffade refs"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088 builtin/replace.c:177
msgid "format"
msgstr "format"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088
msgid "format to use for the output"
msgstr "format att använda för utdata"
-#: builtin/for-each-ref.c:1021
+#: builtin/for-each-ref.c:1089
msgid "key"
msgstr "nyckel"
-#: builtin/for-each-ref.c:1022
+#: builtin/for-each-ref.c:1090
msgid "field name to sort on"
msgstr "fältnamn att sortera på"
@@ -5308,41 +5366,41 @@ msgstr "aktivera striktare kontroll"
msgid "write dangling objects in .git/lost-found"
msgstr "skriv dinglande objekt i .git/lost-found"
-#: builtin/fsck.c:623 builtin/prune.c:134
+#: builtin/fsck.c:623 builtin/prune.c:144
msgid "show progress"
msgstr "visa förlopp"
-#: builtin/gc.c:23
+#: builtin/gc.c:24
msgid "git gc [options]"
msgstr "git gc [flaggor]"
-#: builtin/gc.c:79
+#: builtin/gc.c:80
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Felaktigt %s: \"%s\""
-#: builtin/gc.c:106
+#: builtin/gc.c:107
#, c-format
msgid "insanely long object directory %.*s"
msgstr "tokigt lång objektkatalog %.*s"
-#: builtin/gc.c:261
+#: builtin/gc.c:262
msgid "prune unreferenced objects"
msgstr "rensa ej refererade objekt"
-#: builtin/gc.c:263
+#: builtin/gc.c:264
msgid "be more thorough (increased runtime)"
msgstr "var mer grundlig (ökar körtiden)"
-#: builtin/gc.c:264
+#: builtin/gc.c:265
msgid "enable auto-gc mode"
msgstr "aktivera auto-gc-läge"
-#: builtin/gc.c:265
+#: builtin/gc.c:266
msgid "force running gc even if there may be another gc running"
msgstr "tvinga gc-körning även om en annan gc kanske körs"
-#: builtin/gc.c:305
+#: builtin/gc.c:306
#, c-format
msgid ""
"Auto packing the repository for optimum performance. You may also\n"
@@ -5352,7 +5410,7 @@ msgstr ""
"köra \"git gc\" manuellt. Se \"git help gc\" för mer information.\n"
#. be quiet on --auto
-#: builtin/gc.c:315
+#: builtin/gc.c:316
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -5360,7 +5418,7 @@ msgstr ""
"gc körs redan på maskinen \"%s\" pid %<PRIuMAX> (använd --force om så inte "
"är fallet)"
-#: builtin/gc.c:340
+#: builtin/gc.c:341
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
@@ -5698,57 +5756,57 @@ msgstr ""
"\"%s\": kommando för man-visare som stöds.\n"
"Använd \"man.<verktyg>.path\" istället."
-#: builtin/help.c:349
+#: builtin/help.c:353
#, c-format
msgid "'%s': unknown man viewer."
msgstr "\"%s\": okänd man-visare."
-#: builtin/help.c:366
+#: builtin/help.c:370
msgid "no man viewer handled the request"
msgstr "ingen man-visare hanterade förfrågan"
-#: builtin/help.c:374
+#: builtin/help.c:378
msgid "no info viewer handled the request"
msgstr "ingen info-visare hanterade förfrågan"
-#: builtin/help.c:420
+#: builtin/help.c:424
msgid "Defining attributes per path"
msgstr "Definierar attribut per sökväg"
-#: builtin/help.c:421
+#: builtin/help.c:425
msgid "A Git glossary"
msgstr "En Git-ordlista"
-#: builtin/help.c:422
+#: builtin/help.c:426
msgid "Specifies intentionally untracked files to ignore"
msgstr "Ange avsiktligen ospårade filer att ignorera"
-#: builtin/help.c:423
+#: builtin/help.c:427
msgid "Defining submodule properties"
msgstr "Ange egenskaper för undermoduler"
-#: builtin/help.c:424
+#: builtin/help.c:428
msgid "Specifying revisions and ranges for Git"
msgstr "Ange versioner och intervall i Git"
-#: builtin/help.c:425
+#: builtin/help.c:429
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "Introduktion till Git (för version 1.5.1 och senare)"
-#: builtin/help.c:426
+#: builtin/help.c:430
msgid "An overview of recommended workflows with Git"
msgstr "Översikt över rekommenderade arbetsflöden med Git"
-#: builtin/help.c:438
+#: builtin/help.c:442
msgid "The common Git guides are:\n"
msgstr "De vanliga Git-vägledningarna är:\n"
-#: builtin/help.c:460 builtin/help.c:476
+#: builtin/help.c:463 builtin/help.c:480
#, c-format
msgid "usage: %s%s"
msgstr "användning: %s%s"
-#: builtin/help.c:492
+#: builtin/help.c:496
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "\"git %s\" är ett alias för \"%s\""
@@ -6157,21 +6215,21 @@ msgstr "behörigheter"
msgid "specify that the git repository is to be shared amongst several users"
msgstr "ange att git-arkivet skall delas bland flera användare"
-#: builtin/init-db.c:493 builtin/prune-packed.c:75 builtin/repack.c:155
+#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155
msgid "be quiet"
msgstr "var tyst"
-#: builtin/init-db.c:522 builtin/init-db.c:529
+#: builtin/init-db.c:525 builtin/init-db.c:530
#, c-format
msgid "cannot mkdir %s"
msgstr "kan inte skapa katalogen (mkdir) %s"
-#: builtin/init-db.c:533
+#: builtin/init-db.c:534
#, c-format
msgid "cannot chdir to %s"
msgstr "kan inte byta katalog (chdir) till %s"
-#: builtin/init-db.c:555
+#: builtin/init-db.c:556
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -6180,11 +6238,11 @@ msgstr ""
"%s (eller --work-tree=<katalog>) inte tillåtet utan att ange %s (eller --git-"
"dir=<katalog>)"
-#: builtin/init-db.c:579
+#: builtin/init-db.c:580
msgid "Cannot access current working directory"
msgstr "Kan inte komma åt aktuell arbetskatalog"
-#: builtin/init-db.c:586
+#: builtin/init-db.c:587
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "Kan inte komma åt arbetskatalogen \"%s\""
@@ -6606,151 +6664,151 @@ msgstr "Tillgängliga strategier är:"
msgid "Available custom strategies are:"
msgstr "Tillgängliga skräddarsydda strategier är:"
-#: builtin/merge.c:198
+#: builtin/merge.c:191
msgid "do not show a diffstat at the end of the merge"
msgstr "visa inte en diffstat när sammanslagningen är färdig"
-#: builtin/merge.c:201
+#: builtin/merge.c:194
msgid "show a diffstat at the end of the merge"
msgstr "visa en diffstat när sammanslagningen är färdig"
-#: builtin/merge.c:202
+#: builtin/merge.c:195
msgid "(synonym to --stat)"
msgstr "(synonym till --stat)"
-#: builtin/merge.c:204
+#: builtin/merge.c:197
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"lägg till (som mest <n>) poster från shortlog till incheckningsmeddelandet"
-#: builtin/merge.c:207
+#: builtin/merge.c:200
msgid "create a single commit instead of doing a merge"
msgstr "skapa en ensam incheckning istället för en sammanslagning"
-#: builtin/merge.c:209
+#: builtin/merge.c:202
msgid "perform a commit if the merge succeeds (default)"
msgstr "utför en incheckning om sammanslagningen lyckades (standard)"
-#: builtin/merge.c:211
+#: builtin/merge.c:204
msgid "edit message before committing"
msgstr "redigera meddelande innan incheckning"
-#: builtin/merge.c:212
+#: builtin/merge.c:205
msgid "allow fast-forward (default)"
msgstr "tillåt snabbspolning (standard)"
-#: builtin/merge.c:214
+#: builtin/merge.c:207
msgid "abort if fast-forward is not possible"
msgstr "avbryt om snabbspolning inte är möjlig"
-#: builtin/merge.c:218
+#: builtin/merge.c:211
msgid "Verify that the named commit has a valid GPG signature"
msgstr "Bekräfta att den namngivna incheckningen har en giltig GPG-signatur"
-#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:89
+#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89
msgid "strategy"
msgstr "strategi"
-#: builtin/merge.c:220
+#: builtin/merge.c:213
msgid "merge strategy to use"
msgstr "sammanslagninsstrategi att använda"
-#: builtin/merge.c:221
+#: builtin/merge.c:214
msgid "option=value"
msgstr "alternativ=värde"
-#: builtin/merge.c:222
+#: builtin/merge.c:215
msgid "option for selected merge strategy"
msgstr "alternativ för vald sammanslagningsstrategi"
-#: builtin/merge.c:224
+#: builtin/merge.c:217
msgid "merge commit message (for a non-fast-forward merge)"
msgstr "incheckningsmeddelande för (icke snabbspolande) sammanslagning"
-#: builtin/merge.c:228
+#: builtin/merge.c:221
msgid "abort the current in-progress merge"
msgstr "avbryt den pågående sammanslagningen"
-#: builtin/merge.c:257
+#: builtin/merge.c:250
msgid "could not run stash."
msgstr "kunde köra stash."
-#: builtin/merge.c:262
+#: builtin/merge.c:255
msgid "stash failed"
msgstr "stash misslyckades"
-#: builtin/merge.c:267
+#: builtin/merge.c:260
#, c-format
msgid "not a valid object: %s"
msgstr "inte ett giltigt objekt: %s"
-#: builtin/merge.c:286 builtin/merge.c:303
+#: builtin/merge.c:279 builtin/merge.c:296
msgid "read-tree failed"
msgstr "read-tree misslyckades"
-#: builtin/merge.c:333
+#: builtin/merge.c:326
msgid " (nothing to squash)"
msgstr " (inget att platta till)"
-#: builtin/merge.c:346
+#: builtin/merge.c:339
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Tillplattningsincheckning -- uppdaterar inte HEAD\n"
-#: builtin/merge.c:378
+#: builtin/merge.c:371
msgid "Writing SQUASH_MSG"
msgstr "Skriver SQUASH_MSG"
-#: builtin/merge.c:380
+#: builtin/merge.c:373
msgid "Finishing SQUASH_MSG"
msgstr "Avslutar SQUASH_MSG"
-#: builtin/merge.c:403
+#: builtin/merge.c:396
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr "Inget sammanslagningsmeddelande -- uppdaterar inte HEAD\n"
-#: builtin/merge.c:453
+#: builtin/merge.c:446
#, c-format
msgid "'%s' does not point to a commit"
msgstr "\"%s\" verkar inte peka på en incheckning"
-#: builtin/merge.c:565
+#: builtin/merge.c:558
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Felaktig branch.%s.mergeoptions-sträng: %s"
-#: builtin/merge.c:657
+#: builtin/merge.c:650
msgid "git write-tree failed to write a tree"
msgstr "git write-tree misslyckades skriva ett träd"
-#: builtin/merge.c:685
+#: builtin/merge.c:678
msgid "Not handling anything other than two heads merge."
msgstr "Hanterar inte något annat än en sammanslagning av två huvuden."
-#: builtin/merge.c:699
+#: builtin/merge.c:692
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Felaktig flagga för merge-recursive: -X%s"
-#: builtin/merge.c:713
+#: builtin/merge.c:706
#, c-format
msgid "unable to write %s"
msgstr "kunde inte skriva %s"
-#: builtin/merge.c:802
+#: builtin/merge.c:795
#, c-format
msgid "Could not read from '%s'"
msgstr "Kunde inte läsa från \"%s\""
-#: builtin/merge.c:811
+#: builtin/merge.c:804
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
"Checkar inte in sammanslagningen; använd \"git commit\" för att slutföra "
"den.\n"
-#: builtin/merge.c:817
+#: builtin/merge.c:810
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -6766,48 +6824,48 @@ msgstr ""
"Rader som inleds med \"%c\" kommer ignoreras, och ett tomt meddelande\n"
"avbryter incheckningen.\n"
-#: builtin/merge.c:841
+#: builtin/merge.c:834
msgid "Empty commit message."
msgstr "Tomt incheckningsmeddelande."
-#: builtin/merge.c:853
+#: builtin/merge.c:846
#, c-format
msgid "Wonderful.\n"
msgstr "Underbart.\n"
-#: builtin/merge.c:918
+#: builtin/merge.c:911
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"Kunde inte slå ihop automatiskt; fixa konflikter och checka in resultatet.\n"
-#: builtin/merge.c:934
+#: builtin/merge.c:927
#, c-format
msgid "'%s' is not a commit"
msgstr "\"%s\" är inte en incheckning"
-#: builtin/merge.c:975
+#: builtin/merge.c:968
msgid "No current branch."
msgstr "Inte på någon gren."
-#: builtin/merge.c:977
+#: builtin/merge.c:970
msgid "No remote for the current branch."
msgstr "Ingen fjärr för aktuell gren."
-#: builtin/merge.c:979
+#: builtin/merge.c:972
msgid "No default upstream defined for the current branch."
msgstr "Ingen standarduppström angiven för aktuell gren."
-#: builtin/merge.c:984
+#: builtin/merge.c:977
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "Ingen fjärrspårande gren för %s från %s"
-#: builtin/merge.c:1140
+#: builtin/merge.c:1133
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "Det finns ingen sammanslagning att avbryta (MERGE_HEAD saknas)."
-#: builtin/merge.c:1156 git-pull.sh:31
+#: builtin/merge.c:1149 git-pull.sh:31
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -6815,11 +6873,11 @@ msgstr ""
"Du har inte avslutat sammanslagningen (MERGE_HEAD finns).\n"
"Checka in dina ändringar innan du kan slå ihop."
-#: builtin/merge.c:1159 git-pull.sh:34
+#: builtin/merge.c:1152 git-pull.sh:34
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Du har inte avslutat sammanslagningen (MERGE_HEAD finns)."
-#: builtin/merge.c:1163
+#: builtin/merge.c:1156
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -6827,140 +6885,148 @@ msgstr ""
"Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns).\n"
"Checka in dina ändringar innan du kan slå ihop."
-#: builtin/merge.c:1166
+#: builtin/merge.c:1159
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns)."
-#: builtin/merge.c:1175
+#: builtin/merge.c:1168
msgid "You cannot combine --squash with --no-ff."
msgstr "Du kan inte kombinera --squash med --no-ff."
-#: builtin/merge.c:1184
+#: builtin/merge.c:1177
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr "Ingen incheckning angiven och merge.defaultToUpstream är ej satt."
-#: builtin/merge.c:1216
+#: builtin/merge.c:1209
msgid "Can merge only exactly one commit into empty head"
msgstr "Kan endast slå ihop en enda incheckning i ett tomt huvud."
-#: builtin/merge.c:1219
+#: builtin/merge.c:1212
msgid "Squash commit into empty head not supported yet"
msgstr "Stöder inte en tillplattningsincheckning på ett tomt huvud ännu"
-#: builtin/merge.c:1221
+#: builtin/merge.c:1214
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr "Icke-snabbspolad incheckning kan inte användas med ett tomt huvud"
-#: builtin/merge.c:1226
+#: builtin/merge.c:1219
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - inte något vi kan slå ihop"
-#: builtin/merge.c:1277
+#: builtin/merge.c:1270
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Incheckningen %s har en obetrodd GPG-signatur som påstås vara gjord av %s."
-#: builtin/merge.c:1280
+#: builtin/merge.c:1273
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr ""
"Incheckningen %s har en felaktig GPG-signatur som påstås vara gjord av %s."
#. 'N'
-#: builtin/merge.c:1283
+#: builtin/merge.c:1276
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Incheckning %s har inte någon GPG-signatur."
-#: builtin/merge.c:1286
+#: builtin/merge.c:1279
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Incheckningen %s har en korrekt GPG-signatur av %s\n"
-#: builtin/merge.c:1370
+#: builtin/merge.c:1363
#, c-format
msgid "Updating %s..%s\n"
msgstr "Uppdaterar %s..%s\n"
-#: builtin/merge.c:1409
+#: builtin/merge.c:1402
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Försöker riktigt enkel sammanslagning i indexet...\n"
-#: builtin/merge.c:1416
+#: builtin/merge.c:1409
#, c-format
msgid "Nope.\n"
msgstr "Nej.\n"
-#: builtin/merge.c:1448
+#: builtin/merge.c:1441
msgid "Not possible to fast-forward, aborting."
msgstr "Kan inte snabbspola, avbryter."
-#: builtin/merge.c:1471 builtin/merge.c:1550
+#: builtin/merge.c:1464 builtin/merge.c:1543
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Återspolar trädet till orört...\n"
-#: builtin/merge.c:1475
+#: builtin/merge.c:1468
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Försöker sammanslagninsstrategin %s...\n"
-#: builtin/merge.c:1541
+#: builtin/merge.c:1534
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Ingen sammanslagningsstrategi hanterade sammanslagningen.\n"
-#: builtin/merge.c:1543
+#: builtin/merge.c:1536
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Sammanslagning med strategin %s misslyckades.\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1545
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Använder %s för att förbereda lösning för hand.\n"
-#: builtin/merge.c:1564
+#: builtin/merge.c:1557
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"Automatisk sammanslagning lyckades; stoppar före incheckning som önskat\n"
-#: builtin/merge-base.c:26
+#: builtin/merge-base.c:29
msgid "git merge-base [-a|--all] <commit> <commit>..."
msgstr "git merge-base [-a|--all] <incheckning> <incheckning>..."
-#: builtin/merge-base.c:27
+#: builtin/merge-base.c:30
msgid "git merge-base [-a|--all] --octopus <commit>..."
msgstr "git merge-base [-a|--all] --octopus <incheckning>..."
-#: builtin/merge-base.c:28
+#: builtin/merge-base.c:31
msgid "git merge-base --independent <commit>..."
msgstr "git merge-base --independent <incheckning>..."
-#: builtin/merge-base.c:29
+#: builtin/merge-base.c:32
msgid "git merge-base --is-ancestor <commit> <commit>"
msgstr "git merge-base --is-ancestor <incheckning> <incheckning>"
-#: builtin/merge-base.c:98
+#: builtin/merge-base.c:33
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr "git merge-base --fork-point <ref> <incheckning>"
+
+#: builtin/merge-base.c:214
msgid "output all common ancestors"
msgstr "skriv ut alla gemensamma anfäder"
-#: builtin/merge-base.c:99
+#: builtin/merge-base.c:216
msgid "find ancestors for a single n-way merge"
msgstr "hitta anfader för enkel n-vägssammanslagning"
-#: builtin/merge-base.c:100
+#: builtin/merge-base.c:218
msgid "list revs not reachable from others"
msgstr "visa revisioner som inte kan nås från andra"
-#: builtin/merge-base.c:102
+#: builtin/merge-base.c:220
msgid "is the first one ancestor of the other?"
msgstr "är den första anfader till den andra?"
+#: builtin/merge-base.c:222
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr "se var <incheckning> grenades av från referensloggen från <ref>"
+
#: builtin/merge-file.c:8
msgid ""
"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
@@ -7020,123 +7086,127 @@ msgstr "tillåt skapa mer än ett träd"
msgid "git mv [options] <source>... <destination>"
msgstr "git mv [flaggor] <källa>... <mål>"
-#: builtin/mv.c:67
+#: builtin/mv.c:71
msgid "force move/rename even if target exists"
msgstr "tvinga flytta/ändra namn även om målet finns"
-#: builtin/mv.c:68
+#: builtin/mv.c:72
msgid "skip move/rename errors"
msgstr "hoppa över fel vid flytt/namnändring"
-#: builtin/mv.c:113
+#: builtin/mv.c:122
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Kontrollerar namnbyte av \"%s\" till \"%s\"\n"
-#: builtin/mv.c:117
+#: builtin/mv.c:126
msgid "bad source"
msgstr "felaktig källa"
-#: builtin/mv.c:120
+#: builtin/mv.c:129
msgid "can not move directory into itself"
msgstr "kan inte flytta katalog till sig själv"
-#: builtin/mv.c:123
+#: builtin/mv.c:132
msgid "cannot move directory over file"
msgstr "kan inte flytta katalog över fil"
-#: builtin/mv.c:129
+#: builtin/mv.c:138
#, c-format
msgid "Huh? Directory %s is in index and no submodule?"
msgstr "Vad? Katalogen %s är i indexet och inte en undermodul?"
-#: builtin/mv.c:131 builtin/rm.c:318
+#: builtin/mv.c:140 builtin/rm.c:318
msgid "Please, stage your changes to .gitmodules or stash them to proceed"
msgstr ""
"Köa dina ändringar i .gitmodules eller använd \"stash\" för att fortsätta"
-#: builtin/mv.c:147
+#: builtin/mv.c:156
#, c-format
msgid "Huh? %.*s is in index?"
msgstr "Vad? %.*s är i indexet?"
-#: builtin/mv.c:159
+#: builtin/mv.c:168
msgid "source directory is empty"
msgstr "källkatalogen är tom"
-#: builtin/mv.c:191
+#: builtin/mv.c:200
msgid "not under version control"
msgstr "inte versionshanterad"
-#: builtin/mv.c:193
+#: builtin/mv.c:202
msgid "destination exists"
msgstr "destinationen finns"
-#: builtin/mv.c:201
+#: builtin/mv.c:210
#, c-format
msgid "overwriting '%s'"
msgstr "skriver över \"%s\""
-#: builtin/mv.c:204
+#: builtin/mv.c:213
msgid "Cannot overwrite"
msgstr "Kan inte skriva över"
-#: builtin/mv.c:207
+#: builtin/mv.c:216
msgid "multiple sources for the same target"
msgstr "flera källor för samma mål"
-#: builtin/mv.c:222
+#: builtin/mv.c:218
+msgid "destination directory does not exist"
+msgstr "destinationskatalogen finns inte"
+
+#: builtin/mv.c:233
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, källa=%s, mål=%s"
-#: builtin/mv.c:232
+#: builtin/mv.c:243
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Byter namn på %s till %s\n"
-#: builtin/mv.c:235 builtin/remote.c:731 builtin/repack.c:330
+#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328
#, c-format
msgid "renaming '%s' failed"
msgstr "misslyckades byta namn på \"%s\""
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [options] <commit>..."
msgstr "git name-rev [flaggor] <incheckning>..."
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [options] --all"
msgstr "git name-rev [flaggor] --all"
-#: builtin/name-rev.c:261
+#: builtin/name-rev.c:260
msgid "git name-rev [options] --stdin"
msgstr "git name-rev [flaggor] --stdin"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "print only names (no SHA-1)"
msgstr "skriv endast namn (ingen SHA-1)"
-#: builtin/name-rev.c:314
+#: builtin/name-rev.c:313
msgid "only use tags to name the commits"
msgstr "använd endast taggar för att namnge incheckningar"
-#: builtin/name-rev.c:316
+#: builtin/name-rev.c:315
msgid "only use refs matching <pattern>"
msgstr "använd endast referenser som motsvarar <mönster>"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "list all commits reachable from all refs"
msgstr "lista alla incheckningar som kan nås alla referenser"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "read from stdin"
msgstr "läs från standard in"
-#: builtin/name-rev.c:320
+#: builtin/name-rev.c:319
msgid "allow to print `undefined` names (default)"
msgstr "tillåt att skriva \"odefinierade\" namn (standard)"
-#: builtin/name-rev.c:326
+#: builtin/name-rev.c:325
msgid "dereference tags in the input (internal use)"
msgstr "avreferera taggar i indata (används internt)"
@@ -7462,7 +7532,7 @@ msgstr "anteckningar-ref"
msgid "use notes from <notes_ref>"
msgstr "använd anteckningar från <anteckningsref>"
-#: builtin/notes.c:974 builtin/remote.c:1598
+#: builtin/notes.c:974 builtin/remote.c:1593
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Okänt underkommando: %s"
@@ -7480,143 +7550,143 @@ msgstr "git pack-objects [flaggor...] basnamn [< reflista | < objektlista]"
msgid "deflate error (%d)"
msgstr "fel i deflate (%d)"
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2396
#, c-format
msgid "unsupported index version %s"
msgstr "indexversionen %s stöds ej"
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2400
#, c-format
msgid "bad index version '%s'"
msgstr "felaktig indexversion \"%s\""
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2423
#, c-format
msgid "option %s does not accept negative form"
msgstr "flaggan %s godtar inte negativ form"
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2427
#, c-format
msgid "unable to parse value '%s' for option %s"
msgstr "kunde inte tolka värdet \"%s\" för flaggan %s"
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2446
msgid "do not show progress meter"
msgstr "visa inte förloppsindikator"
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2448
msgid "show progress meter"
msgstr "visa förloppsindikator"
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2450
msgid "show progress meter during object writing phase"
msgstr "visa förloppsindikator under objektskrivningsfasen"
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2453
msgid "similar to --all-progress when progress meter is shown"
msgstr "som --all-progress när förloppsmätaren visas"
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2454
msgid "version[,offset]"
msgstr "version[,offset]"
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2455
msgid "write the pack index file in the specified idx format version"
msgstr "skriv paketindexfilen i angiven indexformatversion"
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2458
msgid "maximum size of each output pack file"
msgstr "maximal storlek på varje utdatapaketfil"
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2460
msgid "ignore borrowed objects from alternate object store"
msgstr "ignorera lånade objekt från alternativa objektlager"
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2462
msgid "ignore packed objects"
msgstr "ignorera packade objekt"
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2464
msgid "limit pack window by objects"
msgstr "begränsa paketfönster efter objekt"
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2466
msgid "limit pack window by memory in addition to object limit"
msgstr "begränsa paketfönster efter minne förutom objektgräns"
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2468
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr "maximal längd på deltakedja tillåten i slutligt paket"
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2470
msgid "reuse existing deltas"
msgstr "återanvänd befintliga delta"
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2472
msgid "reuse existing objects"
msgstr "återanvänd befintliga objekt"
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2474
msgid "use OFS_DELTA objects"
msgstr "använd OFS_DELTA-objekt"
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2476
msgid "use threads when searching for best delta matches"
msgstr "använd trådar vid sökning efter bästa deltaträffar"
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2478
msgid "do not create an empty pack output"
msgstr "försök inte skapa tom paketutdata"
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2480
msgid "read revision arguments from standard input"
msgstr "läs revisionsargument från standard in"
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2482
msgid "limit the objects to those that are not yet packed"
msgstr "begränsa objekt till de som ännu inte packats"
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2485
msgid "include objects reachable from any reference"
msgstr "inkludera objekt som kan nås från någon referens"
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2488
msgid "include objects referred by reflog entries"
msgstr "inkludera objekt som refereras från referensloggposter"
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2491
msgid "output pack to stdout"
msgstr "skriv paket på standard ut"
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2493
msgid "include tag objects that refer to objects to be packed"
msgstr "inkludera taggobjekt som refererar objekt som skall packas"
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2495
msgid "keep unreachable objects"
msgstr "behåll onåbara objekt"
-#: builtin/pack-objects.c:2498 parse-options.h:143
+#: builtin/pack-objects.c:2496 parse-options.h:143
msgid "time"
msgstr "tid"
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2497
msgid "unpack unreachable objects newer than <time>"
msgstr "packa upp onåbara objekt nyare än <tid>"
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2500
msgid "create thin packs"
msgstr "skapa tunna paket"
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2502
msgid "ignore packs that have companion .keep file"
msgstr "ignorera paket som har tillhörande .keep-fil"
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2504
msgid "pack compression level"
msgstr "komprimeringsgrad för paket"
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2506
msgid "do not hide commits by grafts"
msgstr "göm inte incheckningar med ympningar (\"grafts\")"
@@ -7640,15 +7710,15 @@ msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]"
msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
msgstr "git prune [-n] [-v] [--expire <tid>] [--] [<huvud>...]"
-#: builtin/prune.c:132
+#: builtin/prune.c:142
msgid "do not remove, show only"
msgstr "ta inte bort, bara visa"
-#: builtin/prune.c:133
+#: builtin/prune.c:143
msgid "report pruned objects"
msgstr "rapportera borttagna objekt"
-#: builtin/prune.c:136
+#: builtin/prune.c:146
msgid "expire objects older than <time>"
msgstr "låt tid gå ut för objekt äldre än <tid>"
@@ -7656,15 +7726,15 @@ msgstr "låt tid gå ut för objekt äldre än <tid>"
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr "git push [<flaggor>] [<arkiv> [<refspec>...]]"
-#: builtin/push.c:47
+#: builtin/push.c:86
msgid "tag shorthand without <tag>"
msgstr "taggförkortning utan <tagg>"
-#: builtin/push.c:66
+#: builtin/push.c:96
msgid "--delete only accepts plain target ref names"
msgstr "--delete godtar endast enkla målreferensnamn"
-#: builtin/push.c:101
+#: builtin/push.c:141
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
@@ -7673,7 +7743,7 @@ msgstr ""
"För att välja ett av alternativen permanent, se push.default i \"git help "
"config\"."
-#: builtin/push.c:104
+#: builtin/push.c:144
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -7698,7 +7768,7 @@ msgstr ""
" git push %s %s\n"
"%s"
-#: builtin/push.c:119
+#: builtin/push.c:159
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -7713,7 +7783,7 @@ msgstr ""
"\n"
" git push %s HEAD:<namn-på-fjärrgren>\n"
-#: builtin/push.c:133
+#: builtin/push.c:173
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -7726,12 +7796,12 @@ msgstr ""
"\n"
" git push --set-upstream %s %s\n"
-#: builtin/push.c:141
+#: builtin/push.c:181
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
msgstr "Den aktuella grenen %s har flera uppströmsgrenar, vägrar sända."
-#: builtin/push.c:144
+#: builtin/push.c:184
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -7742,7 +7812,7 @@ msgstr ""
"aktuella grenen \"%s\", utan att tala om för mig vad som\n"
"skall sändas för att uppdatera fjärrgrenen."
-#: builtin/push.c:167
+#: builtin/push.c:207
msgid ""
"push.default is unset; its implicit value is changing in\n"
"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7754,6 +7824,13 @@ msgid ""
"\n"
" git config --global push.default simple\n"
"\n"
+"When push.default is set to 'matching', git will push local branches\n"
+"to the remote branches that already exist with the same name.\n"
+"\n"
+"In Git 2.0, Git will default to the more conservative 'simple'\n"
+"behavior, which only pushes the current branch to the corresponding\n"
+"remote branch that 'git pull' uses to update the current branch.\n"
+"\n"
"See 'git help config' and search for 'push.default' for further "
"information.\n"
"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
@@ -7771,19 +7848,27 @@ msgstr ""
"\n"
" git config --global push.default simple\n"
"\n"
+"Nör push.default är satt till \"matching\" kommer git att sända lokala "
+"grenar\n"
+"till fjärrgrenar som redan finns och som har samma namn.\n"
+"\n"
+"Git 2.0 kommer som standard välja den mer konservativa inställningen\n"
+"\"simple\", vilket bara sänder in den aktuella grenen till den motsvarande\n"
+"fjärrgren \"git pull\" använder för att uppdatera den aktuella grenen.\n"
+"\n"
"Se \"git help config\" och sök efter \"push.default\" för ytterligare \n"
"information. (Läget \"simple\" introducerades i Git 1.7.11. Använd det\n"
"liknande läget \"current\" istället för \"simple\" om du ibland använder\n"
"äldre versioner av Git.)"
-#: builtin/push.c:227
+#: builtin/push.c:274
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr ""
"Du angav inga referensspecifikationer att sända, och push.default är "
"\"nothing\"."
-#: builtin/push.c:234
+#: builtin/push.c:281
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -7795,7 +7880,7 @@ msgstr ""
"\"git pull ....\") innan du sänder igen.\n"
"Se avsnittet \"Note about fast-forward\" i \"git push --help\" för detaljer."
-#: builtin/push.c:240
+#: builtin/push.c:287
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. If you did not intend to push that branch, you may want to\n"
@@ -7809,7 +7894,7 @@ msgstr ""
"endast\n"
"sända aktuell gren."
-#: builtin/push.c:246
+#: builtin/push.c:293
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -7821,7 +7906,7 @@ msgstr ""
"\"git pull ...\") innan du sänder igen.\n"
"Se avsnittet \"Note about fast-forward\" i \"git push --help\" för detaljer."
-#: builtin/push.c:252
+#: builtin/push.c:299
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -7835,11 +7920,11 @@ msgstr ""
"(t.ex. \"git pull ...\") innan du sänder igen.\n"
"Se avsnittet \"Note about fast-forwards\" i \"git push --help\" för detaljer."
-#: builtin/push.c:259
+#: builtin/push.c:306
msgid "Updates were rejected because the tag already exists in the remote."
msgstr "Uppdateringarna avvisades eftersom taggen redan finns på fjärren."
-#: builtin/push.c:262
+#: builtin/push.c:309
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
@@ -7850,22 +7935,22 @@ msgstr ""
"pekar på något som inte är en incheckning, utan att använda flaggan\n"
"\"--force\".\n"
-#: builtin/push.c:328
+#: builtin/push.c:375
#, c-format
msgid "Pushing to %s\n"
msgstr "Sänder till %s\n"
-#: builtin/push.c:332
+#: builtin/push.c:379
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "misslyckades sända vissa referenser till \"%s\""
-#: builtin/push.c:365
+#: builtin/push.c:412
#, c-format
msgid "bad repository '%s'"
msgstr "felaktigt arkiv \"%s\""
-#: builtin/push.c:366
+#: builtin/push.c:413
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -7886,95 +7971,95 @@ msgstr ""
"\n"
" git push <namn>\n"
-#: builtin/push.c:381
+#: builtin/push.c:428
msgid "--all and --tags are incompatible"
msgstr "--all och --tags är inkompatibla"
-#: builtin/push.c:382
+#: builtin/push.c:429
msgid "--all can't be combined with refspecs"
msgstr "--all kan inte kombineras med referensspecifikationer"
-#: builtin/push.c:387
+#: builtin/push.c:434
msgid "--mirror and --tags are incompatible"
msgstr "--mirror och --tags är inkompatibla"
-#: builtin/push.c:388
+#: builtin/push.c:435
msgid "--mirror can't be combined with refspecs"
msgstr "--mirror kan inte kombineras med referensspecifikationer"
-#: builtin/push.c:393
+#: builtin/push.c:440
msgid "--all and --mirror are incompatible"
msgstr "--all och --mirror är inkompatibla"
-#: builtin/push.c:453
+#: builtin/push.c:500
msgid "repository"
msgstr "arkiv"
-#: builtin/push.c:454
+#: builtin/push.c:501
msgid "push all refs"
msgstr "sänd alla referenser"
-#: builtin/push.c:455
+#: builtin/push.c:502
msgid "mirror all refs"
msgstr "spegla alla referenser"
-#: builtin/push.c:457
+#: builtin/push.c:504
msgid "delete refs"
msgstr "ta bort referenser"
-#: builtin/push.c:458
+#: builtin/push.c:505
msgid "push tags (can't be used with --all or --mirror)"
msgstr "sänd taggar (kan inte användas med --all eller --mirror)"
-#: builtin/push.c:461
+#: builtin/push.c:508
msgid "force updates"
msgstr "tvinga uppdateringar"
-#: builtin/push.c:463
+#: builtin/push.c:510
msgid "refname>:<expect"
msgstr "refnamn>:<förvänta"
-#: builtin/push.c:464
+#: builtin/push.c:511
msgid "require old value of ref to be at this value"
msgstr "kräv att ref:s tidigare värde är detta"
-#: builtin/push.c:466
+#: builtin/push.c:513
msgid "check"
msgstr "kontrollera"
-#: builtin/push.c:467
+#: builtin/push.c:514
msgid "control recursive pushing of submodules"
msgstr "styr rekursiv insändning av undermoduler"
-#: builtin/push.c:469
+#: builtin/push.c:516
msgid "use thin pack"
msgstr "använd tunna paket"
-#: builtin/push.c:470 builtin/push.c:471
+#: builtin/push.c:517 builtin/push.c:518
msgid "receive pack program"
msgstr "program för att ta emot paket"
-#: builtin/push.c:472
+#: builtin/push.c:519
msgid "set upstream for git pull/status"
msgstr "ställ in uppström för git pull/status"
-#: builtin/push.c:475
+#: builtin/push.c:522
msgid "prune locally removed refs"
msgstr "ta bort lokalt borttagna referenser"
-#: builtin/push.c:477
+#: builtin/push.c:524
msgid "bypass pre-push hook"
msgstr "förbigå pre-push-krok"
-#: builtin/push.c:478
+#: builtin/push.c:525
msgid "push missing but relevant tags"
msgstr "sänd in saknade men relevanta taggar"
-#: builtin/push.c:488
+#: builtin/push.c:535
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "--delete är imkompatibel med --all, --mirror och --tags"
-#: builtin/push.c:490
+#: builtin/push.c:537
msgid "--delete doesn't make sense without any refs"
msgstr "--delete kan inte användas utan referenser"
@@ -8062,11 +8147,11 @@ msgstr "\"%s\" för \"%s\" är inte en giltig tidsstämpel"
msgid "'%s' is not a valid timestamp"
msgstr "\"%s\" är inte en giltig tidsstämpel"
-#: builtin/remote.c:11
+#: builtin/remote.c:12
msgid "git remote [-v | --verbose]"
msgstr "git remote [-v | --verbose]"
-#: builtin/remote.c:12
+#: builtin/remote.c:13
msgid ""
"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <name> <url>"
@@ -8074,82 +8159,82 @@ msgstr ""
"git remote add [-t <gren>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <namn> <url>"
-#: builtin/remote.c:13 builtin/remote.c:32
+#: builtin/remote.c:14 builtin/remote.c:33
msgid "git remote rename <old> <new>"
msgstr "git remote rename <gammal> <ny>"
-#: builtin/remote.c:14 builtin/remote.c:37
+#: builtin/remote.c:15 builtin/remote.c:38
msgid "git remote remove <name>"
msgstr "git remote remove <namn>"
-#: builtin/remote.c:15
+#: builtin/remote.c:16
msgid "git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"
msgstr "git remote set-head <namn> (-a | --auto | -d | --delete | <gren>)"
-#: builtin/remote.c:16
+#: builtin/remote.c:17
msgid "git remote [-v | --verbose] show [-n] <name>"
msgstr "git remote [-v | --verbose] show [-n] <namn>"
-#: builtin/remote.c:17
+#: builtin/remote.c:18
msgid "git remote prune [-n | --dry-run] <name>"
msgstr "git remote prune [-n | --dry-run] <namn>"
-#: builtin/remote.c:18
+#: builtin/remote.c:19
msgid ""
"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
msgstr ""
"git remote [-v | --verbose] update [-p | --prune] [(<grupp> | <fjärr>)...]"
-#: builtin/remote.c:19
+#: builtin/remote.c:20
msgid "git remote set-branches [--add] <name> <branch>..."
msgstr "git remote set-branches [--add] <namn> <gren>..."
-#: builtin/remote.c:20 builtin/remote.c:68
+#: builtin/remote.c:21 builtin/remote.c:69
msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
msgstr "git remote set-url [--push] <namn> <nyurl> [<gammalurl>]"
-#: builtin/remote.c:21 builtin/remote.c:69
+#: builtin/remote.c:22 builtin/remote.c:70
msgid "git remote set-url --add <name> <newurl>"
msgstr "git remote set-url --add <namn> <nyurl>"
-#: builtin/remote.c:22 builtin/remote.c:70
+#: builtin/remote.c:23 builtin/remote.c:71
msgid "git remote set-url --delete <name> <url>"
msgstr "git remote set-url --delete <namn> <url>"
-#: builtin/remote.c:27
+#: builtin/remote.c:28
msgid "git remote add [<options>] <name> <url>"
msgstr "git remote add [<flaggor>] <namn> <url>"
-#: builtin/remote.c:42
+#: builtin/remote.c:43
msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
msgstr "git remote set-head <namn> (-a | --auto | -d | --delete | <gren>)"
-#: builtin/remote.c:47
+#: builtin/remote.c:48
msgid "git remote set-branches <name> <branch>..."
msgstr "git remote set-branches <namn> <gren>..."
-#: builtin/remote.c:48
+#: builtin/remote.c:49
msgid "git remote set-branches --add <name> <branch>..."
msgstr "git remote set-branches --add <namn> <gren>..."
-#: builtin/remote.c:53
+#: builtin/remote.c:54
msgid "git remote show [<options>] <name>"
msgstr "git remote show [<flaggor>] <namn>"
-#: builtin/remote.c:58
+#: builtin/remote.c:59
msgid "git remote prune [<options>] <name>"
msgstr "git remote prune [<flaggor>] <namn>"
-#: builtin/remote.c:63
+#: builtin/remote.c:64
msgid "git remote update [<options>] [<group> | <remote>]..."
msgstr "git remote update [<flaggor>] [<grupp> | <fjärr>]..."
-#: builtin/remote.c:98
+#: builtin/remote.c:88
#, c-format
msgid "Updating %s"
msgstr "Uppdaterar %s"
-#: builtin/remote.c:130
+#: builtin/remote.c:120
msgid ""
"--mirror is dangerous and deprecated; please\n"
"\t use --mirror=fetch or --mirror=push instead"
@@ -8157,101 +8242,101 @@ msgstr ""
"--mirror är farlig och föråldrad; använd\n"
"\t --mirror=fetch eller --mirror=push istället"
-#: builtin/remote.c:147
+#: builtin/remote.c:137
#, c-format
msgid "unknown mirror argument: %s"
msgstr "okänt argument till mirror: %s"
-#: builtin/remote.c:163
+#: builtin/remote.c:153
msgid "fetch the remote branches"
msgstr "hämta fjärrgrenarna"
-#: builtin/remote.c:165
+#: builtin/remote.c:155
msgid "import all tags and associated objects when fetching"
msgstr "importera alla taggar och associerade objekt vid hämtning"
-#: builtin/remote.c:168
+#: builtin/remote.c:158
msgid "or do not fetch any tag at all (--no-tags)"
msgstr "eller hämta inte några taggar alls (--no-tags)"
-#: builtin/remote.c:170
+#: builtin/remote.c:160
msgid "branch(es) to track"
msgstr "gren(ar) att spåra"
-#: builtin/remote.c:171
+#: builtin/remote.c:161
msgid "master branch"
msgstr "huvudgren"
-#: builtin/remote.c:172
+#: builtin/remote.c:162
msgid "push|fetch"
msgstr "push|fetch"
-#: builtin/remote.c:173
+#: builtin/remote.c:163
msgid "set up remote as a mirror to push to or fetch from"
msgstr "ställ in arkiv som spegel att sända eller ta emot från"
-#: builtin/remote.c:185
+#: builtin/remote.c:175
msgid "specifying a master branch makes no sense with --mirror"
msgstr "att ange en master-gren ger ingen mening med --mirror"
-#: builtin/remote.c:187
+#: builtin/remote.c:177
msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr "att ange grenar att spåra ger mening bara med hämtningsspeglar"
-#: builtin/remote.c:195 builtin/remote.c:646
+#: builtin/remote.c:185 builtin/remote.c:641
#, c-format
msgid "remote %s already exists."
msgstr "fjärrarkivet %s finns redan."
-#: builtin/remote.c:199 builtin/remote.c:650
+#: builtin/remote.c:189 builtin/remote.c:645
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "\"%s\" är inte ett giltigt namn på fjärrarkiv"
-#: builtin/remote.c:243
+#: builtin/remote.c:233
#, c-format
msgid "Could not setup master '%s'"
msgstr "Kunde inte skapa master \"%s\""
-#: builtin/remote.c:299
+#: builtin/remote.c:289
#, c-format
msgid "more than one %s"
msgstr "mer än en %s"
-#: builtin/remote.c:339
+#: builtin/remote.c:334
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr "Kunde inte hämta mappning för referensspecifikation %s"
-#: builtin/remote.c:440 builtin/remote.c:448
+#: builtin/remote.c:435 builtin/remote.c:443
msgid "(matching)"
msgstr "(matchande)"
-#: builtin/remote.c:452
+#: builtin/remote.c:447
msgid "(delete)"
msgstr "(ta bort)"
-#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607
+#: builtin/remote.c:590 builtin/remote.c:596 builtin/remote.c:602
#, c-format
msgid "Could not append '%s' to '%s'"
msgstr "Kunde inte tillämpa \"%s\" på \"%s\""
-#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890
+#: builtin/remote.c:634 builtin/remote.c:787 builtin/remote.c:885
#, c-format
msgid "No such remote: %s"
msgstr "Inget sådant fjärrarkiv: %s"
-#: builtin/remote.c:656
+#: builtin/remote.c:651
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "Kunde inte byta namn på konfigurationssektionen \"%s\" till \"%s\""
-#: builtin/remote.c:662 builtin/remote.c:799
+#: builtin/remote.c:657 builtin/remote.c:794
#, c-format
msgid "Could not remove config section '%s'"
msgstr "Kunde inte ta bort konfigurationssektionen \"%s\""
-#: builtin/remote.c:677
+#: builtin/remote.c:672
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -8262,32 +8347,32 @@ msgstr ""
"\t%s\n"
"\tUppdatera konfigurationen manuellt om nödvändigt."
-#: builtin/remote.c:683
+#: builtin/remote.c:678
#, c-format
msgid "Could not append '%s'"
msgstr "Kunde inte lägga till på \"%s\""
-#: builtin/remote.c:694
+#: builtin/remote.c:689
#, c-format
msgid "Could not set '%s'"
msgstr "Kunde inte sätta \"%s\""
-#: builtin/remote.c:716
+#: builtin/remote.c:711
#, c-format
msgid "deleting '%s' failed"
msgstr "misslyckades ta bort \"%s\""
-#: builtin/remote.c:750
+#: builtin/remote.c:745
#, c-format
msgid "creating '%s' failed"
msgstr "misslyckades skapa \"%s\""
-#: builtin/remote.c:764
+#: builtin/remote.c:759
#, c-format
msgid "Could not remove branch %s"
msgstr "Kunde inte ta bort grenen %s"
-#: builtin/remote.c:834
+#: builtin/remote.c:829
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -8301,262 +8386,262 @@ msgstr[1] ""
"Observera: Några grenar utanför hierarkin refs/remotes/ togs inte bort;\n"
"för att ta bort dem, använd:"
-#: builtin/remote.c:943
+#: builtin/remote.c:938
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " ny (nästa hämtning sparar i remotes/%s)"
-#: builtin/remote.c:946
+#: builtin/remote.c:941
msgid " tracked"
msgstr " spårad"
-#: builtin/remote.c:948
+#: builtin/remote.c:943
msgid " stale (use 'git remote prune' to remove)"
msgstr " förlegad (använd \"git remote prune\" för att ta bort)"
-#: builtin/remote.c:950
+#: builtin/remote.c:945
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:991
+#: builtin/remote.c:986
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "ogiltig branch.%s.merge; kan inte ombasera över > 1 gren"
-#: builtin/remote.c:998
+#: builtin/remote.c:993
#, c-format
msgid "rebases onto remote %s"
msgstr "ombaseras på fjärren %s"
-#: builtin/remote.c:1001
+#: builtin/remote.c:996
#, c-format
msgid " merges with remote %s"
msgstr " sammanslås med fjärren %s"
-#: builtin/remote.c:1002
+#: builtin/remote.c:997
msgid " and with remote"
msgstr " och med fjärren"
-#: builtin/remote.c:1004
+#: builtin/remote.c:999
#, c-format
msgid "merges with remote %s"
msgstr "sammanslås med fjärren %s"
-#: builtin/remote.c:1005
+#: builtin/remote.c:1000
msgid " and with remote"
msgstr " och med fjärren"
-#: builtin/remote.c:1051
+#: builtin/remote.c:1046
msgid "create"
msgstr "skapa"
-#: builtin/remote.c:1054
+#: builtin/remote.c:1049
msgid "delete"
msgstr "ta bort"
-#: builtin/remote.c:1058
+#: builtin/remote.c:1053
msgid "up to date"
msgstr "àjour"
-#: builtin/remote.c:1061
+#: builtin/remote.c:1056
msgid "fast-forwardable"
msgstr "kan snabbspolas"
-#: builtin/remote.c:1064
+#: builtin/remote.c:1059
msgid "local out of date"
msgstr "lokal föråldrad"
-#: builtin/remote.c:1071
+#: builtin/remote.c:1066
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s tvingar till %-*s (%s)"
-#: builtin/remote.c:1074
+#: builtin/remote.c:1069
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s sänder till %-*s (%s)"
-#: builtin/remote.c:1078
+#: builtin/remote.c:1073
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s tvingar till %s"
-#: builtin/remote.c:1081
+#: builtin/remote.c:1076
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s sänder till %s"
-#: builtin/remote.c:1091
+#: builtin/remote.c:1144
msgid "do not query remotes"
msgstr "fråga inte fjärrar"
-#: builtin/remote.c:1118
+#: builtin/remote.c:1171
#, c-format
msgid "* remote %s"
msgstr "* fjärr %s"
-#: builtin/remote.c:1119
+#: builtin/remote.c:1172
#, c-format
msgid " Fetch URL: %s"
msgstr " Hämt-URL: %s"
-#: builtin/remote.c:1120 builtin/remote.c:1285
+#: builtin/remote.c:1173 builtin/remote.c:1318
msgid "(no URL)"
msgstr "(ingen URL)"
-#: builtin/remote.c:1129 builtin/remote.c:1131
+#: builtin/remote.c:1182 builtin/remote.c:1184
#, c-format
msgid " Push URL: %s"
msgstr " Sänd-URL: %s"
-#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137
+#: builtin/remote.c:1186 builtin/remote.c:1188 builtin/remote.c:1190
#, c-format
msgid " HEAD branch: %s"
msgstr " HEAD-gren: %s"
-#: builtin/remote.c:1139
+#: builtin/remote.c:1192
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
msgstr " HEAD-gren (HEAD på fjärr är tvetydig, kan vara en av följande):\n"
-#: builtin/remote.c:1151
+#: builtin/remote.c:1204
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Fjärrgren:%s"
msgstr[1] " Fjärrgrenar:%s"
-#: builtin/remote.c:1154 builtin/remote.c:1181
+#: builtin/remote.c:1207 builtin/remote.c:1234
msgid " (status not queried)"
msgstr " (status inte förfrågad)"
-#: builtin/remote.c:1163
+#: builtin/remote.c:1216
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Lokal gren konfigurerad för \"git pull\":"
msgstr[1] " Lokala grenar konfigurerade för \"git pull\":"
-#: builtin/remote.c:1171
+#: builtin/remote.c:1224
msgid " Local refs will be mirrored by 'git push'"
msgstr " Lokala referenser speglas av \"git push\""
-#: builtin/remote.c:1178
+#: builtin/remote.c:1231
#, c-format
msgid " Local ref configured for 'git push'%s:"
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:"
-#: builtin/remote.c:1199
+#: builtin/remote.c:1252
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "sätt refs/remotes/<namn>/HEAD enligt fjärren"
-#: builtin/remote.c:1201
+#: builtin/remote.c:1254
msgid "delete refs/remotes/<name>/HEAD"
msgstr "ta bort refs/remotes/<namn>/HEAD"
-#: builtin/remote.c:1216
+#: builtin/remote.c:1269
msgid "Cannot determine remote HEAD"
msgstr "Kan inte bestämma HEAD på fjärren"
-#: builtin/remote.c:1218
+#: builtin/remote.c:1271
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr "Flera HEAD-grenar på fjärren. Välj en explicit med:"
-#: builtin/remote.c:1228
+#: builtin/remote.c:1281
#, c-format
msgid "Could not delete %s"
msgstr "Kunde inte ta bort %s"
-#: builtin/remote.c:1236
+#: builtin/remote.c:1289
#, c-format
msgid "Not a valid ref: %s"
msgstr "Inte en giltig referens: %s"
-#: builtin/remote.c:1238
+#: builtin/remote.c:1291
#, c-format
msgid "Could not setup %s"
msgstr "Kunde inte ställa in %s"
-#: builtin/remote.c:1274
+#: builtin/remote.c:1307
#, c-format
msgid " %s will become dangling!"
msgstr " %s kommer bli dinglande!"
-#: builtin/remote.c:1275
+#: builtin/remote.c:1308
#, c-format
msgid " %s has become dangling!"
msgstr " %s har blivit dinglande!"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1314
#, c-format
msgid "Pruning %s"
msgstr "Rensar %s"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1315
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1295
+#: builtin/remote.c:1328
#, c-format
msgid " * [would prune] %s"
msgstr " * [skulle rensa] %s"
-#: builtin/remote.c:1298
+#: builtin/remote.c:1331
#, c-format
msgid " * [pruned] %s"
msgstr " * [rensad] %s"
-#: builtin/remote.c:1321
+#: builtin/remote.c:1374
msgid "prune remotes after fetching"
msgstr "rensa fjärrar efter hämtning"
-#: builtin/remote.c:1387 builtin/remote.c:1461
+#: builtin/remote.c:1440 builtin/remote.c:1514
#, c-format
msgid "No such remote '%s'"
msgstr "Ingen sådan fjärr \"%s\""
-#: builtin/remote.c:1407
+#: builtin/remote.c:1460
msgid "add branch"
msgstr "lägg till gren"
-#: builtin/remote.c:1414
+#: builtin/remote.c:1467
msgid "no remote specified"
msgstr "ingen fjärr angavs"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1489
msgid "manipulate push URLs"
msgstr "manipulera URL:ar för sändning"
-#: builtin/remote.c:1438
+#: builtin/remote.c:1491
msgid "add URL"
msgstr "lägg till URL"
-#: builtin/remote.c:1440
+#: builtin/remote.c:1493
msgid "delete URLs"
msgstr "ta bort URL:ar"
-#: builtin/remote.c:1447
+#: builtin/remote.c:1500
msgid "--add --delete doesn't make sense"
msgstr "--add --delete ger ingen mening"
-#: builtin/remote.c:1487
+#: builtin/remote.c:1540
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Felaktig gammalt URL-mönster: %s"
-#: builtin/remote.c:1495
+#: builtin/remote.c:1548
#, c-format
msgid "No such URL found: %s"
msgstr "Ingen sådan URL hittades: %s"
-#: builtin/remote.c:1497
+#: builtin/remote.c:1550
msgid "Will not delete all non-push URLs"
msgstr "Kommer inte ta bort alla icke-sänd-URL:er"
-#: builtin/remote.c:1569
+#: builtin/remote.c:1564
msgid "be verbose; must be placed before a subcommand"
msgstr "var pratsam; måste skrivas före ett underkommando"
@@ -8604,6 +8689,10 @@ msgstr "med -A, lös inte upp objekt äldre än detta"
msgid "size of the window used for delta compression"
msgstr "storlek på fönster använt för deltakomprimering"
+#: builtin/repack.c:162 builtin/repack.c:166
+msgid "bytes"
+msgstr "byte"
+
#: builtin/repack.c:163
msgid "same as the above, but limit memory size instead of entries count"
msgstr "samma som ovan, men begränsa minnesstorleken istället för postantal"
@@ -8616,7 +8705,7 @@ msgstr "begränsa maximalt deltadjup"
msgid "maximum size of each packfile"
msgstr "maximal storlek på varje paketfil"
-#: builtin/repack.c:345
+#: builtin/repack.c:343
#, c-format
msgid "removing '%s' failed"
msgstr "misslyckades ta bort \"%s\""
@@ -8630,21 +8719,25 @@ msgid "git replace -d <object>..."
msgstr "git replace -d <objekt>..."
#: builtin/replace.c:19
-msgid "git replace -l [<pattern>]"
-msgstr "git replace -l [<mönster>]"
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
+msgstr "git replace [--format=<format>] [-l [<mönster>]]"
-#: builtin/replace.c:131
+#: builtin/replace.c:174
msgid "list replace refs"
msgstr "visa ersättningsreferenser"
-#: builtin/replace.c:132
+#: builtin/replace.c:175
msgid "delete replace refs"
msgstr "ta bort ersättningsreferenser"
-#: builtin/replace.c:133
+#: builtin/replace.c:176
msgid "replace the ref if it exists"
msgstr "ersätt referensen om den finns"
+#: builtin/replace.c:177
+msgid "use this format"
+msgstr "använd detta format"
+
#: builtin/rerere.c:12
msgid "git rerere [clear | forget path... | status | remaining | diff | gc]"
msgstr "git rerere [clear | forget path... | status | remaining | diff | gc]"
@@ -8777,19 +8870,23 @@ msgstr "Kunde inte återställa indexfilen till versionen \"%s\"."
msgid "Could not write new index file."
msgstr "Kunde inte skriva ny indexfil."
-#: builtin/rev-parse.c:345
+#: builtin/rev-parse.c:359
msgid "git rev-parse --parseopt [options] -- [<args>...]"
msgstr "git rev-parse --parseopt [options] -- [<argument>...]"
-#: builtin/rev-parse.c:350
+#: builtin/rev-parse.c:364
msgid "keep the `--` passed as an arg"
msgstr "behåll \"--\" sänt som argument"
-#: builtin/rev-parse.c:352
+#: builtin/rev-parse.c:366
msgid "stop parsing after the first non-option argument"
msgstr "sluta tolka efter första argument som inte är flagga"
-#: builtin/rev-parse.c:470
+#: builtin/rev-parse.c:369
+msgid "output in stuck long form"
+msgstr "utdata fast i lång form"
+
+#: builtin/rev-parse.c:486
msgid ""
"git rev-parse --parseopt [options] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
@@ -9034,67 +9131,67 @@ msgstr ""
msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g|--reflog)[=<n>[,<bas>]] [--list] [<ref>]"
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:649
msgid "show remote-tracking and local branches"
msgstr "visa fjärrspårande och lokala grenar"
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:651
msgid "show remote-tracking branches"
msgstr "visa fjärrspårande grenar"
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "color '*!+-' corresponding to the branch"
msgstr "färga \"*!+-\" enligt grenen"
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "show <n> more commits after the common ancestor"
msgstr "visa <n> ytterligare incheckningar efter gemensam anfader"
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "synonym to more=-1"
msgstr "synonym till more=-1"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "suppress naming strings"
msgstr "undertyck namnsträngar"
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:660
msgid "include the current branch"
msgstr "inkludera aktuell gren"
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:662
msgid "name commits with their object names"
msgstr "namnge incheckningar med deras objektnamn"
-#: builtin/show-branch.c:665
+#: builtin/show-branch.c:664
msgid "show possible merge bases"
msgstr "visa möjliga sammanslaningsbaser"
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show refs unreachable from any other ref"
msgstr "visa referenser som inte kan nås från någon annan referens"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show commits in topological order"
msgstr "visa incheckningar i topologisk ordning"
-#: builtin/show-branch.c:672
+#: builtin/show-branch.c:671
msgid "show only commits not on the first branch"
msgstr "visa endast incheckningar inte på den första grenen"
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "show merges reachable from only one tip"
msgstr "visa sammanslagningar som endast kan nås från en spets"
-#: builtin/show-branch.c:676
+#: builtin/show-branch.c:675
msgid "topologically sort, maintaining date order where possible"
msgstr "sortera topologiskt, behåll datumordning när möjligt"
-#: builtin/show-branch.c:679
+#: builtin/show-branch.c:678
msgid "<n>[,<base>]"
msgstr "<n>[,<bas>]"
-#: builtin/show-branch.c:680
+#: builtin/show-branch.c:679
msgid "show <n> most recent ref-log entries starting at base"
msgstr "visa <n> nyaste refloggposter med början på bas"
@@ -9583,15 +9680,15 @@ msgstr "giltig till"
msgid "no-op (backward compatibility)"
msgstr "ingen funktion (bakåtkompatibilitet)"
-#: parse-options.h:238
+#: parse-options.h:235
msgid "be more verbose"
msgstr "var mer pratsam"
-#: parse-options.h:240
+#: parse-options.h:237
msgid "be more quiet"
msgstr "var mer tyst"
-#: parse-options.h:246
+#: parse-options.h:243
msgid "use <n> digits to display SHA-1s"
msgstr "använd <n> siffror för att visa SHA-1:or"
@@ -9892,8 +9989,8 @@ msgstr ""
# cogito-relaterat
#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
-msgstr "kör inte \"bisect\" på ett \"seeked\"-träd"
+msgid "won't bisect on cg-seek'ed tree"
+msgstr "kör inte \"bisect\" på träd där \"cg-seek\" använts"
#: git-bisect.sh:144
msgid "Bad HEAD - strange symbolic ref"
@@ -10037,7 +10134,7 @@ msgstr "uppdaterar en ofödd gren med ändringar som lagts till i indexet"
#. The working tree and the index file is still based on the
#. $orig_head commit, but we are merging into $curr_head.
#. First update the working tree to match $curr_head.
-#: git-pull.sh:255
+#: git-pull.sh:247
#, sh-format
msgid ""
"Warning: fetch updated the current branch head.\n"
@@ -10048,15 +10145,15 @@ msgstr ""
"Varning: snabbspolar din arbetskatalog från\n"
"Varning: incheckningen $orig_head."
-#: git-pull.sh:280
+#: git-pull.sh:272
msgid "Cannot merge multiple branches into empty head"
msgstr "Kan inte slå ihop flera grenar i ett tomt huvud."
-#: git-pull.sh:284
+#: git-pull.sh:276
msgid "Cannot rebase onto multiple branches"
msgstr "Kan inte utföra en \"rebase\" ovanpå flera grenar"
-#: git-rebase.sh:54
+#: git-rebase.sh:55
msgid ""
"When you have resolved this problem, run \"git rebase --continue\".\n"
"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
@@ -10067,16 +10164,16 @@ msgstr ""
"Om du vill hoppa över patchen kör du istället \"git rebase --skip\".\n"
"För att återställa originalgrenen och avbryta kör du \"git rebase --abort\"."
-#: git-rebase.sh:156
+#: git-rebase.sh:158
msgid "Applied autostash."
msgstr "Tillämpade autostash."
-#: git-rebase.sh:159
+#: git-rebase.sh:161
#, sh-format
msgid "Cannot store $stash_sha1"
msgstr "Kan inte spara $stash_sha1"
-#: git-rebase.sh:160
+#: git-rebase.sh:162
msgid ""
"Applying autostash resulted in conflicts.\n"
"Your changes are safe in the stash.\n"
@@ -10086,31 +10183,31 @@ msgstr ""
"Dina ändringar är säkra i stashen.\n"
"Du kan när som helst använda \"git stash pop\" eller \"git stash drop\".\n"
-#: git-rebase.sh:199
+#: git-rebase.sh:201
msgid "The pre-rebase hook refused to rebase."
msgstr "Kroken pre-rebase vägrade ombaseringen."
-#: git-rebase.sh:204
+#: git-rebase.sh:206
msgid "It looks like git-am is in progress. Cannot rebase."
msgstr "Det verkar som en git-am körs. Kan inte ombasera."
-#: git-rebase.sh:338
+#: git-rebase.sh:346
msgid "The --exec option must be used with the --interactive option"
msgstr "Flaggan --exec måste användas tillsammans med flaggan --interactive"
-#: git-rebase.sh:343
+#: git-rebase.sh:351
msgid "No rebase in progress?"
msgstr "Ingen ombasering pågår?"
-#: git-rebase.sh:354
+#: git-rebase.sh:362
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr "Åtgärden --edit-todo kan endast användas under interaktiv ombasering."
-#: git-rebase.sh:361
+#: git-rebase.sh:369
msgid "Cannot read HEAD"
msgstr "Kan inte läsa HEAD"
-#: git-rebase.sh:364
+#: git-rebase.sh:372
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -10118,12 +10215,12 @@ msgstr ""
"Du måste redigera alla sammanslagningskonflikter och\n"
"därefter markera dem som lösta med git add"
-#: git-rebase.sh:382
+#: git-rebase.sh:390
#, sh-format
msgid "Could not move back to $head_name"
msgstr "Kunde inte flytta tillbaka till $head_name"
-#: git-rebase.sh:401
+#: git-rebase.sh:409
#, sh-format
msgid ""
"It seems that there is already a $state_dir_base directory, and\n"
@@ -10144,66 +10241,66 @@ msgstr ""
"och kör programmet igen. Jag avslutar ifall du fortfarande har\n"
"något av värde där."
-#: git-rebase.sh:446
+#: git-rebase.sh:456
#, sh-format
msgid "invalid upstream $upstream_name"
msgstr "ogiltig uppström $upstream_name"
-#: git-rebase.sh:470
+#: git-rebase.sh:480
#, sh-format
msgid "$onto_name: there are more than one merge bases"
msgstr "$onto_name: mer än en sammanslagningsbas finns"
-#: git-rebase.sh:473 git-rebase.sh:477
+#: git-rebase.sh:483 git-rebase.sh:487
#, sh-format
msgid "$onto_name: there is no merge base"
msgstr "$onto_name: ingen sammanslagningsbas finns"
-#: git-rebase.sh:482
+#: git-rebase.sh:492
#, sh-format
msgid "Does not point to a valid commit: $onto_name"
msgstr "Peka på en giltig incheckning: $onto_name"
-#: git-rebase.sh:505
+#: git-rebase.sh:515
#, sh-format
msgid "fatal: no such branch: $branch_name"
msgstr "ödesdigert: ingen sådan gren: $branch_name"
-#: git-rebase.sh:528
+#: git-rebase.sh:548
msgid "Cannot autostash"
msgstr "Kan inte utföra \"autostash\""
-#: git-rebase.sh:533
+#: git-rebase.sh:553
#, sh-format
msgid "Created autostash: $stash_abbrev"
msgstr "Skapade autostash: $stash_abbrev"
-#: git-rebase.sh:537
+#: git-rebase.sh:557
msgid "Please commit or stash them."
msgstr "Checka in eller använd \"stash\" på dem."
-#: git-rebase.sh:557
+#: git-rebase.sh:577
#, sh-format
msgid "Current branch $branch_name is up to date."
msgstr "Aktuell gren $branch_name är à jour."
-#: git-rebase.sh:561
+#: git-rebase.sh:581
#, sh-format
msgid "Current branch $branch_name is up to date, rebase forced."
msgstr "Aktuell gren $branch_name är à jour, ombasering framtvingad."
-#: git-rebase.sh:572
+#: git-rebase.sh:592
#, sh-format
msgid "Changes from $mb to $onto:"
msgstr "Ändringar från $mb till $onto:"
#. Detach HEAD and reset the tree
-#: git-rebase.sh:581
+#: git-rebase.sh:601
msgid "First, rewinding head to replay your work on top of it..."
msgstr ""
"Först, spolar tillbaka huvudet för att spela av ditt arbete ovanpå det..."
-#: git-rebase.sh:591
+#: git-rebase.sh:611
#, sh-format
msgid "Fast-forwarded $branch_name to $onto_name."
msgstr "Snabbspolade $branch_name till $onto_name."
@@ -10452,56 +10549,56 @@ msgstr "Misslyckades registrera undermodulen \"$sm_path\""
msgid "Entering '$prefix$displaypath'"
msgstr "GÃ¥r in i \"$prefix$displaypath\""
-#: git-submodule.sh:554
+#: git-submodule.sh:559
#, sh-format
msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
msgstr ""
"Stoppar på \"$prefix$displaypath\"; skriptet returnerade en status skild "
"från noll."
-#: git-submodule.sh:600
+#: git-submodule.sh:605
#, sh-format
msgid "No url found for submodule path '$displaypath' in .gitmodules"
msgstr ""
"Hittade ingen url för undermodulsökvägen \"$displaypath\" i .gitmodules"
-#: git-submodule.sh:609
+#: git-submodule.sh:614
#, sh-format
msgid "Failed to register url for submodule path '$displaypath'"
msgstr "Misslyckades registrera url för undermodulsökväg \"$displaypath\""
-#: git-submodule.sh:611
+#: git-submodule.sh:616
#, sh-format
msgid "Submodule '$name' ($url) registered for path '$displaypath'"
msgstr ""
"Undermodulen \"$name\" ($url) registrerad för sökvägen \"$displaypath\""
-#: git-submodule.sh:619
+#: git-submodule.sh:633
#, sh-format
msgid "Failed to register update mode for submodule path '$displaypath'"
msgstr ""
"Misslyckades registrera uppdateringsläge för undermodulsökväg \"$displaypath"
"\""
-#: git-submodule.sh:656
+#: git-submodule.sh:671
#, sh-format
msgid "Use '.' if you really want to deinitialize all submodules"
msgstr "Använd \".\" om du verkligen vill avinitiera alla undermoduler"
-#: git-submodule.sh:673
+#: git-submodule.sh:688
#, sh-format
msgid "Submodule work tree '$displaypath' contains a .git directory"
msgstr ""
"Undermodulens arbetskatalog \"$displaypath\" innehåller katalogen \".git\""
-#: git-submodule.sh:674
+#: git-submodule.sh:689
#, sh-format
msgid ""
"(use 'rm -rf' if you really want to remove it including all of its history)"
msgstr ""
"(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)"
-#: git-submodule.sh:680
+#: git-submodule.sh:695
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
@@ -10510,28 +10607,28 @@ msgstr ""
"Undermodulens arbetskatalog \"$displaypath\" har lokala ändringar; \"-f\" "
"kastar bort dem"
-#: git-submodule.sh:683
+#: git-submodule.sh:698
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "Rensade katalogen \"$displaypath\""
-#: git-submodule.sh:684
+#: git-submodule.sh:699
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr "Kunde inte ta bort undermodulens arbetskatalog \"$displaypath\""
-#: git-submodule.sh:687
+#: git-submodule.sh:702
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr "Kunde inte skapa tom undermodulskatalog \"$displaypath\""
-#: git-submodule.sh:696
+#: git-submodule.sh:711
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr ""
"Undermodulen \"$name\" ($url) avregistrerad för sökvägen \"$displaypath\""
-#: git-submodule.sh:811
+#: git-submodule.sh:834
#, sh-format
msgid ""
"Submodule path '$displaypath' not initialized\n"
@@ -10540,109 +10637,124 @@ msgstr ""
"Undermodulen \"$displaypath\" har inte initierats\n"
"Kanske du vill köra \"update --init\"?"
-#: git-submodule.sh:824
+#: git-submodule.sh:847
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr "Kan inte hitta aktuell revision i undermodulsökvägen \"$displaypath\""
-#: git-submodule.sh:833
+#: git-submodule.sh:856
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "Kan inte hämta i undermodulsökväg \"$sm_path\""
-#: git-submodule.sh:857
+#: git-submodule.sh:880
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "Kan inte hämta i undermodulsökväg \"$displaypath\""
-#: git-submodule.sh:871
+#: git-submodule.sh:894
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr "Kan inte ombasera \"$sha1\" i undermodulsökvägen \"$displaypath\""
-#: git-submodule.sh:872
+#: git-submodule.sh:895
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Undermodulsökvägen \"$displaypath\": ombaserade in i \"$sha1\""
-#: git-submodule.sh:877
+#: git-submodule.sh:900
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr "Kan inte slå ihop \"$sha1\" i undermodulsökvägen \"$displaypath\""
-#: git-submodule.sh:878
+#: git-submodule.sh:901
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Undermodulsökvägen \"$displaypath\": sammanslagen i \"$sha1\""
-#: git-submodule.sh:883
+#: git-submodule.sh:906
#, sh-format
msgid ""
"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
msgstr ""
"Misslyckades köra \"$command $sha1\" i undermodulsökvägen \"$prefix$sm_path\""
-#: git-submodule.sh:884
+#: git-submodule.sh:907
#, sh-format
msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
msgstr "Undermodulsökvägen \"$prefix$sm_path\": \"$command $sha1\""
-#: git-submodule.sh:889
+#: git-submodule.sh:912
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "Kan inte checka ut \"$sha1\" i undermodulsökvägen \"$displaypath\""
-#: git-submodule.sh:890
+#: git-submodule.sh:913
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Undermodulsökvägen \"$displaypath\": checkade ut \"$sha1\""
-#: git-submodule.sh:917
+#: git-submodule.sh:940
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "Misslyckades rekursera in i undermodulsökvägen \"$displaypath\""
-#: git-submodule.sh:1025
+#: git-submodule.sh:1048
msgid "The --cached option cannot be used with the --files option"
msgstr "Flaggan --cached kan inte användas med flaggan --files"
#. unexpected type
-#: git-submodule.sh:1073
+#: git-submodule.sh:1096
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "oväntat läge $mod_dst"
-#: git-submodule.sh:1093
+#: git-submodule.sh:1116
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " Varning: $display_name innehåller inte incheckningen $sha1_src"
-#: git-submodule.sh:1096
+#: git-submodule.sh:1119
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " Varning: $display_name innehåller inte incheckningen $sha1_dst"
-#: git-submodule.sh:1099
+#: git-submodule.sh:1122
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr ""
" Varning: $display_name innehåller inte incheckningarna $sha1_src och "
"$sha1_dst"
-#: git-submodule.sh:1124
+#: git-submodule.sh:1147
msgid "blob"
msgstr "blob"
-#: git-submodule.sh:1238
+#: git-submodule.sh:1261
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "Misslyckades rekursera in i undermodulsökvägen \"$sm_path\""
-#: git-submodule.sh:1302
+#: git-submodule.sh:1325
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "Synkroniserar undermodul-url för \"$displaypath\""
+#~ msgid "copied: %s -> %s"
+#~ msgstr "kopierad: %s -> %s"
+
+#~ msgid "deleted: %s"
+#~ msgstr "borttagen: %s"
+
+#~ msgid "modified: %s"
+#~ msgstr "ändrad: %s"
+
+#~ msgid "renamed: %s -> %s"
+#~ msgstr "namnbyte: %s -> %s"
+
+#~ msgid "unmerged: %s"
+#~ msgstr "osammansl.: %s"
+
#~ msgid "input paths are terminated by a null character"
#~ msgstr "sökvägar avdelas med null-tecken"
diff --git a/po/vi.po b/po/vi.po
index 05420eb47..b9676a88e 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,23 +1,23 @@
# Vietnamese translation for GIT-CORE.
# Bản dịch tiếng Việt dành cho GIT-CORE.
# This file is distributed under the same license as the git-core package.
-# First translated by Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2013.
+# First translated by Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2014.
# Nguyá»…n Thái Ngá»c Duy <pclouds@gmail.com>, 2012.
#
msgid ""
msgstr ""
-"Project-Id-Version: git-v1.8.5-rc0-24-g727b957\n"
+"Project-Id-Version: git v1.9-pu\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2013-11-02 08:06+0800\n"
-"PO-Revision-Date: 2013-11-02 13:15+0700\n"
+"POT-Creation-Date: 2014-02-01 08:06+0800\n"
+"PO-Revision-Date: 2014-02-03 07:30+0700\n"
"Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
"Language: vi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Team-Website: <http://translationproject.org/team/vi.html>\n"
"Plural-Forms: nplurals=2; plural=1;\n"
+"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: ../\n"
"X-Generator: Poedit 1.5.5\n"
@@ -62,7 +62,7 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote <kho> [--exec <lệnh>] --list"
-#: archive.c:242 builtin/add.c:240 builtin/add.c:556 builtin/rm.c:328
+#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "đặc tả Ä‘Æ°á»ng dẫn “%s†không khá»›p vá»›i bất kỳ tập tin nào"
@@ -83,8 +83,8 @@ msgstr "tiá»n tố"
msgid "prepend prefix to each pathname in the archive"
msgstr "nối thêm tiá»n tố vào từng Ä‘Æ°á»ng dẫn tập tin trong kho lÆ°u"
-#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2264
-#: builtin/blame.c:2265 builtin/config.c:58 builtin/fast-export.c:680
+#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265
+#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680
#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77
#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408
#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154
@@ -146,38 +146,37 @@ msgstr ""
#: branch.c:60
#, c-format
msgid "Not setting branch %s as its own upstream."
-msgstr "Chưa cài đặt nhánh %s như là thượng nguồn (upstream) của nó."
+msgstr "Chưa cài đặt nhánh %s như là thượng nguồn của nó."
#: branch.c:82
#, c-format
msgid "Branch %s set up to track remote branch %s from %s by rebasing."
-msgstr ""
-"Nhánh %s cài đặt để theo dõi vết nhánh máy chủ %s từ %s bằng cách rebase."
+msgstr "Nhánh %s cài đặt để theo dõi nhánh máy chủ %s từ %s bằng cách rebase."
#: branch.c:83
#, c-format
msgid "Branch %s set up to track remote branch %s from %s."
-msgstr "Nhánh %s cài đặt để theo vết nhánh máy chủ %s từ %s."
+msgstr "Nhánh %s cài đặt để theo dõi nhánh máy chủ %s từ %s."
#: branch.c:87
#, c-format
msgid "Branch %s set up to track local branch %s by rebasing."
-msgstr "Nhánh %s cài đặt để theo vết nhánh nội bộ %s bằng cách rebase."
+msgstr "Nhánh %s cài đặt để theo dõi nhánh nội bộ %s bằng cách rebase."
#: branch.c:88
#, c-format
msgid "Branch %s set up to track local branch %s."
-msgstr "Nhánh %s cài đặt để theo vết nhánh nội bộ %s."
+msgstr "Nhánh %s cài đặt để theo dõi nhánh nội bộ %s."
#: branch.c:92
#, c-format
msgid "Branch %s set up to track remote ref %s by rebasing."
-msgstr "Nhánh %s cài đặt để theo vết nhánh máy chủ %s bằng cách rebase."
+msgstr "Nhánh %s cài đặt để theo dõi nhánh máy chủ %s bằng cách rebase."
#: branch.c:93
#, c-format
msgid "Branch %s set up to track remote ref %s."
-msgstr "Nhánh %s cài đặt để theo vết tham chiếu máy chủ %s."
+msgstr "Nhánh %s cài đặt để theo dõi tham chiếu máy chủ %s."
#: branch.c:97
#, c-format
@@ -193,12 +192,12 @@ msgstr "Nhánh %s cài đặt để theo dõi tham chiếu nội bộ %s."
#: branch.c:118
#, c-format
msgid "Tracking not set up: name too long: %s"
-msgstr "Theo vết chưa được cài đặt: tên quá dài: %s"
+msgstr "Việc theo dõi chưa được cài đặt: tên quá dài: %s"
#: branch.c:137
#, c-format
msgid "Not tracking: ambiguous information for ref %s"
-msgstr "Không theo vết: thông tin chưa rõ ràng cho tham chiếu %s"
+msgstr "Không theo dõi: thông tin chưa rõ ràng cho tham chiếu %s"
#: branch.c:182
#, c-format
@@ -218,13 +217,13 @@ msgstr "Không thể ép buộc cập nhật nhánh hiện hành."
#, c-format
msgid "Cannot setup tracking information; starting point '%s' is not a branch."
msgstr ""
-"Không thể cài đặt thông tin theo vết; điểm bắt đầu “%s†không phải là một "
+"Không thể cài đặt thông tin theo dõi; điểm bắt đầu “%s†không phải là một "
"nhánh."
#: branch.c:217
#, c-format
msgid "the requested upstream branch '%s' does not exist"
-msgstr "nhánh thượng nguồn đã yêu cầu “%s†chưa sẵn có"
+msgstr "nhánh thượng nguồn đã yêu cầu “%s†không tồn tại"
#: branch.c:219
msgid ""
@@ -238,7 +237,7 @@ msgid ""
"\"git push -u\" to set the upstream config as you push."
msgstr ""
"\n"
-"Nếu bạn có ý định cải tổ công việc của bạn trên nhánh thượng nguồn\n"
+"Nếu bạn có ý định “cải tổ†công việc của bạn trên nhánh thượng nguồn\n"
"(upstream) cái mà đã sẵn có trên máy chủ, bạn cần chạy\n"
"lệnh \"git fetch\" để lấy nó vá».\n"
"\n"
@@ -269,70 +268,70 @@ msgstr "Gặp lỗi khi khóa tham chiếu (ref) để cập nhật"
msgid "Failed to write ref"
msgstr "Gặp lỗi khi ghi tham chiếu (ref)"
-#: bundle.c:36
+#: bundle.c:37
#, c-format
msgid "'%s' does not look like a v2 bundle file"
msgstr "“%s†không giống như tập tin v2 bundle (định dạng dump của git)"
-#: bundle.c:63
+#: bundle.c:64
#, c-format
msgid "unrecognized header: %s%s (%d)"
-msgstr "phần đầu (header) không được thừa nhận: %s%s (%d)"
+msgstr "phần đầu không được thừa nhận: %s%s (%d)"
-#: bundle.c:89 builtin/commit.c:706
+#: bundle.c:90 builtin/commit.c:706
#, c-format
msgid "could not open '%s'"
msgstr "không thể mở “%sâ€"
-#: bundle.c:140
+#: bundle.c:141
msgid "Repository lacks these prerequisite commits:"
-msgstr "Kho chứa thiếu những lần chuyển giao (commit) cần trước hết này:"
+msgstr "Kho chứa thiếu những lần chuyển giao tiên quyết này:"
-#: bundle.c:164 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
-#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:364
+#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
+#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357
#: builtin/shortlog.c:158
msgid "revision walk setup failed"
msgstr "cài đặt việc di chuyển qua các điểm xét duyệt gặp lỗi"
-#: bundle.c:186
+#: bundle.c:187
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "Bundle chứa tham chiếu (ref) này:"
msgstr[1] "Bundle chứa %d tham chiếu (ref):"
-#: bundle.c:193
+#: bundle.c:194
msgid "The bundle records a complete history."
msgstr "Lệnh bundle ghi lại toàn bộ lịch sử."
-#: bundle.c:195
+#: bundle.c:196
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "Lệnh bundle yêu cầu tham chiếu này:"
msgstr[1] "Lệnh bundle yêu cầu %d tham chiếu (refs) này:"
-#: bundle.c:294
+#: bundle.c:296
msgid "rev-list died"
msgstr "rev-list đã chết"
-#: bundle.c:300 builtin/log.c:1329 builtin/shortlog.c:261
+#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261
#, c-format
msgid "unrecognized argument: %s"
msgstr "đối số không được thừa nhận: %s"
-#: bundle.c:335
+#: bundle.c:337
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "th.chiếu “%s†bị loại trừ bởi các tùy chá»n rev-list"
-#: bundle.c:380
+#: bundle.c:382
msgid "Refusing to create empty bundle."
msgstr "Từ chối tạo một bundle trống rỗng."
#: bundle.c:398
msgid "Could not spawn pack-objects"
-msgstr "Không thể sản sinh pack-objects"
+msgstr "Không thể sản sinh đối tượng gói"
#: bundle.c:416
msgid "pack-objects died"
@@ -361,16 +360,16 @@ msgstr "%s %s không phải là một lần commit!"
msgid "memory exhausted"
msgstr "hết bộ nhớ"
-#: connected.c:60
+#: connected.c:70
msgid "Could not run 'git rev-list'"
msgstr "Không thể chạy “git rev-listâ€"
-#: connected.c:80
+#: connected.c:90
#, c-format
msgid "failed write to rev-list: %s"
msgstr "gặp lỗi khi ghi vào rev-list: %s"
-#: connected.c:88
+#: connected.c:98
#, c-format
msgid "failed to close rev-list's stdin: %s"
msgstr "gặp lỗi khi đóng đầu vào chuẩn stdin của rev-list: %s"
@@ -442,22 +441,27 @@ msgid_plural "%lu years ago"
msgstr[0] "%lu năm trước"
msgstr[1] "%lu năm trước"
-#: diff.c:112
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr "gặp lá»—i khi Ä‘á»c tập-tin-thứ-tá»± “%sâ€"
+
+#: diff.c:113
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr " Gặp lá»—i khi phân tích dirstat cắt bá» phần trăm “%sâ€\n"
-#: diff.c:117
+#: diff.c:118
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr " Không hiểu đối số dirstat “%sâ€\n"
-#: diff.c:210
+#: diff.c:213
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr "Không hiểu giá trị cho biến cấu hình “diff.submoduleâ€: “%sâ€"
-#: diff.c:260
+#: diff.c:263
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -466,7 +470,7 @@ msgstr ""
"Tìm thấy các lá»—i trong biến cấu hình “diff.dirstatâ€:\n"
"%s"
-#: diff.c:3490
+#: diff.c:3509
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -475,7 +479,7 @@ msgstr ""
"Gặp lá»—i khi phân tích đối số tùy chá»n --dirstat/-X:\n"
"%s"
-#: diff.c:3504
+#: diff.c:3523
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "Gặp lá»—i khi phân tích đối số tùy chá»n --submodule: “%sâ€"
@@ -524,11 +528,11 @@ msgstr "các lệnh git sẵn có trong thÆ° mục “%sâ€:"
#: help.c:217
msgid "git commands available from elsewhere on your $PATH"
-msgstr "các lệnh git sẵn sàng để dùng từ một nơi khác trong $PATH của bạn"
+msgstr "các lệnh git sẵn có từ một nơi khác trong $PATH của bạn"
#: help.c:233
msgid "The most commonly used git commands are:"
-msgstr "Những lệnh git hay được sử dụng nhất là:"
+msgstr "Những lệnh git hay được dùng nhất là:"
#: help.c:290
#, c-format
@@ -550,7 +554,7 @@ msgid ""
"Continuing under the assumption that you meant '%s'"
msgstr ""
"CẢNH BÃO: Bạn đã gá»i lệnh Git có tên “%sâ€, mà nó lại không có sẵn.\n"
-"Giả định rằng ý bạn là “%sâ€"
+"Tiếp tục và coi rằng ý bạn là “%sâ€"
#: help.c:374
#, c-format
@@ -586,7 +590,7 @@ msgid "failed to read the cache"
msgstr "gặp lá»—i khi Ä‘á»c bá»™ nhá»› đệm"
#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559
-#: builtin/clone.c:655
+#: builtin/clone.c:661
msgid "unable to write new index file"
msgstr "không thể ghi tập tin lưu bảng mục lục mới"
@@ -623,7 +627,7 @@ msgstr ": có lẽ là một xung đột D/F?"
#: merge-recursive.c:709
#, c-format
msgid "refusing to lose untracked file at '%s'"
-msgstr "từ chối đóng tập tin không được theo vết tại “%sâ€"
+msgstr "từ chối đóng tập tin không được theo dõi tại “%sâ€"
#: merge-recursive.c:749
#, c-format
@@ -635,7 +639,7 @@ msgstr "không thể Ä‘á»c đối tượng %s “%sâ€"
msgid "blob expected for %s '%s'"
msgstr "đối tượng blob được mong đợi cho %s “%sâ€"
-#: merge-recursive.c:774 builtin/clone.c:311
+#: merge-recursive.c:774 builtin/clone.c:317
#, c-format
msgid "failed to open '%s'"
msgstr "gặp lá»—i khi mở “%sâ€"
@@ -685,7 +689,7 @@ msgstr ""
msgid "rename"
msgstr "đổi tên"
-#: merge-recursive.c:1082
+#: merge-recursive.c:1082 wt-status.c:283
msgid "renamed"
msgstr "đã đổi tên"
@@ -748,7 +752,7 @@ msgstr "đối tượng %s không phải là một blob"
msgid "modify"
msgstr "sửa đổi"
-#: merge-recursive.c:1565
+#: merge-recursive.c:1565 wt-status.c:281
msgid "modified"
msgstr "đã sửa"
@@ -770,7 +774,7 @@ msgstr "Äã bá» qua %s (đã có sẵn lần hòa trá»™n này)"
msgid "Auto-merging %s"
msgstr "Tự-động-hòa-trộn %s"
-#: merge-recursive.c:1634 git-submodule.sh:1125
+#: merge-recursive.c:1634 git-submodule.sh:1148
msgid "submodule"
msgstr "mô-đun-con"
@@ -835,22 +839,22 @@ msgstr[1] "tìm thấy %u tổ tiên chung:"
#: merge-recursive.c:1941
msgid "merge returned no commit"
-msgstr "hòa trộn không trả vỠlần chuyển giao (commit) nào"
+msgstr "hòa trộn không trả vỠlần chuyển giao nào"
#: merge-recursive.c:1998
#, c-format
msgid "Could not parse object '%s'"
msgstr "Không thể phân tích đối tượng “%sâ€"
-#: merge-recursive.c:2010 builtin/merge.c:672
+#: merge-recursive.c:2010 builtin/merge.c:665
msgid "Unable to write index."
msgstr "Không thể ghi bảng mục lục"
#: notes-utils.c:40
msgid "Cannot commit uninitialized/unreferenced notes tree"
msgstr ""
-"Không thể chuyển giao (commit) chưa được khởi tạo hoặc không được tham chiếu "
-"cây ghi chú"
+"Không thể chuyển giao cây ghi chú chưa được khởi tạo hoặc không được tham "
+"chiếu"
#: notes-utils.c:81
#, c-format
@@ -860,7 +864,7 @@ msgstr "Giá trị notes.rewriteMode sai: “%sâ€"
#: notes-utils.c:91
#, c-format
msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
-msgstr "Từ chối ghi đè ghi chú trong %s (nằm ngoài của refs/notes/)"
+msgstr "Từ chối ghi đè ghi chú trong %s (nằm ngoài refs/notes/)"
#. TRANSLATORS: The first %s is the name of the
#. environment variable, the second %s is its value
@@ -899,12 +903,12 @@ msgstr " %s"
msgid "-NUM"
msgstr "-Sá»"
-#: pathspec.c:118
+#: pathspec.c:133
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr ""
"các cài đặt đặc tả Ä‘Æ°á»ng dẫn “glob†và “noglob†toàn cục là xung khắc nhau"
-#: pathspec.c:128
+#: pathspec.c:143
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
@@ -912,36 +916,36 @@ msgstr ""
"cài đặt đặc tả Ä‘Æ°á»ng dẫn “literal†toàn cục là xung khắc vá»›i các cài đặt đặc "
"tả Ä‘Æ°á»ng dẫn toàn cục khác"
-#: pathspec.c:158
+#: pathspec.c:177
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "tham số không hợp lệ cho “tiá»n tố†màu nhiệm đặc tả Ä‘Æ°á»ng đẫn"
-#: pathspec.c:164
+#: pathspec.c:183
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "Số màu nhiệm đặc tả Ä‘Æ°á»ng dẫn không hợp lệ “%.*s†trong “%sâ€"
-#: pathspec.c:168
+#: pathspec.c:187
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "Thiếu “)†tại cuối của số màu nhiệm đặc tả Ä‘Æ°á»ng dẫn trong “%sâ€"
-#: pathspec.c:186
+#: pathspec.c:205
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "ChÆ°a viết mã cho số màu nhiệm đặc tả Ä‘Æ°á»ng dẫn “%c†trong “%sâ€"
-#: pathspec.c:211
+#: pathspec.c:230
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s: “literal†và “glob†xung khắc nhau"
-#: pathspec.c:222
+#: pathspec.c:241
#, c-format
msgid "%s: '%s' is outside repository"
msgstr "%s: “%s†ngoài một kho chứa"
-#: pathspec.c:278
+#: pathspec.c:291
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Äặc tả Ä‘Æ°á»ng dẫn “%s†thì ở trong mô-Ä‘un-con “%.*sâ€"
@@ -951,59 +955,91 @@ msgstr "Äặc tả Ä‘Æ°á»ng dẫn “%s†thì ở trong mô-Ä‘un-con “%.*s
#. * name. E.g. when add--interactive dies when running
#. * "checkout -p"
#.
-#: pathspec.c:340
+#: pathspec.c:353
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr "%s: số mầu nhiệm đặc tả Ä‘Æ°á»ng dẫn chÆ°a được há»— trợ bởi lệnh này: %s"
-#: pathspec.c:415
+#: pathspec.c:433
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "đặc tả Ä‘Æ°á»ng dẫn “%s†vượt ra ngoài liên kết má»m"
-#: remote.c:1833
+#: pathspec.c:442
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr ""
+"Ở đây không có gì bị loại trừ bởi: các mẫu (loại trừ).\n"
+"Có lẽ bạn đã quên thêm hoặc là “:/†hoặc là “.�"
+
+#: remote.c:753
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "Không thể lấy vỠcả %s và %s cho %s"
+
+#: remote.c:757
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s thÆ°á»ng theo dõi %s, không phải %s"
+
+#: remote.c:761
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "%s theo dõi cả %s và %s"
+
+#.
+#. * This last possibility doesn't occur because
+#. * FETCH_HEAD_IGNORE entries always appear at
+#. * the end of the list.
+#.
+#: remote.c:769
+msgid "Internal error"
+msgstr "Lá»—i ná»™i bá»™"
+
+#: remote.c:1871
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr ""
"Nhánh của bạn dá»±a trên cÆ¡ sở là “%sâ€, nhÆ°ng trên thượng nguồn không còn.\n"
-#: remote.c:1837
+#: remote.c:1875
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (dùng \" git branch --unset-upstream\" để sửa)\n"
-#: remote.c:1840
+#: remote.c:1878
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr "Nhánh của bạn đã cập nhật vá»›i “%sâ€.\n"
-#: remote.c:1844
+#: remote.c:1882
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
-msgstr[0] "Nhánh của bạn là đầu của “%s†bởi %d lần chuyển giao (commit).\n"
-msgstr[1] "Nhánh của bạn là đầu của “%s†bởi %d lần chuyển giao (commit).\n"
+msgstr[0] "Nhánh của bạn là đầu của “%s†bởi %d lần chuyển giao.\n"
+msgstr[1] "Nhánh của bạn là đầu của “%s†bởi %d lần chuyển giao.\n"
-#: remote.c:1850
+#: remote.c:1888
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (dùng \"git push\" để xuất bản các lần chuyển giao nội bộ của bạn)\n"
-#: remote.c:1853
+#: remote.c:1891
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
msgstr[0] ""
-"Nhánh của bạn thì ở đằng sau “%s†bởi %d lần chuyển giao (commit), và có thể "
-"được fast-forward.\n"
+"Nhánh của bạn ở đằng sau “%s†%d lần chuyển giao, và có thể được fast-"
+"forward.\n"
msgstr[1] ""
-"Nhánh của bạn thì ở đằng sau “%s†bởi %d lần chuyển giao (commit), và có thể "
-"được fast-forward.\n"
+"Nhánh của bạn ở đằng sau “%s†%d lần chuyển giao, và có thể được fast-"
+"forward.\n"
-#: remote.c:1861
+#: remote.c:1899
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (dùng \"git pull\" để cập nhật nhánh nội bộ của bạn)\n"
-#: remote.c:1864
+#: remote.c:1902
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -1013,13 +1049,13 @@ msgid_plural ""
"and have %d and %d different commits each, respectively.\n"
msgstr[0] ""
"Nhánh của bạn và “%s†bị phân kỳ,\n"
-"và có %d và %d lần chuyển giao (commit) khác nhau cho từng cái,\n"
+"và có %d và %d lần chuyển giao khác nhau cho từng cái,\n"
"tương ứng với mỗi lần.\n"
msgstr[1] ""
"Your branch and “%s†have diverged,\n"
"and have %d and %d different commit each, respectively.\n"
-#: remote.c:1874
+#: remote.c:1912
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr ""
" (dùng \"git pull\" để hòa trộn nhánh trên máy chủ vào trong nhánh của "
@@ -1027,21 +1063,21 @@ msgstr ""
#: run-command.c:80
msgid "open /dev/null failed"
-msgstr "gặp lỗi khi mở /dev/null"
+msgstr "gặp lá»—i khi mở “/dev/nullâ€"
#: run-command.c:82
#, c-format
msgid "dup2(%d,%d) failed"
msgstr "dup2(%d,%d) gặp lỗi"
-#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903
-#: builtin/merge.c:1013 builtin/merge.c:1023
+#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896
+#: builtin/merge.c:1006 builtin/merge.c:1016
#, c-format
msgid "Could not open '%s' for writing"
msgstr "Không thể mở “%s†để ghi"
-#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793
-#: builtin/merge.c:1015 builtin/merge.c:1028
+#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786
+#: builtin/merge.c:1008 builtin/merge.c:1021
#, c-format
msgid "Could not write to '%s'"
msgstr "Không thể ghi vào “%sâ€"
@@ -1062,7 +1098,7 @@ msgid ""
msgstr ""
"sau khi giải quyết các xung Ä‘á»™t, đánh dấu Ä‘Æ°á»ng dẫn đã sá»­a\n"
"vá»›i lệnh “git add <Ä‘Æ°á»ng_dẫn>†hoặc “git rm <Ä‘Æ°á»ng_dẫn>â€\n"
-"và chuyển giao (commit) kết quả bằng lệnh “git commitâ€"
+"và chuyển giao kết quả bằng lệnh “git commitâ€"
#: sequencer.c:245 sequencer.c:870 sequencer.c:953
#, c-format
@@ -1084,7 +1120,7 @@ msgstr "Các thay đổi ná»™i bá»™ của bạn có thể bị ghi đè bởi lá
#: sequencer.c:268
msgid "Commit your changes or stash them to proceed."
-msgstr "Chuyển giao (commit) các thay đổi của bạn hay stash chúng để xử lý."
+msgstr "Chuyển giao các thay đổi của bạn hay tạm cất (stash) chúng để xử lý."
#. TRANSLATORS: %s will be "revert" or "cherry-pick"
#: sequencer.c:325
@@ -1108,7 +1144,7 @@ msgstr "Không thể phân tích commit (lần chuyển giao) %s\n"
#: sequencer.c:428
#, c-format
msgid "Could not parse parent commit %s\n"
-msgstr "Không thể phân tích commit (lần chuyển giao) cha mẹ %s\n"
+msgstr "Không thể phân tích lần chuyển giao cha mẹ “%sâ€\n"
#: sequencer.c:494
msgid "Your index file is unmerged."
@@ -1117,21 +1153,19 @@ msgstr "Tập tin lưu mục lục của bạn không được hòa trộn."
#: sequencer.c:513
#, c-format
msgid "Commit %s is a merge but no -m option was given."
-msgstr ""
-"Lần chuyển giao (commit) %s là má»™t lần hòa trá»™n nhÆ°ng không Ä‘Æ°a ra tùy chá»n -"
-"m."
+msgstr "Lần chuyển giao %s là má»™t lần hòa trá»™n nhÆ°ng không Ä‘Æ°a ra tùy chá»n -m."
#: sequencer.c:521
#, c-format
msgid "Commit %s does not have parent %d"
-msgstr "Lần chuyển giao (commit) %s không có cha mẹ %d"
+msgstr "Lần chuyển giao %s không có cha mẹ %d"
#: sequencer.c:525
#, c-format
msgid "Mainline was specified but commit %s is not a merge."
msgstr ""
-"Luồng chính đã được chỉ ra nhưng lần chuyển giao (commit) %s không phải là "
-"một lần hòa trộn."
+"Luồng chính đã được chỉ ra nhưng lần chuyển giao %s không phải là một lần "
+"hòa trộn."
#. TRANSLATORS: The first %s will be "revert" or
#. "cherry-pick", the second %s a SHA1
@@ -1143,7 +1177,7 @@ msgstr "%s: không thể phân tích lần chuyển giao mẹ của %s"
#: sequencer.c:542
#, c-format
msgid "Cannot get commit message for %s"
-msgstr "Không thể lấy thông điệp lần chuyển giao (commit) cho %s"
+msgstr "Không thể lấy ghi chú lần chuyển giao cho %s"
#: sequencer.c:628
#, c-format
@@ -1157,7 +1191,7 @@ msgstr "không thể apply (áp dụng miếng vá) %s... %s"
#: sequencer.c:665
msgid "empty commit set passed"
-msgstr "lần chuyển giao (commit) trống rỗng đặt là hợp quy cách"
+msgstr "lần chuyển giao trống rỗng đặt là hợp quy cách"
#: sequencer.c:673
#, c-format
@@ -1181,7 +1215,7 @@ msgstr "Không phân tích được dòng %d."
#: sequencer.c:763
msgid "No commits parsed."
-msgstr "Không có lần chuyển giao (commit) nào được phân tích."
+msgstr "Không có lần chuyển giao nào được phân tích."
#: sequencer.c:776
#, c-format
@@ -1215,7 +1249,7 @@ msgstr "Bảng tùy chá»n dị hình: %s"
#: sequencer.c:851
msgid "a cherry-pick or revert is already in progress"
-msgstr "một thao tác cherry-pick hoặc revert đang được thực hiện"
+msgstr "có một thao tác “cherry-pick†hoặc “revert†đang được thực hiện"
#: sequencer.c:852
msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
@@ -1255,7 +1289,7 @@ msgstr "không thể Ä‘á»c %s: %s"
#: sequencer.c:921
msgid "unexpected end of file"
-msgstr "kết thúc tập tin đột xuất"
+msgstr "gặp kết thúc tập tin đột xuất"
#: sequencer.c:927
#, c-format
@@ -1265,7 +1299,7 @@ msgstr "tập tin HEAD “pre-cherry-pick†đã lÆ°u “%s†bị há»ng"
#: sequencer.c:950
#, c-format
msgid "Could not format %s."
-msgstr "Không thể định dạng %s."
+msgstr "Không thể định dạng “%sâ€."
#: sequencer.c:1093
#, c-format
@@ -1279,13 +1313,13 @@ msgstr "%s: điểm xét duyệt sai"
#: sequencer.c:1130
msgid "Can't revert as initial commit"
-msgstr "Không thể revert một lần chuyển giao (commit) khởi tạo"
+msgstr "Không thể revert một lần chuyển giao khởi tạo"
#: sequencer.c:1131
msgid "Can't cherry-pick into empty head"
msgstr "Không thể cherry-pick vào một đầu (head) trống rỗng"
-#: sha1_name.c:440
+#: sha1_name.c:439
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -1309,26 +1343,25 @@ msgstr ""
"này\n"
"bằng cách chạy lệnh \"git config advice.objectNameWarning false\""
-#: sha1_name.c:1112
+#: sha1_name.c:1070
msgid "HEAD does not point to a branch"
msgstr "HEAD không chỉ đến một nhánh nào cả"
-#: sha1_name.c:1115
+#: sha1_name.c:1073
#, c-format
msgid "No such branch: '%s'"
msgstr "Không có nhánh nào nhÆ° thế: “%sâ€"
-#: sha1_name.c:1117
+#: sha1_name.c:1075
#, c-format
msgid "No upstream configured for branch '%s'"
-msgstr "Không có thượng nguồn (upstream) được cấu hình cho nhánh “%sâ€"
+msgstr "Không có thượng nguồn được cấu hình cho nhánh “%sâ€"
-#: sha1_name.c:1121
+#: sha1_name.c:1079
#, c-format
msgid "Upstream branch '%s' not stored as a remote-tracking branch"
msgstr ""
-"Nhánh thượng nguồn (upstream) “%s†không được lưu lại như là một nhánh "
-"“remote-trackingâ€"
+"Nhánh thượng nguồn “%s†không được lÆ°u lại nhÆ° là má»™t nhánh “remote-trackingâ€"
#: submodule.c:64 submodule.c:98
msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
@@ -1385,11 +1418,11 @@ msgstr "Không thể tạo liên kết git “%sâ€"
#: submodule.c:1155
#, c-format
msgid "Could not set core.worktree in %s"
-msgstr "Không thể đặt cây thÆ° mục làm việc “core.worktree†trong “%sâ€."
+msgstr "Không thể đặt “core.worktree†trong “%sâ€."
#: urlmatch.c:120
msgid "invalid URL scheme name or missing '://' suffix"
-msgstr "tên lược đồ URL không hợp lệ hay thiếu hậu tố “://â€"
+msgstr "tên lược đồ URL không hợp lệ, hoặc thiếu hậu tố “://â€"
#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
#, c-format
@@ -1435,361 +1468,351 @@ msgstr "không tìm thấy ngÆ°á»i dùng hiện tại trong tập tin passwd: %
msgid "no such user"
msgstr "không có ngÆ°á»i dùng nhÆ° vậy"
-#: wt-status.c:146
+#: wt-status.c:150
msgid "Unmerged paths:"
msgstr "Những Ä‘Æ°á»ng dẫn chÆ°a được hòa trá»™n:"
-#: wt-status.c:173 wt-status.c:200
+#: wt-status.c:177 wt-status.c:204
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
-msgstr " (dùng \"git reset %s <tập-tin>...\" để bỠmột stage (trạng thái))"
+msgstr " (dùng \"git reset %s <tập-tin>...\" để bá» ra khá»i bệ phóng)"
-#: wt-status.c:175 wt-status.c:202
+#: wt-status.c:179 wt-status.c:206
msgid " (use \"git rm --cached <file>...\" to unstage)"
-msgstr " (dùng \"git rm --cached <tập-tin>...\" để bỠtrạng thái (stage))"
+msgstr " (dùng \"git rm --cached <tập-tin>...\" để bá» ra khá»i bệ phóng)"
-#: wt-status.c:179
+#: wt-status.c:183
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr " (dùng \"git add <tập-tin>...\" để đánh dấu là cần giải quyết)"
-#: wt-status.c:181 wt-status.c:185
+#: wt-status.c:185 wt-status.c:189
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr ""
-" (dùng \"git add/rm <tập-tin>...\" như là một cách thích hợp để đánh dấu "
-"là cần được giải quyết)"
+" (dùng \"git add/rm <tập-tin>...\" như là một cách thích hợp để đánh dấu là "
+"cần được giải quyết)"
-#: wt-status.c:183
+#: wt-status.c:187
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr " (dùng \"git rm <tập-tin>...\" để đánh dấu là cần giải quyết)"
-#: wt-status.c:194
+#: wt-status.c:198
msgid "Changes to be committed:"
msgstr "Những thay đổi sẽ được chuyển giao:"
-#: wt-status.c:212
+#: wt-status.c:216
msgid "Changes not staged for commit:"
-msgstr ""
-"Các thay đổi không được đặt trạng thái (stage) cho lần chuyển giao (commit):"
+msgstr "Các thay đổi chưa được đặt lên bệ phóng để chuyển giao:"
-#: wt-status.c:216
+#: wt-status.c:220
msgid " (use \"git add <file>...\" to update what will be committed)"
-msgstr ""
-" (dùng \"git add <tập-tin>...\" để cập nhật những gì cần chuyển giao "
-"(commit))"
+msgstr " (dùng \"git add <tập-tin>...\" để cập nhật những gì sẽ chuyển giao)"
-#: wt-status.c:218
+#: wt-status.c:222
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr ""
" (dùng \"git add/rm <tập-tin>...\" để cập nhật những gì sẽ được chuyển giao)"
-#: wt-status.c:219
+#: wt-status.c:223
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr ""
-" (dùng \"git checkout -- <tập-tin>...\" để bỠthay đổi trong thư mục làm "
-"việc)"
+" (dùng \"git checkout -- <tập-tin>...\" để loại bỠcác thay đổi trong thư "
+"mục làm việc)"
-#: wt-status.c:221
+#: wt-status.c:225
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
-" (chuyển giao (commit) hoặc là loại bỠcác nội dung không-bị-theo-vết hay "
-"đã bị chỉnh sửa trong mô-đun-con)"
+" (chuyển giao hoặc là loại bỠcác nội dung chưa được theo dõi hay đã sửa "
+"chữa trong mô-đun-con)"
-#: wt-status.c:233
+#: wt-status.c:237
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr ""
-" (dùng \"git %s <tập-tin>...\" để thêm vào những gì cần chuyển giao "
-"(commit))"
+" (dùng \"git %s <tập-tin>...\" để thêm vào những gì cần được chuyển giao)"
-#: wt-status.c:250
+#: wt-status.c:254
msgid "bug"
msgstr "lá»—i"
-#: wt-status.c:255
+#: wt-status.c:259
msgid "both deleted:"
msgstr "bị xóa bởi cả hai:"
-#: wt-status.c:256
+#: wt-status.c:260
msgid "added by us:"
msgstr "được thêm vào bởi chúng ta:"
-#: wt-status.c:257
+#: wt-status.c:261
msgid "deleted by them:"
msgstr "bị xóa Ä‘i bởi há»:"
-#: wt-status.c:258
+#: wt-status.c:262
msgid "added by them:"
msgstr "được thêm vào bởi há»:"
-#: wt-status.c:259
+#: wt-status.c:263
msgid "deleted by us:"
msgstr "bị xóa bởi chúng ta:"
-#: wt-status.c:260
+#: wt-status.c:264
msgid "both added:"
msgstr "được thêm vào bởi cả hai:"
-#: wt-status.c:261
+#: wt-status.c:265
msgid "both modified:"
msgstr "bị sửa bởi cả hai:"
-#: wt-status.c:291
-msgid "new commits, "
-msgstr "lần chuyển giao (commit) mới, "
+#: wt-status.c:275
+msgid "new file"
+msgstr "tập tin mới"
-#: wt-status.c:293
-msgid "modified content, "
-msgstr "nội dung bị sửa đổi, "
-
-#: wt-status.c:295
-msgid "untracked content, "
-msgstr "nội dung chưa được theo dõi, "
+#: wt-status.c:277
+msgid "copied"
+msgstr "đã chép"
-#: wt-status.c:312
-#, c-format
-msgid "new file: %s"
-msgstr "tập tin mới: %s"
+#: wt-status.c:279
+msgid "deleted"
+msgstr "bị xoá"
-#: wt-status.c:315
-#, c-format
-msgid "copied: %s -> %s"
-msgstr "đã sao chép: %s -> %s"
+#: wt-status.c:285
+msgid "typechange"
+msgstr "đổi-kiểu"
-#: wt-status.c:318
-#, c-format
-msgid "deleted: %s"
-msgstr "đã xóa: %s"
+#: wt-status.c:287
+msgid "unknown"
+msgstr "không hiểu"
-#: wt-status.c:321
-#, c-format
-msgid "modified: %s"
-msgstr "đã sửa đổi: %s"
+#: wt-status.c:289
+msgid "unmerged"
+msgstr "chưa hòa trộn"
-#: wt-status.c:324
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr "đã đổi tên: %s -> %s"
-
-#: wt-status.c:327
-#, c-format
-msgid "typechange: %s"
-msgstr "đổi-kiểu: %s"
+#: wt-status.c:336
+msgid "new commits, "
+msgstr "lần chuyển giao mới, "
-#: wt-status.c:330
-#, c-format
-msgid "unknown: %s"
-msgstr "không hiểu: %s"
+#: wt-status.c:338
+msgid "modified content, "
+msgstr "nội dung bị sửa đổi, "
-#: wt-status.c:333
-#, c-format
-msgid "unmerged: %s"
-msgstr "chưa hòa trộn: %s"
+#: wt-status.c:340
+msgid "untracked content, "
+msgstr "nội dung chưa được theo dõi, "
-#: wt-status.c:336
+#: wt-status.c:357
#, c-format
msgid "bug: unhandled diff status %c"
-msgstr "lỗi: không lấy được trạng thái lệnh diff %c"
+msgstr "lỗi: không thể tiếp nhận trạng thái lệnh diff %c"
-#: wt-status.c:703
+#: wt-status.c:732
msgid "Submodules changed but not updated:"
msgstr "Những mô-đun-con đã bị thay đổi nhưng chưa được cập nhật:"
-#: wt-status.c:705
+#: wt-status.c:734
msgid "Submodule changes to be committed:"
-msgstr "Những mô-đun-con thay đổi đã được chuyển giao (commit):"
+msgstr "Những mô-đun-con thay đổi đã được chuyển giao:"
+
+#: wt-status.c:836
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr ""
+"Không Ä‘á»™ng đến Ä‘Æ°á»ng ở trên.\n"
+"Má»i thứ phía dÆ°á»›i sẽ được xóa bá»."
-#: wt-status.c:848
+#: wt-status.c:899
msgid "You have unmerged paths."
msgstr "Bạn có những Ä‘Æ°á»ng dẫn chÆ°a được hòa trá»™n."
-#: wt-status.c:851
+#: wt-status.c:902
msgid " (fix conflicts and run \"git commit\")"
-msgstr " (sửa các xung đột sau đó chạy \"git commit\")"
+msgstr " (sửa các xung đột rồi chạy \"git commit\")"
-#: wt-status.c:854
+#: wt-status.c:905
msgid "All conflicts fixed but you are still merging."
msgstr "Tất cả các xung đột đã được giải quyết nhưng bạn vẫn đang hòa trộn."
-#: wt-status.c:857
+#: wt-status.c:908
msgid " (use \"git commit\" to conclude merge)"
msgstr " (dùng \"git commit\" để hoàn tất việc hòa trộn)"
-#: wt-status.c:867
+#: wt-status.c:918
msgid "You are in the middle of an am session."
msgstr "Bạn Ä‘ang ở giữa của má»™t phiên “amâ€."
-#: wt-status.c:870
+#: wt-status.c:921
msgid "The current patch is empty."
msgstr "Miếng vá hiện tại bị trống rỗng."
-#: wt-status.c:874
+#: wt-status.c:925
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (sửa các xung đột và sau đó chạy lệnh \"git am --continue\")"
-#: wt-status.c:876
+#: wt-status.c:927
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (dùng \"git am --skip\" để bỠqua miếng vá này)"
-#: wt-status.c:878
+#: wt-status.c:929
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr " (dùng \"git am --abort\" để phục hồi lại nhánh nguyên thủy)"
-#: wt-status.c:938 wt-status.c:955
+#: wt-status.c:989 wt-status.c:1006
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
-msgstr "Bạn hiện nay Ä‘ang thá»±c hiện việc rebase nhánh “%s†trên “%sâ€."
+msgstr "Bạn hiện nay Ä‘ang thá»±c hiện việc “rebase†nhánh “%s†trên “%sâ€."
-#: wt-status.c:943 wt-status.c:960
+#: wt-status.c:994 wt-status.c:1011
msgid "You are currently rebasing."
-msgstr "Bạn hiện nay đang thực hiện việc rebase (tái cấu trúc)."
+msgstr "Bạn hiện nay Ä‘ang thá»±c hiện việc “rebase†(“cải tổâ€)."
-#: wt-status.c:946
+#: wt-status.c:997
msgid " (fix conflicts and then run \"git rebase --continue\")"
-msgstr " (sửa các xung đột và sau đó chạy lệnh \"git rebase --continue\")"
+msgstr ""
+" (sửa các xung đột và sau đó chạy lệnh “cải tổ†\"git rebase --continue\")"
-#: wt-status.c:948
+#: wt-status.c:999
msgid " (use \"git rebase --skip\" to skip this patch)"
-msgstr " (dùng \"git rebase --skip\" để bỠqua lần vá này)"
+msgstr " (dùng lệnh “cải tổ†\"git rebase --skip\" để bỠqua lần vá này)"
-#: wt-status.c:950
+#: wt-status.c:1001
msgid " (use \"git rebase --abort\" to check out the original branch)"
-msgstr " (dùng \"git rebase --abort\" để check-out nhánh nguyên thủy)"
+msgstr ""
+" (dùng lệnh “cải tổ†\"git rebase --abort\" để check-out nhánh nguyên thủy)"
-#: wt-status.c:963
+#: wt-status.c:1014
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr ""
-" (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git rebase --continue\")"
+" (khi tất cả các xung đột đã sửa xong: chạy lệnh “cải tổ†\"git rebase --"
+"continue\")"
-#: wt-status.c:967
+#: wt-status.c:1018
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
msgstr ""
-"Bạn hiện nay đang thực hiện việc chia tách một lần chuyển giao (commit) "
-"trong khi Ä‘ang rebase nhánh “%s†trên “%sâ€."
+"Bạn hiện nay đang thực hiện việc chia tách một lần chuyển giao trong khi "
+"Ä‘ang “rebase†nhánh “%s†trên “%sâ€."
-#: wt-status.c:972
+#: wt-status.c:1023
msgid "You are currently splitting a commit during a rebase."
msgstr ""
"Bạn hiện tại đang cắt đôi một lần chuyển giao trong khi đang thực hiện việc "
"rebase."
-#: wt-status.c:975
+#: wt-status.c:1026
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
-" (Má»™t khi thÆ° mục làm việc của bạn đã gá»n gàng, chạy \"git rebase --continue"
-"\")"
+" (Má»™t khi thÆ° mục làm việc của bạn đã gá»n gàng, chạy lệnh “cải tổ†\"git "
+"rebase --continue\")"
-#: wt-status.c:979
+#: wt-status.c:1030
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
-"Bạn hiện nay đang thực hiện việc sửa chữa một lần chuyển giao (commit) trong "
-"khi Ä‘ang rebase nhánh “%s†trên “%sâ€."
+"Bạn hiện nay đang thực hiện việc sửa chữa một lần chuyển giao trong khi đang "
+"rebase nhánh “%s†trên “%sâ€."
-#: wt-status.c:984
+#: wt-status.c:1035
msgid "You are currently editing a commit during a rebase."
msgstr "Bạn hiện đang sửa một lần chuyển giao trong khi bạn thực hiện rebase."
-#: wt-status.c:987
+#: wt-status.c:1038
msgid " (use \"git commit --amend\" to amend the current commit)"
-msgstr ""
-" (dùng \"git commit --amend\" để tu bổ lần chuyển giao (commit) hiện tại)"
+msgstr " (dùng \"git commit --amend\" để “tu bổ†lần chuyển giao hiện tại)"
-#: wt-status.c:989
+#: wt-status.c:1040
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
-" (dùng \"git rebase --continue\" một khi bạn cảm thấy hài lòng vỠnhững "
-"thay đổi của mình)"
+" (chạy lệnh “cải tổ†\"git rebase --continue\" một khi bạn cảm thấy hài "
+"lòng vỠnhững thay đổi của mình)"
-#: wt-status.c:999
+#: wt-status.c:1050
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "Bạn hiện nay đang thực hiện việc cherry-pick lần chuyển giao %s."
-#: wt-status.c:1004
+#: wt-status.c:1055
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr ""
" (sửa các xung đột và sau đó chạy lệnh \"git cherry-pick --continue\")"
-#: wt-status.c:1007
+#: wt-status.c:1058
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git cherry-pick --"
"continue\")"
-#: wt-status.c:1009
+#: wt-status.c:1060
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr " (dùng \"git cherry-pick --abort\" để hủy bỠthao tác cherry-pick)"
-#: wt-status.c:1018
+#: wt-status.c:1069
#, c-format
msgid "You are currently reverting commit %s."
msgstr "Bạn hiện nay Ä‘ang thá»±c hiện thao tác revert lần chuyển giao “%sâ€."
-#: wt-status.c:1023
+#: wt-status.c:1074
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (sửa các xung đột và sau đó chạy lệnh \"git revert --continue\")"
-#: wt-status.c:1026
+#: wt-status.c:1077
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr ""
" (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git revert --continue\")"
-#: wt-status.c:1028
+#: wt-status.c:1079
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr " (dùng \"git revert --abort\" để hủy bỠthao tác revert)"
-#: wt-status.c:1039
+#: wt-status.c:1090
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr ""
"Bạn hiện nay đang thực hiện thao tác di chuyển nửa bước (bisect), bắt đầu từ "
"nhánh “%sâ€."
-#: wt-status.c:1043
+#: wt-status.c:1094
msgid "You are currently bisecting."
msgstr "Bạn hiện tại đang thực hiện việc bisect (di chuyển nửa bước)."
-#: wt-status.c:1046
+#: wt-status.c:1097
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr " (dùng \"git bisect reset\" để quay trở lại nhánh nguyên thủy)"
-#: wt-status.c:1221
+#: wt-status.c:1272
msgid "On branch "
msgstr "Trên nhánh "
-#: wt-status.c:1228
+#: wt-status.c:1279
msgid "rebase in progress; onto "
msgstr "rebase đang được thực hiện: lên trên "
-#: wt-status.c:1235
+#: wt-status.c:1286
msgid "HEAD detached at "
msgstr "HEAD được tách rá»i tại "
-#: wt-status.c:1237
+#: wt-status.c:1288
msgid "HEAD detached from "
-msgstr "HEAD được tách rá»i từ"
+msgstr "HEAD được tách rá»i từ "
-#: wt-status.c:1240
+#: wt-status.c:1291
msgid "Not currently on any branch."
msgstr "Hiện tại chẳng ở nhánh nào cả."
-#: wt-status.c:1257
+#: wt-status.c:1308
msgid "Initial commit"
-msgstr "Lần chuyển giao (commit) khởi đầu"
+msgstr "Lần chuyển giao khởi tạo"
-#: wt-status.c:1271
+#: wt-status.c:1322
msgid "Untracked files"
msgstr "Những tập tin chưa được theo dõi"
-#: wt-status.c:1273
+#: wt-status.c:1324
msgid "Ignored files"
msgstr "Những tập tin bị lỠđi"
-#: wt-status.c:1277
+#: wt-status.c:1328
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1801,99 +1824,98 @@ msgstr ""
"có lẽ làm nó nhanh hơn, nhưng bạn phải cẩn thận đừng quên mình phải\n"
"tá»± thêm các tập tin má»›i (xem “git help statusâ€.."
-#: wt-status.c:1283
+#: wt-status.c:1334
#, c-format
msgid "Untracked files not listed%s"
-msgstr "Những tập tin không bị theo vết không được liệt kê ra %s"
+msgstr "Những tập tin chưa được theo dõi không được liệt kê ra %s"
-#: wt-status.c:1285
+#: wt-status.c:1336
msgid " (use -u option to show untracked files)"
msgstr " (dùng tùy chá»n -u để hiển thị các tập tin chÆ°a được theo dõi)"
-#: wt-status.c:1291
+#: wt-status.c:1342
msgid "No changes"
msgstr "Không có thay đổi nào"
-#: wt-status.c:1296
+#: wt-status.c:1347
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
-"không có thay đổi nào được thêm vào commit (dùng \"git add\" và/hoặc \"git "
-"commit -a\")\n"
+"không có thay đổi nào được thêm vào để chuyển giao (dùng \"git add\" và/hoặc "
+"\"git commit -a\")\n"
-#: wt-status.c:1299
+#: wt-status.c:1350
#, c-format
msgid "no changes added to commit\n"
-msgstr "không có thay đổi nào được thêm vào lần chuyển giao (commit)\n"
+msgstr "không có thay đổi nào được thêm vào để chuyển giao\n"
-#: wt-status.c:1302
+#: wt-status.c:1353
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
"track)\n"
msgstr ""
-"không có gì được thêm vào lần chuyển giao (commit) nhưng có những tập tin "
-"không được theo dấu vết hiện diện (dùng \"git add\" để đưa vào theo dõi)\n"
+"không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
+"theo dõi hiện diện (dùng \"git add\" để đưa vào theo dõi)\n"
-#: wt-status.c:1305
+#: wt-status.c:1356
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr ""
-"không có gì được thêm vào lần chuyển giao (commit) nhưng có những tập tin "
-"không được theo dấu vết hiện diện\n"
+"không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
+"theo dõi hiện diện\n"
-#: wt-status.c:1308
+#: wt-status.c:1359
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
-" không có gì để commit (tạo/sao-chép các tập tin và dùng \"git add\" để theo "
-"dõi dấu vết)\n"
+"không có gì để chuyển giao (tạo/sao-chép các tập tin và dùng \"git add\" để "
+"đưa vào theo dõi)\n"
-#: wt-status.c:1311 wt-status.c:1316
+#: wt-status.c:1362 wt-status.c:1367
#, c-format
msgid "nothing to commit\n"
-msgstr "không có gì để chuyển giao (commit)\n"
+msgstr "không có gì để chuyển giao\n"
-#: wt-status.c:1314
+#: wt-status.c:1365
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
-"không có gì để chuyển giao (commit) (dùng -u để bỠcác tập tin cần theo dấu "
-"vết)\n"
+"không có gì để chuyển giao (dùng -u xem các tập tin chưa được theo dõi)\n"
-#: wt-status.c:1318
+#: wt-status.c:1369
#, c-format
msgid "nothing to commit, working directory clean\n"
-msgstr "không có gì để chuyển giao (commit), thư mục làm việc sạch sẽ\n"
+msgstr "không có gì để chuyển giao, thư mục làm việc sạch sẽ\n"
-#: wt-status.c:1427
+#: wt-status.c:1478
msgid "HEAD (no branch)"
msgstr "HEAD (không nhánh)"
-#: wt-status.c:1433
+#: wt-status.c:1484
msgid "Initial commit on "
-msgstr "Lần chuyển giao (commit) khởi tạo trên "
+msgstr "Lần chuyển giao khởi tạo trên "
-#: wt-status.c:1463
+#: wt-status.c:1514
msgid "gone"
msgstr "đã ra đi"
-#: wt-status.c:1465
+#: wt-status.c:1516
msgid "behind "
msgstr "đằng sau "
-#: wt-status.c:1468 wt-status.c:1471
+#: wt-status.c:1519 wt-status.c:1522
msgid "ahead "
msgstr "phía trước "
-#: wt-status.c:1473
+#: wt-status.c:1524
msgid ", behind "
msgstr ", đằng sau "
-#: compat/precompose_utf8.c:55 builtin/clone.c:350
+#: compat/precompose_utf8.c:55 builtin/clone.c:356
#, c-format
msgid "failed to unlink '%s'"
-msgstr "bỠliên kết (unlink) %s không thành công"
+msgstr "gặp lá»—i khi bá» liên kết (unlink) “%sâ€"
#: builtin/add.c:20
msgid "git add [options] [--] <pathspec>..."
@@ -1935,12 +1957,12 @@ msgstr ""
"Äể thêm ná»™i dung cho toàn bá»™ cây, chạy:\n"
"\n"
" git add %s :/\n"
-" (hay git add %s :/)\n"
+" (hoặc git add %s :/)\n"
"\n"
"Äể hạn chế lệnh cho thÆ°-mục hiện tại, chạy:\n"
"\n"
" git add %s .\n"
-" (hay git add %s .)\n"
+" (hoặc git add %s .)\n"
"\n"
"Với phiên bản hiện tại của Git, lệnh bị hạn chế cho thư-mục hiện tại.\n"
@@ -1990,7 +2012,7 @@ msgstr "gỡ bỠ“%sâ€\n"
#: builtin/add.c:237
msgid "Unstaged changes after refreshing the index:"
msgstr ""
-"Các thay đổi không được lưu trạng thái sau khi làm tươi mới lại bảng mục lục:"
+"ÄÆ°a ra khá»i bệ phóng các thay đổi sau khi làm tÆ°Æ¡i má»›i lại bảng mục lục:"
#: builtin/add.c:299
msgid "Could not read the index"
@@ -2008,16 +2030,16 @@ msgstr "Không thể ghi ra miếng vá"
#: builtin/add.c:319
#, c-format
msgid "Could not stat '%s'"
-msgstr "không thể lấy trạng thái vỠ“%sâ€"
+msgstr "không thể lấy thông tin thống kê vỠ“%sâ€"
#: builtin/add.c:321
msgid "Empty patch. Aborted."
-msgstr "Miếng vá trống rá»—ng. Äã bá» qua."
+msgstr "Miếng vá trống rỗng. Nên bỠqua."
#: builtin/add.c:327
#, c-format
msgid "Could not apply '%s'"
-msgstr "Không thể apply (áp dụng miếng vá) “%sâ€"
+msgstr "Không thể áp dụng miếng vá “%sâ€"
#: builtin/add.c:337
msgid "The following paths are ignored by one of your .gitignore files:\n"
@@ -2025,15 +2047,15 @@ msgstr ""
"Các Ä‘Æ°á»ng dẫn theo sau đây sẽ bị lá» Ä‘i bởi má»™t trong các tập tin .gitignore "
"của bạn:\n"
-#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:92 builtin/mv.c:66
-#: builtin/prune-packed.c:73 builtin/push.c:459 builtin/remote.c:1253
+#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70
+#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344
#: builtin/rm.c:269
msgid "dry run"
msgstr "chạy thử"
#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19
#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612
-#: builtin/log.c:1592 builtin/mv.c:65 builtin/read-tree.c:113
+#: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113
msgid "be verbose"
msgstr "chi tiết"
@@ -2043,7 +2065,7 @@ msgstr "sửa bằng cách tương tác"
#: builtin/add.c:358 builtin/checkout.c:1109 builtin/reset.c:272
msgid "select hunks interactively"
-msgstr "chá»n “hunks†má»™t cách tÆ°Æ¡ng tác"
+msgstr "chá»n “hunks†theo kiểu tÆ°Æ¡ng tác"
#: builtin/add.c:359
msgid "edit current diff and apply"
@@ -2055,7 +2077,7 @@ msgstr "cho phép thêm các tập tin bị bỠqua khác"
#: builtin/add.c:361
msgid "update tracked files"
-msgstr "cập nhật các tập tin được theo vết"
+msgstr "cập nhật các tập tin được theo dõi"
#: builtin/add.c:362
msgid "record only the fact that the path will be added later"
@@ -2115,14 +2137,14 @@ msgstr "Không có gì được chỉ ra, không có gì được thêm vào.\n"
#: builtin/add.c:487
#, c-format
msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr "Có lẽ bạn muốn là “git add .†phải không?\n"
+msgstr "Có lẽ ý bạn là “git add .†phải không?\n"
#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919
-#: builtin/commit.c:320 builtin/mv.c:86 builtin/reset.c:224 builtin/rm.c:299
+#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299
msgid "index file corrupt"
msgstr "tập tin ghi bảng mục lục bị há»ng"
-#: builtin/add.c:589 builtin/apply.c:4506 builtin/mv.c:259 builtin/rm.c:432
+#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432
msgid "Unable to write new index file"
msgstr "Không thể ghi tập tin lưu bảng mục lục mới"
@@ -2150,7 +2172,7 @@ msgstr ""
#: builtin/apply.c:832
#, c-format
msgid "regexec returned %d for input: %s"
-msgstr "thi hành biểu thức chính quy trả vỠ%d cho kết xuất: %s"
+msgstr "thi hành biểu thức chính quy trả vỠ%d cho đầu vào: %s"
#: builtin/apply.c:913
#, c-format
@@ -2160,22 +2182,23 @@ msgstr "không thể tìm thấy tên tập tin trong miếng vá tại dòng %d
#: builtin/apply.c:945
#, c-format
msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
-msgstr "git apply: git-diff sai - mong đợi /dev/null, đã nhận %s trên dòng %d"
+msgstr ""
+"git apply: git-diff sai - cần /dev/null, nhưng lại nhận được %s trên dòng %d"
#: builtin/apply.c:949
#, c-format
msgid "git apply: bad git-diff - inconsistent new filename on line %d"
-msgstr "git apply: git-diff sai - tên tập tin mới mâu thuấn trên dòng %d"
+msgstr "git apply: git-diff sai - tên tập tin mới không nhất quán trên dòng %d"
#: builtin/apply.c:950
#, c-format
msgid "git apply: bad git-diff - inconsistent old filename on line %d"
-msgstr "git apply: git-diff sai - tên tập tin cũ mâu thuấn trên dòng %d"
+msgstr "git apply: git-diff sai - tên tập tin cũ không nhất quán trên dòng %d"
#: builtin/apply.c:957
#, c-format
msgid "git apply: bad git-diff - expected /dev/null on line %d"
-msgstr "git apply: git-diff sai - cần /dev/null trên dòng %d"
+msgstr "git apply: git-diff sai - cần “/dev/null†trên dòng %d"
#: builtin/apply.c:1422
#, c-format
@@ -2244,12 +2267,12 @@ msgstr "miếng vá định dạng nhị phân không được nhận ra tại d
#: builtin/apply.c:1986
#, c-format
msgid "patch with only garbage at line %d"
-msgstr "vá chỉ với “garbage†tại dòng %d"
+msgstr "vá chỉ với “rác†tại dòng %d"
#: builtin/apply.c:2076
#, c-format
msgid "unable to read symlink %s"
-msgstr "không thể Ä‘á»c liên kết tượng trÆ°ng %s"
+msgstr "không thể Ä‘á»c liên kết má»m %s"
#: builtin/apply.c:2080
#, c-format
@@ -2271,7 +2294,7 @@ msgstr[1] "Khối dữ liệu #%d thành công tại %d (offset %d dòng)."
#: builtin/apply.c:2818
#, c-format
msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
-msgstr "Nội dung bị giảm xuống (%ld/%ld) để áp dụng mảnh dữ liệu tại %d"
+msgstr "Nội dung bị giảm xuống còn (%ld/%ld) để áp dụng mảnh dữ liệu tại %d"
#: builtin/apply.c:2824
#, c-format
@@ -2279,7 +2302,7 @@ msgid ""
"while searching for:\n"
"%.*s"
msgstr ""
-"Trong khi đang tìm kiếm cho:\n"
+"trong khi đang tìm kiếm cho:\n"
"%.*s"
#: builtin/apply.c:2843
@@ -2302,7 +2325,7 @@ msgstr ""
#: builtin/apply.c:2973
#, c-format
msgid "patch failed: %s:%ld"
-msgstr "vá gặp lỗi: %s:%ld"
+msgstr "gặp lỗi khi vá: %s:%ld"
#: builtin/apply.c:3095
#, c-format
@@ -2317,7 +2340,7 @@ msgstr "Ä‘á»c %s gặp lá»—i"
#: builtin/apply.c:3174 builtin/apply.c:3396
#, c-format
msgid "path %s has been renamed/deleted"
-msgstr "Ä‘Æ°á»ng dẫn %s đã bị xóa/đổi tên"
+msgstr "Ä‘Æ°á»ng dẫn %s đã bị xóa hoặc đổi tên"
#: builtin/apply.c:3255 builtin/apply.c:3410
#, c-format
@@ -2346,7 +2369,7 @@ msgstr "%s: sai kiểu"
#: builtin/apply.c:3437
#, c-format
msgid "%s has type %o, expected %o"
-msgstr "%s có kiểu %o, mong chỠ%o"
+msgstr "%s có kiểu %o, cần %o"
#: builtin/apply.c:3538
#, c-format
@@ -2391,7 +2414,7 @@ msgstr "không thể gỡ bỠ%s từ mục lục"
#: builtin/apply.c:3851
#, c-format
msgid "corrupt patch for submodule %s"
-msgstr "miếng vá sai há»ng cho mô-Ä‘un-con (subproject) %s"
+msgstr "miếng vá sai há»ng cho mô-Ä‘un-con %s"
#: builtin/apply.c:3855
#, c-format
@@ -2401,7 +2424,7 @@ msgstr "không thể lấy trạng thái vá» tập tin %s má»›i hÆ¡n đã Ä‘Æ°á
#: builtin/apply.c:3860
#, c-format
msgid "unable to create backing store for newly created file %s"
-msgstr "không thể tạo “backing store†cho tập tin được tạo mới hơn %s"
+msgstr "không thể tạo “kho lưu đằng sau†cho tập tin được tạo mới hơn %s"
#: builtin/apply.c:3863 builtin/apply.c:3971
#, c-format
@@ -2416,7 +2439,7 @@ msgstr "Ä‘ang đóng tập tin “%sâ€"
#: builtin/apply.c:3945
#, c-format
msgid "unable to write file '%s' mode %o"
-msgstr "không thể ghi vào tập tin “%s†chế độ (mode) %o"
+msgstr "không thể ghi vào tập tin “%s†chế độ %o"
#: builtin/apply.c:4032
#, c-format
@@ -2459,7 +2482,7 @@ msgid "unable to read index file"
msgstr "không thể Ä‘á»c tập tin lÆ°u bảng mục lục"
#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90
-#: builtin/fetch.c:77
+#: builtin/fetch.c:78
msgid "path"
msgstr "Ä‘Æ°á»ng-dẫn"
@@ -2477,11 +2500,11 @@ msgstr "số"
#: builtin/apply.c:4364
msgid "remove <num> leading slashes from traditional diff paths"
-msgstr "gỡ bá» <số> phần dẫn đầu (slashe) từ Ä‘Æ°á»ng dẫn diff cổ Ä‘iển"
+msgstr "gỡ bá» <số> dấu gạch chéo dẫn đầu từ Ä‘Æ°á»ng dẫn diff cổ Ä‘iển"
#: builtin/apply.c:4367
msgid "ignore additions made by the patch"
-msgstr "lỠđi phần phụ thêm tạo ra bởi miếng vá"
+msgstr "lỠđi phần bổ xung được tạo ra bởi miếng vá"
#: builtin/apply.c:4369
msgid "instead of applying the patch, output diffstat for the input"
@@ -2541,7 +2564,7 @@ msgstr "tìm thấy một dòng mới hoặc bị sửa đổi mà nó có lỗi
#: builtin/apply.c:4397 builtin/apply.c:4400
msgid "ignore changes in whitespace when finding context"
-msgstr "lỠđi sự thay đổi do khoảng trắng khi quét nội dung"
+msgstr "lỠđi sự thay đổi do khoảng trắng gây ra khi quét nội dung"
#: builtin/apply.c:4403
msgid "apply the patch in reverse"
@@ -2653,8 +2676,7 @@ msgstr "thá»±c hiện “git bisect nextâ€"
#: builtin/bisect--helper.c:19
msgid "update BISECT_HEAD instead of checking out the current commit"
msgstr ""
-"cập nhật BISECT_HEAD thay vì lấy ra (checking out) lần chuyển giao (commit) "
-"hiện hành"
+"cập nhật BISECT_HEAD thay vì lấy ra (checking out) lần chuyển giao hiện hành"
#: builtin/blame.c:27
msgid "git blame [options] [rev-opts] [rev] [--] file"
@@ -2664,97 +2686,97 @@ msgstr "git blame [các-tùy-chá»n] [rev-opts] [rev] [--] tập-tin"
msgid "[rev-opts] are documented in git-rev-list(1)"
msgstr "[rev-opts] được mô tả trong git-rev-list(1)"
-#: builtin/blame.c:2248
+#: builtin/blame.c:2249
msgid "Show blame entries as we find them, incrementally"
msgstr "Hiển thị các mục “blame†như là chúng ta thấy chúng, tăng dần"
-#: builtin/blame.c:2249
+#: builtin/blame.c:2250
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr ""
"Hiển thị SHA-1 trắng cho những lần chuyển giao biên giới (Mặc định: off)"
-#: builtin/blame.c:2250
+#: builtin/blame.c:2251
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr "Không coi các lần chuyển giao gốc là giới hạn (Mặc định: off)"
-#: builtin/blame.c:2251
+#: builtin/blame.c:2252
msgid "Show work cost statistics"
msgstr "Hiển thị thống kê công sức làm việc"
-#: builtin/blame.c:2252
+#: builtin/blame.c:2253
msgid "Show output score for blame entries"
msgstr "Hiển thị kết xuất Ä‘iểm số có các mục tin “blameâ€"
-#: builtin/blame.c:2253
+#: builtin/blame.c:2254
msgid "Show original filename (Default: auto)"
msgstr "Hiển thị tên tập tin gốc (Mặc định: auto)"
-#: builtin/blame.c:2254
+#: builtin/blame.c:2255
msgid "Show original linenumber (Default: off)"
msgstr "Hiển thị số dòng gốc (Mặc định: off)"
-#: builtin/blame.c:2255
+#: builtin/blame.c:2256
msgid "Show in a format designed for machine consumption"
msgstr "Hiển thị ở định dạng đã thiết kế cho sự tiêu dùng bằng máy"
-#: builtin/blame.c:2256
+#: builtin/blame.c:2257
msgid "Show porcelain format with per-line commit information"
msgstr "Hiển thị định dạng “porcelain†với thông tin chuyển giao mỗi dòng"
-#: builtin/blame.c:2257
+#: builtin/blame.c:2258
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr "Dùng cùng chế độ xuất ra vóigit-annotate (Mặc định: off)"
-#: builtin/blame.c:2258
+#: builtin/blame.c:2259
msgid "Show raw timestamp (Default: off)"
msgstr "Hiển thị dấu vết thá»i gian dạng thô (Mặc định: off)"
-#: builtin/blame.c:2259
+#: builtin/blame.c:2260
msgid "Show long commit SHA1 (Default: off)"
-msgstr "Hiển thị SHA1 của lần chuyển giao (commit) dạng dài (Mặc định: off)"
+msgstr "Hiển thị SHA1 của lần chuyển giao dạng dài (Mặc định: off)"
-#: builtin/blame.c:2260
+#: builtin/blame.c:2261
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Không hiển thị tên tác giả và dấu vết thá»i gian (Mặc định: off)"
-#: builtin/blame.c:2261
+#: builtin/blame.c:2262
msgid "Show author email instead of name (Default: off)"
msgstr "Hiển thị thư điện tử của tác giả thay vì tên (Mặc định: off)"
-#: builtin/blame.c:2262
+#: builtin/blame.c:2263
msgid "Ignore whitespace differences"
msgstr "BỠqua các khác biệt do khoảng trắng gây ra"
-#: builtin/blame.c:2263
+#: builtin/blame.c:2264
msgid "Spend extra cycles to find better match"
msgstr "Tiêu thụ thêm năng tài nguyên máy móc để tìm kiếm tốt hơn nữa"
-#: builtin/blame.c:2264
+#: builtin/blame.c:2265
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr ""
"Sá»­ dụng Ä‘iểm xét duyệt (revision) từ <tập tin> thay vì gá»i “git-rev-listâ€"
-#: builtin/blame.c:2265
+#: builtin/blame.c:2266
msgid "Use <file>'s contents as the final image"
msgstr "Sử dụng nội dung của <tập tin> như là ảnh cuối cùng"
-#: builtin/blame.c:2266 builtin/blame.c:2267
+#: builtin/blame.c:2267 builtin/blame.c:2268
msgid "score"
msgstr "điểm số"
-#: builtin/blame.c:2266
+#: builtin/blame.c:2267
msgid "Find line copies within and across files"
msgstr "Tìm các bản sao chép dòng trong và ngang qua tập tin"
-#: builtin/blame.c:2267
+#: builtin/blame.c:2268
msgid "Find line movements within and across files"
msgstr "Tìm các di chuyển dòng trong và ngang qua tập tin"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "Process only line range n,m, counting from 1"
msgstr "Xử lý chỉ dòng vùng n,m, tính từ 1"
@@ -2795,7 +2817,7 @@ msgstr ""
#: builtin/branch.c:168
#, c-format
msgid "Couldn't look up commit object for '%s'"
-msgstr "Không thể tìm kiếm đối tượng chuyển giao (commit) cho “%sâ€"
+msgstr "Không thể tìm kiếm đối tượng chuyển giao cho “%sâ€"
#: builtin/branch.c:172
#, c-format
@@ -2816,7 +2838,7 @@ msgstr "không thể dùng tùy chá»n -a vá»›i -d"
#: builtin/branch.c:219
msgid "Couldn't look up commit object for HEAD"
-msgstr "Không thể tìm kiếm đối tượng chuyển giao (commit) cho HEAD"
+msgstr "Không thể tìm kiếm đối tượng chuyển giao cho HEAD"
#: builtin/branch.c:227
#, c-format
@@ -2856,302 +2878,300 @@ msgstr "Nhánh “%s†đã bị xóa (từng là %s)\n"
#: builtin/branch.c:366
#, c-format
msgid "branch '%s' does not point at a commit"
-msgstr "nhánh “%s†không chỉ đến một lần chuyển giao (commit) nào cả"
+msgstr "nhánh “%s†không chỉ đến một lần chuyển giao nào cả"
-#: builtin/branch.c:453
+#: builtin/branch.c:454
#, c-format
msgid "[%s: gone]"
msgstr "[%s: đã ra đi]"
-#: builtin/branch.c:456
+#: builtin/branch.c:459
#, c-format
msgid "[%s]"
msgstr "[%s]"
-#: builtin/branch.c:459
+#: builtin/branch.c:464
#, c-format
msgid "[%s: behind %d]"
msgstr "[%s: đằng sau %d]"
-#: builtin/branch.c:461
+#: builtin/branch.c:466
#, c-format
msgid "[behind %d]"
msgstr "[đằng sau %d]"
-#: builtin/branch.c:465
+#: builtin/branch.c:470
#, c-format
msgid "[%s: ahead %d]"
msgstr "[%s: phía trước %d]"
-#: builtin/branch.c:467
+#: builtin/branch.c:472
#, c-format
msgid "[ahead %d]"
msgstr "[phía trước %d]"
-#: builtin/branch.c:470
+#: builtin/branch.c:475
#, c-format
msgid "[%s: ahead %d, behind %d]"
msgstr "[%s: trÆ°á»›c %d, sau %d]"
-#: builtin/branch.c:473
+#: builtin/branch.c:478
#, c-format
msgid "[ahead %d, behind %d]"
msgstr "[trÆ°á»›c %d, sau %d]"
-#: builtin/branch.c:496
+#: builtin/branch.c:502
msgid " **** invalid ref ****"
-msgstr " **** tham chiếu sai ****"
+msgstr " **** tham chiếu không hợp lệ ****"
-#: builtin/branch.c:588
+#: builtin/branch.c:594
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(không nhánh, đang rebase %s)"
-#: builtin/branch.c:591
+#: builtin/branch.c:597
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(không nhánh, bisect được bắt đầu tại %s)"
-#: builtin/branch.c:594
+#: builtin/branch.c:600
#, c-format
msgid "(detached from %s)"
msgstr "(được tách rá»i từ %s)"
-#: builtin/branch.c:597
+#: builtin/branch.c:603
msgid "(no branch)"
msgstr "(không nhánh)"
-#: builtin/branch.c:643
+#: builtin/branch.c:649
#, c-format
msgid "object '%s' does not point to a commit"
-msgstr "đối tượng “%s†không chỉ đến một lần chuyển giao (commit) nào cả"
+msgstr "đối tượng “%s†không chỉ đến một lần chuyển giao nào cả"
-#: builtin/branch.c:675
+#: builtin/branch.c:681
msgid "some refs could not be read"
msgstr "má»™t số tham chiếu đã không thể Ä‘á»c được"
-#: builtin/branch.c:688
+#: builtin/branch.c:694
msgid "cannot rename the current branch while not on any."
msgstr "không thể đổi tên nhánh hiện hành trong khi nó chẳng ở đâu cả."
-#: builtin/branch.c:698
+#: builtin/branch.c:704
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "Tên nhánh không hợp lệ: “%sâ€"
-#: builtin/branch.c:713
+#: builtin/branch.c:719
msgid "Branch rename failed"
msgstr "Gặp lỗi khi đổi tên nhánh"
-#: builtin/branch.c:717
+#: builtin/branch.c:723
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "Äã đổi tên nhánh khuyết danh “%s†đi"
-#: builtin/branch.c:721
+#: builtin/branch.c:727
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "Nhánh bị đổi tên thành %s, nhưng HEAD lại không được cập nhật!"
-#: builtin/branch.c:728
+#: builtin/branch.c:734
msgid "Branch is renamed, but update of config-file failed"
msgstr "Nhánh bị đổi tên, nhưng cập nhật tập tin cấu hình gặp lỗi"
-#: builtin/branch.c:743
+#: builtin/branch.c:749
#, c-format
msgid "malformed object name %s"
msgstr "tên đối tượng dị hình %s"
-#: builtin/branch.c:767
+#: builtin/branch.c:773
#, c-format
msgid "could not write branch description template: %s"
msgstr "không thể ghi vào mẫu mô tả nhánh: %s"
-#: builtin/branch.c:797
+#: builtin/branch.c:803
msgid "Generic options"
msgstr "Tùy chá»n chung"
-#: builtin/branch.c:799
+#: builtin/branch.c:805
msgid "show hash and subject, give twice for upstream branch"
msgstr "hiển thị mã băm và chủ Ä‘á», Ä‘Æ°a ra hai lần cho nhánh thượng nguồn"
-#: builtin/branch.c:800
+#: builtin/branch.c:806
msgid "suppress informational messages"
msgstr "Thu hồi các thông điệp thông tin"
-#: builtin/branch.c:801
+#: builtin/branch.c:807
msgid "set up tracking mode (see git-pull(1))"
-msgstr "cài đặt chế độ theo vết (xem git-pull(1))"
+msgstr "cài đặt chế độ theo dõi (xem git-pull(1))"
-#: builtin/branch.c:803
+#: builtin/branch.c:809
msgid "change upstream info"
-msgstr "thay đổi thông tin thượng nguồn (upstream)"
+msgstr "thay đổi thông tin thượng nguồn"
-#: builtin/branch.c:807
+#: builtin/branch.c:813
msgid "use colored output"
msgstr "sử dụng kết xuất có tô màu"
-#: builtin/branch.c:808
+#: builtin/branch.c:814
msgid "act on remote-tracking branches"
msgstr "thao tác trên nhánh “remote-trackingâ€"
-#: builtin/branch.c:811 builtin/branch.c:817 builtin/branch.c:838
-#: builtin/branch.c:844 builtin/commit.c:1460 builtin/commit.c:1461
+#: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844
+#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461
#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468
msgid "commit"
msgstr "commit"
-#: builtin/branch.c:812 builtin/branch.c:818
+#: builtin/branch.c:818 builtin/branch.c:824
msgid "print only branches that contain the commit"
msgstr "chỉ hiển thị những nhánh mà nó chứa lần chuyển giao"
-#: builtin/branch.c:824
+#: builtin/branch.c:830
msgid "Specific git-branch actions:"
msgstr "Hành động git-branch:"
-#: builtin/branch.c:825
+#: builtin/branch.c:831
msgid "list both remote-tracking and local branches"
msgstr "liệt kê cả nhánh “remote-tracking†và nội bộ"
-#: builtin/branch.c:827
+#: builtin/branch.c:833
msgid "delete fully merged branch"
msgstr "xóa một cách đầy đủ nhánh đã hòa trộn"
-#: builtin/branch.c:828
+#: builtin/branch.c:834
msgid "delete branch (even if not merged)"
msgstr "xoá nhánh (cho dù là chưa được hòa trộn)"
-#: builtin/branch.c:829
+#: builtin/branch.c:835
msgid "move/rename a branch and its reflog"
msgstr "di chuyển hay đổi tên một nhánh và reflog của nó"
-#: builtin/branch.c:830
+#: builtin/branch.c:836
msgid "move/rename a branch, even if target exists"
-msgstr "di chuyển hoặc đổi tên một nhánh, thậm chí cả khi đích đã có sẵn"
+msgstr "di chuyển hoặc đổi tên một nhánh ngay cả khi đích đã có sẵn"
-#: builtin/branch.c:831
+#: builtin/branch.c:837
msgid "list branch names"
msgstr "liệt kê các tên nhánh"
-#: builtin/branch.c:832
+#: builtin/branch.c:838
msgid "create the branch's reflog"
msgstr "tạo reflog của nhánh"
-#: builtin/branch.c:834
+#: builtin/branch.c:840
msgid "edit the description for the branch"
msgstr "sửa mô tả cho nhánh"
-#: builtin/branch.c:835
+#: builtin/branch.c:841
msgid "force creation (when already exists)"
-msgstr "ép buộc tạo (khi đã sẵn tồn tại rồi)"
+msgstr "ép buộc tạo (khi đã có nhánh cùng tên)"
-#: builtin/branch.c:838
+#: builtin/branch.c:844
msgid "print only not merged branches"
msgstr "chỉ hiển thị các nhánh chưa được hòa trộn"
-#: builtin/branch.c:844
+#: builtin/branch.c:850
msgid "print only merged branches"
msgstr "chỉ hiển thị các nhánh được hòa trộn"
-#: builtin/branch.c:848
+#: builtin/branch.c:854
msgid "list branches in columns"
msgstr "liệt kê các nhánh trong các cột"
-#: builtin/branch.c:861
+#: builtin/branch.c:867
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Gặp lỗi khi phân giải HEAD như là một tham chiếu (ref) hợp lệ."
-#: builtin/branch.c:866 builtin/clone.c:629
+#: builtin/branch.c:872 builtin/clone.c:635
msgid "HEAD not found below refs/heads!"
msgstr "không tìm thấy HEAD ở dưới refs/heads!"
-#: builtin/branch.c:890
+#: builtin/branch.c:896
msgid "--column and --verbose are incompatible"
-msgstr "--column và --verbose xung khắc nhau"
+msgstr "tùy chá»n --column và --verbose xung khắc nhau"
-#: builtin/branch.c:896 builtin/branch.c:935
+#: builtin/branch.c:902 builtin/branch.c:941
msgid "branch name required"
msgstr "cần tên nhánh"
-#: builtin/branch.c:911
+#: builtin/branch.c:917
msgid "Cannot give description to detached HEAD"
msgstr "Không thể Ä‘Æ°a ra mô tả HEAD đã tách rá»i"
-#: builtin/branch.c:916
+#: builtin/branch.c:922
msgid "cannot edit description of more than one branch"
msgstr "không thể sá»­a mô tả cho nhiá»u hÆ¡n má»™t nhánh"
-#: builtin/branch.c:923
+#: builtin/branch.c:929
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Vẫn chÆ°a chuyển giao trên nhánh “%sâ€."
-#: builtin/branch.c:926
+#: builtin/branch.c:932
#, c-format
msgid "No branch named '%s'."
msgstr "Không có nhánh nào có tên “%sâ€."
-#: builtin/branch.c:941
+#: builtin/branch.c:947
msgid "too many branches for a rename operation"
msgstr "quá nhiá»u nhánh dành cho thao tác đổi tên"
-#: builtin/branch.c:946
+#: builtin/branch.c:952
msgid "too many branches to set new upstream"
-msgstr "quá nhiá»u nhánh được đặt cho thượng nguồn (upstream) má»›i"
+msgstr "quá nhiá»u nhánh được đặt cho thượng nguồn má»›i"
-#: builtin/branch.c:950
+#: builtin/branch.c:956
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
msgstr ""
-"không thể đặt thượng nguồn (upstream) của HEAD thành %s khi mà nó chẳng chỉ "
-"đến nhánh nào cả."
+"không thể đặt thượng nguồn của HEAD thành %s khi mà nó chẳng chỉ đến nhánh "
+"nào cả."
-#: builtin/branch.c:953 builtin/branch.c:975 builtin/branch.c:997
+#: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002
#, c-format
msgid "no such branch '%s'"
msgstr "không có nhánh nào nhÆ° thế “%sâ€"
-#: builtin/branch.c:957
+#: builtin/branch.c:963
#, c-format
msgid "branch '%s' does not exist"
-msgstr "nhánh “%s†chưa sẵn có"
+msgstr "chÆ°a có nhánh “%sâ€"
-#: builtin/branch.c:969
+#: builtin/branch.c:975
msgid "too many branches to unset upstream"
-msgstr "quá nhiá»u nhánh để bỠđặt ngược dòng (upstream)"
+msgstr "quá nhiá»u nhánh để bỠđặt thượng nguồn"
-#: builtin/branch.c:973
+#: builtin/branch.c:979
msgid "could not unset upstream of HEAD when it does not point to any branch."
-msgstr ""
-"không thể bỠđặt ngược dòng (upstream) của HEAD không chỉ đến một nhánh nào "
-"cả."
+msgstr "không thể bỠđặt thượng nguồn của HEAD không chỉ đến một nhánh nào cả."
-#: builtin/branch.c:979
+#: builtin/branch.c:985
#, c-format
msgid "Branch '%s' has no upstream information"
-msgstr "Nhánh “%s†không có thông tin thượng nguồn (upstream)"
+msgstr "Nhánh “%s†không có thông tin thượng nguồn"
-#: builtin/branch.c:994
+#: builtin/branch.c:999
msgid "it does not make sense to create 'HEAD' manually"
-msgstr "không hợp lý khi tạo “HEAD†thủ công "
+msgstr "không hợp lý khi tạo “HEAD†thủ công"
-#: builtin/branch.c:1000
+#: builtin/branch.c:1005
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr ""
"hai tùy chá»n -a và -r áp dụng cho lệnh “git branch†không hợp lý đối vá»›i tên "
"nhánh"
-#: builtin/branch.c:1003
+#: builtin/branch.c:1008
#, c-format
msgid ""
"The --set-upstream flag is deprecated and will be removed. Consider using --"
"track or --set-upstream-to\n"
msgstr ""
-"Cá» --set-upstream bị phản đối và sẽ bị xóa bá». Nên dùng --track hoặc --set-"
+"Cá» --set-upstream đã lạc hậu và sẽ bị xóa bá». Nên dùng --track hoặc --set-"
"upstream-to\n"
-#: builtin/branch.c:1020
+#: builtin/branch.c:1025
#, c-format
msgid ""
"\n"
@@ -3162,12 +3182,12 @@ msgstr ""
"Nếu bạn muốn “%s†theo dõi “%sâ€, thá»±c hiện lệnh sau:\n"
"\n"
-#: builtin/branch.c:1021
+#: builtin/branch.c:1026
#, c-format
msgid " git branch -d %s\n"
msgstr " git branch -d %s\n"
-#: builtin/branch.c:1022
+#: builtin/branch.c:1027
#, c-format
msgid " git branch --set-upstream-to %s\n"
msgstr " git branch --set-upstream-to %s\n"
@@ -3179,50 +3199,50 @@ msgstr "“%s†tốt\n"
#: builtin/bundle.c:56
msgid "Need a repository to create a bundle."
-msgstr "Cần một kho chứa để mà tạo một bundle."
+msgstr "Cần một kho chứa để có thể tạo một bundle."
#: builtin/bundle.c:60
msgid "Need a repository to unbundle."
-msgstr "Cần một kho chứa để mà bung một bundle."
+msgstr "Cần một kho chứa để có thể giải nén một bundle."
-#: builtin/cat-file.c:312
+#: builtin/cat-file.c:328
msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
msgstr "git cat-file (-t|-s|-e|-p|<kiểu>|--textconv) <đối tượng>"
-#: builtin/cat-file.c:313
+#: builtin/cat-file.c:329
msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
msgstr "git cat-file (--batch|--batch-check) < <danh-sách-đối-tượng>"
-#: builtin/cat-file.c:350
+#: builtin/cat-file.c:366
msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<kiểu> là một trong số: blob, tree, commit, tag"
+msgstr "<kiểu> là một trong số: blob, tree, commit hoặc tag"
-#: builtin/cat-file.c:351
+#: builtin/cat-file.c:367
msgid "show object type"
msgstr "hiển thị kiểu đối tượng"
-#: builtin/cat-file.c:352
+#: builtin/cat-file.c:368
msgid "show object size"
msgstr "hiển thị kích thước đối tượng"
-#: builtin/cat-file.c:354
+#: builtin/cat-file.c:370
msgid "exit with zero when there's no error"
msgstr "thoát với 0 khi không có lỗi"
-#: builtin/cat-file.c:355
+#: builtin/cat-file.c:371
msgid "pretty-print object's content"
msgstr "in ná»™i dung đối tượng dạng dá»… Ä‘á»c"
-#: builtin/cat-file.c:357
+#: builtin/cat-file.c:373
msgid "for blob objects, run textconv on object's content"
msgstr "với đối tượng blob, chạy lệnh textconv trên nội dung của đối tượng"
-#: builtin/cat-file.c:359
+#: builtin/cat-file.c:375
msgid "show info and content of objects fed from the standard input"
msgstr ""
"hiển thị thông tin và nội dung của các đối tượng lấy từ đầu vào tiêu chuẩn"
-#: builtin/cat-file.c:362
+#: builtin/cat-file.c:378
msgid "show info about objects fed from the standard input"
msgstr "hiển thị các thông tin vỠđối tượng fed từ đầu vào tiêu chuẩn"
@@ -3241,7 +3261,7 @@ msgstr "báo cáo tất cả các thuộc tính đặt trên tập tin"
#: builtin/check-attr.c:20
msgid "use .gitattributes only from the index"
-msgstr "chỉ sử dụng .gitattributes từ bảng mục lục"
+msgstr "chỉ dùng .gitattributes từ bảng mục lục"
#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75
msgid "read file names from stdin"
@@ -3251,7 +3271,7 @@ msgstr "Ä‘á»c tên tập tin từ đầu vào tiêu chuẩn"
msgid "terminate input and output records by a NUL character"
msgstr "chấm dứt các bản ghi vào và ra bằng ký tự NULL"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:259
+#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260
msgid "suppress progress reporting"
msgstr "chặn các báo cáo tiến trình hoạt động"
@@ -3331,7 +3351,7 @@ msgstr "cập nhật thông tin thống kê trong tập tin lÆ°u bảng mục lá
#: builtin/checkout-index.c:200
msgid "read list of paths from the standard input"
-msgstr " Ä‘á»c danh sách Ä‘Æ°á»ng dẫn từ thiết bị nhập chuẩn"
+msgstr "Ä‘á»c danh sách Ä‘Æ°á»ng dẫn từ đầu vào tiêu chuẩn"
#: builtin/checkout-index.c:202
msgid "write the content to temporary files"
@@ -3347,7 +3367,7 @@ msgstr "khi tạo các tập tin, nối thêm <chuỗi>"
#: builtin/checkout-index.c:207
msgid "copy out the files from named stage"
-msgstr "sao chép ra các tập tin từ trạng thái được đặt tên"
+msgstr "sao chép ra các tập tin từ bệ phóng có tên"
#: builtin/checkout.c:25
msgid "git checkout [options] <branch>"
@@ -3391,12 +3411,12 @@ msgstr "Không thể thêm kết quả hòa trá»™n cho “%sâ€"
#: builtin/checkout.c:241
#, c-format
msgid "'%s' cannot be used with updating paths"
-msgstr "“%s†không thể được sá»­ dụng vá»›i các Ä‘Æ°á»ng dẫn cập nhật"
+msgstr "không được dùng “%s†vá»›i các Ä‘Æ°á»ng dẫn cập nhật"
#: builtin/checkout.c:244 builtin/checkout.c:247
#, c-format
msgid "'%s' cannot be used with %s"
-msgstr "“%s†không thể được dùng cùng với %s"
+msgstr "không được dùng “%s†với %s"
#: builtin/checkout.c:250
#, c-format
@@ -3415,7 +3435,7 @@ msgstr "Ä‘Æ°á»ng dẫn “%s†không được hòa trá»™n"
#: builtin/checkout.c:473
msgid "you need to resolve your current index first"
-msgstr "bạn cần phải phân giải bảng mục lục hiện tại của bạn trước đã"
+msgstr "bạn cần phải giải quyết bảng mục lục hiện tại của bạn trước đã"
#: builtin/checkout.c:594
#, c-format
@@ -3470,14 +3490,14 @@ msgid_plural ""
"\n"
"%s\n"
msgstr[0] ""
-"Cảnh báo: bạn đã rá»i bá» %d lần chuyển giao (commit) lại đằng sau, không được "
-"kết nối đến\n"
+"Cảnh báo: bạn đã rá»i bá» %d lần chuyển giao lại đằng sau, không được kết nối "
+"đến\n"
"bất kỳ nhánh nào của bạn:\n"
"\n"
"%s\n"
msgstr[1] ""
-"Cảnh báo: bạn đã rá»i bá» %d lần chuyển giao (commit) lại đằng sau, không được "
-"kết nối đến\n"
+"Cảnh báo: bạn đã rá»i bá» %d lần chuyển giao lại đằng sau, không được kết nối "
+"đến\n"
"bất kỳ nhánh nào của bạn:\n"
"\n"
"%s\n"
@@ -3504,7 +3524,7 @@ msgstr "lỗi nội bộ trong khi di chuyển qua các điểm xét duyệt"
#: builtin/checkout.c:764
msgid "Previous HEAD position was"
-msgstr "Vị trí kế trước của HEAD là"
+msgstr "Vị trí trước kia của HEAD là"
#: builtin/checkout.c:791 builtin/checkout.c:1028
msgid "You are on a branch yet to be born"
@@ -3518,13 +3538,13 @@ msgstr "chỉ cần một tham chiếu, nhưng lại đưa ra %d."
#: builtin/checkout.c:974
#, c-format
msgid "invalid reference: %s"
-msgstr "tham chiếu sai: %s"
+msgstr "tham chiếu không hợp lệ: %s"
#. case (1): want a tree
#: builtin/checkout.c:1003
#, c-format
msgid "reference is not a tree: %s"
-msgstr "tham chiếu không phải là một cây (tree):%s"
+msgstr "tham chiếu không phải là một cây:%s"
#: builtin/checkout.c:1042
msgid "paths cannot be used with switching branches"
@@ -3539,7 +3559,7 @@ msgstr "“%s†không thể được sử dụng với các nhánh chuyển"
#: builtin/checkout.c:1064
#, c-format
msgid "'%s' cannot be used with '%s'"
-msgstr "“%s†không thể được sá»­ dụng vá»›i “%sâ€"
+msgstr "“%s†không thể được dùng vá»›i “%sâ€"
#: builtin/checkout.c:1069
#, c-format
@@ -3547,7 +3567,7 @@ msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Không thể chuyển nhánh đến má»™t non-commit “%sâ€"
#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88
-#: builtin/remote.c:169 builtin/remote.c:171
+#: builtin/remote.c:159 builtin/remote.c:161
msgid "branch"
msgstr "nhánh"
@@ -3557,7 +3577,7 @@ msgstr "tạo và checkout một nhánh mới"
#: builtin/checkout.c:1094
msgid "create/reset and checkout a branch"
-msgstr "create/reset và checkout một nhánh"
+msgstr "tạo/đặt_lại và checkout một nhánh"
#: builtin/checkout.c:1095
msgid "create reflog for new branch"
@@ -3569,7 +3589,7 @@ msgstr "rá»i bá» HEAD tại lần chuyển giao danh nghÄ©a"
#: builtin/checkout.c:1097
msgid "set upstream info for new branch"
-msgstr "đặt thông tin thượng nguồn (upstream) cho nhánh mới"
+msgstr "đặt thông tin thượng nguồn cho nhánh mới"
#: builtin/checkout.c:1099
msgid "new branch"
@@ -3577,7 +3597,7 @@ msgstr "nhánh mới"
#: builtin/checkout.c:1099
msgid "new unparented branch"
-msgstr "nhánh mồ côi mới"
+msgstr "nhánh không cha mới"
#: builtin/checkout.c:1100
msgid "checkout our version for unmerged files"
@@ -3597,21 +3617,21 @@ msgstr "ép buộc lấy ra (checkout) (bỠđi những thay đổi nội bộ)
msgid "perform a 3-way merge with the new branch"
msgstr "thực hiện hòa trộn kiểu 3-way với nhánh mới"
-#: builtin/checkout.c:1106 builtin/merge.c:232
+#: builtin/checkout.c:1106 builtin/merge.c:225
msgid "update ignored files (default)"
msgstr "cập nhật các tập tin bị bỠqua (mặc định)"
-#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:251
+#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248
msgid "style"
msgstr "kiểu"
#: builtin/checkout.c:1108
msgid "conflict style (merge or diff3)"
-msgstr "xung đột kiểu (hòa trộn hay diff3)"
+msgstr "xung đột kiểu (hòa trộn hoặc diff3)"
#: builtin/checkout.c:1111
msgid "do not limit pathspecs to sparse entries only"
-msgstr "không giới hạn pathspecs chỉ thành các mục thưa thớt"
+msgstr "không giá»›i hạn đặc tả Ä‘Æ°á»ng dẫn thành chỉ các mục thÆ°a thá»›t"
#: builtin/checkout.c:1113
msgid "second guess 'git checkout no-such-branch'"
@@ -3619,7 +3639,7 @@ msgstr "gợi ý thứ hai “git checkout không-nhánh-nào-nhÆ°-vậyâ€"
#: builtin/checkout.c:1136
msgid "-b, -B and --orphan are mutually exclusive"
-msgstr "Tùy chá»n -b, -B và --orphan loại từ lẫn nhau"
+msgstr "Các tùy chá»n -b, -B và --orphan loại từ lẫn nhau"
#: builtin/checkout.c:1153
msgid "--track needs a branch name"
@@ -3641,7 +3661,7 @@ msgid ""
msgstr ""
"Không thể cập nhật và chuyển thành nhánh “%s†cùng lúc\n"
"Bạn đã có ý định checkout “%s†cái mà không thể được phân giải như là lần "
-"chuyển giao (commit)?"
+"chuyển giao?"
#: builtin/checkout.c:1209
#, c-format
@@ -3727,7 +3747,7 @@ msgstr "Hả (%s)?"
#: builtin/clean.c:659
#, c-format
msgid "Input ignore patterns>> "
-msgstr "Mẫu để lá»c các tập tin cần lá» Ä‘i đầu vào>>"
+msgstr "Mẫu để lá»c các tập tin đầu vào cần lá» Ä‘i>> "
#: builtin/clean.c:696
#, c-format
@@ -3741,7 +3761,7 @@ msgstr "Chá»n mục muốn xóa"
#: builtin/clean.c:757
#, c-format
msgid "remove %s? "
-msgstr "gỡ bỠ“%s�"
+msgstr "gỡ bỠ“%s� "
#: builtin/clean.c:782
msgid "Bye."
@@ -3793,14 +3813,14 @@ msgstr "ép buộc"
#: builtin/clean.c:877
msgid "interactive cleaning"
-msgstr "sửa bằng cách tương tác"
+msgstr "dá»n bằng kiểu tÆ°Æ¡ng tác"
#: builtin/clean.c:879
msgid "remove whole directories"
msgstr "gỡ bỠtoàn bộ thư mục"
#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718
-#: builtin/ls-files.c:483 builtin/name-rev.c:315 builtin/show-ref.c:185
+#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185
msgid "pattern"
msgstr "mẫu"
@@ -3840,10 +3860,10 @@ msgstr ""
msgid "git clone [options] [--] <repo> [<dir>]"
msgstr "git clone [các-tùy-chá»n] [--] <kho> [<t.mục>]"
-#: builtin/clone.c:64 builtin/fetch.c:96 builtin/merge.c:229
-#: builtin/push.c:474
+#: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222
+#: builtin/push.c:521
msgid "force progress reporting"
-msgstr "ép buộc báo cáo tiến trình"
+msgstr "ép buộc báo cáo tiến triển công việc"
#: builtin/clone.c:66
msgid "don't create a checkout"
@@ -3851,11 +3871,11 @@ msgstr "không tạo một checkout"
#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488
msgid "create a bare repository"
-msgstr "tạo kho thuần (bare)"
+msgstr "tạo kho thuần"
#: builtin/clone.c:71
msgid "create a mirror repository (implies bare)"
-msgstr "tạo kho bản sao (mirror) (ngụ ý là bare)"
+msgstr "tạo kho bản sao (ý là kho thuần)"
#: builtin/clone.c:73
msgid "to clone from a local repository"
@@ -3875,7 +3895,7 @@ msgstr "khởi tạo mô-đun-con trong bản sao"
#: builtin/clone.c:82 builtin/init-db.c:485
msgid "template-directory"
-msgstr "thư-mục-tạm"
+msgstr "thư-mục-mẫu"
#: builtin/clone.c:83 builtin/init-db.c:486
msgid "directory from which templates will be used"
@@ -3891,19 +3911,19 @@ msgstr "tên"
#: builtin/clone.c:87
msgid "use <name> instead of 'origin' to track upstream"
-msgstr "dùng <tên> thay vì “origin†để theo dõi thượng nguồn (uptream)"
+msgstr "dùng <tên> thay cho “origin†để theo dõi thượng nguồn"
#: builtin/clone.c:89
msgid "checkout <branch> instead of the remote's HEAD"
-msgstr "lấy ra nhánh (checkout <nhánh>) thay vì HEAD của máy chủ"
+msgstr "lấy ra <nhánh> thay cho HEAD của máy chủ"
#: builtin/clone.c:91
msgid "path to git-upload-pack on the remote"
msgstr "Ä‘Æ°á»ng dẫn đến git-upload-pack trên máy chủ"
-#: builtin/clone.c:92 builtin/fetch.c:97 builtin/grep.c:663
+#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663
msgid "depth"
-msgstr "độ sâu"
+msgstr "độ-sâu"
#: builtin/clone.c:93
msgid "create a shallow clone of that depth"
@@ -3911,7 +3931,7 @@ msgstr "tạo bản sao không đầy đủ cho mức sâu đã cho"
#: builtin/clone.c:95
msgid "clone only one branch, HEAD or --branch"
-msgstr "nhân bản (clone) chỉ một nhánh, HEAD hoặc --branch"
+msgstr "chỉ nhân bản một nhánh, HEAD hoặc --branch"
#: builtin/clone.c:96 builtin/init-db.c:494
msgid "gitdir"
@@ -3923,7 +3943,7 @@ msgstr "không dùng chung thư mục dành riêng cho git và thư mục làm v
#: builtin/clone.c:98
msgid "key=value"
-msgstr "khóa=giá trị"
+msgstr "khóa=giá_trị"
#: builtin/clone.c:99
msgid "set config inside the new repository"
@@ -3934,42 +3954,52 @@ msgstr "đặt cấu hình bên trong một kho chứa mới"
msgid "reference repository '%s' is not a local repository."
msgstr "kho tham chiếu “%s†không phải là một kho nội bộ."
-#: builtin/clone.c:315
+#: builtin/clone.c:256
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "kho tham chiếu “%s†là nông"
+
+#: builtin/clone.c:259
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "kho tham chiếu “%s†bị cấy ghép"
+
+#: builtin/clone.c:321
#, c-format
msgid "failed to create directory '%s'"
msgstr "tạo thư mục \"%s\" gặp lỗi"
-#: builtin/clone.c:317 builtin/diff.c:77
+#: builtin/clone.c:323 builtin/diff.c:83
#, c-format
msgid "failed to stat '%s'"
msgstr "gặp lá»—i stat (lấy trạng thái vá») “%sâ€"
-#: builtin/clone.c:319
+#: builtin/clone.c:325
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s tồn tại nhưng không phải là một thư mục"
-#: builtin/clone.c:333
+#: builtin/clone.c:339
#, c-format
msgid "failed to stat %s\n"
-msgstr "lá»—i stat (lấy trạng thái vá») %s\n"
+msgstr "gặp lỗi khi lấy thông tin thống kê vỠ%s\n"
-#: builtin/clone.c:355
+#: builtin/clone.c:361
#, c-format
msgid "failed to create link '%s'"
msgstr "gặp lá»—i khi tạo được liên kết má»m %s"
-#: builtin/clone.c:359
+#: builtin/clone.c:365
#, c-format
msgid "failed to copy file to '%s'"
-msgstr "gặp lá»—i khi chép tập tin tá»›i “%sâ€"
+msgstr "gặp lá»—i khi sao chép tập tin và “%sâ€"
-#: builtin/clone.c:382 builtin/clone.c:559
+#: builtin/clone.c:388 builtin/clone.c:565
#, c-format
msgid "done.\n"
msgstr "hoàn tất.\n"
-#: builtin/clone.c:395
+#: builtin/clone.c:401
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -3979,99 +4009,108 @@ msgstr ""
"Bạn kiểm tra kỹ xem cái gì được lấy ra bằng lệnh “git statusâ€\n"
"và thá»­ checkout vá»›i lệnh “git checkout -f HEADâ€\n"
-#: builtin/clone.c:474
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "Không tìm thấy nhánh máy chủ %s để nhân bản (clone)."
-#: builtin/clone.c:554
+#: builtin/clone.c:560
#, c-format
msgid "Checking connectivity... "
-msgstr "Äang kiểm tra kết nối..."
+msgstr "Äang kiểm tra kết nối... "
-#: builtin/clone.c:557
+#: builtin/clone.c:563
msgid "remote did not send all necessary objects"
msgstr "máy chủ đã không gửi tất cả các đối tượng cần thiết"
-#: builtin/clone.c:620
+#: builtin/clone.c:626
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr "refers HEAD máy chủ chỉ đến ref không tồn tại, không thể checkout.\n"
-#: builtin/clone.c:651
+#: builtin/clone.c:657
msgid "unable to checkout working tree"
msgstr "không thể lấy ra (checkout) cây làm việc"
-#: builtin/clone.c:759
+#: builtin/clone.c:765
msgid "Too many arguments."
msgstr "Có quá nhiá»u đối số."
-#: builtin/clone.c:763
+#: builtin/clone.c:769
msgid "You must specify a repository to clone."
msgstr "Bạn phải chỉ định một kho để mà nhân bản (clone)."
-#: builtin/clone.c:774
+#: builtin/clone.c:780
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "tùy chá»n --bare và --origin %s xung khắc nhau."
-#: builtin/clone.c:777
+#: builtin/clone.c:783
msgid "--bare and --separate-git-dir are incompatible."
msgstr "tùy chá»n --bare và --separate-git-dir xung khắc nhau."
-#: builtin/clone.c:790
+#: builtin/clone.c:796
#, c-format
msgid "repository '%s' does not exist"
msgstr "kho chứa “%s†chưa tồn tại"
-#: builtin/clone.c:795
+#: builtin/clone.c:802
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth bị lỠđi khi nhân bản nội bộ; hãy sử dụng file:// để thay thế."
-#: builtin/clone.c:797
+#: builtin/clone.c:805
+msgid "source repository is shallow, ignoring --local"
+msgstr "kho nguồn là nông, nên bỠqua --local"
+
+#: builtin/clone.c:810
msgid "--local is ignored"
msgstr "--local bị lỠđi"
-#: builtin/clone.c:807
+#: builtin/clone.c:814 builtin/fetch.c:1119
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr "độ sâu %s không phải là một số nguyên dương"
+
+#: builtin/clone.c:824
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "Ä‘Æ°á»ng dẫn đích “%s†đã có từ trÆ°á»›c và không phải là má»™t thÆ° mục rá»—ng."
-#: builtin/clone.c:817
+#: builtin/clone.c:834
#, c-format
msgid "working tree '%s' already exists."
msgstr "cây làm việc “%s†đã sẵn tồn tại rồi."
-#: builtin/clone.c:830 builtin/clone.c:842
+#: builtin/clone.c:847 builtin/clone.c:859
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "không thể tạo các thÆ° mục dẫn đầu của “%sâ€"
-#: builtin/clone.c:833
+#: builtin/clone.c:850
#, c-format
msgid "could not create work tree dir '%s'."
msgstr "không thể tạo cây thÆ° mục làm việc dir “%sâ€."
-#: builtin/clone.c:852
+#: builtin/clone.c:869
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Äang nhân bản thành kho chứa bare “%sâ€...\n"
-#: builtin/clone.c:854
+#: builtin/clone.c:871
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Äang nhân bản thành “%sâ€...\n"
-#: builtin/clone.c:888
+#: builtin/clone.c:906
#, c-format
msgid "Don't know how to clone %s"
msgstr "Không biết làm cách nào để nhân bản (clone) %s"
-#: builtin/clone.c:939 builtin/clone.c:947
+#: builtin/clone.c:957 builtin/clone.c:965
#, c-format
msgid "Remote branch %s not found in upstream %s"
-msgstr "Nhánh máy chủ %s không tìm thấy trong thượng nguồn (upstream) %s"
+msgstr "Nhánh máy chủ %s không tìm thấy trong thượng nguồn %s"
-#: builtin/clone.c:950
+#: builtin/clone.c:968
msgid "You appear to have cloned an empty repository."
msgstr "Bạn hình như là đã nhân bản một kho trống rỗng."
@@ -4149,8 +4188,8 @@ msgid ""
"it empty. You can repeat your command with --allow-empty, or you can\n"
"remove the commit entirely with \"git reset HEAD^\".\n"
msgstr ""
-"Bạn đã yêu cầu amend (tu bổ) phần lớn các lần chuyển giao (commit) gần đây, "
-"nhưng làm như thế\n"
+"Bạn đã yêu cầu amend (“tu bổâ€) phần lá»›n các lần chuyển giao gần đây, nhÆ°ng "
+"làm như thế\n"
"có thể làm cho nó trở nên trống rỗng. Bạn có thể lặp lại lệnh của mình bằng "
"--allow-empty,\n"
"hoặc là bạn gỡ bỠcác lần chuyển giao một cách hoàn toàn bằng lệnh:\n"
@@ -4166,7 +4205,7 @@ msgid ""
msgstr ""
"Lần cherry-pick trước hiện nay trống rỗng, có lẽ là bởi vì sự phân giải xung "
"Ä‘á»™t.\n"
-"Nếu bạn vẫn muốn chuyển giao nó cho dù thế nào đi nữa, sử dụng:\n"
+"Nếu bạn vẫn muốn chuyển giao nó cho dù thế nào đi nữa, hãy dùng:\n"
"\n"
" git commit --allow-empty\n"
"\n"
@@ -4201,7 +4240,7 @@ msgstr "không thể tạo bảng mục lục tạm thá»i"
#: builtin/commit.c:335
msgid "interactive add failed"
-msgstr "việc thêm tương tác gặp lỗi"
+msgstr "gặp lỗi khi thêm bằng cách tương"
#: builtin/commit.c:368 builtin/commit.c:389 builtin/commit.c:439
msgid "unable to write new_index file"
@@ -4210,14 +4249,12 @@ msgstr "không thể ghi tập tin lưu bảng mục lục mới (new_index)"
#: builtin/commit.c:420
msgid "cannot do a partial commit during a merge."
msgstr ""
-"không thể thực hiện việc chuyển giao (commit) cục bộ trong khi đang được hòa "
-"trá»™n."
+"không thể thực hiện việc chuyển giao cục bộ trong khi đang được hòa trộn."
#: builtin/commit.c:422
msgid "cannot do a partial commit during a cherry-pick."
msgstr ""
-"không thể thực hiện việc chuyển giao (commit) bộ phận trong khi đang cherry-"
-"pick."
+"không thể thực hiện việc chuyển giao bộ phận trong khi đang cherry-pick."
#: builtin/commit.c:432
msgid "cannot read the index"
@@ -4230,11 +4267,11 @@ msgstr "không thể ghi tập tin lÆ°u bảng mục lục tạm thá»i"
#: builtin/commit.c:543 builtin/commit.c:549
#, c-format
msgid "invalid commit: %s"
-msgstr "lần chuyển giao (commit) không hợp lệ: %s"
+msgstr "lần chuyển giao không hợp lệ: %s"
#: builtin/commit.c:571
msgid "malformed --author parameter"
-msgstr "đối số --author bị dị hình"
+msgstr "đối số cho --author bị dị hình"
#: builtin/commit.c:591
#, c-format
@@ -4262,7 +4299,7 @@ msgstr "không Ä‘á»c được tệp nhật ký “%sâ€"
#: builtin/commit.c:654
msgid "commit has empty message"
-msgstr "lần chuyển giao (commit) có ghi chú trống rỗng"
+msgstr "lần chuyển giao có ghi chú trống rỗng"
#: builtin/commit.c:670
msgid "could not read MERGE_MSG"
@@ -4279,7 +4316,7 @@ msgstr "Không thể Ä‘á»c “%sâ€."
#: builtin/commit.c:749
msgid "could not write commit template"
-msgstr "không thể ghi mẫu commit"
+msgstr "không thể ghi mẫu chuyển giao"
#: builtin/commit.c:760
#, c-format
@@ -4320,7 +4357,7 @@ msgstr ""
"Hãy nhập vào các thông tin để giải thích các thay đổi của bạn. Những dòng "
"được\n"
"bắt đầu bằng “%c†sẽ được bỠqua, nếu phần chú thích rỗng sẽ hủy bỠlần "
-"chuyển giao (commit).\n"
+"chuyển giao.\n"
#: builtin/commit.c:782
#, c-format
@@ -4332,7 +4369,7 @@ msgstr ""
"Hãy nhập vào các thông tin để giải thích các thay đổi của bạn. Những dòng "
"được\n"
"bắt đầu bằng “%c†sẽ được bỠqua; bạn có thể xóa chúng đi nếu muốn thế.\n"
-"Phần chú thích này nếu trống rỗng sẽ hủy bỠlần chuyển giao (commit).\n"
+"Phần chú thích này nếu trống rỗng sẽ hủy bỠlần chuyển giao.\n"
#: builtin/commit.c:795
#, c-format
@@ -4342,11 +4379,11 @@ msgstr "%sTác giả: %s"
#: builtin/commit.c:802
#, c-format
msgid "%sCommitter: %s"
-msgstr "%sNgÆ°á»i chuyển giao (commit): %s"
+msgstr "%sNgÆ°á»i chuyển giao: %s"
#: builtin/commit.c:822
msgid "Cannot read index"
-msgstr "không Ä‘á»c được bảng mục lục"
+msgstr "Không Ä‘á»c được bảng mục lục"
#: builtin/commit.c:865
msgid "Error building trees"
@@ -4365,7 +4402,7 @@ msgstr "Không tìm thấy tác giả có sẵn vá»›i “%sâ€"
#: builtin/commit.c:997 builtin/commit.c:1237
#, c-format
msgid "Invalid untracked files mode '%s'"
-msgstr "Chế Ä‘á»™ cho các tập tin không bị theo vết không hợp lệ “%sâ€"
+msgstr "Chế Ä‘á»™ cho các tập tin chÆ°a được theo dõi không hợp lệ “%sâ€"
#: builtin/commit.c:1034
msgid "--long and -z are incompatible"
@@ -4377,18 +4414,18 @@ msgstr "Sá»­ dụng cả hai tùy chá»n --reset-author và --author không hợ
#: builtin/commit.c:1075
msgid "You have nothing to amend."
-msgstr "Không có gì để amend (tu bổ) cả."
+msgstr "Không có gì để mà “tu bổ†cả."
#: builtin/commit.c:1078
msgid "You are in the middle of a merge -- cannot amend."
msgstr ""
-"Bạn đang ở giữa của quá trình hòa trộn -- không thể thực hiện amend (tu bổ)."
+"Bạn Ä‘ang ở giữa của quá trình hòa trá»™n -- không thể thá»±c hiện việc “tu bổâ€."
#: builtin/commit.c:1080
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr ""
-"Bạn đang ở giữa của quá trình cherry-pick -- không thể thực hiện amend (tu "
-"bổ)."
+"Bạn đang ở giữa của quá trình cherry-pick -- không thể thực hiện việc “tu "
+"bổâ€."
#: builtin/commit.c:1083
msgid "Options --squash and --fixup cannot be used together"
@@ -4396,7 +4433,8 @@ msgstr "Các tùy chá»n --squash và --fixup không thể sá»­ dụng cùng vá»
#: builtin/commit.c:1093
msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Chỉ má»™t tùy chá»n trong số -c/-C/-F/--fixup được sá»­ dụng"
+msgstr ""
+"Chỉ được dùng má»™t trong số tùy chá»n trong số các tùy chá»n -c/-C/-F/--fixup"
#: builtin/commit.c:1095
msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
@@ -4419,7 +4457,7 @@ msgstr "Không Ä‘Æ°á»ng dẫn vá»›i các tùy chá»n --include/--only không há
#: builtin/commit.c:1124
msgid "Clever... amending the last one with dirty index."
-msgstr "Giá»i... tu bổ cái cuối vá»›i bảng mục lục bẩn."
+msgstr "Giá»i... “tu bổ†cái cuối vá»›i bảng mục lục bẩn."
#: builtin/commit.c:1126
msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
@@ -4444,7 +4482,7 @@ msgstr "hiển thị trạng thái ở dạng súc tích"
msgid "show branch information"
msgstr "hiển thị thông tin nhánh"
-#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:460
+#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507
msgid "machine-readable output"
msgstr "kết xuất dạng máy-có-thể-Ä‘á»c"
@@ -4489,7 +4527,7 @@ msgstr "hiển thị danh sách các tập-tin chÆ°a được theo dõi trong cÃ
#: builtin/commit.c:1340
msgid "couldn't look up newly created commit"
-msgstr "không thể tìm thấy lần chuyển giao (commit) mới hơn đã được tạo"
+msgstr "không thể tìm thấy lần chuyển giao mới hơn đã được tạo"
#: builtin/commit.c:1342
msgid "could not parse newly created commit"
@@ -4528,31 +4566,30 @@ msgstr "tác giả"
msgid "override author for commit"
msgstr "ghi đè tác giả cho commit"
-#: builtin/commit.c:1458 builtin/gc.c:260
+#: builtin/commit.c:1458 builtin/gc.c:261
msgid "date"
msgstr "ngày tháng"
#: builtin/commit.c:1458
msgid "override date for commit"
-msgstr "ghi đè ngày tháng cho commit"
+msgstr "ghi đè ngày tháng cho lần chuyển giao"
-#: builtin/commit.c:1459 builtin/merge.c:223 builtin/notes.c:405
+#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405
#: builtin/notes.c:562 builtin/tag.c:455
msgid "message"
-msgstr "thông điệp"
+msgstr "chú thích"
#: builtin/commit.c:1459
msgid "commit message"
-msgstr "chú thích của lần commit"
+msgstr "chú thích của lần chuyển giao"
#: builtin/commit.c:1460
msgid "reuse and edit message from specified commit"
-msgstr ""
-"dùng lại các ghi chú từ lần chuyển giao (commit) đã cho nhưng có cho sửa chữa"
+msgstr "dùng lại các ghi chú từ lần chuyển giao đã cho nhưng có cho sửa chữa"
#: builtin/commit.c:1461
msgid "reuse message from specified commit"
-msgstr "dùng lại các ghi chú từ lần chuyển giao (commit) đã cho"
+msgstr "dùng lại các ghi chú từ lần chuyển giao đã cho"
#: builtin/commit.c:1462
msgid "use autosquash formatted message to fixup specified commit"
@@ -4572,7 +4609,7 @@ msgstr ""
#: builtin/commit.c:1465 builtin/log.c:1180 builtin/revert.c:86
msgid "add Signed-off-by:"
-msgstr "thêm dòng Signed-off-by:"
+msgstr "(nên dùng) thêm dòng Signed-off-by:"
#: builtin/commit.c:1466
msgid "use specified template file"
@@ -4592,15 +4629,15 @@ msgstr "làm thế nào để cắt bỠkhoảng trắng và #ghichú từ mẩ
#: builtin/commit.c:1469
msgid "include status in commit message template"
-msgstr "bao gồm các trạng thái ghi mẫu ghi chú chuyển giao (commit)"
+msgstr "bao gồm các trạng thái trong mẫu ghi chú chuyển giao"
-#: builtin/commit.c:1470 builtin/merge.c:230 builtin/tag.c:461
+#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461
msgid "key id"
-msgstr "id khóa"
+msgstr "id của khóa"
-#: builtin/commit.c:1471 builtin/merge.c:231
+#: builtin/commit.c:1471 builtin/merge.c:224
msgid "GPG sign commit"
-msgstr "ký lần commit dùng GPG"
+msgstr "ký lần chuyển giao dùng GPG"
#. end commit message options
#: builtin/commit.c:1474
@@ -4613,7 +4650,7 @@ msgstr "chuyển giao tất cả các tập tin có thay đổi"
#: builtin/commit.c:1476
msgid "add specified files to index for commit"
-msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục để chuyển giao (commit)"
+msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục để chuyển giao"
#: builtin/commit.c:1477
msgid "interactively add files"
@@ -4637,7 +4674,7 @@ msgstr "hiển thị xem cái gì có thể được chuyển giao"
#: builtin/commit.c:1492
msgid "amend previous commit"
-msgstr "tu bổ (amend) lần commit trước"
+msgstr "“tu bổ†(amend) lần commit trước"
#: builtin/commit.c:1493
msgid "bypass post-rewrite hook"
@@ -4655,7 +4692,7 @@ msgstr "ok để ghi các thay đổi vá»›i lá»i nhắn trống rá»—ng"
msgid "could not parse HEAD commit"
msgstr "không thể phân tích commit (lần chuyển giao) HEAD"
-#: builtin/commit.c:1567 builtin/merge.c:525
+#: builtin/commit.c:1567 builtin/merge.c:518
#, c-format
msgid "could not open '%s' for reading"
msgstr "không thể mở “%s†để Ä‘á»c"
@@ -4672,34 +4709,33 @@ msgstr "không thể Ä‘á»c MERGE_MODE"
#: builtin/commit.c:1600
#, c-format
msgid "could not read commit message: %s"
-msgstr "không thể Ä‘á»c thông Ä‘iệp (message) commit (lần chuyển giao): %s"
+msgstr "không thể Ä‘á»c phần chú thích (message) commit (lần chuyển giao): %s"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1611
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr ""
-"Äang bá» qua việc chuyển giao (commit); bạn đã không biên soạn thông Ä‘iệp "
+"Äang bá» qua việc chuyển giao; bạn đã không biên soạn phần chú thích "
"(message).\n"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1616
#, c-format
msgid "Aborting commit due to empty commit message.\n"
-msgstr ""
-"Äang bá» qua lần chuyển giao (commit) bởi vì thông Ä‘iệp của nó trống rá»—ng.\n"
+msgstr "Bãi bỠviệc chuyển giao bởi vì phần chú thích của nó trống rỗng.\n"
-#: builtin/commit.c:1634 builtin/merge.c:861 builtin/merge.c:886
+#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879
msgid "failed to write commit object"
-msgstr "gặp lỗi khi ghi đối tượng chuyển giao (commit)"
+msgstr "gặp lỗi khi ghi đối tượng chuyển giao"
-#: builtin/commit.c:1655
+#: builtin/commit.c:1652
msgid "cannot lock HEAD ref"
msgstr "không thể khóa HEAD ref (tham chiếu)"
-#: builtin/commit.c:1659
+#: builtin/commit.c:1656
msgid "cannot update HEAD ref"
msgstr "không thể cập nhật ref (tham chiếu) HEAD"
-#: builtin/commit.c:1670
+#: builtin/commit.c:1667
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full or quota is\n"
@@ -4707,8 +4743,8 @@ msgid ""
msgstr ""
"Kho chứa đã hoàn tất việc cập nhật, nhưng không thể ghi vào\n"
"tập tin new_index (bảng mục lục mới). Hãy kiểm tra xem đĩa có bị đầy quá\n"
-"hay quota (hạn nghạch đĩa cứng) bị vượt quá, và sau đó \"git reset HEAD\" để "
-"khắc phục."
+"hay quota (hạn nghạch) bị vượt quá, và sau đó \"git reset HEAD\" để khắc "
+"phục."
#: builtin/config.c:8
msgid "git config [options]"
@@ -4720,7 +4756,7 @@ msgstr "Vị trí tập tin cấu hình"
#: builtin/config.c:55
msgid "use global config file"
-msgstr "đặt tập tin cấu hình cần toàn cục"
+msgstr "dùng tập tin cấu hình toàn cục"
#: builtin/config.c:56
msgid "use system config file"
@@ -4780,11 +4816,11 @@ msgstr "gỡ bá» má»i cái khá»›p: tên [value-regex]"
#: builtin/config.c:69
msgid "rename section: old-name new-name"
-msgstr "đổi tên chương: tên-cũ tên-mới"
+msgstr "đổi tên phần: tên-cũ tên-mới"
#: builtin/config.c:70
msgid "remove a section: name"
-msgstr "gỡ bỠchương: tên"
+msgstr "gỡ bỠphần: tên"
#: builtin/config.c:71
msgid "list all"
@@ -4915,7 +4951,7 @@ msgstr ""
#: builtin/describe.c:384
#, c-format
msgid "traversed %lu commits\n"
-msgstr "đã xuyên %lu qua lần chuyển giao (commit)\n"
+msgstr "đã xuyên %lu qua lần chuyển giao\n"
#: builtin/describe.c:387
#, c-format
@@ -4932,7 +4968,7 @@ msgstr "tìm các thẻ mà nó đến trước lần chuyển giao"
#: builtin/describe.c:410
msgid "debug search strategy on stderr"
-msgstr "chiến lược tìm kiếm trên đầu ra lỗi chuẩn stderr"
+msgstr "chiến lược tìm kiếm gỡ lỗi trên đầu ra lỗi chuẩn stderr"
#: builtin/describe.c:411
msgid "use any ref"
@@ -4960,9 +4996,9 @@ msgstr "coi như <n> thẻ gần đây nhất (mặc định: 10)"
#: builtin/describe.c:421
msgid "only consider tags matching <pattern>"
-msgstr "chỉ cân nhắc đến những thẻ khớp với <mẫu>"
+msgstr "chỉ cân nhắc đến những thẻ khớp với <mẫu>"
-#: builtin/describe.c:423 builtin/name-rev.c:322
+#: builtin/describe.c:423 builtin/name-rev.c:321
msgid "show abbreviated commit object as fallback"
msgstr "hiển thị đối tượng chuyển giao vắn tắt như là fallback"
@@ -4986,31 +5022,31 @@ msgstr "Không tìm thấy các tên, không thể mô tả gì cả."
msgid "--dirty is incompatible with commit-ishes"
msgstr "--dirty là xung khắc vá»›i các tùy chá»n commit-ish"
-#: builtin/diff.c:79
+#: builtin/diff.c:85
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "“%sâ€: không phải tập tin bình thÆ°á»ng hay liên kết má»m"
-#: builtin/diff.c:230
+#: builtin/diff.c:236
#, c-format
msgid "invalid option: %s"
msgstr "tùy chá»n không hợp lệ: %s"
-#: builtin/diff.c:307
+#: builtin/diff.c:357
msgid "Not a git repository"
msgstr "Không phải là kho git"
-#: builtin/diff.c:350
+#: builtin/diff.c:400
#, c-format
msgid "invalid object '%s' given."
msgstr "đối tượng đã cho “%s†không hợp lệ."
-#: builtin/diff.c:359
+#: builtin/diff.c:409
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "đã cho nhiá»u hÆ¡n hai đối tượng blob: “%sâ€"
-#: builtin/diff.c:366
+#: builtin/diff.c:416
#, c-format
msgid "unhandled object '%s' given."
msgstr "đã cho đối tượng không thể nắm giữ “%sâ€."
@@ -5071,146 +5107,155 @@ msgstr "git fetch --multiple [<các-tùy-chá»n>] [(<kho> | <nhóm>)...]"
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<các-tùy-chá»n>]"
-#: builtin/fetch.c:74
+#: builtin/fetch.c:75
msgid "fetch from all remotes"
msgstr "lấy vỠtừ tất cả các máy chủ"
-#: builtin/fetch.c:76
+#: builtin/fetch.c:77
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "nối thêm vào .git/FETCH_HEAD thay vì ghi đè lên nó"
-#: builtin/fetch.c:78
+#: builtin/fetch.c:79
msgid "path to upload pack on remote end"
msgstr "Ä‘Æ°á»ng dẫn đến gói (pack) tải lên trên máy chủ cuối"
-#: builtin/fetch.c:79
+#: builtin/fetch.c:80
msgid "force overwrite of local branch"
msgstr "ép buộc ghi đè lên nhánh nội bộ"
-#: builtin/fetch.c:81
+#: builtin/fetch.c:82
msgid "fetch from multiple remotes"
msgstr "lấy từ nhiá»u máy chủ cùng lúc"
-#: builtin/fetch.c:83
+#: builtin/fetch.c:84
msgid "fetch all tags and associated objects"
msgstr "lấy tất cả các thẻ cùng với các đối tượng liên quan đến nó"
-#: builtin/fetch.c:85
+#: builtin/fetch.c:86
msgid "do not fetch all tags (--no-tags)"
msgstr "không lấy tất cả các thẻ (--no-tags)"
-#: builtin/fetch.c:87
+#: builtin/fetch.c:88
msgid "prune remote-tracking branches no longer on remote"
msgstr ""
"cắt cụt (prune) các nhánh “remote-tracking†không còn tồn tại trên máy chủ "
"nữa"
-#: builtin/fetch.c:88
+#: builtin/fetch.c:89
msgid "on-demand"
msgstr "khi-cần"
-#: builtin/fetch.c:89
+#: builtin/fetch.c:90
msgid "control recursive fetching of submodules"
msgstr "Ä‘iá»u khiển việc lấy vỠđệ quy trong các mô-Ä‘un-con"
-#: builtin/fetch.c:93
+#: builtin/fetch.c:94
msgid "keep downloaded pack"
msgstr "giữ các gói đã tải vá»"
-#: builtin/fetch.c:95
+#: builtin/fetch.c:96
msgid "allow updating of HEAD ref"
msgstr "cho phép cập nhật th.chiếu HEAD"
-#: builtin/fetch.c:98
+#: builtin/fetch.c:99
msgid "deepen history of shallow clone"
msgstr "làm sâu hơn lịch sử của bản sao"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:101
msgid "convert to a complete repository"
msgstr "chuyển đổi hoàn toàn sang kho git"
-#: builtin/fetch.c:102 builtin/log.c:1197
+#: builtin/fetch.c:103 builtin/log.c:1197
msgid "dir"
msgstr "tmục"
-#: builtin/fetch.c:103
+#: builtin/fetch.c:104
msgid "prepend this to submodule path output"
msgstr "soạn sẵn cái này cho kết xuất Ä‘Æ°á»ng dẫn mô-Ä‘un-con"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:107
msgid "default mode for recursion"
msgstr "chế độ mặc định cho đệ qui"
-#: builtin/fetch.c:236
+#: builtin/fetch.c:109
+msgid "accept refs that update .git/shallow"
+msgstr "chấp nhận tham chiếu cập nhật .git/shallow"
+
+#: builtin/fetch.c:347
msgid "Couldn't find remote ref HEAD"
msgstr "Không thể tìm thấy máy chủ cho tham chiếu HEAD"
-#: builtin/fetch.c:290
+#: builtin/fetch.c:411
#, c-format
msgid "object %s not found"
msgstr "Không tìm thấy đối tượng %s"
-#: builtin/fetch.c:295
+#: builtin/fetch.c:416
msgid "[up to date]"
msgstr "[đã cập nhật]"
-#: builtin/fetch.c:309
+#: builtin/fetch.c:430
#, c-format
msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
msgstr "! %-*s %-*s -> %s (không thể fetch (lấy) vỠnhánh hiện hành)"
-#: builtin/fetch.c:310 builtin/fetch.c:396
+#: builtin/fetch.c:431 builtin/fetch.c:517
msgid "[rejected]"
msgstr "[Bị từ chối]"
-#: builtin/fetch.c:321
+#: builtin/fetch.c:442
msgid "[tag update]"
msgstr "[cập nhật thẻ]"
-#: builtin/fetch.c:323 builtin/fetch.c:358 builtin/fetch.c:376
+#: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497
msgid " (unable to update local ref)"
msgstr " (không thể cập nhật tham chiếu (ref) nội bộ)"
-#: builtin/fetch.c:341
+#: builtin/fetch.c:462
msgid "[new tag]"
msgstr "[thẻ mới]"
-#: builtin/fetch.c:344
+#: builtin/fetch.c:465
msgid "[new branch]"
msgstr "[nhánh mới]"
-#: builtin/fetch.c:347
+#: builtin/fetch.c:468
msgid "[new ref]"
msgstr "[ref (tham chiếu) mới]"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "unable to update local ref"
msgstr "không thể cập nhật tham chiếu (ref) nội bộ"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "forced update"
msgstr "cưỡng bức cập nhật"
-#: builtin/fetch.c:398
+#: builtin/fetch.c:519
msgid "(non-fast-forward)"
msgstr "(non-fast-forward)"
-#: builtin/fetch.c:429 builtin/fetch.c:735
+#: builtin/fetch.c:552 builtin/fetch.c:785
#, c-format
msgid "cannot open %s: %s\n"
msgstr "không thể mở %s: %s\n"
-#: builtin/fetch.c:438
+#: builtin/fetch.c:561
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s đã không gửi tất cả các đối tượng cần thiết\n"
-#: builtin/fetch.c:537
+#: builtin/fetch.c:579
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr "từ chối %s bởi vì các gốc nông thì không được phép cập nhật"
+
+#: builtin/fetch.c:667 builtin/fetch.c:750
#, c-format
msgid "From %.*s\n"
msgstr "Từ %.*s\n"
-#: builtin/fetch.c:548
+#: builtin/fetch.c:678
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -5219,57 +5264,57 @@ msgstr ""
"một số tham chiếu (refs) nội bộ không thể được cập nhật; hãy thử chạy\n"
" “git remote prune %s†để bỠđi những nhánh cũ, hay bị xung đột"
-#: builtin/fetch.c:598
+#: builtin/fetch.c:730
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s sẽ trở thành không đầu (không được quản lý))"
-#: builtin/fetch.c:599
+#: builtin/fetch.c:731
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s đã trở thành không đầu (không được quản lý))"
-#: builtin/fetch.c:606
+#: builtin/fetch.c:755
msgid "[deleted]"
msgstr "[đã xóa]"
-#: builtin/fetch.c:607 builtin/remote.c:1055
+#: builtin/fetch.c:756 builtin/remote.c:1050
msgid "(none)"
msgstr "(không)"
-#: builtin/fetch.c:725
+#: builtin/fetch.c:775
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr ""
-"Từ chối việc lấy (fetch) vào trong nhánh hiện tại %s của một kho chứa không "
-"phải kho trần (bare)"
+"Từ chối việc lấy vào trong nhánh hiện tại %s của một kho chứa không phải kho "
+"trần (bare)"
-#: builtin/fetch.c:744
+#: builtin/fetch.c:794
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Tùy chá»n \"%s\" có giá trị \"%s\" là không hợp lệ cho %s"
-#: builtin/fetch.c:747
+#: builtin/fetch.c:797
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Tùy chá»n \"%s\" bị bá» qua vá»›i %s\n"
-#: builtin/fetch.c:801
+#: builtin/fetch.c:853
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "Không biết làm cách nào để lấy vỠtừ %s"
-#: builtin/fetch.c:976
+#: builtin/fetch.c:1015
#, c-format
msgid "Fetching %s\n"
msgstr "Äang lấy vá» %s\n"
-#: builtin/fetch.c:978 builtin/remote.c:100
+#: builtin/fetch.c:1017 builtin/remote.c:90
#, c-format
msgid "Could not fetch %s"
msgstr "không thể lấy vỠ%s"
-#: builtin/fetch.c:997
+#: builtin/fetch.c:1036
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -5277,43 +5322,44 @@ msgstr ""
"Chưa chỉ ra kho chứa máy chủ. Xin hãy chỉ định hoặc là URL hoặc\n"
"tên máy chủ từ cái mà những Ä‘iểm xét duyệt má»›i có thể được fetch (lấy vá»)."
-#: builtin/fetch.c:1020
+#: builtin/fetch.c:1059
msgid "You need to specify a tag name."
msgstr "Bạn phải định rõ tên thẻ."
-#: builtin/fetch.c:1068
+#: builtin/fetch.c:1107
msgid "--depth and --unshallow cannot be used together"
msgstr "tùy chá»n --depth và --unshallow không thể sá»­ dụng cùng vá»›i nhau"
-#: builtin/fetch.c:1070
+#: builtin/fetch.c:1109
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow trên kho hoàn chỉnh là không hợp lý"
-#: builtin/fetch.c:1089
+#: builtin/fetch.c:1132
msgid "fetch --all does not take a repository argument"
msgstr "lệnh lấy vỠ\"fetch --all\" không lấy đối số kho chứa"
-#: builtin/fetch.c:1091
+#: builtin/fetch.c:1134
msgid "fetch --all does not make sense with refspecs"
msgstr "lệnh lấy vỠ\"fetch --all\" không hợp lý với refspecs"
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1145
#, c-format
msgid "No such remote or remote group: %s"
msgstr "không có nhóm máy chủ hay máy chủ như thế: %s"
-#: builtin/fetch.c:1110
+#: builtin/fetch.c:1153
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Việc lấy vỠcả một nhóm và chỉ định refspecs không hợp lý"
#: builtin/fmt-merge-msg.c:13
msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
msgstr ""
-"git fmt-merge-msg [-m <thông điệp>] [--log[=<n>]|--no-log] [--file <tập-tin>]"
+"git fmt-merge-msg [-m <chú_thích>] [--log[=<n>]|--no-log] [--file <tập-tin>]"
#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702
-#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:178
-#: builtin/tag.c:446 parse-options.h:135 parse-options.h:245
+#: builtin/merge.c:196 builtin/repack.c:160 builtin/repack.c:164
+#: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:446
+#: parse-options.h:135 parse-options.h:242
msgid "n"
msgstr "n"
@@ -5337,43 +5383,43 @@ msgstr "dùng <văn bản thÆ°á»ng> để bắt đầu ghi chú"
msgid "file to read from"
msgstr "tập tin để Ä‘á»c dữ liệu từ đó"
-#: builtin/for-each-ref.c:995
+#: builtin/for-each-ref.c:1063
msgid "git for-each-ref [options] [<pattern>]"
msgstr "git for-each-ref [các-tùy-chá»n] [<mẫu>]"
-#: builtin/for-each-ref.c:1010
+#: builtin/for-each-ref.c:1078
msgid "quote placeholders suitably for shells"
msgstr "trích dẫn để phù hợp cho hệ vỠ(shell)"
-#: builtin/for-each-ref.c:1012
+#: builtin/for-each-ref.c:1080
msgid "quote placeholders suitably for perl"
msgstr "trích dẫn để phù hợp cho perl"
-#: builtin/for-each-ref.c:1014
+#: builtin/for-each-ref.c:1082
msgid "quote placeholders suitably for python"
msgstr "trích dẫn để phù hợp cho python"
-#: builtin/for-each-ref.c:1016
+#: builtin/for-each-ref.c:1084
msgid "quote placeholders suitably for tcl"
msgstr "trích dẫn để phù hợp cho tcl"
-#: builtin/for-each-ref.c:1019
+#: builtin/for-each-ref.c:1087
msgid "show only <n> matched refs"
msgstr "hiển thị chỉ <n> tham chiếu khớp"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088 builtin/replace.c:177
msgid "format"
msgstr "định dạng"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088
msgid "format to use for the output"
msgstr "định dạng sẽ dùng cho đầu ra"
-#: builtin/for-each-ref.c:1021
+#: builtin/for-each-ref.c:1089
msgid "key"
msgstr "khóa"
-#: builtin/for-each-ref.c:1022
+#: builtin/for-each-ref.c:1090
msgid "field name to sort on"
msgstr "tên trÆ°á»ng cần sắp xếp"
@@ -5417,41 +5463,41 @@ msgstr "cho phép kiểm tra hạn chế hơn"
msgid "write dangling objects in .git/lost-found"
msgstr "ghi các đối tượng không được quản lý trong .git/lost-found"
-#: builtin/fsck.c:623 builtin/prune.c:134
+#: builtin/fsck.c:623 builtin/prune.c:144
msgid "show progress"
msgstr "hiển thị quá trình"
-#: builtin/gc.c:23
+#: builtin/gc.c:24
msgid "git gc [options]"
msgstr "git gc [các-tùy-chá»n]"
-#: builtin/gc.c:79
+#: builtin/gc.c:80
#, c-format
msgid "Invalid %s: '%s'"
msgstr "%s không hợp lệ: “%sâ€"
-#: builtin/gc.c:106
+#: builtin/gc.c:107
#, c-format
msgid "insanely long object directory %.*s"
msgstr "thư mục đối tượng dài một cách điên rồ %.*s"
-#: builtin/gc.c:261
+#: builtin/gc.c:262
msgid "prune unreferenced objects"
msgstr "xóa bỠcác đối tượng không được tham chiếu"
-#: builtin/gc.c:263
+#: builtin/gc.c:264
msgid "be more thorough (increased runtime)"
msgstr "cẩn thận hÆ¡n nữa (tăng thá»i gian chạy)"
-#: builtin/gc.c:264
+#: builtin/gc.c:265
msgid "enable auto-gc mode"
msgstr "bật chế độ auto-gc"
-#: builtin/gc.c:265
+#: builtin/gc.c:266
msgid "force running gc even if there may be another gc running"
msgstr "buộc gc chạy ngay cả khi có tiến trình gc khác đang chạy"
-#: builtin/gc.c:305
+#: builtin/gc.c:306
#, c-format
msgid ""
"Auto packing the repository for optimum performance. You may also\n"
@@ -5462,7 +5508,7 @@ msgstr ""
"chi tiết.\n"
#. be quiet on --auto
-#: builtin/gc.c:315
+#: builtin/gc.c:316
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -5470,7 +5516,7 @@ msgstr ""
"gc đang được thực hiện trên máy “%s†pid %<PRIuMAX> (dùng --force nếu không "
"phải thế)"
-#: builtin/gc.c:340
+#: builtin/gc.c:341
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr ""
@@ -5529,11 +5575,11 @@ msgstr "tìm cả trong các tập tin đã bị lỠđi"
#: builtin/grep.c:651
msgid "show non-matching lines"
-msgstr "hiển thị những dòng không khớp với mẫu"
+msgstr "hiển thị những dòng không khớp với mẫu"
#: builtin/grep.c:653
msgid "case insensitive matching"
-msgstr "phân biệt chữ hoa/thÆ°á»ng"
+msgstr "phân biệt HOA/thÆ°á»ng"
#: builtin/grep.c:655
msgid "match patterns only at word boundaries"
@@ -5549,7 +5595,7 @@ msgstr "không khớp mẫu trong các tập tin nhị phân"
#: builtin/grep.c:662
msgid "process binary files with textconv filters"
-msgstr "xá»­ lý tập tin nhị phân vá»›i các bá»™ lá»c `textconv`"
+msgstr "xá»­ lý tập tin nhị phân vá»›i các bá»™ lá»c “textconvâ€"
#: builtin/grep.c:664
msgid "descend at most <depth> levels"
@@ -5634,7 +5680,7 @@ msgstr "hiển thị <n> dòng nội dung sau khớp"
#: builtin/grep.c:709
msgid "shortcut for -C NUM"
-msgstr "Dạng tắt cho -C Sá»"
+msgstr "dạng viết tắt của -C Sá»"
#: builtin/grep.c:712
msgid "show a line with the function name before matches"
@@ -5670,7 +5716,7 @@ msgstr "hiển thị cây phân tích cú pháp cho biểu thức “grep†(tÃ
#: builtin/grep.c:741
msgid "pager"
-msgstr "trang giấy"
+msgstr "giấy"
#: builtin/grep.c:741
msgid "show matching files in the pager"
@@ -5811,57 +5857,57 @@ msgstr ""
"“%sâ€: cmd (lệnh) há»— trợ bá»™ trình chiếu man.\n"
"Hãy cân nhắc đến việc sử dụng “man.<tool>.path†để thay thế."
-#: builtin/help.c:349
+#: builtin/help.c:353
#, c-format
msgid "'%s': unknown man viewer."
msgstr "“%sâ€: không rõ chÆ°Æ¡ng trình xem man."
-#: builtin/help.c:366
+#: builtin/help.c:370
msgid "no man viewer handled the request"
msgstr "không có trình xem trợ giúp dạng manpage tiếp hợp với yêu cầu"
-#: builtin/help.c:374
+#: builtin/help.c:378
msgid "no info viewer handled the request"
msgstr "không có trình xem trợ giúp dạng info tiếp hợp với yêu cầu"
-#: builtin/help.c:420
+#: builtin/help.c:424
msgid "Defining attributes per path"
msgstr "Äịnh nghÄ©a các thuá»™c tính cho má»—i Ä‘Æ°á»ng dẫn"
-#: builtin/help.c:421
+#: builtin/help.c:425
msgid "A Git glossary"
msgstr "Thuật ngữ chuyên môn Git"
-#: builtin/help.c:422
+#: builtin/help.c:426
msgid "Specifies intentionally untracked files to ignore"
msgstr "Chỉ định các tập tin không cần theo dõi"
-#: builtin/help.c:423
+#: builtin/help.c:427
msgid "Defining submodule properties"
msgstr "Äịnh nghÄ©a thuá»™c tính mô-Ä‘un-con"
-#: builtin/help.c:424
+#: builtin/help.c:428
msgid "Specifying revisions and ranges for Git"
msgstr "Chỉ định điểm xét duyệt và vùng cho Git"
-#: builtin/help.c:425
+#: builtin/help.c:429
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "Hướng dẫn cách dùng Git ở mức cơ bản (bản 1.5.1 hay mới hơn)"
-#: builtin/help.c:426
+#: builtin/help.c:430
msgid "An overview of recommended workflows with Git"
msgstr "Tổng quan vỠluồng công việc khuyến nghị nên dùng với Git."
-#: builtin/help.c:438
+#: builtin/help.c:442
msgid "The common Git guides are:\n"
msgstr "Các chỉ dẫn chung vỠcách dùng Git là:\n"
-#: builtin/help.c:460 builtin/help.c:476
+#: builtin/help.c:463 builtin/help.c:480
#, c-format
msgid "usage: %s%s"
msgstr "cách dùng: %s%s"
-#: builtin/help.c:492
+#: builtin/help.c:496
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "“git %s†được đặt bí danh thành “%sâ€"
@@ -5884,7 +5930,7 @@ msgstr[1] "không thể Ä‘iá»n vào %d byte"
#: builtin/index-pack.c:254
msgid "early EOF"
-msgstr "vừa đúng lúc EOF"
+msgstr "gặp kết thúc EOF quá sớm"
#: builtin/index-pack.c:255
msgid "read error on input"
@@ -5948,8 +5994,8 @@ msgstr "không thể chạy hàm pread cho tập tin pack"
#, c-format
msgid "premature end of pack file, %lu byte missing"
msgid_plural "premature end of pack file, %lu bytes missing"
-msgstr[0] "tập tin pack bị kết thúc sớm, %lu byte bị thiếu"
-msgstr[1] "tập tin pack bị kết thúc sớm, %lu byte bị thiếu"
+msgstr[0] "tập tin pack bị kết thúc sớm, thiếu %lu byte"
+msgstr[1] "tập tin pack bị kết thúc sớm, thiếu %lu byte"
#: builtin/index-pack.c:575
msgid "serious inflate inconsistency"
@@ -6009,7 +6055,7 @@ msgstr "pack bị sai há»ng (SHA1 không khá»›p)"
#: builtin/index-pack.c:1041
msgid "cannot fstat packfile"
-msgstr "không thể fstat packfile"
+msgstr "không thể lấy thông tin thống kê packfile"
#: builtin/index-pack.c:1044
msgid "pack has junk at the end"
@@ -6156,17 +6202,17 @@ msgstr "tên mẫu dài một cách điên rồ %s"
#: builtin/init-db.c:67
#, c-format
msgid "cannot stat '%s'"
-msgstr "không thể lấy trạng thái (stat) vỠ“%sâ€"
+msgstr "không thể lấy thông tin thống kê vỠ“%sâ€"
#: builtin/init-db.c:73
#, c-format
msgid "cannot stat template '%s'"
-msgstr "không thể stat (lấy trạng thái vá») mẫu “%sâ€"
+msgstr "không thể lấy thông tin thống kê vá» mẫu “%sâ€"
#: builtin/init-db.c:80
#, c-format
msgid "cannot opendir '%s'"
-msgstr "không thể opendir “%sâ€"
+msgstr "không thể opendir() “%sâ€"
#: builtin/init-db.c:97
#, c-format
@@ -6176,27 +6222,27 @@ msgstr "không thể readlink “%sâ€"
#: builtin/init-db.c:99
#, c-format
msgid "insanely long symlink %s"
-msgstr "liên kết tượng trưng dài một cách điên rồ %s"
+msgstr "liên kết má»m dài má»™t cách Ä‘iên rồ %s"
#: builtin/init-db.c:102
#, c-format
msgid "cannot symlink '%s' '%s'"
-msgstr "không thể tạo liên kết tượng trÆ°ng (symlink) “%s†“%sâ€"
+msgstr "không thể tạo liên kết má»m (symlink) “%s†“%sâ€"
#: builtin/init-db.c:106
#, c-format
msgid "cannot copy '%s' to '%s'"
-msgstr "không thể sao chép %s sang %s"
+msgstr "không thể sao chép “%s†sang “%sâ€"
#: builtin/init-db.c:110
#, c-format
msgid "ignoring template %s"
-msgstr "đang lỠđi mẫu %s"
+msgstr "Ä‘ang lá» Ä‘i mẫu “%sâ€"
#: builtin/init-db.c:133
#, c-format
msgid "insanely long template path %s"
-msgstr "Ä‘Æ°á»ng dẫn mẫu dài má»™t cách Ä‘iên rồ %s"
+msgstr "Ä‘Æ°á»ng dẫn mẫu “%s†dài má»™t cách Ä‘iên rồ"
#: builtin/init-db.c:141
#, c-format
@@ -6221,7 +6267,7 @@ msgstr "%s đã có từ trước rồi"
#: builtin/init-db.c:355
#, c-format
msgid "unable to handle file type %d"
-msgstr "không thể nắm (handle) tập tin kiểu %d"
+msgstr "không thể xử lý (handle) tập tin kiểu %d"
#: builtin/init-db.c:358
#, c-format
@@ -6270,21 +6316,21 @@ msgstr "các quyá»n"
msgid "specify that the git repository is to be shared amongst several users"
msgstr "chỉ ra cái mà kho git được chia sẻ giữa nhiá»u ngÆ°á»i dùng"
-#: builtin/init-db.c:493 builtin/prune-packed.c:75 builtin/repack.c:155
+#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155
msgid "be quiet"
msgstr "im lặng"
-#: builtin/init-db.c:522 builtin/init-db.c:529
+#: builtin/init-db.c:525 builtin/init-db.c:530
#, c-format
msgid "cannot mkdir %s"
msgstr "không thể mkdir (tạo thư mục): %s"
-#: builtin/init-db.c:533
+#: builtin/init-db.c:534
#, c-format
msgid "cannot chdir to %s"
msgstr "không thể chdir (chuyển đổi thư mục) sang %s"
-#: builtin/init-db.c:555
+#: builtin/init-db.c:556
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -6293,11 +6339,11 @@ msgstr ""
"%s (hoặc --work-tree=<thư-mục>) không cho phép không chỉ định %s (hoặc --git-"
"dir=<thư-mục>)"
-#: builtin/init-db.c:579
+#: builtin/init-db.c:580
msgid "Cannot access current working directory"
msgstr "Không thể truy cập thư mục làm việc hiện hành"
-#: builtin/init-db.c:586
+#: builtin/init-db.c:587
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "không thể truy cập cây (tree) làm việc “%sâ€"
@@ -6364,7 +6410,7 @@ msgstr "Không phải là một vùng."
#: builtin/log.c:911
msgid "Cover letter needs email format"
-msgstr "â€Cover letter†cần cho định dạng thÆ°"
+msgstr "“Cover letter†cần cho định dạng thư"
#: builtin/log.c:987
#, c-format
@@ -6555,13 +6601,13 @@ msgstr "git cherry [-v] [<thượng-nguồn> [<head> [<giới-hạn>]]]"
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
msgstr ""
-"Không tìm thấy nhánh mạng bị theo vết, hãy chỉ định <thượng-nguồn> một cách "
-"thủ công.\n"
+"Không tìm thấy nhánh mạng được theo dõi, hãy chỉ định <thượng-nguồn> một "
+"cách thủ công.\n"
#: builtin/log.c:1626 builtin/log.c:1628 builtin/log.c:1640
#, c-format
msgid "Unknown commit %s"
-msgstr "Không hiểu lần chuyển giao (commit) %s"
+msgstr "Không hiểu lần chuyển giao %s"
#: builtin/ls-files.c:398
msgid "git ls-files [options] [<file>...]"
@@ -6599,7 +6645,7 @@ msgstr "hiển thị các tập tin bị bỠqua trong kết xuất"
#: builtin/ls-files.c:470
msgid "show staged contents' object name in the output"
-msgstr "hiển thị tên đối tượng của nội dung được lưu trạng thái ở kết xuất"
+msgstr "hiển thị tên đối tượng của nội dung được đặt lên bệ phóng ra kết xuất"
#: builtin/ls-files.c:472
msgid "show files on the filesystem that need to be removed"
@@ -6725,151 +6771,151 @@ msgstr "Các chiến lược sẵn sàng là:"
msgid "Available custom strategies are:"
msgstr "Các chiến lược tùy chỉnh sẵn sàng là:"
-#: builtin/merge.c:198
+#: builtin/merge.c:191
msgid "do not show a diffstat at the end of the merge"
msgstr "không hiển thị thống kê khác biệt tại cuối của lần hòa trộn"
-#: builtin/merge.c:201
+#: builtin/merge.c:194
msgid "show a diffstat at the end of the merge"
msgstr "hiển thị thống kê khác biệt tại cuối của hòa trộn"
-#: builtin/merge.c:202
+#: builtin/merge.c:195
msgid "(synonym to --stat)"
msgstr "(đồng nghĩa với --stat)"
-#: builtin/merge.c:204
+#: builtin/merge.c:197
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr "thêm (ít nhất <n>) mục từ shortlog cho ghi chú chuyển giao hòa trộn"
-#: builtin/merge.c:207
+#: builtin/merge.c:200
msgid "create a single commit instead of doing a merge"
-msgstr "tạo một lần chuyển giao (commit) đưon thay vì thực hiện việc hòa trộn"
+msgstr "tạo một lần chuyển giao đưon thay vì thực hiện việc hòa trộn"
-#: builtin/merge.c:209
+#: builtin/merge.c:202
msgid "perform a commit if the merge succeeds (default)"
msgstr "thực hiện chuyển giao nếu hòa trộn thành công (mặc định)"
-#: builtin/merge.c:211
+#: builtin/merge.c:204
msgid "edit message before committing"
-msgstr "sửa chú thích trước khi chuyển giao (commit)"
+msgstr "sửa chú thích trước khi chuyển giao"
-#: builtin/merge.c:212
+#: builtin/merge.c:205
msgid "allow fast-forward (default)"
msgstr "cho phép fast-forward (mặc định)"
-#: builtin/merge.c:214
+#: builtin/merge.c:207
msgid "abort if fast-forward is not possible"
msgstr "bỠqua nếu fast-forward không thể được"
-#: builtin/merge.c:218
+#: builtin/merge.c:211
msgid "Verify that the named commit has a valid GPG signature"
msgstr "Thẩm tra xem lần chuyển giao có tên đó có chữ ký GPG hợp lệ hay không"
-#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:89
+#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89
msgid "strategy"
msgstr "chiến lược"
-#: builtin/merge.c:220
+#: builtin/merge.c:213
msgid "merge strategy to use"
msgstr "chiến lược hòa trộn sẽ dùng"
-#: builtin/merge.c:221
+#: builtin/merge.c:214
msgid "option=value"
msgstr "tùy_chá»n=giá_trị"
-#: builtin/merge.c:222
+#: builtin/merge.c:215
msgid "option for selected merge strategy"
msgstr "tùy chá»n cho chiến lược hòa trá»™n đã chá»n"
-#: builtin/merge.c:224
+#: builtin/merge.c:217
msgid "merge commit message (for a non-fast-forward merge)"
msgstr ""
"hòa trộn ghi chú của lần chuyển giao (dành cho hòa trộn non-fast-forward)"
-#: builtin/merge.c:228
+#: builtin/merge.c:221
msgid "abort the current in-progress merge"
msgstr "bãi bỠquá trình hòa trộn hiện tại đang thực hiện"
-#: builtin/merge.c:257
+#: builtin/merge.c:250
msgid "could not run stash."
msgstr "không thể chạy stash."
-#: builtin/merge.c:262
+#: builtin/merge.c:255
msgid "stash failed"
msgstr "stash gặp lỗi"
-#: builtin/merge.c:267
+#: builtin/merge.c:260
#, c-format
msgid "not a valid object: %s"
msgstr "không phải là một đối tượng hợp lệ: %s"
-#: builtin/merge.c:286 builtin/merge.c:303
+#: builtin/merge.c:279 builtin/merge.c:296
msgid "read-tree failed"
msgstr "read-tree gặp lỗi"
-#: builtin/merge.c:333
+#: builtin/merge.c:326
msgid " (nothing to squash)"
msgstr " (không có gì để squash)"
-#: builtin/merge.c:346
+#: builtin/merge.c:339
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "Squash commit -- không cập nhật HEAD\n"
-#: builtin/merge.c:378
+#: builtin/merge.c:371
msgid "Writing SQUASH_MSG"
msgstr "Äang ghi SQUASH_MSG"
-#: builtin/merge.c:380
+#: builtin/merge.c:373
msgid "Finishing SQUASH_MSG"
msgstr "Hoàn thành SQUASH_MSG"
-#: builtin/merge.c:403
+#: builtin/merge.c:396
#, c-format
msgid "No merge message -- not updating HEAD\n"
-msgstr "Không thông điệp hòa trộn -- không cập nhật HEAD\n"
+msgstr "Không có lá»i chú thích hòa trá»™n -- nên không cập nhật HEAD\n"
-#: builtin/merge.c:453
+#: builtin/merge.c:446
#, c-format
msgid "'%s' does not point to a commit"
-msgstr "“%s†không chỉ đến một lần chuyển giao (commit) nào cả"
+msgstr "“%s†không chỉ đến một lần chuyển giao nào cả"
-#: builtin/merge.c:565
+#: builtin/merge.c:558
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Chuá»—i branch.%s.mergeoptions sai: %s"
-#: builtin/merge.c:657
+#: builtin/merge.c:650
msgid "git write-tree failed to write a tree"
msgstr "lệnh git write-tree gặp lỗi khi ghi một cây"
-#: builtin/merge.c:685
+#: builtin/merge.c:678
msgid "Not handling anything other than two heads merge."
msgstr "Không cầm nắm gì ngoài hai head hòa trộn"
-#: builtin/merge.c:699
+#: builtin/merge.c:692
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Không hiểu tùy chá»n cho merge-recursive: -X%s"
-#: builtin/merge.c:713
+#: builtin/merge.c:706
#, c-format
msgid "unable to write %s"
msgstr "không thể ghi %s"
-#: builtin/merge.c:802
+#: builtin/merge.c:795
#, c-format
msgid "Could not read from '%s'"
msgstr "Không thể Ä‘á»c từ “%sâ€"
-#: builtin/merge.c:811
+#: builtin/merge.c:804
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr ""
-"Vẫn chưa hòa trộn các lần chuyển giao (commit); sử dụng lệnh “git commit†để "
-"hoàn tất việc hòa trộn.\n"
+"Vẫn chưa hòa trộn các lần chuyển giao; sử dụng lệnh “git commit†để hoàn tất "
+"việc hòa trộn.\n"
-#: builtin/merge.c:817
+#: builtin/merge.c:810
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -6880,216 +6926,220 @@ msgid ""
msgstr ""
"Hãy nhập vào các thông tin để giải thích tại sao sự hòa trộn này là cần "
"thiết,\n"
-"đặc biệt là khi nó hòa trộn ngược dòng đã cập nhật vào trong một nhánh "
+"đặc biệt là khi nó hòa trộn thượng nguồn đã cập nhật vào trong một nhánh "
"topic.\n"
"\n"
"Những dòng được bắt đầu bằng “%c†sẽ được bỠqua, và phần chú thích này nếu "
"rá»—ng\n"
-"sẽ hủy bỠlần chuyển giao (commit).\n"
+"sẽ hủy bỠlần chuyển giao.\n"
-#: builtin/merge.c:841
+#: builtin/merge.c:834
msgid "Empty commit message."
msgstr "Chú thích của lần commit (chuyển giao) bị trống rỗng."
-#: builtin/merge.c:853
+#: builtin/merge.c:846
#, c-format
msgid "Wonderful.\n"
msgstr "Thần kỳ.\n"
-#: builtin/merge.c:918
+#: builtin/merge.c:911
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
-"Việc tự động hòa trộn gặp lỗi; hãy sửa các xung đột sau đó chuyển giao "
-"(commit) kết quả.\n"
+"Việc tự động hòa trộn gặp lỗi; hãy sửa các xung đột sau đó chuyển giao kết "
+"quả.\n"
-#: builtin/merge.c:934
+#: builtin/merge.c:927
#, c-format
msgid "'%s' is not a commit"
msgstr "%s không phải là một lần commit (chuyển giao)"
-#: builtin/merge.c:975
+#: builtin/merge.c:968
msgid "No current branch."
msgstr "không phải nhánh hiện hành"
-#: builtin/merge.c:977
+#: builtin/merge.c:970
msgid "No remote for the current branch."
msgstr "Không có máy chủ cho nhánh hiện hành."
-#: builtin/merge.c:979
+#: builtin/merge.c:972
msgid "No default upstream defined for the current branch."
msgstr "Không có thượng nguồn mặc định được định nghĩa cho nhánh hiện hành."
-#: builtin/merge.c:984
+#: builtin/merge.c:977
#, c-format
msgid "No remote-tracking branch for %s from %s"
-msgstr "Không nhánh mạng theo vết cho %s từ %s"
+msgstr "Không nhánh mạng theo dõi cho %s từ %s"
-#: builtin/merge.c:1140
+#: builtin/merge.c:1133
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr ""
"Ở đây không có lần hòa trộn nào được hủy bỠgiữa chừng cả (thiếu MERGE_HEAD)."
-#: builtin/merge.c:1156 git-pull.sh:31
+#: builtin/merge.c:1149 git-pull.sh:31
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you can merge."
msgstr ""
"Bạn chưa kết thúc việc hòa trộng (MERGE_HEAD vẫn tồn tại).\n"
-"Hãy chuyển giao (commit) các thay đổi trước khi bạn có thể hòa trộn."
+"Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
-#: builtin/merge.c:1159 git-pull.sh:34
+#: builtin/merge.c:1152 git-pull.sh:34
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Bạn chưa kết thúc việc hòa trộng (MERGE_HEAD vẫn tồn tại)."
-#: builtin/merge.c:1163
+#: builtin/merge.c:1156
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you can merge."
msgstr ""
"Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại).\n"
-"Hãy chuyển giao (commit) các thay đổi trước khi bạn có thể hòa trộn."
+"Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
-#: builtin/merge.c:1166
+#: builtin/merge.c:1159
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại)."
-#: builtin/merge.c:1175
+#: builtin/merge.c:1168
msgid "You cannot combine --squash with --no-ff."
msgstr "Bạn không thể kết hợp --squash với --no-ff."
-#: builtin/merge.c:1184
+#: builtin/merge.c:1177
msgid "No commit specified and merge.defaultToUpstream not set."
-msgstr ""
-"Không chỉ ra lần chuyển giao (commit) và merge.defaultToUpstream chưa được "
-"đặt."
+msgstr "Không chỉ ra lần chuyển giao và merge.defaultToUpstream chưa được đặt."
-#: builtin/merge.c:1216
+#: builtin/merge.c:1209
msgid "Can merge only exactly one commit into empty head"
msgstr ""
-"Không thể hòa trộn một cách đúng đắn một lần chuyển giao (commit) vào một "
-"head rá»—ng"
+"Không thể hòa trộn một cách đúng đắn một lần chuyển giao vào một head rỗng"
-#: builtin/merge.c:1219
+#: builtin/merge.c:1212
msgid "Squash commit into empty head not supported yet"
msgstr "Squash commit vào một head trống rỗng vẫn chưa được hỗ trợ"
-#: builtin/merge.c:1221
+#: builtin/merge.c:1214
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr ""
-"Chuyển giao (commit) không-fast-forward không hợp lý ở trong một head trống "
-"rá»—ng"
+"Chuyển giao không-fast-forward không hợp lý ở trong một head trống rỗng"
-#: builtin/merge.c:1226
+#: builtin/merge.c:1219
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - không phải là một số thứ chúng tôi có thể hòa trộn"
-#: builtin/merge.c:1277
+#: builtin/merge.c:1270
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Lần chuyển giao %s có một chữ ký GPG không đáng tin, được cho là bởi %s."
-#: builtin/merge.c:1280
+#: builtin/merge.c:1273
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "Lần chuyển giao %s có một chữ ký GPG sai, được cho là bởi %s."
#. 'N'
-#: builtin/merge.c:1283
+#: builtin/merge.c:1276
#, c-format
msgid "Commit %s does not have a GPG signature."
-msgstr "Lần chuyển giao (commit) %s không có chữ ký GPG."
+msgstr "Lần chuyển giao %s không có chữ ký GPG."
-#: builtin/merge.c:1286
+#: builtin/merge.c:1279
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Lần chuyển giao %s có một chữ ký GPG tốt bởi %s\n"
-#: builtin/merge.c:1370
+#: builtin/merge.c:1363
#, c-format
msgid "Updating %s..%s\n"
msgstr "Äang cập nhật %s..%s\n"
-#: builtin/merge.c:1409
+#: builtin/merge.c:1402
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Äang thá»­ hòa trá»™n kiểu “trivial in-indexâ€...\n"
-#: builtin/merge.c:1416
+#: builtin/merge.c:1409
#, c-format
msgid "Nope.\n"
msgstr "Không.\n"
-#: builtin/merge.c:1448
+#: builtin/merge.c:1441
msgid "Not possible to fast-forward, aborting."
msgstr "Thực hiện lệnh fast-forward là không thể được, đang bỠqua."
-#: builtin/merge.c:1471 builtin/merge.c:1550
+#: builtin/merge.c:1464 builtin/merge.c:1543
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Äang tua lại cây thành thá»i xa xÆ°a...\n"
-#: builtin/merge.c:1475
+#: builtin/merge.c:1468
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Äang thá»­ chiến lược hòa trá»™n %s...\n"
-#: builtin/merge.c:1541
+#: builtin/merge.c:1534
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Không có chiến lược hòa trộn nào được nắm giữ (handle) sự hòa trộn.\n"
-#: builtin/merge.c:1543
+#: builtin/merge.c:1536
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Hòa trộn với chiến lược %s gặp lỗi.\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1545
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Sử dụng %s để chuẩn bị giải quyết bằng tay.\n"
-#: builtin/merge.c:1564
+#: builtin/merge.c:1557
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
"Hòa trộn tự động đã trở nên tốt; bị dừng trước khi việc chuyển giao được yêu "
"cầu\n"
-#: builtin/merge-base.c:26
+#: builtin/merge-base.c:29
msgid "git merge-base [-a|--all] <commit> <commit>..."
-msgstr "git merge-base [-a|--all] <commit> <commit>..."
+msgstr "git merge-base [-a|--all] <commit> <lần_chuyển_giao>..."
-#: builtin/merge-base.c:27
+#: builtin/merge-base.c:30
msgid "git merge-base [-a|--all] --octopus <commit>..."
-msgstr "git merge-base [-a|--all] --octopus <lần commit>..."
+msgstr "git merge-base [-a|--all] --octopus <lần_chuyển_giao>..."
-#: builtin/merge-base.c:28
+#: builtin/merge-base.c:31
msgid "git merge-base --independent <commit>..."
-msgstr "git merge-base --independent <lần commit>..."
+msgstr "git merge-base --independent <lần_chuyển_giao>..."
-#: builtin/merge-base.c:29
+#: builtin/merge-base.c:32
msgid "git merge-base --is-ancestor <commit> <commit>"
-msgstr "git merge-base --is-ancestor <commit> <commit>"
+msgstr "git merge-base --is-ancestor <commit> <lần_chuyển_giao>"
+
+#: builtin/merge-base.c:33
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr "git merge-base --fork-point <tham-chiếu> [<lần_chuyển_giao>]"
-#: builtin/merge-base.c:98
+#: builtin/merge-base.c:214
msgid "output all common ancestors"
msgstr "xuất ra tất cả các ông bà, tổ tiên chung"
-#: builtin/merge-base.c:99
+#: builtin/merge-base.c:216
msgid "find ancestors for a single n-way merge"
msgstr "tìm tổ tiên của hòa trộn n-way đơn"
-#: builtin/merge-base.c:100
+#: builtin/merge-base.c:218
msgid "list revs not reachable from others"
msgstr "liệt kê các “rev†mà nó không thể Ä‘á»c được từ cái khác"
-#: builtin/merge-base.c:102
+#: builtin/merge-base.c:220
msgid "is the first one ancestor of the other?"
msgstr "là cha mẹ đầu tiên của cái khác?"
+#: builtin/merge-base.c:222
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr "tìm xem <commit> được rẽ nhánh ở đâu từ reflog của <th.chiếu>"
+
#: builtin/merge-file.c:8
msgid ""
"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
@@ -7150,125 +7200,129 @@ msgstr "cho phép tạo nhiá»u hÆ¡n má»™t cây"
msgid "git mv [options] <source>... <destination>"
msgstr "git mv [các-tùy-chá»n] <nguồn>... <đích>"
-#: builtin/mv.c:67
+#: builtin/mv.c:71
msgid "force move/rename even if target exists"
msgstr "ép buộc di chuyển hay đổi tên thậm chí cả khi đích đã tồn tại"
-#: builtin/mv.c:68
+#: builtin/mv.c:72
msgid "skip move/rename errors"
msgstr "bỠqua các lỗi liên quan đến di chuyển, đổi tên"
-#: builtin/mv.c:113
+#: builtin/mv.c:122
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Äang kiểm tra việc đổi tên của “%s†thành “%sâ€\n"
-#: builtin/mv.c:117
+#: builtin/mv.c:126
msgid "bad source"
msgstr "nguồn sai"
-#: builtin/mv.c:120
+#: builtin/mv.c:129
msgid "can not move directory into itself"
msgstr "không thể di chuyển một thư mục vào trong chính nó được"
-#: builtin/mv.c:123
+#: builtin/mv.c:132
msgid "cannot move directory over file"
msgstr "không di chuyển được thư mục thông qua tập tin"
-#: builtin/mv.c:129
+#: builtin/mv.c:138
#, c-format
msgid "Huh? Directory %s is in index and no submodule?"
msgstr "Hả? Thư mục “%s†trong chỉ mục và không mô-đun con?"
-#: builtin/mv.c:131 builtin/rm.c:318
+#: builtin/mv.c:140 builtin/rm.c:318
msgid "Please, stage your changes to .gitmodules or stash them to proceed"
msgstr ""
-"Hãy lưu các thay đổi của bạn vào “.gitmodules†hay ghi vào vùng nhớ tạm "
-"(stash) chúng để xử lý"
+"Vui lòng đưa các thay đổi của bạn vào “.gitmodules†hay tạm cất chúng đi để "
+"xử lý"
-#: builtin/mv.c:147
+#: builtin/mv.c:156
#, c-format
msgid "Huh? %.*s is in index?"
msgstr "Hả? %.*s trong bảng mục lục à?"
-#: builtin/mv.c:159
+#: builtin/mv.c:168
msgid "source directory is empty"
msgstr "thư mục nguồn là trống rỗng"
-#: builtin/mv.c:191
+#: builtin/mv.c:200
msgid "not under version control"
msgstr "không nằm dưới sự quản lý mã nguồn"
-#: builtin/mv.c:193
+#: builtin/mv.c:202
msgid "destination exists"
msgstr "đích đã tồn tại sẵn rồi"
-#: builtin/mv.c:201
+#: builtin/mv.c:210
#, c-format
msgid "overwriting '%s'"
msgstr "Ä‘ang ghi đè lên “%sâ€"
-#: builtin/mv.c:204
+#: builtin/mv.c:213
msgid "Cannot overwrite"
msgstr "Không thể ghi đè"
-#: builtin/mv.c:207
+#: builtin/mv.c:216
msgid "multiple sources for the same target"
msgstr "Nhiá»u nguồn cho cùng má»™t đích"
-#: builtin/mv.c:222
+#: builtin/mv.c:218
+msgid "destination directory does not exist"
+msgstr "thư mục đích không tồn tại"
+
+#: builtin/mv.c:233
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, nguồn=%s, đích=%s"
-#: builtin/mv.c:232
+#: builtin/mv.c:243
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Äổi tên %s thành %s\n"
-#: builtin/mv.c:235 builtin/remote.c:731 builtin/repack.c:330
+#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328
#, c-format
msgid "renaming '%s' failed"
-msgstr "đổi tên %s gặp lỗi"
+msgstr "gặp lá»—i khi đổi tên “%sâ€"
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [options] <commit>..."
msgstr "git name-rev [các-tùy-chá»n] <commit>..."
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [options] --all"
msgstr "git name-rev [các-tùy-chá»n] --all"
-#: builtin/name-rev.c:261
+#: builtin/name-rev.c:260
msgid "git name-rev [options] --stdin"
msgstr "git name-rev [các-tùy-chá»n] --stdin"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "print only names (no SHA-1)"
msgstr "chỉ hiển thị tên (không SHA-1)"
-#: builtin/name-rev.c:314
+#: builtin/name-rev.c:313
msgid "only use tags to name the commits"
msgstr "chỉ dùng các thẻ để đặt tên cho các lần chuyển giao"
-#: builtin/name-rev.c:316
+#: builtin/name-rev.c:315
msgid "only use refs matching <pattern>"
msgstr "chỉ sử dụng các tham chiếu (refs) khớp với <mẫu>"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "list all commits reachable from all refs"
msgstr ""
"liệt kê tất cả các lần chuyển giao có thể Ä‘á»c được từ tất cả các tham chiếu"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "read from stdin"
msgstr "Ä‘á»c từ đầu vào tiêu chuẩn"
-#: builtin/name-rev.c:320
+#: builtin/name-rev.c:319
msgid "allow to print `undefined` names (default)"
msgstr "cho phép in các tên “chưa định nghĩa†(mặc định)"
-#: builtin/name-rev.c:326
+#: builtin/name-rev.c:325
msgid "dereference tags in the input (internal use)"
msgstr "bãi bỠtham chiếu các thẻ trong đầu vào (dùng nội bộ)"
@@ -7527,7 +7581,7 @@ msgstr ""
#: builtin/notes.c:539
#, c-format
msgid "Missing notes on source object %s. Cannot copy."
-msgstr "Thiếu ghi chú trên đối tượng nguốn %s. Không thể sao chép."
+msgstr "Thiếu ghi chú trên đối tượng nguồn %s. Không thể sao chép."
#: builtin/notes.c:588
#, c-format
@@ -7593,7 +7647,7 @@ msgstr "notes_ref"
msgid "use notes from <notes_ref>"
msgstr "dùng “notes†từ <notes_ref>"
-#: builtin/notes.c:974 builtin/remote.c:1598
+#: builtin/notes.c:974 builtin/remote.c:1593
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Không hiểu câu lệnh con: %s"
@@ -7615,144 +7669,144 @@ msgstr ""
msgid "deflate error (%d)"
msgstr "lỗi giải nén (%d)"
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2396
#, c-format
msgid "unsupported index version %s"
msgstr "phiên bản mục lục không được hỗ trợ %s"
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2400
#, c-format
msgid "bad index version '%s'"
msgstr "phiên bản mục lục sai “%sâ€"
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2423
#, c-format
msgid "option %s does not accept negative form"
msgstr "tùy chá»n %s không chấp nhận dạng thức âm"
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2427
#, c-format
msgid "unable to parse value '%s' for option %s"
msgstr "không thể phân tích giá trị “%s†cho tùy chá»n %s"
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2446
msgid "do not show progress meter"
msgstr "không hiển thị bộ đo tiến trình"
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2448
msgid "show progress meter"
msgstr "hiển thị bộ đo tiến trình"
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2450
msgid "show progress meter during object writing phase"
msgstr "hiển thị bộ đo tiến triển trong suốt pha ghi đối tượng"
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2453
msgid "similar to --all-progress when progress meter is shown"
msgstr "tương tự --all-progress khi bộ đo tiến trình được xuất hiện"
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2454
msgid "version[,offset]"
msgstr "phiên bản[,offset]"
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2455
msgid "write the pack index file in the specified idx format version"
msgstr "ghi tập tin bảng mục lục gói (pack) ở phiên bản định dạng idx đã cho"
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2458
msgid "maximum size of each output pack file"
msgstr "kcíh thước tối đa cho tập tin gói được tạo"
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2460
msgid "ignore borrowed objects from alternate object store"
msgstr "bỠqua các đối tượng vay mượn từ kho đối tượng thay thế"
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2462
msgid "ignore packed objects"
msgstr "bỠqua các đối tượng đóng gói"
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2464
msgid "limit pack window by objects"
msgstr "giới hạn cửa sổ đóng gói theo đối tượng"
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2466
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"
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2468
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ả"
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2470
msgid "reuse existing deltas"
msgstr "dùng lại các delta sẵn có"
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2472
msgid "reuse existing objects"
msgstr "dùng lại các đối tượng sẵn có"
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2474
msgid "use OFS_DELTA objects"
msgstr "dùng các đối tượng OFS_DELTA"
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2476
msgid "use threads when searching for best delta matches"
msgstr "sử dụng các tuyến trình khi tìm kiếm cho các mẫu khớp delta tốt nhất"
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2478
msgid "do not create an empty pack output"
msgstr "không thể tạo kết xuất gói (pack) trống rỗng"
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2480
msgid "read revision arguments from standard input"
msgstr " Ä‘á»c tham số “revision†từ thiết bị nhập chuẩn"
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2482
msgid "limit the objects to those that are not yet packed"
msgstr "giới hạn các đối tượng thành những cái mà chúng vẫn chưa được đóng gói"
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2485
msgid "include objects reachable from any reference"
msgstr "bao gồm các đối tượng có thể Ä‘á»c được từ bất kỳ tham chiếu nào"
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2488
msgid "include objects referred by reflog entries"
msgstr "bao gồm các đối tượng được tham chiếu bởi các mục reflog"
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2491
msgid "output pack to stdout"
msgstr "xuất gói ra đầu ra tiêu chuẩn"
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2493
msgid "include tag objects that refer to objects to be packed"
msgstr "bao gồm các đối tượng tham chiếu đến các đối tượng được đóng gói"
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2495
msgid "keep unreachable objects"
msgstr "giữ lại các đối tượng không thể Ä‘á»c được"
-#: builtin/pack-objects.c:2498 parse-options.h:143
+#: builtin/pack-objects.c:2496 parse-options.h:143
msgid "time"
msgstr "thá»i-gian"
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2497
msgid "unpack unreachable objects newer than <time>"
msgstr ""
"xả nén (gỡ khá»i gói) các đối tượng không thể Ä‘á»c được má»›i hÆ¡n <thá»i-gian>"
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2500
msgid "create thin packs"
msgstr "tạo gói nhẹ"
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2502
msgid "ignore packs that have companion .keep file"
msgstr "bỠqua các gói mà nó có tập tin .keep đi kèm"
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2504
msgid "pack compression level"
msgstr "mức nén gói"
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2506
msgid "do not hide commits by grafts"
msgstr "không ẩn các lần chuyển giao bởi “graftsâ€"
@@ -7776,15 +7830,15 @@ msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]"
msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
msgstr "git prune [-n] [-v] [--expire <thá»i-gian>] [--] [<head>...]"
-#: builtin/prune.c:132
+#: builtin/prune.c:142
msgid "do not remove, show only"
msgstr "không gỡ bá», chỉ hiển thị"
-#: builtin/prune.c:133
+#: builtin/prune.c:143
msgid "report pruned objects"
msgstr "báo cáo các đối tượng đã prune"
-#: builtin/prune.c:136
+#: builtin/prune.c:146
msgid "expire objects older than <time>"
msgstr "các đối tượng hết hạn cÅ© hÆ¡n khoảng <thá»i gian>"
@@ -7792,15 +7846,15 @@ msgstr "các đối tượng hết hạn cÅ© hÆ¡n khoảng <thá»i gian>"
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr "git push [<các-tùy-chá»n>] [<kho-chứa> [<refspec>...]]"
-#: builtin/push.c:47
+#: builtin/push.c:86
msgid "tag shorthand without <tag>"
msgstr "dùng tốc ký tag không có <thẻ>"
-#: builtin/push.c:66
+#: builtin/push.c:96
msgid "--delete only accepts plain target ref names"
msgstr "--delete chỉ chấp nhận các tên tham chiếu (ref) dạng thÆ°á»ng"
-#: builtin/push.c:101
+#: builtin/push.c:141
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
@@ -7809,7 +7863,7 @@ msgstr ""
"Äể chá»n má»—i tùy chá»n má»™t cách cố định, xem push.default trong “git help "
"configâ€."
-#: builtin/push.c:104
+#: builtin/push.c:144
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -7823,7 +7877,7 @@ msgid ""
" git push %s %s\n"
"%s"
msgstr ""
-"Nhánh thượng nguồn (upstream) của nhánh hiện tại của bạn không khớp\n"
+"Nhánh thượng nguồn của nhánh hiện tại của bạn không khớp\n"
"vá»›i tên của nhánh hiện tại của bạn. Äể push đến nhánh thượng nguồn\n"
"trên máy chủ, sử dụng\n"
"\n"
@@ -7834,7 +7888,7 @@ msgstr ""
" git push %s %s\n"
"%s"
-#: builtin/push.c:119
+#: builtin/push.c:159
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -7849,7 +7903,7 @@ msgstr ""
"\n"
" git push %s HEAD:<tên-của-nhánh-máy-chủ>\n"
-#: builtin/push.c:133
+#: builtin/push.c:173
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -7857,18 +7911,18 @@ msgid ""
"\n"
" git push --set-upstream %s %s\n"
msgstr ""
-"Nhánh hiện tại %s không có nhánh thượng nguồn (upstream) nào.\n"
-"Äể push (đẩy lên) nhánh hiện tại và đặt máy chủ nhÆ° là thượng nguồn "
+"Nhánh hiện tại %s không có nhánh thượng nguồn nào.\n"
+"Äể push (đẩy lên) nhánh hiện tại và đặt máy chủ này làm thượng nguồn "
"(upstream), sử dụng\n"
"\n"
" git push --set-upstream %s %s\n"
-#: builtin/push.c:141
+#: builtin/push.c:181
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
-msgstr "Nhánh hiện tại %s có đa nhánh thượng nguồn (upstream), từ chối push."
+msgstr "Nhánh hiện tại %s có nhiá»u nhánh thượng nguồn, từ chối push."
-#: builtin/push.c:144
+#: builtin/push.c:184
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -7880,7 +7934,7 @@ msgstr ""
"nhánh hiện tại “%s†của bạn, mà không báo cho tôi biết là cái gì được push\n"
"để cập nhật nhánh máy chủ nào."
-#: builtin/push.c:167
+#: builtin/push.c:207
msgid ""
"push.default is unset; its implicit value is changing in\n"
"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7892,6 +7946,13 @@ msgid ""
"\n"
" git config --global push.default simple\n"
"\n"
+"When push.default is set to 'matching', git will push local branches\n"
+"to the remote branches that already exist with the same name.\n"
+"\n"
+"In Git 2.0, Git will default to the more conservative 'simple'\n"
+"behavior, which only pushes the current branch to the corresponding\n"
+"remote branch that 'git pull' uses to update the current branch.\n"
+"\n"
"See 'git help config' and search for 'push.default' for further "
"information.\n"
"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
@@ -7899,28 +7960,36 @@ msgid ""
msgstr ""
"biến push.default chưa được đặt; giá trị ngầm định của nó\n"
"đã được thay đổi trong Git 2.0 từ “matching†thành “simpleâ€.\n"
-"Äể không hiển thị nhắc nhở này và duy trì cách xá»­ lý sau\n"
-"những thay đổi mặc định này, hãy chạy lệnh:\n"
+"Äể không hiển thị nhắc nhở này và duy trì cách xá»­ lý hiện nay sau thay đổi "
+"mặc định,\n"
+"hãy chạy lệnh:\n"
"\n"
" git config --global push.default matching\n"
"\n"
-"Äể không hiển thị nhắc nhở này và áp dụng cách xá»­ lý má»›i, hãy chạy lệnh:\n"
+"Äể không hiển thị nhắc nhở này và áp dụng cách ứng xá»­ má»›i, hãy chạy lệnh:\n"
"\n"
" git config --global push.default simple\n"
"\n"
+"Khi push.default được đặt thành “matchingâ€, git sẽ đẩy các nhánh ná»™i bá»™\n"
+"lên các nhánh trên máy chủ, cái mà có cùng tên.\n"
+"\n"
+"Trong 2.0, Git sẽ mặc định duy trì các ứng xá»­ “simpleâ€,\n"
+"cái này chỉ đẩy những nhánh hiện hành lên các nhánh tương ứng\n"
+"trên máy chủ cái mà lệnh “git pull†dùng để cập nhật nhánh hiện tại.\n"
+"\n"
"Xem “git help config†và tìm đến “push.default†để có thêm thông tin.\n"
"(chế độ “simple†được bắt đầu sử dụng từ Git 1.7.11. Sử dụng chế độ tương "
"tá»±\n"
"“current†thay vì “simple†nếu bạn thỉnh thoảng phải sử dụng bản Git cũ)"
-#: builtin/push.c:227
+#: builtin/push.c:274
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr ""
"Bạn đã không chỉ ra một refspecs nào để push, và push.default là \"không là "
"gì cả\"."
-#: builtin/push.c:234
+#: builtin/push.c:281
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -7934,7 +8003,7 @@ msgstr ""
"Xem “Note about fast-forwards†từ lệnh “git push --help†để có thông tin chi "
"tiết."
-#: builtin/push.c:240
+#: builtin/push.c:287
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. If you did not intend to push that branch, you may want to\n"
@@ -7949,7 +8018,7 @@ msgstr ""
"thành “simpleâ€, “current†hoặc “upstream†để chỉ push nhánh hiện hành mà "
"thôi."
-#: builtin/push.c:246
+#: builtin/push.c:293
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -7963,7 +8032,7 @@ msgstr ""
"Xem “Note about fast-forwards†từ lệnh “git push --help†để có thông tin chi "
"tiết."
-#: builtin/push.c:252
+#: builtin/push.c:299
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -7978,11 +8047,11 @@ msgstr ""
"Xem “Note about fast-forwards†từ lệnh “git push --help†để có thông tin chi "
"tiết."
-#: builtin/push.c:259
+#: builtin/push.c:306
msgid "Updates were rejected because the tag already exists in the remote."
msgstr "Việc cập nhật bị từ chối bởi vì thẻ đã sẵn có từ trước trên máy chủ."
-#: builtin/push.c:262
+#: builtin/push.c:309
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
@@ -7994,22 +8063,22 @@ msgstr ""
"tượng\n"
"không phải chuyển giao, mà không sá»­ dụng tùy chá»n “--forceâ€.\n"
-#: builtin/push.c:328
+#: builtin/push.c:375
#, c-format
msgid "Pushing to %s\n"
msgstr "Äang push (đẩy) lên %s\n"
-#: builtin/push.c:332
+#: builtin/push.c:379
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "gặp lá»—i khi push (đẩy lên) má»™t số tham chiếu (ref) đến “%sâ€"
-#: builtin/push.c:365
+#: builtin/push.c:412
#, c-format
msgid "bad repository '%s'"
msgstr "repository (kho) sai “%sâ€"
-#: builtin/push.c:366
+#: builtin/push.c:413
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -8030,96 +8099,95 @@ msgstr ""
"\n"
" git push <tên>\n"
-#: builtin/push.c:381
+#: builtin/push.c:428
msgid "--all and --tags are incompatible"
msgstr "--all và --tags xung khắc nhau"
-#: builtin/push.c:382
+#: builtin/push.c:429
msgid "--all can't be combined with refspecs"
msgstr "--all không thể được tổ hợp cùng vá»›i đặc tả Ä‘Æ°á»ng dẫn"
-#: builtin/push.c:387
+#: builtin/push.c:434
msgid "--mirror and --tags are incompatible"
msgstr "--mirror và --tags xung khắc nhau"
-#: builtin/push.c:388
+#: builtin/push.c:435
msgid "--mirror can't be combined with refspecs"
msgstr "--mirror không thể được tổ hợp cùng vá»›i đặc tả Ä‘Æ°á»ng dẫn"
-#: builtin/push.c:393
+#: builtin/push.c:440
msgid "--all and --mirror are incompatible"
msgstr "--all và --mirror xung khắc nhau"
-#: builtin/push.c:453
+#: builtin/push.c:500
msgid "repository"
msgstr "kho"
-#: builtin/push.c:454
+#: builtin/push.c:501
msgid "push all refs"
-msgstr "push tất cả refs"
+msgstr "push tất cả các tham chiếu"
-#: builtin/push.c:455
+#: builtin/push.c:502
msgid "mirror all refs"
msgstr "mirror tất cả các tham chiếu"
-#: builtin/push.c:457
+#: builtin/push.c:504
msgid "delete refs"
-msgstr "xóa refs"
+msgstr "xóa các tham chiếu"
-#: builtin/push.c:458
+#: builtin/push.c:505
msgid "push tags (can't be used with --all or --mirror)"
-msgstr ""
-"các thẻ push (không thể sá»­ dụng cùng vá»›i các tùy chá»n --all hay --mirror)"
+msgstr "push các thẻ (không dùng cùng với --all hay --mirror)"
-#: builtin/push.c:461
+#: builtin/push.c:508
msgid "force updates"
msgstr "ép buộc cập nhật"
-#: builtin/push.c:463
+#: builtin/push.c:510
msgid "refname>:<expect"
msgstr "tên-tham-chiếu>:<cần"
-#: builtin/push.c:464
+#: builtin/push.c:511
msgid "require old value of ref to be at this value"
msgstr "yêu cầu giá-trị cũ của tham chiếu thì là giá-trị này"
-#: builtin/push.c:466
+#: builtin/push.c:513
msgid "check"
msgstr "kiểm tra"
-#: builtin/push.c:467
+#: builtin/push.c:514
msgid "control recursive pushing of submodules"
msgstr "Ä‘iá»u khiển việc đẩy lên (push) đệ qui của mô-Ä‘un-con"
-#: builtin/push.c:469
+#: builtin/push.c:516
msgid "use thin pack"
msgstr "tạo gói nhẹ"
-#: builtin/push.c:470 builtin/push.c:471
+#: builtin/push.c:517 builtin/push.c:518
msgid "receive pack program"
-msgstr "nhận vỠchương trình pack"
+msgstr "chương trình nhận gói"
-#: builtin/push.c:472
+#: builtin/push.c:519
msgid "set upstream for git pull/status"
-msgstr "đặt thượng nguồn (upstream) cho git pull/status"
+msgstr "đặt thượng nguồn cho git pull/status"
-#: builtin/push.c:475
+#: builtin/push.c:522
msgid "prune locally removed refs"
-msgstr "prune (cắt cụt) những tham chiếu (refs) bị gỡ bá»"
+msgstr "xén tỉa những tham chiếu (refs) bị gỡ bá»"
-#: builtin/push.c:477
+#: builtin/push.c:524
msgid "bypass pre-push hook"
-msgstr "vòng qua “pre-push hookâ€"
+msgstr "vòng qua móc tiá»n-đẩy “pre-pushâ€"
-#: builtin/push.c:478
+#: builtin/push.c:525
msgid "push missing but relevant tags"
-msgstr "push bị trượt nhưng các thẻ thích hợp"
+msgstr "push phần bị thiếu nhưng nhưng các thẻ lại thích hợp"
-#: builtin/push.c:488
+#: builtin/push.c:535
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "--delete là xung khắc vá»›i các tùy chá»n --all, --mirror và --tags"
-#: builtin/push.c:490
+#: builtin/push.c:537
msgid "--delete doesn't make sense without any refs"
msgstr "--delete không hợp lý nếu không có bất kỳ tham chiếu (refs) nào"
@@ -8202,18 +8270,18 @@ msgstr "gỡ lá»—i “unpack-treesâ€"
#: builtin/reflog.c:499
#, c-format
msgid "%s' for '%s' is not a valid timestamp"
-msgstr "giá trị %s dành cho “%s†không phải là dấu thá»i gian hợp lệ"
+msgstr "giá trị %s dành cho “%s†không phải là dấu vết thá»i gian hợp lệ"
#: builtin/reflog.c:615 builtin/reflog.c:620
#, c-format
msgid "'%s' is not a valid timestamp"
msgstr "“%s†không phải là dấu thá»i gian hợp lệ"
-#: builtin/remote.c:11
+#: builtin/remote.c:12
msgid "git remote [-v | --verbose]"
msgstr "git remote [-v | --verbose]"
-#: builtin/remote.c:12
+#: builtin/remote.c:13
msgid ""
"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <name> <url>"
@@ -8221,82 +8289,82 @@ msgstr ""
"git remote add [-t <nhánh>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <tên> <url>"
-#: builtin/remote.c:13 builtin/remote.c:32
+#: builtin/remote.c:14 builtin/remote.c:33
msgid "git remote rename <old> <new>"
msgstr "git remote rename <tên-cũ> <tên-mới>"
-#: builtin/remote.c:14 builtin/remote.c:37
+#: builtin/remote.c:15 builtin/remote.c:38
msgid "git remote remove <name>"
msgstr "git remote remove <tên>"
-#: builtin/remote.c:15
+#: builtin/remote.c:16
msgid "git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"
msgstr "git remote set-head <tên> (-a | --auto | -d | --delete | <nhánh>)"
-#: builtin/remote.c:16
+#: builtin/remote.c:17
msgid "git remote [-v | --verbose] show [-n] <name>"
msgstr "git remote [-v | --verbose] show [-n] <tên>"
-#: builtin/remote.c:17
+#: builtin/remote.c:18
msgid "git remote prune [-n | --dry-run] <name>"
msgstr "git remote prune [-n | --dry-run] <tên>"
-#: builtin/remote.c:18
+#: builtin/remote.c:19
msgid ""
"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
msgstr ""
"git remote [-v | --verbose] update [-p | --prune] [(<nhóm> | <máy-chủ>)...]"
-#: builtin/remote.c:19
+#: builtin/remote.c:20
msgid "git remote set-branches [--add] <name> <branch>..."
msgstr "git remote set-branches [--add] <tên> <nhánh>..."
-#: builtin/remote.c:20 builtin/remote.c:68
+#: builtin/remote.c:21 builtin/remote.c:69
msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
msgstr "git remote set-url [--push] <tên> <url-mới> [<url-cũ>]"
-#: builtin/remote.c:21 builtin/remote.c:69
+#: builtin/remote.c:22 builtin/remote.c:70
msgid "git remote set-url --add <name> <newurl>"
msgstr "git remote set-url --add <tên> <url-mới>"
-#: builtin/remote.c:22 builtin/remote.c:70
+#: builtin/remote.c:23 builtin/remote.c:71
msgid "git remote set-url --delete <name> <url>"
msgstr "git remote set-url --delete <tên> <url>"
-#: builtin/remote.c:27
+#: builtin/remote.c:28
msgid "git remote add [<options>] <name> <url>"
msgstr "git remote add [<các-tùy-chá»n>] <tên> <url>"
-#: builtin/remote.c:42
+#: builtin/remote.c:43
msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
msgstr "git remote set-head <tên> (-a | --auto | -d | --delete | <nhánh>)"
-#: builtin/remote.c:47
+#: builtin/remote.c:48
msgid "git remote set-branches <name> <branch>..."
msgstr "git remote set-branches <tên> <nhánh>..."
-#: builtin/remote.c:48
+#: builtin/remote.c:49
msgid "git remote set-branches --add <name> <branch>..."
msgstr "git remote set-branches --add <tên> <nhánh>..."
-#: builtin/remote.c:53
+#: builtin/remote.c:54
msgid "git remote show [<options>] <name>"
msgstr "git remote show [<các-tùy-chá»n>] <tên>"
-#: builtin/remote.c:58
+#: builtin/remote.c:59
msgid "git remote prune [<options>] <name>"
msgstr "git remote prune [<các-tùy-chá»n>] <tên>"
-#: builtin/remote.c:63
+#: builtin/remote.c:64
msgid "git remote update [<options>] [<group> | <remote>]..."
msgstr "git remote update [<các-tùy-chá»n>] [<nhóm> | <máy-chủ>]..."
-#: builtin/remote.c:98
+#: builtin/remote.c:88
#, c-format
msgid "Updating %s"
msgstr "Äang cập nhật %s"
-#: builtin/remote.c:130
+#: builtin/remote.c:120
msgid ""
"--mirror is dangerous and deprecated; please\n"
"\t use --mirror=fetch or --mirror=push instead"
@@ -8304,102 +8372,101 @@ msgstr ""
"--mirror nguy hiểm và không dùng nữa; xin hãy\n"
"\t sá»­ dụng tùy chá»n --mirror=fetch hoặc --mirror=push để thay thế"
-#: builtin/remote.c:147
+#: builtin/remote.c:137
#, c-format
msgid "unknown mirror argument: %s"
msgstr "không hiểu tham số máy bản sao (mirror): %s"
-#: builtin/remote.c:163
+#: builtin/remote.c:153
msgid "fetch the remote branches"
-msgstr "lấy vỠ(fetch) các nhánh từ máy chủ"
+msgstr "lấy vỠcác nhánh từ máy chủ"
-#: builtin/remote.c:165
+#: builtin/remote.c:155
msgid "import all tags and associated objects when fetching"
-msgstr ""
-"nhập vào tất cả các đối tượng thẻ và thành phần liên quan khi lấy vỠ(fetch)"
+msgstr "nhập vào tất cả các đối tượng thẻ và thành phần liên quan khi lấy vá»"
-#: builtin/remote.c:168
+#: builtin/remote.c:158
msgid "or do not fetch any tag at all (--no-tags)"
-msgstr "hoặc không lấy vỠ(fetch) bất kỳ thẻ nào (--no-tags)"
+msgstr "hoặc không lấy vỠbất kỳ thẻ nào (--no-tags)"
-#: builtin/remote.c:170
+#: builtin/remote.c:160
msgid "branch(es) to track"
-msgstr "các nhánh theo vết"
+msgstr "các nhánh để theo dõi"
-#: builtin/remote.c:171
+#: builtin/remote.c:161
msgid "master branch"
msgstr "nhánh master"
-#: builtin/remote.c:172
+#: builtin/remote.c:162
msgid "push|fetch"
msgstr "push|fetch"
-#: builtin/remote.c:173
+#: builtin/remote.c:163
msgid "set up remote as a mirror to push to or fetch from"
msgstr "đặt máy chủ (remote) như là một máy bản sao để push hay fetch từ đó"
-#: builtin/remote.c:185
+#: builtin/remote.c:175
msgid "specifying a master branch makes no sense with --mirror"
msgstr "Ä‘ang chỉ định má»™t nhánh master không hợp lý vá»›i tùy chá»n --mirror"
-#: builtin/remote.c:187
+#: builtin/remote.c:177
msgid "specifying branches to track makes sense only with fetch mirrors"
-msgstr "chỉ định những nhánh để theo vết chỉ hợp lý vá»›i các “fetch mirrorâ€"
+msgstr "chỉ định những nhánh để theo dõi chỉ hợp lý vá»›i các “fetch mirrorâ€"
-#: builtin/remote.c:195 builtin/remote.c:646
+#: builtin/remote.c:185 builtin/remote.c:641
#, c-format
msgid "remote %s already exists."
msgstr "máy chủ %s đã tồn tại rồi."
-#: builtin/remote.c:199 builtin/remote.c:650
+#: builtin/remote.c:189 builtin/remote.c:645
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "“%s†không phải tên máy chủ hợp lệ"
-#: builtin/remote.c:243
+#: builtin/remote.c:233
#, c-format
msgid "Could not setup master '%s'"
msgstr "Không thể cài đặt nhánh master “%sâ€"
-#: builtin/remote.c:299
+#: builtin/remote.c:289
#, c-format
msgid "more than one %s"
msgstr "nhiá»u hÆ¡n má»™t %s"
-#: builtin/remote.c:339
+#: builtin/remote.c:334
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr "Không thể lấy ánh xạ (map) fetch cho đặc tả tham chiếu %s"
-#: builtin/remote.c:440 builtin/remote.c:448
+#: builtin/remote.c:435 builtin/remote.c:443
msgid "(matching)"
msgstr "(khá»›p)"
-#: builtin/remote.c:452
+#: builtin/remote.c:447
msgid "(delete)"
msgstr "(xóa)"
-#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607
+#: builtin/remote.c:590 builtin/remote.c:596 builtin/remote.c:602
#, c-format
msgid "Could not append '%s' to '%s'"
msgstr "Không thể nối thêm “%s†vào “%sâ€"
-#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890
+#: builtin/remote.c:634 builtin/remote.c:787 builtin/remote.c:885
#, c-format
msgid "No such remote: %s"
msgstr "Không có máy chủ nào như thế: %s"
-#: builtin/remote.c:656
+#: builtin/remote.c:651
#, c-format
msgid "Could not rename config section '%s' to '%s'"
-msgstr "Không thể đổi tên chÆ°Æ¡ng (section) cấu hình từ “%s†thành “%sâ€"
+msgstr "Không thể đổi tên phần của cấu hình từ “%s†thành “%sâ€"
-#: builtin/remote.c:662 builtin/remote.c:799
+#: builtin/remote.c:657 builtin/remote.c:794
#, c-format
msgid "Could not remove config section '%s'"
-msgstr "Không thể gỡ bá» chÆ°Æ¡ng (section) cấu hình “%sâ€"
+msgstr "Không thể gỡ bá» phần cấu hình “%sâ€"
-#: builtin/remote.c:677
+#: builtin/remote.c:672
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -8410,32 +8477,32 @@ msgstr ""
"\t%s\n"
"\tXin hãy cập nhật phần cấu hình một cách thủ công nếu thấy cần thiết."
-#: builtin/remote.c:683
+#: builtin/remote.c:678
#, c-format
msgid "Could not append '%s'"
msgstr "Không thể nối thêm “%sâ€"
-#: builtin/remote.c:694
+#: builtin/remote.c:689
#, c-format
msgid "Could not set '%s'"
msgstr "Không thể đặt “%sâ€"
-#: builtin/remote.c:716
+#: builtin/remote.c:711
#, c-format
msgid "deleting '%s' failed"
-msgstr "việc xoá %s gặp lỗi"
+msgstr "gặp lá»—i khi xoá “%sâ€"
-#: builtin/remote.c:750
+#: builtin/remote.c:745
#, c-format
msgid "creating '%s' failed"
-msgstr "tạo %s gặp lỗi"
+msgstr "gặp lá»—i khi tạo “%sâ€"
-#: builtin/remote.c:764
+#: builtin/remote.c:759
#, c-format
msgid "Could not remove branch %s"
-msgstr "Không thể gỡ bỠnhánh %s"
+msgstr "Không thể gỡ bá» nhánh “%sâ€"
-#: builtin/remote.c:834
+#: builtin/remote.c:829
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -8450,262 +8517,262 @@ msgstr[1] ""
"Ä‘i;\n"
"để xóa đi, sử dụng:"
-#: builtin/remote.c:943
+#: builtin/remote.c:938
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " mới (lần lấy vỠtiếp theo sẽ lưu trong remotes/%s)"
-#: builtin/remote.c:946
+#: builtin/remote.c:941
msgid " tracked"
-msgstr " được theo vết"
+msgstr " được theo dõi"
-#: builtin/remote.c:948
+#: builtin/remote.c:943
msgid " stale (use 'git remote prune' to remove)"
msgstr " cÅ© rích (dùng “git remote prune†để gỡ bá»)"
-#: builtin/remote.c:950
+#: builtin/remote.c:945
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:991
+#: builtin/remote.c:986
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "branch.%s.merge không hợp lệ; không thể rebase vỠphía > 1 nhánh"
-#: builtin/remote.c:998
+#: builtin/remote.c:993
#, c-format
msgid "rebases onto remote %s"
msgstr "thực hiện rebase trên máy chủ %s"
-#: builtin/remote.c:1001
+#: builtin/remote.c:996
#, c-format
msgid " merges with remote %s"
msgstr " hòa trộn với máy chủ %s"
-#: builtin/remote.c:1002
+#: builtin/remote.c:997
msgid " and with remote"
msgstr " và với máy chủ"
-#: builtin/remote.c:1004
+#: builtin/remote.c:999
#, c-format
msgid "merges with remote %s"
msgstr "hòa trộn với máy chủ %s"
-#: builtin/remote.c:1005
+#: builtin/remote.c:1000
msgid " and with remote"
msgstr " và với máy chủ"
-#: builtin/remote.c:1051
+#: builtin/remote.c:1046
msgid "create"
msgstr "tạo"
-#: builtin/remote.c:1054
+#: builtin/remote.c:1049
msgid "delete"
msgstr "xoá"
-#: builtin/remote.c:1058
+#: builtin/remote.c:1053
msgid "up to date"
msgstr "đã cập nhật"
-#: builtin/remote.c:1061
+#: builtin/remote.c:1056
msgid "fast-forwardable"
msgstr "có-thể-fast-forward"
-#: builtin/remote.c:1064
+#: builtin/remote.c:1059
msgid "local out of date"
msgstr "dữ liệu nội bộ đã cũ"
-#: builtin/remote.c:1071
+#: builtin/remote.c:1066
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s ép buộc thành %-*s (%s)"
-#: builtin/remote.c:1074
+#: builtin/remote.c:1069
#, c-format
msgid " %-*s pushes to %-*s (%s)"
-msgstr " %-*s push tá»›i %-*s (%s)"
+msgstr " %-*s đẩy lên thành %-*s (%s)"
-#: builtin/remote.c:1078
+#: builtin/remote.c:1073
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s ép buộc thành %s"
-#: builtin/remote.c:1081
+#: builtin/remote.c:1076
#, c-format
msgid " %-*s pushes to %s"
-msgstr " %-*s push tá»›i %s"
+msgstr " %-*s đẩy lên thành %s"
-#: builtin/remote.c:1091
+#: builtin/remote.c:1144
msgid "do not query remotes"
msgstr "không truy vấn các máy chủ"
-#: builtin/remote.c:1118
+#: builtin/remote.c:1171
#, c-format
msgid "* remote %s"
msgstr "* máy chủ %s"
-#: builtin/remote.c:1119
+#: builtin/remote.c:1172
#, c-format
msgid " Fetch URL: %s"
-msgstr " URL để lấy vỠ(fetch): %s"
+msgstr " URL để lấy vá»: %s"
-#: builtin/remote.c:1120 builtin/remote.c:1285
+#: builtin/remote.c:1173 builtin/remote.c:1318
msgid "(no URL)"
msgstr "(không có URL)"
-#: builtin/remote.c:1129 builtin/remote.c:1131
+#: builtin/remote.c:1182 builtin/remote.c:1184
#, c-format
msgid " Push URL: %s"
msgstr " URL để đẩy lên (push): %s"
-#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137
+#: builtin/remote.c:1186 builtin/remote.c:1188 builtin/remote.c:1190
#, c-format
msgid " HEAD branch: %s"
msgstr " Nhánh HEAD: %s"
-#: builtin/remote.c:1139
+#: builtin/remote.c:1192
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
msgstr " nhánh HEAD (HEAD máy chủ chưa rõ ràng, có lẽ là một trong số sau):\n"
-#: builtin/remote.c:1151
+#: builtin/remote.c:1204
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Nhánh trên máy chủ:%s"
msgstr[1] " Những nhánh trên máy chủ:%s"
-#: builtin/remote.c:1154 builtin/remote.c:1181
+#: builtin/remote.c:1207 builtin/remote.c:1234
msgid " (status not queried)"
msgstr " (trạng thái không được yêu cầu)"
-#: builtin/remote.c:1163
+#: builtin/remote.c:1216
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Nhánh ná»™i bá»™ đã được cấu hình cho lệnh “git pullâ€:"
msgstr[1] " Những nhánh ná»™i bá»™ đã được cấu hình cho lệnh “git pullâ€:"
-#: builtin/remote.c:1171
+#: builtin/remote.c:1224
msgid " Local refs will be mirrored by 'git push'"
msgstr " refs ná»™i bá»™ sẽ được phản chiếu bởi lệnh “git pushâ€"
-#: builtin/remote.c:1178
+#: builtin/remote.c:1231
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Tham chiếu ná»™i bá»™ được cấu hình cho lệnh “git pushâ€%s:"
msgstr[1] " Những tham chiếu ná»™i bá»™ được cấu hình cho lệnh “git pushâ€%s:"
-#: builtin/remote.c:1199
+#: builtin/remote.c:1252
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ủ"
-#: builtin/remote.c:1201
+#: builtin/remote.c:1254
msgid "delete refs/remotes/<name>/HEAD"
msgstr "xóa refs/remotes/<tên>/HEAD"
-#: builtin/remote.c:1216
+#: builtin/remote.c:1269
msgid "Cannot determine remote HEAD"
msgstr "Không thể xác định được HEAD máy chủ"
-#: builtin/remote.c:1218
+#: builtin/remote.c:1271
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr "Nhiá»u nhánh HEAD máy chủ. Hãy chá»n rõ ràng má»™t:"
-#: builtin/remote.c:1228
+#: builtin/remote.c:1281
#, c-format
msgid "Could not delete %s"
msgstr "Không thể xóa bỠ%s"
-#: builtin/remote.c:1236
+#: builtin/remote.c:1289
#, c-format
msgid "Not a valid ref: %s"
-msgstr "Không phải là tham chiếu (ref) hợp lệ: %s"
+msgstr "Không phải là tham chiếu hợp lệ: %s"
-#: builtin/remote.c:1238
+#: builtin/remote.c:1291
#, c-format
msgid "Could not setup %s"
msgstr "Không thể cài đặt %s"
-#: builtin/remote.c:1274
+#: builtin/remote.c:1307
#, c-format
msgid " %s will become dangling!"
msgstr " %s sẽ trở thành không đầu (không được quản lý)!"
-#: builtin/remote.c:1275
+#: builtin/remote.c:1308
#, c-format
msgid " %s has become dangling!"
msgstr " %s đã trở thành không đầu (không được quản lý)!"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1314
#, c-format
msgid "Pruning %s"
msgstr "Äang xén bá»›t %s"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1315
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1295
+#: builtin/remote.c:1328
#, c-format
msgid " * [would prune] %s"
msgstr " * [nên xén bớt] %s"
-#: builtin/remote.c:1298
+#: builtin/remote.c:1331
#, c-format
msgid " * [pruned] %s"
msgstr " *[đã bị xén] %s"
-#: builtin/remote.c:1321
+#: builtin/remote.c:1374
msgid "prune remotes after fetching"
msgstr "cắt máy chủ sau khi lấy vá»"
-#: builtin/remote.c:1387 builtin/remote.c:1461
+#: builtin/remote.c:1440 builtin/remote.c:1514
#, c-format
msgid "No such remote '%s'"
msgstr "Không có máy chủ nào có tên “%sâ€"
-#: builtin/remote.c:1407
+#: builtin/remote.c:1460
msgid "add branch"
msgstr "thêm nhánh"
-#: builtin/remote.c:1414
+#: builtin/remote.c:1467
msgid "no remote specified"
msgstr "chưa chỉ ra máy chủ nào"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1489
msgid "manipulate push URLs"
msgstr "đẩy các “URL†bằng tay"
-#: builtin/remote.c:1438
+#: builtin/remote.c:1491
msgid "add URL"
msgstr "thêm URL"
-#: builtin/remote.c:1440
+#: builtin/remote.c:1493
msgid "delete URLs"
msgstr "xóa URLs"
-#: builtin/remote.c:1447
+#: builtin/remote.c:1500
msgid "--add --delete doesn't make sense"
msgstr "--add --delete không hợp lý"
-#: builtin/remote.c:1487
+#: builtin/remote.c:1540
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Kiểu mẫu URL cũ không hợp lệ: %s"
-#: builtin/remote.c:1495
+#: builtin/remote.c:1548
#, c-format
msgid "No such URL found: %s"
msgstr "Không tìm thấy URL như vậy: %s"
-#: builtin/remote.c:1497
+#: builtin/remote.c:1550
msgid "Will not delete all non-push URLs"
msgstr "Sẽ không xóa những địa chỉ URL không-push"
-#: builtin/remote.c:1569
+#: builtin/remote.c:1564
msgid "be verbose; must be placed before a subcommand"
msgstr "chi tiết; phải được đặt trước một lệnh-con"
@@ -8753,6 +8820,10 @@ msgstr "vá»›i -A, các đối tượng cÅ© hÆ¡n khoảng thá»i gian này thì k
msgid "size of the window used for delta compression"
msgstr "kích thÆ°á»›c cá»­a sổ được dùng cho nén “deltaâ€"
+#: builtin/repack.c:162 builtin/repack.c:166
+msgid "bytes"
+msgstr "byte"
+
#: builtin/repack.c:163
msgid "same as the above, but limit memory size instead of entries count"
msgstr "giống như trên, nhưng giới hạn kích thước bộ nhớ hay vì số lượng"
@@ -8765,7 +8836,7 @@ msgstr "giá»›i hạn Ä‘á»™ sâu tối Ä‘a của “deltaâ€"
msgid "maximum size of each packfile"
msgstr "kcíh thước tối đa cho từng tập tin gói"
-#: builtin/repack.c:345
+#: builtin/repack.c:343
#, c-format
msgid "removing '%s' failed"
msgstr "gặp lá»—i khi xóa bỠ“%sâ€"
@@ -8779,21 +8850,25 @@ msgid "git replace -d <object>..."
msgstr "git replace -d <đối tượng>..."
#: builtin/replace.c:19
-msgid "git replace -l [<pattern>]"
-msgstr "git replace -l [<mẫu>]"
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
+msgstr "git replace [--format=<định_dạng>] [-l [<mẫu>]]"
-#: builtin/replace.c:131
+#: builtin/replace.c:174
msgid "list replace refs"
msgstr "liệt kê các refs thay thế"
-#: builtin/replace.c:132
+#: builtin/replace.c:175
msgid "delete replace refs"
msgstr "xóa tham chiếu (refs) thay thế"
-#: builtin/replace.c:133
+#: builtin/replace.c:176
msgid "replace the ref if it exists"
msgstr "thay thế tham chiếu (ref) nếu nó đã sẵn có"
+#: builtin/replace.c:177
+msgid "use this format"
+msgstr "dùng định dạng này"
+
#: builtin/rerere.c:12
msgid "git rerere [clear | forget path... | status | remaining | diff | gc]"
msgstr "git rerere [clear | forget path... | status | remaining | diff | gc]"
@@ -8912,11 +8987,11 @@ msgstr "Không thể thá»±c hiện lệnh %s reset vá»›i các Ä‘Æ°á»ng dẫn."
#: builtin/reset.c:327
#, c-format
msgid "%s reset is not allowed in a bare repository"
-msgstr "%s reset không được phép trên kho bare (trên máy chủ)"
+msgstr "%s reset không được phép trên kho thuần"
#: builtin/reset.c:344
msgid "Unstaged changes after reset:"
-msgstr "Những thay đổi bị bỠtrạng thái (stage) sau khi reset:"
+msgstr "Những thay đổi được Ä‘Æ°a ra khá»i bệ phóng sau khi reset:"
#: builtin/reset.c:350
#, c-format
@@ -8927,19 +9002,23 @@ msgstr "Không thể đặt lại (reset) bảng mục lục thành điểm xét
msgid "Could not write new index file."
msgstr "Không thể ghi tập tin lưu bảng mục lục mới."
-#: builtin/rev-parse.c:345
+#: builtin/rev-parse.c:359
msgid "git rev-parse --parseopt [options] -- [<args>...]"
msgstr "git rev-parse --parseopt [các-tùy-chá»n] -- [<th.số>...]"
-#: builtin/rev-parse.c:350
+#: builtin/rev-parse.c:364
msgid "keep the `--` passed as an arg"
-msgstr "giữ “--“ chuyển qua làm tham số"
+msgstr "giữ lại “--†chuyển sang làm tham số"
-#: builtin/rev-parse.c:352
+#: builtin/rev-parse.c:366
msgid "stop parsing after the first non-option argument"
msgstr "dừng phân tích sau đối số đầu tiên không có tùy chá»n"
-#: builtin/rev-parse.c:470
+#: builtin/rev-parse.c:369
+msgid "output in stuck long form"
+msgstr "kết xuất trong định dạng gậy dài"
+
+#: builtin/rev-parse.c:486
msgid ""
"git rev-parse --parseopt [options] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
@@ -8948,8 +9027,8 @@ msgid ""
"Run \"git rev-parse --parseopt -h\" for more information on the first usage."
msgstr ""
"git rev-parse --parseopt [các-tùy-chá»n] -- [<Ä‘.số>...]\n"
-" or: git rev-parse --sq-quote [<đ.số>...]\n"
-" or: git rev-parse [các-tùy-chá»n] [<Ä‘.số>...]\n"
+" hoặc: git rev-parse --sq-quote [<đ.số>...]\n"
+" hoặc: git rev-parse [các-tùy-chá»n] [<Ä‘.số>...]\n"
"\n"
"Chạy lệnh \"git rev-parse --parseopt -h\" để có thêm thông tin vỠcách dùng."
@@ -9012,7 +9091,7 @@ msgstr "tùy chá»n cho chiến lược hòa trá»™n"
#: builtin/revert.c:102
msgid "append commit name"
-msgstr "nối thêm tên lần chuyển giao (commit)"
+msgstr "nối thêm tên lần chuyển giao"
#: builtin/revert.c:103
msgid "allow fast-forward"
@@ -9024,7 +9103,7 @@ msgstr "cấm khởi tạo lần chuyển giao trống rỗng"
#: builtin/revert.c:105
msgid "allow commits with empty messages"
-msgstr "chấp nhận chuyển giao (commit) mà không ghi chú gì"
+msgstr "chấp nhận chuyển giao mà không ghi chú gì"
#: builtin/revert.c:106
msgid "keep redundant, empty commits"
@@ -9186,67 +9265,67 @@ msgstr ""
msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g|--reflog)[=<n>[,<ná»n>]] [--list] [<ref>]"
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:649
msgid "show remote-tracking and local branches"
msgstr "hiển thị các nhánh remote-tracking và nội bộ"
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:651
msgid "show remote-tracking branches"
msgstr "hiển thị các nhánh remote-tracking"
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "color '*!+-' corresponding to the branch"
msgstr "màu “*!+-†tương ứng với nhánh"
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "show <n> more commits after the common ancestor"
msgstr "hiển thị thêm <n> lần chuyển giao sau cha mẹ chung"
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "synonym to more=-1"
msgstr "đồng nghĩa với more=-1"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "suppress naming strings"
msgstr "chặn các chuỗi đặt tên"
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:660
msgid "include the current branch"
msgstr "bao gồm nhánh hiện hành"
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:662
msgid "name commits with their object names"
msgstr "đặt tên các lần chuyển giao bằng các tên của đối tượng của chúng"
-#: builtin/show-branch.c:665
+#: builtin/show-branch.c:664
msgid "show possible merge bases"
msgstr "hiển thị má»i cÆ¡ sở có thể dùng để hòa trá»™n"
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show refs unreachable from any other ref"
msgstr "hiển thị các tham chiếu không thể được Ä‘á»c bởi bất kỳ tham chiếu khác"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show commits in topological order"
msgstr "hiển thị các lần chuyển giao theo thứ tự tôpô"
-#: builtin/show-branch.c:672
+#: builtin/show-branch.c:671
msgid "show only commits not on the first branch"
msgstr "chỉ hiển thị các lần chuyển giao không nằm trên nhánh đầu tiên"
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "show merges reachable from only one tip"
msgstr "hiển thị các lần hòa trá»™n có thể Ä‘á»c được chỉ từ má»™t đầu mút"
-#: builtin/show-branch.c:676
+#: builtin/show-branch.c:675
msgid "topologically sort, maintaining date order where possible"
msgstr "sắp xếp hình thái há»c, bảo trì thứ tá»± ngày nếu có thể"
-#: builtin/show-branch.c:679
+#: builtin/show-branch.c:678
msgid "<n>[,<base>]"
-msgstr "<n>[,<cơ sở>]"
+msgstr "<n>[,<cơ_sở>]"
-#: builtin/show-branch.c:680
+#: builtin/show-branch.c:679
msgid "show <n> most recent ref-log entries starting at base"
msgstr "hiển thị <n> các mục “ref-log†gần nhất kể từ ná»n (base)"
@@ -9417,7 +9496,7 @@ msgstr "đầu thẻ (tag) quá lớn."
#: builtin/tag.c:368
msgid "no tag message?"
-msgstr "không có thông điệp (message) cho thẻ (tag)?"
+msgstr "không có chú thích gì cho cho thẻ à?"
#: builtin/tag.c:374
#, c-format
@@ -9744,15 +9823,15 @@ msgstr "ngày hết hạn"
msgid "no-op (backward compatibility)"
msgstr "no-op (tương thích ngược)"
-#: parse-options.h:238
+#: parse-options.h:235
msgid "be more verbose"
msgstr "chi tiết hơn nữa"
-#: parse-options.h:240
+#: parse-options.h:237
msgid "be more quiet"
msgstr "im lặng hơn nữa"
-#: parse-options.h:246
+#: parse-options.h:243
msgid "use <n> digits to display SHA-1s"
msgstr "sử dụng <n> chữ số để hiển thị SHA-1s"
@@ -9970,7 +10049,7 @@ msgstr ""
#: git-am.sh:776
msgid "Commit Body is:"
-msgstr "Thân của lần chuyển giao (commit) là:"
+msgstr "Thân của lần chuyển giao là:"
#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
#. in your translation. The program will only accept English
@@ -10061,8 +10140,8 @@ msgstr ""
"<nhánh_hợp_lệ>â€."
#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
-msgstr "sẽ không bisect trêm cây được seek"
+msgid "won't bisect on cg-seek'ed tree"
+msgstr "sẽ không bisect trêm cây được cg-seek"
#: git-bisect.sh:144
msgid "Bad HEAD - strange symbolic ref"
@@ -10095,8 +10174,7 @@ msgstr "“git bisect bad†có thể lấy chỉ một đối số."
#. this is less optimum.
#: git-bisect.sh:273
msgid "Warning: bisecting only with a bad commit."
-msgstr ""
-"Cảnh báo: chỉ thực hiện việc bisect với một lần chuyển giao (commit) sai."
+msgstr "Cảnh báo: chỉ thực hiện việc bisect với một lần chuyển giao sai."
#. TRANSLATORS: Make sure to include [Y] and [n] in your
#. translation. The program will only accept English input
@@ -10131,7 +10209,7 @@ msgstr "Chúng tôi không bisect."
#: git-bisect.sh:370
#, sh-format
msgid "'$invalid' is not a valid commit"
-msgstr "â€$invalid†không phải là lần chuyển giao (commit) hợp lệ"
+msgstr "â€$invalid†không phải là lần chuyển giao hợp lệ"
#: git-bisect.sh:379
#, sh-format
@@ -10212,7 +10290,7 @@ msgstr ""
#. The working tree and the index file is still based on the
#. $orig_head commit, but we are merging into $curr_head.
#. First update the working tree to match $curr_head.
-#: git-pull.sh:255
+#: git-pull.sh:247
#, sh-format
msgid ""
"Warning: fetch updated the current branch head.\n"
@@ -10223,15 +10301,15 @@ msgstr ""
"Cảnh báo: đang fast-forward cây làm việc của bạn từ\n"
"Cảnh báo: commit $orig_head."
-#: git-pull.sh:280
+#: git-pull.sh:272
msgid "Cannot merge multiple branches into empty head"
msgstr "Không thể hòa trá»™n nhiá»u nhánh và trong má»™t head trống rá»—ng"
-#: git-pull.sh:284
+#: git-pull.sh:276
msgid "Cannot rebase onto multiple branches"
msgstr "Không thể thá»±c hiện lệnh rebase (cÆ¡ cấu lại) trên nhiá»u nhánh"
-#: git-rebase.sh:54
+#: git-rebase.sh:55
msgid ""
"When you have resolved this problem, run \"git rebase --continue\".\n"
"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
@@ -10244,16 +10322,16 @@ msgstr ""
"Äể phục hồi lại thành nhánh nguyên thủy và dừng việc vá lại thì chạy \"git "
"rebase --abort\"."
-#: git-rebase.sh:156
+#: git-rebase.sh:158
msgid "Applied autostash."
msgstr "Äã áp dụng autostash."
-#: git-rebase.sh:159
+#: git-rebase.sh:161
#, sh-format
msgid "Cannot store $stash_sha1"
msgstr "Không thể lưu $stash_sha1"
-#: git-rebase.sh:160
+#: git-rebase.sh:162
msgid ""
"Applying autostash resulted in conflicts.\n"
"Your changes are safe in the stash.\n"
@@ -10264,35 +10342,35 @@ msgstr ""
"Bạn có thể chạy lệnh \"git stash pop\" hay \"git stash drop\" bất kỳ lúc "
"nào.\n"
-#: git-rebase.sh:199
+#: git-rebase.sh:201
msgid "The pre-rebase hook refused to rebase."
msgstr "Móc (hook) pre-rebase từ chối rebase."
-#: git-rebase.sh:204
+#: git-rebase.sh:206
msgid "It looks like git-am is in progress. Cannot rebase."
msgstr ""
"Hình như đang trong quá trình thực hiện lệnh git-am. Không thể chạy lệnh "
"rebase."
-#: git-rebase.sh:338
+#: git-rebase.sh:346
msgid "The --exec option must be used with the --interactive option"
msgstr "Tùy chá»n --exec phải được sá»­ dụng cùng vá»›i tùy chá»n --interactive"
-#: git-rebase.sh:343
+#: git-rebase.sh:351
msgid "No rebase in progress?"
msgstr "Không có tiến trình rebase nào phải không?"
-#: git-rebase.sh:354
+#: git-rebase.sh:362
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr ""
"Hành động “--edit-todo†chỉ có thể dùng trong quá trình “rebase†(sửa lịch "
"sử) tương tác."
-#: git-rebase.sh:361
+#: git-rebase.sh:369
msgid "Cannot read HEAD"
msgstr "Không thể Ä‘á»c HEAD"
-#: git-rebase.sh:364
+#: git-rebase.sh:372
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -10300,12 +10378,12 @@ msgstr ""
"Bạn phải sửa tất cả các lần hòa trộn xung đột và sau\n"
"đó đánh dấu chúng là cần xử lý sử dụng lệnh git add"
-#: git-rebase.sh:382
+#: git-rebase.sh:390
#, sh-format
msgid "Could not move back to $head_name"
msgstr "Không thể quay trở lại $head_name"
-#: git-rebase.sh:401
+#: git-rebase.sh:409
#, sh-format
msgid ""
"It seems that there is already a $state_dir_base directory, and\n"
@@ -10328,66 +10406,66 @@ msgstr ""
"\n"
"TÔI: là lệnh bạn vừa gá»i!"
-#: git-rebase.sh:446
+#: git-rebase.sh:456
#, sh-format
msgid "invalid upstream $upstream_name"
msgstr "thượng nguồn không hợp lệ $upstream_name"
-#: git-rebase.sh:470
+#: git-rebase.sh:480
#, sh-format
msgid "$onto_name: there are more than one merge bases"
msgstr "$onto_name: ở đây có nhiá»u hÆ¡n má»™t ná»n móng hòa trá»™n"
-#: git-rebase.sh:473 git-rebase.sh:477
+#: git-rebase.sh:483 git-rebase.sh:487
#, sh-format
msgid "$onto_name: there is no merge base"
msgstr "$onto_name: ở đây không có ná»n móng hòa trá»™n nào"
-#: git-rebase.sh:482
+#: git-rebase.sh:492
#, sh-format
msgid "Does not point to a valid commit: $onto_name"
-msgstr "Không chỉ đến một lần chuyển giao (commit) không hợp lệ: $onto_name"
+msgstr "Không chỉ đến một lần chuyển giao không hợp lệ: $onto_name"
-#: git-rebase.sh:505
+#: git-rebase.sh:515
#, sh-format
msgid "fatal: no such branch: $branch_name"
msgstr "nghiêm trá»ng: không có nhánh nhÆ° thế: $branch_name"
-#: git-rebase.sh:528
+#: git-rebase.sh:548
msgid "Cannot autostash"
msgstr "Không thể autostash"
-#: git-rebase.sh:533
+#: git-rebase.sh:553
#, sh-format
msgid "Created autostash: $stash_abbrev"
msgstr "Äã tạo autostash: $stash_abbrev"
-#: git-rebase.sh:537
+#: git-rebase.sh:557
msgid "Please commit or stash them."
msgstr "Xin hãy commit hoặc tạm cất (stash) chúng."
-#: git-rebase.sh:557
+#: git-rebase.sh:577
#, sh-format
msgid "Current branch $branch_name is up to date."
msgstr "Nhánh hiện tại $branch_name đã được cập nhật rồi."
-#: git-rebase.sh:561
+#: git-rebase.sh:581
#, sh-format
msgid "Current branch $branch_name is up to date, rebase forced."
msgstr "Nhánh hiện tại $branch_name đã được cập nhật rồi, lệnh rebase ép buộc."
-#: git-rebase.sh:572
+#: git-rebase.sh:592
#, sh-format
msgid "Changes from $mb to $onto:"
msgstr "Thay đổi từ $mb thành $onto:"
#. Detach HEAD and reset the tree
-#: git-rebase.sh:581
+#: git-rebase.sh:601
msgid "First, rewinding head to replay your work on top of it..."
msgstr ""
"Trước tiên, di chuyển head để xem lại các công việc trên đỉnh của nó..."
-#: git-rebase.sh:591
+#: git-rebase.sh:611
#, sh-format
msgid "Fast-forwarded $branch_name to $onto_name."
msgstr "Fast-forward $branch_name thành $onto_name."
@@ -10399,7 +10477,7 @@ msgstr ""
#: git-stash.sh:74
msgid "You do not have the initial commit yet"
-msgstr "Bạn chưa còn có lần chuyển giao (commit) khởi tạo"
+msgstr "Bạn chưa còn có lần chuyển giao khởi tạo"
#: git-stash.sh:89
msgid "Cannot save the current index state"
@@ -10443,8 +10521,8 @@ msgid ""
" To provide a message, use git stash save -- '$option'"
msgstr ""
"lá»—i: không hiểu tùy chá»n cho “stash saveâ€: $option\n"
-" Äể dùng thông Ä‘iệp có chứa -- ở đầu, sá»­ dụng git stash save -- \"$option"
-"\""
+" Äể có thể dùng lá»i chú thích có chứa -- ở đầu,\n"
+" dùng git stash save -- \"$option\""
#: git-stash.sh:258
msgid "No local changes to save"
@@ -10464,7 +10542,7 @@ msgstr "Không thể gỡ bỠcác thay đổi cây-làm-việc"
#: git-stash.sh:383
msgid "No stash found."
-msgstr "Không tìm thấy stash nào."
+msgstr "Không tìm thấy lần chuyển giao cất đi (stash) nào."
#: git-stash.sh:390
#, sh-format
@@ -10479,7 +10557,7 @@ msgstr "$reference không phải là tham chiếu hợp lệ"
#: git-stash.sh:424
#, sh-format
msgid "'$args' is not a stash-like commit"
-msgstr "â€$args†không phải là lần chuyển giao (commit) kiểu-stash"
+msgstr "“$args†không phải là lần chuyển giao kiểu-stash (cất đi)"
#: git-stash.sh:435
#, sh-format
@@ -10504,7 +10582,7 @@ msgstr "Không thể ghi lại cây chỉ mục"
#: git-stash.sh:491
msgid "Cannot unstage modified files"
-msgstr "Không thể bỠtrạng thía của các tập tin đã được sửa chữa"
+msgstr "Không thể bá» ra khá»i bệ phóng các tập tin đã được sá»­a chữa"
#: git-stash.sh:506
msgid "Index was not unstashed."
@@ -10644,45 +10722,45 @@ msgstr "Gặp lá»—i khi đăng ký vá»›i hệ thống mô-Ä‘un-con “$sm_pathâ€
msgid "Entering '$prefix$displaypath'"
msgstr "Äang vào “$prefix$displaypathâ€"
-#: git-submodule.sh:554
+#: git-submodule.sh:559
#, sh-format
msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
msgstr ""
"Dừng lại tại “$prefix$displaypathâ€; script trả vá» trạng thái khác không."
-#: git-submodule.sh:600
+#: git-submodule.sh:605
#, sh-format
msgid "No url found for submodule path '$displaypath' in .gitmodules"
msgstr ""
"Không tìm thấy url cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypath†trong .gitmodules"
-#: git-submodule.sh:609
+#: git-submodule.sh:614
#, sh-format
msgid "Failed to register url for submodule path '$displaypath'"
msgstr "Gặp lá»—i khi đăng ký url cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:611
+#: git-submodule.sh:616
#, sh-format
msgid "Submodule '$name' ($url) registered for path '$displaypath'"
msgstr "Mô-Ä‘un-con “$name†($url) được đăng ký cho Ä‘Æ°á»ng dẫn “$displaypathâ€"
-#: git-submodule.sh:619
+#: git-submodule.sh:633
#, sh-format
msgid "Failed to register update mode for submodule path '$displaypath'"
msgstr ""
"Gặp lá»—i khi đăng ký chế Ä‘á»™ cập nhật cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:656
+#: git-submodule.sh:671
#, sh-format
msgid "Use '.' if you really want to deinitialize all submodules"
msgstr "Dùng “.†nếu bạn thá»±c sá»± muốn gỡ bá» má»i mô-Ä‘un-con"
-#: git-submodule.sh:673
+#: git-submodule.sh:688
#, sh-format
msgid "Submodule work tree '$displaypath' contains a .git directory"
msgstr "Cây làm việc mô-đun-con “$displaypath†có chứa thư mục .git"
-#: git-submodule.sh:674
+#: git-submodule.sh:689
#, sh-format
msgid ""
"(use 'rm -rf' if you really want to remove it including all of its history)"
@@ -10690,7 +10768,7 @@ msgstr ""
"(dùng “rm -rf†nếu bạn thực sự muốn gỡ bỠnó cùng với tất cả lịch sử của "
"chúng)"
-#: git-submodule.sh:680
+#: git-submodule.sh:695
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
@@ -10699,27 +10777,27 @@ msgstr ""
"Cây làm việc mô-đun-con “$displaypath†chứa các thay đổi nội bộ; hãy dùng “-"
"f†để loại bỠchúng đi"
-#: git-submodule.sh:683
+#: git-submodule.sh:698
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "Äã tạo thÆ° mục “$displaypathâ€"
-#: git-submodule.sh:684
+#: git-submodule.sh:699
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr "Không thể gỡ bá» cây làm việc mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:687
+#: git-submodule.sh:702
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr "Không thể tạo thÆ° mục mô-Ä‘un-con rá»—ng “$displaypathâ€"
-#: git-submodule.sh:696
+#: git-submodule.sh:711
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr "Mô-Ä‘un-con “$name†($url) được bỠđăng ký cho Ä‘Æ°á»ng dẫn “$displaypathâ€"
-#: git-submodule.sh:811
+#: git-submodule.sh:834
#, sh-format
msgid ""
"Submodule path '$displaypath' not initialized\n"
@@ -10728,45 +10806,45 @@ msgstr ""
"ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypath†chÆ°a được khởi tạo.\n"
"Có lẽ bạn muốn sử dụng lệnh “update --init�"
-#: git-submodule.sh:824
+#: git-submodule.sh:847
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr ""
"Không tìm thấy Ä‘iểm xét duyệt hiện hành trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con "
"“$displaypathâ€"
-#: git-submodule.sh:833
+#: git-submodule.sh:856
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Không thể lấy vá» (fetch) trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_pathâ€"
+msgstr "Không thể lấy vá» trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_pathâ€"
-#: git-submodule.sh:857
+#: git-submodule.sh:880
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
-msgstr "Không thể lấy vá» (fetch) trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
+msgstr "Không thể lấy vá» trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:871
+#: git-submodule.sh:894
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr "Không thể rebase “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:872
+#: git-submodule.sh:895
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€: được rebase vào trong “$sha1â€"
-#: git-submodule.sh:877
+#: git-submodule.sh:900
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr ""
"Không thể hòa trá»™n (merge) “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:878
+#: git-submodule.sh:901
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€: được hòa trá»™n vào “$sha1â€"
-#: git-submodule.sh:883
+#: git-submodule.sh:906
#, sh-format
msgid ""
"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
@@ -10774,69 +10852,82 @@ msgstr ""
"Thá»±c hiện không thành công lệnh “$command $sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con "
"“$prefix$sm_pathâ€"
-#: git-submodule.sh:884
+#: git-submodule.sh:907
#, sh-format
msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€: “$command $sha1â€"
-#: git-submodule.sh:889
+#: git-submodule.sh:912
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "Không thể checkout “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:890
+#: git-submodule.sh:913
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€: đã checkout “$sha1â€"
-#: git-submodule.sh:917
+#: git-submodule.sh:940
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "Gặp lá»—i khi đệ quy vào trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€"
-#: git-submodule.sh:1025
+#: git-submodule.sh:1048
msgid "The --cached option cannot be used with the --files option"
msgstr "Tùy chá»n --cached không thể dùng cùng vá»›i tùy chá»n --files"
#. unexpected type
-#: git-submodule.sh:1073
+#: git-submodule.sh:1096
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "chế độ không như mong chỠ$mod_dst"
-#: git-submodule.sh:1093
+#: git-submodule.sh:1116
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
-msgstr ""
-" Cảnh báo: $display_name không chứa lần chuyển giao (commit) $sha1_src"
+msgstr " Cảnh báo: $display_name không chứa lần chuyển giao $sha1_src"
-#: git-submodule.sh:1096
+#: git-submodule.sh:1119
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
-msgstr ""
-" Cảnh báo: $display_name không chứa lần chuyển giao (commit) $sha1_dst"
+msgstr " Cảnh báo: $display_name không chứa lần chuyển giao $sha1_dst"
-#: git-submodule.sh:1099
+#: git-submodule.sh:1122
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr ""
-" Cảnh báo: $display_name không chứa những lần chuyển giao (commit) "
-"$sha1_src và $sha1_dst"
+" Cảnh báo: $display_name không chứa những lần chuyển giao $sha1_src và "
+"$sha1_dst"
-#: git-submodule.sh:1124
+#: git-submodule.sh:1147
msgid "blob"
msgstr "blob"
-#: git-submodule.sh:1238
+#: git-submodule.sh:1261
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "Gặp lá»—i khi đệ quy vào trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_pathâ€"
-#: git-submodule.sh:1302
+#: git-submodule.sh:1325
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "Url Mô-Ä‘un-con đồng bá»™ hóa cho “$displaypathâ€"
+#~ msgid "copied: %s -> %s"
+#~ msgstr "đã sao chép: %s -> %s"
+
+#~ msgid "deleted: %s"
+#~ msgstr "đã xóa: %s"
+
+#~ msgid "modified: %s"
+#~ msgstr "đã sửa đổi: %s"
+
+#~ msgid "renamed: %s -> %s"
+#~ msgstr "đã đổi tên: %s -> %s"
+
+#~ msgid "unmerged: %s"
+#~ msgstr "chưa hòa trộn: %s"
+
#~ msgid "done\n"
#~ msgstr "xong\n"
@@ -10891,14 +10982,13 @@ msgstr "Url Mô-Ä‘un-con đồng bá»™ hóa cho “$displaypathâ€"
#~ msgstr "hiển thị tham chiếu của HEAD"
#~ msgid "Unable to fetch in submodule path '$prefix$sm_path'"
-#~ msgstr ""
-#~ "Không thể lấy vá» (fetch) trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€"
+#~ msgstr "Không thể lấy vá» trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€"
#~ msgid "Failed to recurse into submodule path '$prefix$sm_path'"
#~ msgstr "Gặp lá»—i khi đệ quy vào trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€"
#~ msgid "It took %.2f seconds to enumerate untracked files. 'status -uno'"
-#~ msgstr "Cần %.2f giây để đếm các tập tin chÆ°a được theo vết. “status -unoâ€"
+#~ msgstr "Cần %.2f giây để đếm các tập tin chÆ°a được theo dõi. “status -unoâ€"
#~ msgid "may speed it up, but you have to be careful not to forget to add"
#~ msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index b701086e3..094283571 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2013-11-02 08:06+0800\n"
-"PO-Revision-Date: 2013-11-02 08:14+0800\n"
+"POT-Creation-Date: 2014-02-01 08:06+0800\n"
+"PO-Revision-Date: 2014-02-03 10:53+0800\n"
"Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n"
"Language-Team: GitHub <https://github.com/gotgit/git/>\n"
"Language: zh_CN\n"
@@ -60,7 +60,7 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote <版本库> [--exec <命令>] --list"
-#: archive.c:242 builtin/add.c:240 builtin/add.c:556 builtin/rm.c:328
+#: archive.c:242 builtin/add.c:240 builtin/add.c:559 builtin/rm.c:328
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "路径规则 '%s' 未匹é…任何文件"
@@ -81,8 +81,8 @@ msgstr "å‰ç¼€"
msgid "prepend prefix to each pathname in the archive"
msgstr "为归档中æ¯ä¸ªè·¯å¾„å加上å‰ç¼€"
-#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2264
-#: builtin/blame.c:2265 builtin/config.c:58 builtin/fast-export.c:680
+#: archive.c:330 builtin/archive.c:88 builtin/blame.c:2265
+#: builtin/blame.c:2266 builtin/config.c:58 builtin/fast-export.c:680
#: builtin/fast-export.c:682 builtin/grep.c:716 builtin/hash-object.c:77
#: builtin/ls-files.c:486 builtin/ls-files.c:489 builtin/notes.c:408
#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:154
@@ -261,64 +261,64 @@ msgstr "无法为更新é”定引用"
msgid "Failed to write ref"
msgstr "ä¸èƒ½å†™å¼•ç”¨"
-#: bundle.c:36
+#: bundle.c:37
#, c-format
msgid "'%s' does not look like a v2 bundle file"
msgstr "'%s' ä¸åƒæ˜¯ä¸€ä¸ª v2 版本的包文件"
-#: bundle.c:63
+#: bundle.c:64
#, c-format
msgid "unrecognized header: %s%s (%d)"
msgstr "未能识别的包头:%s%s (%d)"
-#: bundle.c:89 builtin/commit.c:706
+#: bundle.c:90 builtin/commit.c:706
#, c-format
msgid "could not open '%s'"
msgstr "ä¸èƒ½æ‰“å¼€ '%s'"
-#: bundle.c:140
+#: bundle.c:141
msgid "Repository lacks these prerequisite commits:"
msgstr "版本库缺少这些必备的æ交:"
-#: bundle.c:164 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
-#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:364
+#: bundle.c:165 sequencer.c:662 sequencer.c:1112 builtin/log.c:332
+#: builtin/log.c:821 builtin/log.c:1418 builtin/log.c:1644 builtin/merge.c:357
#: builtin/shortlog.c:158
msgid "revision walk setup failed"
msgstr "版本é历设置失败"
-#: bundle.c:186
+#: bundle.c:187
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "这个包中å«æœ‰è¿™ä¸ªå¼•ç”¨ï¼š"
msgstr[1] "这个包中å«æœ‰ %d 个引用:"
-#: bundle.c:193
+#: bundle.c:194
msgid "The bundle records a complete history."
msgstr "这个包记录一个完整历å²ã€‚"
-#: bundle.c:195
+#: bundle.c:196
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "这个包需è¦è¿™ä¸ªå¼•ç”¨ï¼š"
msgstr[1] "è¿™ä¸ªåŒ…éœ€è¦ %d 个引用:"
-#: bundle.c:294
+#: bundle.c:296
msgid "rev-list died"
msgstr "rev-list 终止"
-#: bundle.c:300 builtin/log.c:1329 builtin/shortlog.c:261
+#: bundle.c:302 builtin/log.c:1329 builtin/shortlog.c:261
#, c-format
msgid "unrecognized argument: %s"
msgstr "未能识别的å‚数:%s"
-#: bundle.c:335
+#: bundle.c:337
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr "引用 '%s' 被 rev-list 选项排除"
-#: bundle.c:380
+#: bundle.c:382
msgid "Refusing to create empty bundle."
msgstr "ä¸èƒ½åˆ›å»ºç©ºåŒ…。"
@@ -353,16 +353,16 @@ msgstr "%s %s ä¸æ˜¯ä¸€ä¸ªæ交!"
msgid "memory exhausted"
msgstr "内存耗尽"
-#: connected.c:60
+#: connected.c:70
msgid "Could not run 'git rev-list'"
msgstr "ä¸èƒ½æ‰§è¡Œ 'git rev-list'"
-#: connected.c:80
+#: connected.c:90
#, c-format
msgid "failed write to rev-list: %s"
msgstr "无法写入 rev-list:%s"
-#: connected.c:88
+#: connected.c:98
#, c-format
msgid "failed to close rev-list's stdin: %s"
msgstr "无法关闭 rev-list 的标准输入:%s"
@@ -434,24 +434,29 @@ msgid_plural "%lu years ago"
msgstr[0] "%lu å¹´å‰"
msgstr[1] "%lu å¹´å‰"
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr "无法读å–排åºæ–‡ä»¶ '%s'"
+
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: diff.c:112
+#: diff.c:113
#, c-format
msgid " Failed to parse dirstat cut-off percentage '%s'\n"
msgstr " æ— æ³•è§£æž dirstat 截止(cut-off)百分比 '%s'\n"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: diff.c:117
+#: diff.c:118
#, c-format
msgid " Unknown dirstat parameter '%s'\n"
msgstr " 未知的 dirstat å‚æ•° '%s'\n"
-#: diff.c:210
+#: diff.c:213
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr "é…ç½®å˜é‡ 'diff.submodule' 未知的å–值:'%s'"
-#: diff.c:260
+#: diff.c:263
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -460,7 +465,7 @@ msgstr ""
"å‘现é…ç½®å˜é‡ 'diff.dirstat' 中的错误:\n"
"%s"
-#: diff.c:3490
+#: diff.c:3509
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -469,7 +474,7 @@ msgstr ""
"æ— æ³•è§£æž --dirstat/-X 选项的å‚数:\n"
"%s"
-#: diff.c:3504
+#: diff.c:3523
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "æ— æ³•è§£æž --submodule 选项的å‚数:'%s'"
@@ -580,7 +585,7 @@ msgid "failed to read the cache"
msgstr "无法读å–缓存"
#: merge.c:110 builtin/checkout.c:358 builtin/checkout.c:559
-#: builtin/clone.c:655
+#: builtin/clone.c:661
msgid "unable to write new index file"
msgstr "无法写新的索引文件"
@@ -629,7 +634,7 @@ msgstr "ä¸èƒ½è¯»å–对象 %s '%s'"
msgid "blob expected for %s '%s'"
msgstr "%s '%s' 应为数æ®ï¼ˆblob)对象"
-#: merge-recursive.c:774 builtin/clone.c:311
+#: merge-recursive.c:774 builtin/clone.c:317
#, c-format
msgid "failed to open '%s'"
msgstr "无法打开 '%s'"
@@ -679,7 +684,7 @@ msgstr ""
msgid "rename"
msgstr "é‡å‘½å"
-#: merge-recursive.c:1082
+#: merge-recursive.c:1082 wt-status.c:283
msgid "renamed"
msgstr "é‡å‘½å"
@@ -742,7 +747,7 @@ msgstr "对象 %s ä¸æ˜¯ä¸€ä¸ªæ•°æ®ï¼ˆblob)对象"
msgid "modify"
msgstr "修改"
-#: merge-recursive.c:1565
+#: merge-recursive.c:1565 wt-status.c:281
msgid "modified"
msgstr "修改"
@@ -764,7 +769,7 @@ msgstr "略过 %s(已ç»åšè¿‡ç›¸åŒåˆå¹¶ï¼‰"
msgid "Auto-merging %s"
msgstr "自动åˆå¹¶ %s"
-#: merge-recursive.c:1634 git-submodule.sh:1125
+#: merge-recursive.c:1634 git-submodule.sh:1148
msgid "submodule"
msgstr "å­æ¨¡ç»„"
@@ -834,7 +839,7 @@ msgstr "åˆå¹¶æœªè¿”回æ交"
msgid "Could not parse object '%s'"
msgstr "ä¸èƒ½è§£æžå¯¹è±¡ '%s'"
-#: merge-recursive.c:2010 builtin/merge.c:672
+#: merge-recursive.c:2010 builtin/merge.c:665
msgid "Unable to write index."
msgstr "ä¸èƒ½å†™å…¥ç´¢å¼•ã€‚"
@@ -890,46 +895,46 @@ msgstr " %s"
msgid "-NUM"
msgstr "-æ•°å­—"
-#: pathspec.c:118
+#: pathspec.c:133
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr "全局的 'glob' å’Œ 'noglob' 路径规则设置ä¸å…¼å®¹"
-#: pathspec.c:128
+#: pathspec.c:143
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
msgstr "全局的 'literal' 路径规则设置和其它的全局路径规则设置ä¸å…¼å®¹"
-#: pathspec.c:158
+#: pathspec.c:177
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "路径规则包å«æ— æ•ˆçš„神奇å‰ç¼€"
-#: pathspec.c:164
+#: pathspec.c:183
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "在路径规则 '%3$s' 中无效的神奇å‰ç¼€ '%2$.*1$s'"
-#: pathspec.c:168
+#: pathspec.c:187
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "路径规则 '%s' 的神奇å‰ç¼€ç»“尾少了一个 ')'"
-#: pathspec.c:186
+#: pathspec.c:205
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "路径规则 '%2$s' 中包å«æœªå®žçŽ°çš„神奇å‰ç¼€ '%1$c'"
-#: pathspec.c:211
+#: pathspec.c:230
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s:'literal' å’Œ 'glob' ä¸å…¼å®¹"
-#: pathspec.c:222
+#: pathspec.c:241
#, c-format
msgid "%s: '%s' is outside repository"
msgstr "%s:'%s' 在版本库之外"
-#: pathspec.c:278
+#: pathspec.c:291
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "路径规则 '%s' 在å­æ¨¡ç»„ '%.*s' 中"
@@ -939,42 +944,74 @@ msgstr "路径规则 '%s' 在å­æ¨¡ç»„ '%.*s' 中"
#. * name. E.g. when add--interactive dies when running
#. * "checkout -p"
#.
-#: pathspec.c:340
+#: pathspec.c:353
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr "%s:路径规则神奇å‰ç¼€ä¸è¢«æ­¤å‘½ä»¤æ”¯æŒï¼š%s"
-#: pathspec.c:415
+#: pathspec.c:433
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "路径规则 '%s' ä½äºŽç¬¦å·é“¾æŽ¥ä¸­"
-#: remote.c:1833
+#: pathspec.c:442
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr ""
+"没有为 :(exclude) 模å¼æä¾›è¦å¿½ç•¥çš„内容。也许您忘记了\n"
+"添加 ':/' 或 '.' ?"
+
+#: remote.c:753
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "ä¸èƒ½åŒæ—¶èŽ·å– %s å’Œ %s 至 %s"
+
+#: remote.c:757
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s 通常跟踪 %sï¼Œè€Œéž %s"
+
+#: remote.c:761
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "%s åŒæ—¶è·Ÿè¸ª %s å’Œ %s"
+
+#.
+#. * This last possibility doesn't occur because
+#. * FETCH_HEAD_IGNORE entries always appear at
+#. * the end of the list.
+#.
+#: remote.c:769
+msgid "Internal error"
+msgstr "内部错误"
+
+#: remote.c:1871
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "您的分支基于 '%s',但此上游分支已ç»ä¸å­˜åœ¨ã€‚\n"
-#: remote.c:1837
+#: remote.c:1875
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (使用 \"git branch --unset-upstream\" æ¥ä¿®å¤ï¼‰\n"
-#: remote.c:1840
+#: remote.c:1878
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr "您的分支与上游分支 '%s' 一致。\n"
-#: remote.c:1844
+#: remote.c:1882
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] "您的分支领先 '%s' å…± %d 个æ交。\n"
msgstr[1] "您的分支领先 '%s' å…± %d 个æ交。\n"
-#: remote.c:1850
+#: remote.c:1888
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (使用 \"git push\" æ¥å‘布您的本地æ交)\n"
-#: remote.c:1853
+#: remote.c:1891
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -983,11 +1020,11 @@ msgstr[0] "您的分支è½åŽ '%s' å…± %d 个æ交,并且å¯ä»¥å¿«è¿›ã€‚\n"
msgstr[1] "您的分支è½åŽ '%s' å…± %d 个æ交,并且å¯ä»¥å¿«è¿›ã€‚\n"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: remote.c:1861
+#: remote.c:1899
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (使用 \"git pull\" æ¥æ›´æ–°æ‚¨çš„本地分支)\n"
-#: remote.c:1864
+#: remote.c:1902
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -1003,7 +1040,7 @@ msgstr[1] ""
"并且分别有 %d å’Œ %d 处ä¸åŒçš„æ交。\n"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: remote.c:1874
+#: remote.c:1912
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (使用 \"git pull\" æ¥åˆå¹¶è¿œç¨‹åˆ†æ”¯ï¼‰\n"
@@ -1016,14 +1053,14 @@ msgstr "ä¸èƒ½æ‰“å¼€ /dev/null"
msgid "dup2(%d,%d) failed"
msgstr "ä¸èƒ½è°ƒç”¨ dup2(%d,%d)"
-#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903
-#: builtin/merge.c:1013 builtin/merge.c:1023
+#: sequencer.c:206 builtin/merge.c:783 builtin/merge.c:896
+#: builtin/merge.c:1006 builtin/merge.c:1016
#, c-format
msgid "Could not open '%s' for writing"
msgstr "ä¸èƒ½ä¸ºå†™å…¥æ‰“å¼€ '%s'"
-#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793
-#: builtin/merge.c:1015 builtin/merge.c:1028
+#: sequencer.c:208 builtin/merge.c:343 builtin/merge.c:786
+#: builtin/merge.c:1008 builtin/merge.c:1021
#, c-format
msgid "Could not write to '%s'"
msgstr "ä¸èƒ½å†™å…¥ '%s'"
@@ -1262,7 +1299,7 @@ msgstr "ä¸èƒ½ä½œä¸ºåˆå§‹æ交还原"
msgid "Can't cherry-pick into empty head"
msgstr "ä¸èƒ½æ‹£é€‰åˆ°ç©ºåˆ†æ”¯"
-#: sha1_name.c:440
+#: sha1_name.c:439
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -1283,21 +1320,21 @@ msgstr ""
"å¯èƒ½éœ€è¦åˆ é™¤å®ƒä»¬ã€‚用 \"git config advice.objectNameWarning false\"\n"
"命令关闭本消æ¯é€šçŸ¥ã€‚"
-#: sha1_name.c:1112
+#: sha1_name.c:1070
msgid "HEAD does not point to a branch"
msgstr "HEAD 没有指å‘一个分支"
-#: sha1_name.c:1115
+#: sha1_name.c:1073
#, c-format
msgid "No such branch: '%s'"
msgstr "没有此分支:'%s'"
-#: sha1_name.c:1117
+#: sha1_name.c:1075
#, c-format
msgid "No upstream configured for branch '%s'"
msgstr "尚未给分支 '%s' 设置上游"
-#: sha1_name.c:1121
+#: sha1_name.c:1079
#, c-format
msgid "Upstream branch '%s' not stored as a remote-tracking branch"
msgstr "上游分支 '%s' 没有存储为一个远程跟踪分支"
@@ -1405,371 +1442,358 @@ msgstr "无法在å£ä»¤æ–‡ä»¶ä¸­æŸ¥è¯¢åˆ°å½“å‰ç”¨æˆ·ï¼š%s"
msgid "no such user"
msgstr "无此用户"
-#: wt-status.c:146
+#: wt-status.c:150
msgid "Unmerged paths:"
msgstr "未åˆå¹¶çš„路径:"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:173 wt-status.c:200
+#: wt-status.c:177 wt-status.c:204
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
msgstr " (使用 \"git reset %s <file>...\" 撤出暂存区)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:175 wt-status.c:202
+#: wt-status.c:179 wt-status.c:206
msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr " (使用 \"git rm --cached <file>...\" 撤出暂存区)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:179
+#: wt-status.c:183
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr " (使用 \"git add <file>...\" 标记解决方案)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:181 wt-status.c:185
+#: wt-status.c:185 wt-status.c:189
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr " (酌情使用 \"git add/rm <file>...\" 标记解决方案)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:183
+#: wt-status.c:187
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr " (使用 \"git rm <file>...\" 标记解决方案)"
-#: wt-status.c:194
+#: wt-status.c:198
msgid "Changes to be committed:"
msgstr "è¦æ交的å˜æ›´ï¼š"
-#: wt-status.c:212
+#: wt-status.c:216
msgid "Changes not staged for commit:"
msgstr "尚未暂存以备æ交的å˜æ›´ï¼š"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:216
+#: wt-status.c:220
msgid " (use \"git add <file>...\" to update what will be committed)"
msgstr " (使用 \"git add <file>...\" æ›´æ–°è¦æ交的内容)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:218
+#: wt-status.c:222
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr " (使用 \"git add/rm <file>...\" æ›´æ–°è¦æ交的内容)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:219
+#: wt-status.c:223
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr " (使用 \"git checkout -- <file>...\" 丢弃工作区的改动)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:221
+#: wt-status.c:225
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr " (æ交或丢弃å­æ¨¡ç»„中未跟踪或修改的内容)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:233
+#: wt-status.c:237
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr " (使用 \"git %s <file>...\" 以包å«è¦æ交的内容)"
-#: wt-status.c:250
+#: wt-status.c:254
msgid "bug"
msgstr "bug"
-#: wt-status.c:255
+#: wt-status.c:259
msgid "both deleted:"
msgstr "åŒæ–¹åˆ é™¤ï¼š"
-#: wt-status.c:256
+#: wt-status.c:260
msgid "added by us:"
msgstr "由我们添加:"
-#: wt-status.c:257
+#: wt-status.c:261
msgid "deleted by them:"
msgstr "由他们删除:"
-#: wt-status.c:258
+#: wt-status.c:262
msgid "added by them:"
msgstr "由他们添加:"
-#: wt-status.c:259
+#: wt-status.c:263
msgid "deleted by us:"
msgstr "由我们删除:"
-#: wt-status.c:260
+#: wt-status.c:264
msgid "both added:"
msgstr "åŒæ–¹æ·»åŠ ï¼š"
-#: wt-status.c:261
+#: wt-status.c:265
msgid "both modified:"
msgstr "åŒæ–¹ä¿®æ”¹ï¼š"
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#: wt-status.c:275
+msgid "new file"
+msgstr "新文件"
+
+#: wt-status.c:277
+msgid "copied"
+msgstr "æ‹·è´"
+
+#: wt-status.c:279
+msgid "deleted"
+msgstr "删除"
+
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#: wt-status.c:285
+msgid "typechange"
+msgstr "类型å˜æ›´"
+
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#: wt-status.c:287
+msgid "unknown"
+msgstr "未知"
+
+#: wt-status.c:289
+msgid "unmerged"
+msgstr "未åˆå¹¶"
+
# 译者:末尾两个字节å¯èƒ½è¢«åˆ å‡ï¼Œå¦‚果翻译为中文标点会出现åŠä¸ªæ±‰å­—
-#: wt-status.c:291
+#: wt-status.c:336
msgid "new commits, "
msgstr "æ–°æ交, "
# 译者:末尾两个字节å¯èƒ½è¢«åˆ å‡ï¼Œå¦‚果翻译为中文标点会出现åŠä¸ªæ±‰å­—
-#: wt-status.c:293
+#: wt-status.c:338
msgid "modified content, "
msgstr "修改的内容, "
# 译者:末尾两个字节å¯èƒ½è¢«åˆ å‡ï¼Œå¦‚果翻译为中文标点会出现åŠä¸ªæ±‰å­—
-#: wt-status.c:295
+#: wt-status.c:340
msgid "untracked content, "
msgstr "未跟踪的内容, "
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:312
-#, c-format
-msgid "new file: %s"
-msgstr "新文件: %s"
-
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:315
-#, c-format
-msgid "copied: %s -> %s"
-msgstr "æ‹·è´ï¼š %s -> %s"
-
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:318
-#, c-format
-msgid "deleted: %s"
-msgstr "删除: %s"
-
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:321
-#, c-format
-msgid "modified: %s"
-msgstr "修改: %s"
-
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:324
-#, c-format
-msgid "renamed: %s -> %s"
-msgstr "é‡å‘½å: %s -> %s"
-
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:327
-#, c-format
-msgid "typechange: %s"
-msgstr "类型å˜æ›´ï¼š %s"
-
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:330
-#, c-format
-msgid "unknown: %s"
-msgstr "未知: %s"
-
-# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
-#: wt-status.c:333
-#, c-format
-msgid "unmerged: %s"
-msgstr "未åˆå¹¶ï¼š %s"
-
-#: wt-status.c:336
+#: wt-status.c:357
#, c-format
msgid "bug: unhandled diff status %c"
msgstr "bug:未处ç†çš„å·®å¼‚çŠ¶æ€ %c"
-#: wt-status.c:703
+#: wt-status.c:732
msgid "Submodules changed but not updated:"
msgstr "å­æ¨¡ç»„已修改但尚未更新:"
-#: wt-status.c:705
+#: wt-status.c:734
msgid "Submodule changes to be committed:"
msgstr "è¦æ交的å­æ¨¡ç»„å˜æ›´ï¼š"
-#: wt-status.c:848
+#: wt-status.c:836
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr ""
+"ä¸è¦æ”¹åŠ¨ä¸Šé¢çš„一行。\n"
+"下é¢çš„所有内容å‡å°†è¢«åˆ é™¤ã€‚"
+
+#: wt-status.c:899
msgid "You have unmerged paths."
msgstr "您有尚未åˆå¹¶çš„路径。"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:851
+#: wt-status.c:902
msgid " (fix conflicts and run \"git commit\")"
msgstr " (解决冲çªå¹¶è¿è¡Œ \"git commit\")"
-#: wt-status.c:854
+#: wt-status.c:905
msgid "All conflicts fixed but you are still merging."
msgstr "所有冲çªå·²è§£å†³ä½†æ‚¨ä»å¤„于åˆå¹¶ä¸­ã€‚"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:857
+#: wt-status.c:908
msgid " (use \"git commit\" to conclude merge)"
msgstr " (使用 \"git commit\" 结æŸåˆå¹¶ï¼‰"
-#: wt-status.c:867
+#: wt-status.c:918
msgid "You are in the middle of an am session."
-msgstr "您正处于一个 am 过程中。"
+msgstr "您正处于 am æ“作过程中。"
-#: wt-status.c:870
+#: wt-status.c:921
msgid "The current patch is empty."
msgstr "当å‰çš„è¡¥ä¸ä¸ºç©ºã€‚"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:874
+#: wt-status.c:925
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (解决冲çªï¼Œç„¶åŽè¿è¡Œ \"git am --continue\")"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:876
+#: wt-status.c:927
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (使用 \"git am --skip\" 跳过此补ä¸ï¼‰"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:878
+#: wt-status.c:929
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr " (使用 \"git am --abort\" æ¢å¤åŽŸæœ‰åˆ†æ”¯ï¼‰"
-#: wt-status.c:938 wt-status.c:955
+#: wt-status.c:989 wt-status.c:1006
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
-msgstr "您正在将分支 '%s' å˜åŸºåˆ° '%s'。"
+msgstr "您在执行将分支 '%s' å˜åŸºåˆ° '%s' çš„æ“作。"
-#: wt-status.c:943 wt-status.c:960
+#: wt-status.c:994 wt-status.c:1011
msgid "You are currently rebasing."
-msgstr "您正在å˜åŸºã€‚"
+msgstr "您在执行å˜åŸºæ“作。"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:946
+#: wt-status.c:997
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (解决冲çªï¼Œç„¶åŽè¿è¡Œ \"git rebase --continue\")"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:948
+#: wt-status.c:999
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (使用 \"git rebase --skip\" 跳过此补ä¸ï¼‰"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:950
+#: wt-status.c:1001
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr " (使用 \"git rebase --abort\" 以检出原有分支)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:963
+#: wt-status.c:1014
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (所有冲çªå·²è§£å†³ï¼šè¿è¡Œ \"git rebase --continue\")"
-#: wt-status.c:967
+#: wt-status.c:1018
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
-msgstr "您正在将分支 '%s' å˜åŸºåˆ° '%s' 过程中拆分一个æ交。"
+msgstr "您在执行将分支 '%s' å˜åŸºåˆ° '%s' çš„æ“作时拆分æ交。"
-#: wt-status.c:972
+#: wt-status.c:1023
msgid "You are currently splitting a commit during a rebase."
-msgstr "您正在å˜åŸºè¿‡ç¨‹ä¸­æ‹†åˆ†ä¸€ä¸ªæ交。"
+msgstr "您在执行å˜åŸºæ“作时拆分æ交。"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:975
+#: wt-status.c:1026
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr " (一旦您工作目录æ交干净åŽï¼Œè¿è¡Œ \"git rebase --continue\")"
-#: wt-status.c:979
+#: wt-status.c:1030
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
-msgstr "您正在将分支 '%s' å˜åŸºåˆ° '%s' 过程中编辑一个æ交。"
+msgstr "您在执行将分支 '%s' å˜åŸºåˆ° '%s' çš„æ“作时编辑æ交。"
-#: wt-status.c:984
+#: wt-status.c:1035
msgid "You are currently editing a commit during a rebase."
-msgstr "您正在å˜åŸºè¿‡ç¨‹ä¸­ç¼–辑一个æ交。"
+msgstr "您在执行å˜åŸºæ“作时编辑æ交。"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:987
+#: wt-status.c:1038
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr " (使用 \"git commit --amend\" 修补当å‰æ交)"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:989
+#: wt-status.c:1040
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr " (当您对您的修改满æ„åŽæ‰§è¡Œ \"git rebase --continue\")"
-#: wt-status.c:999
+#: wt-status.c:1050
#, c-format
msgid "You are currently cherry-picking commit %s."
-msgstr "您正在åšæ‹£é€‰æ交 %s。"
+msgstr "您在执行拣选æ交 %s çš„æ“作。"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:1004
+#: wt-status.c:1055
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (解决冲çªå¹¶è¿è¡Œ \"git cherry-pick --continue\")"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:1007
+#: wt-status.c:1058
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr " (所有冲çªå·²è§£å†³ï¼šè¿è¡Œ \"git cherry-pick --continue\")"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:1009
+#: wt-status.c:1060
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr " (使用 \"git cherry-pick --abort\" 以å–消拣选æ“作)"
-#: wt-status.c:1018
+#: wt-status.c:1069
#, c-format
msgid "You are currently reverting commit %s."
-msgstr "您正在å转æ交 %s 。"
+msgstr "您在执行å转æ交 %s çš„æ“作。"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:1023
+#: wt-status.c:1074
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (解决冲çªå¹¶è¿è¡Œ \"git revert --continue\")"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:1026
+#: wt-status.c:1077
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (所有冲çªå·²è§£å†³ï¼šè¿è¡Œ \"git revert --continue\")"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:1028
+#: wt-status.c:1079
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr " (使用 \"git revert --abort\" 以å–消å转æ交æ“作)"
-#: wt-status.c:1039
+#: wt-status.c:1090
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
-msgstr "您正在从分支 '%s' 开始åšäºŒåˆ†æŸ¥æ‰¾ã€‚"
+msgstr "您在执行从分支 '%s' 开始的二分查找æ“作。"
-#: wt-status.c:1043
+#: wt-status.c:1094
msgid "You are currently bisecting."
-msgstr "您正在åšäºŒåˆ†æŸ¥æ‰¾ã€‚"
+msgstr "您在执行二分查找æ“作。"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: wt-status.c:1046
+#: wt-status.c:1097
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr " (使用 \"git bisect reset\" 以回到原有分支)"
-#: wt-status.c:1221
+#: wt-status.c:1272
msgid "On branch "
msgstr "ä½äºŽåˆ†æ”¯ "
-#: wt-status.c:1228
+#: wt-status.c:1279
msgid "rebase in progress; onto "
-msgstr "å˜åŸºæ­£åœ¨è¿›è¡Œä¸­ï¼›è‡³ "
+msgstr "å˜åŸºæ“作正在进行中;至 "
-#: wt-status.c:1235
+#: wt-status.c:1286
msgid "HEAD detached at "
msgstr "头指针分离于 "
-#: wt-status.c:1237
+#: wt-status.c:1288
msgid "HEAD detached from "
msgstr "头指针分离自 "
-#: wt-status.c:1240
+#: wt-status.c:1291
msgid "Not currently on any branch."
msgstr "当å‰ä¸åœ¨ä»»ä½•åˆ†æ”¯ä¸Šã€‚"
-#: wt-status.c:1257
+#: wt-status.c:1308
msgid "Initial commit"
msgstr "åˆå§‹æ交"
-#: wt-status.c:1271
+#: wt-status.c:1322
msgid "Untracked files"
msgstr "未跟踪的文件"
-#: wt-status.c:1273
+#: wt-status.c:1324
msgid "Ignored files"
msgstr "忽略的文件"
-#: wt-status.c:1277
+#: wt-status.c:1328
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1779,94 +1803,94 @@ msgstr ""
"耗费了 %.2f 秒以枚举未跟踪的文件。'status -uno' 也许能æ高速度,\n"
"但您需è¦å°å¿ƒä¸è¦å¿˜äº†æ·»åŠ æ–°æ–‡ä»¶ï¼ˆå‚è§ 'git help status')。"
-#: wt-status.c:1283
+#: wt-status.c:1334
#, c-format
msgid "Untracked files not listed%s"
msgstr "未跟踪的文件没有列出%s"
# 译者:中文字符串拼接,å¯åˆ é™¤å‰å¯¼ç©ºæ ¼
-#: wt-status.c:1285
+#: wt-status.c:1336
msgid " (use -u option to show untracked files)"
msgstr "(使用 -u å‚数显示未跟踪的文件)"
-#: wt-status.c:1291
+#: wt-status.c:1342
msgid "No changes"
msgstr "没有修改"
-#: wt-status.c:1296
+#: wt-status.c:1347
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr "修改尚未加入æ交(使用 \"git add\" å’Œ/或 \"git commit -a\")\n"
-#: wt-status.c:1299
+#: wt-status.c:1350
#, c-format
msgid "no changes added to commit\n"
msgstr "修改尚未加入æ交\n"
-#: wt-status.c:1302
+#: wt-status.c:1353
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
"track)\n"
msgstr "æ交为空,但是存在尚未跟踪的文件(使用 \"git add\" 建立跟踪)\n"
-#: wt-status.c:1305
+#: wt-status.c:1356
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "æ交为空,但是存在尚未跟踪的文件\n"
# 译者:中文字符串拼接,å¯åˆ é™¤å‰å¯¼ç©ºæ ¼
-#: wt-status.c:1308
+#: wt-status.c:1359
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr "无文件è¦æ交(创建/æ‹·è´æ–‡ä»¶å¹¶ä½¿ç”¨ \"git add\" 建立跟踪)\n"
-#: wt-status.c:1311 wt-status.c:1316
+#: wt-status.c:1362 wt-status.c:1367
#, c-format
msgid "nothing to commit\n"
msgstr "无文件è¦æ交\n"
# 译者:中文字符串拼接,å¯åˆ é™¤å‰å¯¼ç©ºæ ¼
-#: wt-status.c:1314
+#: wt-status.c:1365
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr "无文件è¦æ交(使用 -u 显示未跟踪的文件)\n"
# 译者:中文字符串拼接,å¯åˆ é™¤å‰å¯¼ç©ºæ ¼
-#: wt-status.c:1318
+#: wt-status.c:1369
#, c-format
msgid "nothing to commit, working directory clean\n"
msgstr "无文件è¦æ交,干净的工作区\n"
-#: wt-status.c:1427
+#: wt-status.c:1478
msgid "HEAD (no branch)"
msgstr "HEAD(éžåˆ†æ”¯ï¼‰"
# 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼
-#: wt-status.c:1433
+#: wt-status.c:1484
msgid "Initial commit on "
msgstr "åˆå§‹æ交于 "
-#: wt-status.c:1463
+#: wt-status.c:1514
msgid "gone"
msgstr "丢失"
# 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼
-#: wt-status.c:1465
+#: wt-status.c:1516
msgid "behind "
msgstr "è½åŽ "
# 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼
-#: wt-status.c:1468 wt-status.c:1471
+#: wt-status.c:1519 wt-status.c:1522
msgid "ahead "
msgstr "领先 "
# 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼
-#: wt-status.c:1473
+#: wt-status.c:1524
msgid ", behind "
msgstr ",è½åŽ "
-#: compat/precompose_utf8.c:55 builtin/clone.c:350
+#: compat/precompose_utf8.c:55 builtin/clone.c:356
#, c-format
msgid "failed to unlink '%s'"
msgstr "无法删除 '%s'"
@@ -1995,15 +2019,15 @@ msgstr "ä¸èƒ½åº”用 '%s'"
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr "下列路径根æ®æ‚¨çš„一个 .gitignore 文件而被忽略:\n"
-#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:92 builtin/mv.c:66
-#: builtin/prune-packed.c:73 builtin/push.c:459 builtin/remote.c:1253
+#: builtin/add.c:354 builtin/clean.c:875 builtin/fetch.c:93 builtin/mv.c:70
+#: builtin/prune-packed.c:77 builtin/push.c:506 builtin/remote.c:1344
#: builtin/rm.c:269
msgid "dry run"
msgstr "演习"
#: builtin/add.c:355 builtin/apply.c:4410 builtin/check-ignore.c:19
#: builtin/commit.c:1249 builtin/count-objects.c:95 builtin/fsck.c:612
-#: builtin/log.c:1592 builtin/mv.c:65 builtin/read-tree.c:113
+#: builtin/log.c:1592 builtin/mv.c:69 builtin/read-tree.c:113
msgid "be verbose"
msgstr "冗长输出"
@@ -2084,11 +2108,11 @@ msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "也许您想è¦æ‰§è¡Œ 'git add .'?\n"
#: builtin/add.c:492 builtin/check-ignore.c:172 builtin/clean.c:919
-#: builtin/commit.c:320 builtin/mv.c:86 builtin/reset.c:224 builtin/rm.c:299
+#: builtin/commit.c:320 builtin/mv.c:90 builtin/reset.c:224 builtin/rm.c:299
msgid "index file corrupt"
msgstr "索引文件æŸå"
-#: builtin/add.c:589 builtin/apply.c:4506 builtin/mv.c:259 builtin/rm.c:432
+#: builtin/add.c:592 builtin/apply.c:4506 builtin/mv.c:270 builtin/rm.c:432
msgid "Unable to write new index file"
msgstr "无法写入新索引文件"
@@ -2417,7 +2441,7 @@ msgid "unable to read index file"
msgstr "无法读å–索引文件"
#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:90
-#: builtin/fetch.c:77
+#: builtin/fetch.c:78
msgid "path"
msgstr "路径"
@@ -2615,95 +2639,95 @@ msgstr "git blame [选项] [版本选项] [版本] [--] 文件"
msgid "[rev-opts] are documented in git-rev-list(1)"
msgstr "[版本选项] 的文档记录在 git-rev-list(1) 中"
-#: builtin/blame.c:2248
+#: builtin/blame.c:2249
msgid "Show blame entries as we find them, incrementally"
msgstr "增é‡å¼åœ°æ˜¾ç¤ºå‘现的 blame æ¡ç›®"
-#: builtin/blame.c:2249
+#: builtin/blame.c:2250
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr "边界æ交显示空的 SHA-1(默认:关闭)"
-#: builtin/blame.c:2250
+#: builtin/blame.c:2251
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr "ä¸æŠŠæ ¹æ交作为边界(默认:关闭)"
-#: builtin/blame.c:2251
+#: builtin/blame.c:2252
msgid "Show work cost statistics"
msgstr "显示命令消耗统计"
-#: builtin/blame.c:2252
+#: builtin/blame.c:2253
msgid "Show output score for blame entries"
msgstr "显示判断 blame æ¡ç›®ä½ç§»çš„得分诊断信æ¯"
-#: builtin/blame.c:2253
+#: builtin/blame.c:2254
msgid "Show original filename (Default: auto)"
msgstr "显示原始文件å(默认:自动)"
-#: builtin/blame.c:2254
+#: builtin/blame.c:2255
msgid "Show original linenumber (Default: off)"
msgstr "显示原始的行å·ï¼ˆé»˜è®¤ï¼šå…³é—­ï¼‰"
-#: builtin/blame.c:2255
+#: builtin/blame.c:2256
msgid "Show in a format designed for machine consumption"
msgstr "显示为一个适åˆæœºå™¨è¯»å–çš„æ ¼å¼"
-#: builtin/blame.c:2256
+#: builtin/blame.c:2257
msgid "Show porcelain format with per-line commit information"
msgstr "为æ¯ä¸€è¡Œæ˜¾ç¤ºæœºå™¨é€‚用的æ交信æ¯"
-#: builtin/blame.c:2257
+#: builtin/blame.c:2258
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr "使用和 git-annotate 相åŒçš„输出模å¼ï¼ˆé»˜è®¤ï¼šå…³é—­ï¼‰"
-#: builtin/blame.c:2258
+#: builtin/blame.c:2259
msgid "Show raw timestamp (Default: off)"
msgstr "显示原始时间戳(默认:关闭)"
-#: builtin/blame.c:2259
+#: builtin/blame.c:2260
msgid "Show long commit SHA1 (Default: off)"
msgstr "显示长的SHA1æ交å·ï¼ˆé»˜è®¤ï¼šå…³é—­ï¼‰"
-#: builtin/blame.c:2260
+#: builtin/blame.c:2261
msgid "Suppress author name and timestamp (Default: off)"
msgstr "éšè—作者å字和时间戳(默认:关闭)"
-#: builtin/blame.c:2261
+#: builtin/blame.c:2262
msgid "Show author email instead of name (Default: off)"
msgstr "显示作者的邮箱而ä¸æ˜¯å字(默认:关闭)"
-#: builtin/blame.c:2262
+#: builtin/blame.c:2263
msgid "Ignore whitespace differences"
msgstr "忽略空白差异"
-#: builtin/blame.c:2263
+#: builtin/blame.c:2264
msgid "Spend extra cycles to find better match"
msgstr "花费é¢å¤–的循环æ¥æ‰¾åˆ°æ›´å¥½çš„匹é…"
-#: builtin/blame.c:2264
+#: builtin/blame.c:2265
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "使用æ¥è‡ª <file> 的修订集而ä¸æ˜¯è°ƒç”¨ git-rev-list"
-#: builtin/blame.c:2265
+#: builtin/blame.c:2266
msgid "Use <file>'s contents as the final image"
msgstr "使用 <file> 的内容作为最终的图片"
-#: builtin/blame.c:2266 builtin/blame.c:2267
+#: builtin/blame.c:2267 builtin/blame.c:2268
msgid "score"
msgstr "得分"
-#: builtin/blame.c:2266
+#: builtin/blame.c:2267
msgid "Find line copies within and across files"
msgstr "找到文件内åŠè·¨æ–‡ä»¶çš„行拷è´"
-#: builtin/blame.c:2267
+#: builtin/blame.c:2268
msgid "Find line movements within and across files"
msgstr "找到文件内åŠè·¨æ–‡ä»¶çš„行移动"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2268
+#: builtin/blame.c:2269
msgid "Process only line range n,m, counting from 1"
msgstr "åªå¤„ç†è¡ŒèŒƒå›´åœ¨ n å’Œ m 之间的,从 1 开始"
@@ -2809,285 +2833,285 @@ msgstr "已删除分支 %s(曾为 %s)。\n"
msgid "branch '%s' does not point at a commit"
msgstr "分支 '%s' 未指å‘一个æ交"
-#: builtin/branch.c:453
+#: builtin/branch.c:454
#, c-format
msgid "[%s: gone]"
msgstr "[%s: 丢失]"
-#: builtin/branch.c:456
+#: builtin/branch.c:459
#, c-format
msgid "[%s]"
msgstr "[%s]"
-#: builtin/branch.c:459
+#: builtin/branch.c:464
#, c-format
msgid "[%s: behind %d]"
msgstr "[%s:è½åŽ %d]"
-#: builtin/branch.c:461
+#: builtin/branch.c:466
#, c-format
msgid "[behind %d]"
msgstr "[è½åŽ %d]"
-#: builtin/branch.c:465
+#: builtin/branch.c:470
#, c-format
msgid "[%s: ahead %d]"
msgstr "[%s:领先 %d]"
-#: builtin/branch.c:467
+#: builtin/branch.c:472
#, c-format
msgid "[ahead %d]"
msgstr "[领先 %d]"
-#: builtin/branch.c:470
+#: builtin/branch.c:475
#, c-format
msgid "[%s: ahead %d, behind %d]"
msgstr "[%s:领先 %d,è½åŽ %d]"
-#: builtin/branch.c:473
+#: builtin/branch.c:478
#, c-format
msgid "[ahead %d, behind %d]"
msgstr "[领先 %d,è½åŽ %d]"
-#: builtin/branch.c:496
+#: builtin/branch.c:502
msgid " **** invalid ref ****"
msgstr " **** 无效引用 ****"
-#: builtin/branch.c:588
+#: builtin/branch.c:594
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(éžåˆ†æ”¯ï¼Œæ­£å˜åŸº %s)"
-#: builtin/branch.c:591
+#: builtin/branch.c:597
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(éžåˆ†æ”¯ï¼ŒäºŒåˆ†æŸ¥æ‰¾å¼€å§‹äºŽ %s)"
-#: builtin/branch.c:594
+#: builtin/branch.c:600
#, c-format
msgid "(detached from %s)"
msgstr "(分离自 %s)"
-#: builtin/branch.c:597
+#: builtin/branch.c:603
msgid "(no branch)"
msgstr "(éžåˆ†æ”¯ï¼‰"
-#: builtin/branch.c:643
+#: builtin/branch.c:649
#, c-format
msgid "object '%s' does not point to a commit"
msgstr "对象 '%s' 没有指å‘一个æ交"
-#: builtin/branch.c:675
+#: builtin/branch.c:681
msgid "some refs could not be read"
msgstr "一些引用ä¸èƒ½è¯»å–"
-#: builtin/branch.c:688
+#: builtin/branch.c:694
msgid "cannot rename the current branch while not on any."
msgstr "无法é‡å‘½å当å‰åˆ†æ”¯å› ä¸ºä¸å¤„于任何分支上。"
-#: builtin/branch.c:698
+#: builtin/branch.c:704
#, c-format
msgid "Invalid branch name: '%s'"
msgstr "无效的分支å:'%s'"
-#: builtin/branch.c:713
+#: builtin/branch.c:719
msgid "Branch rename failed"
msgstr "分支é‡å‘½å失败"
-#: builtin/branch.c:717
+#: builtin/branch.c:723
#, c-format
msgid "Renamed a misnamed branch '%s' away"
msgstr "é‡å‘½å掉一个错误命å的旧分支 '%s'"
-#: builtin/branch.c:721
+#: builtin/branch.c:727
#, c-format
msgid "Branch renamed to %s, but HEAD is not updated!"
msgstr "分支é‡å‘½å为 %s,但 HEAD 没有更新ï¼"
-#: builtin/branch.c:728
+#: builtin/branch.c:734
msgid "Branch is renamed, but update of config-file failed"
msgstr "分支被é‡å‘½å,但更新 config 文件失败"
-#: builtin/branch.c:743
+#: builtin/branch.c:749
#, c-format
msgid "malformed object name %s"
msgstr "éžæ³•çš„对象å %s"
-#: builtin/branch.c:767
+#: builtin/branch.c:773
#, c-format
msgid "could not write branch description template: %s"
msgstr "ä¸èƒ½å†™åˆ†æ”¯æ述模版:%s"
-#: builtin/branch.c:797
+#: builtin/branch.c:803
msgid "Generic options"
msgstr "通用选项"
-#: builtin/branch.c:799
+#: builtin/branch.c:805
msgid "show hash and subject, give twice for upstream branch"
msgstr "显示哈希值和主题,若å‚数出现两次则显示上游分支"
-#: builtin/branch.c:800
+#: builtin/branch.c:806
msgid "suppress informational messages"
msgstr "ä¸æ˜¾ç¤ºä¿¡æ¯"
-#: builtin/branch.c:801
+#: builtin/branch.c:807
msgid "set up tracking mode (see git-pull(1))"
msgstr "设置跟踪模å¼ï¼ˆå‚è§ git-pull(1))"
-#: builtin/branch.c:803
+#: builtin/branch.c:809
msgid "change upstream info"
msgstr "改å˜ä¸Šæ¸¸ä¿¡æ¯"
-#: builtin/branch.c:807
+#: builtin/branch.c:813
msgid "use colored output"
msgstr "使用彩色输出"
-#: builtin/branch.c:808
+#: builtin/branch.c:814
msgid "act on remote-tracking branches"
msgstr "作用于远程跟踪分支"
-#: builtin/branch.c:811 builtin/branch.c:817 builtin/branch.c:838
-#: builtin/branch.c:844 builtin/commit.c:1460 builtin/commit.c:1461
+#: builtin/branch.c:817 builtin/branch.c:823 builtin/branch.c:844
+#: builtin/branch.c:850 builtin/commit.c:1460 builtin/commit.c:1461
#: builtin/commit.c:1462 builtin/commit.c:1463 builtin/tag.c:468
msgid "commit"
msgstr "æ交"
-#: builtin/branch.c:812 builtin/branch.c:818
+#: builtin/branch.c:818 builtin/branch.c:824
msgid "print only branches that contain the commit"
msgstr "åªæ‰“å°åŒ…å«è¯¥æ交的分支"
-#: builtin/branch.c:824
+#: builtin/branch.c:830
msgid "Specific git-branch actions:"
msgstr "具体的 git-branch 动作:"
-#: builtin/branch.c:825
+#: builtin/branch.c:831
msgid "list both remote-tracking and local branches"
msgstr "列出远程跟踪åŠæœ¬åœ°åˆ†æ”¯"
-#: builtin/branch.c:827
+#: builtin/branch.c:833
msgid "delete fully merged branch"
msgstr "删除完全åˆå¹¶çš„分支"
-#: builtin/branch.c:828
+#: builtin/branch.c:834
msgid "delete branch (even if not merged)"
msgstr "删除分支(å³ä½¿æ²¡æœ‰åˆå¹¶ï¼‰"
-#: builtin/branch.c:829
+#: builtin/branch.c:835
msgid "move/rename a branch and its reflog"
msgstr "移动/é‡å‘½å一个分支,以åŠå®ƒçš„引用日志"
-#: builtin/branch.c:830
+#: builtin/branch.c:836
msgid "move/rename a branch, even if target exists"
msgstr "移动/é‡å‘½å一个分支,å³ä½¿ç›®æ ‡å·²å­˜åœ¨"
-#: builtin/branch.c:831
+#: builtin/branch.c:837
msgid "list branch names"
msgstr "列出分支å"
-#: builtin/branch.c:832
+#: builtin/branch.c:838
msgid "create the branch's reflog"
msgstr "创建分支的引用日志"
-#: builtin/branch.c:834
+#: builtin/branch.c:840
msgid "edit the description for the branch"
msgstr "标记分支的æè¿°"
-#: builtin/branch.c:835
+#: builtin/branch.c:841
msgid "force creation (when already exists)"
msgstr "强制创建(当已ç»å­˜åœ¨ï¼‰"
-#: builtin/branch.c:838
+#: builtin/branch.c:844
msgid "print only not merged branches"
msgstr "åªæ‰“å°æ²¡æœ‰åˆå¹¶çš„分支"
-#: builtin/branch.c:844
+#: builtin/branch.c:850
msgid "print only merged branches"
msgstr "åªæ‰“å°åˆå¹¶çš„分支"
-#: builtin/branch.c:848
+#: builtin/branch.c:854
msgid "list branches in columns"
msgstr "以列的方å¼æ˜¾ç¤ºåˆ†æ”¯"
-#: builtin/branch.c:861
+#: builtin/branch.c:867
msgid "Failed to resolve HEAD as a valid ref."
msgstr "无法将 HEAD 解æžä¸ºæœ‰æ•ˆå¼•ç”¨ã€‚"
-#: builtin/branch.c:866 builtin/clone.c:629
+#: builtin/branch.c:872 builtin/clone.c:635
msgid "HEAD not found below refs/heads!"
msgstr "HEAD 没有ä½äºŽ /refs/heads 之下ï¼"
-#: builtin/branch.c:890
+#: builtin/branch.c:896
msgid "--column and --verbose are incompatible"
msgstr "--column å’Œ --verbose ä¸å…¼å®¹"
-#: builtin/branch.c:896 builtin/branch.c:935
+#: builtin/branch.c:902 builtin/branch.c:941
msgid "branch name required"
msgstr "å¿…é¡»æ供分支å"
-#: builtin/branch.c:911
+#: builtin/branch.c:917
msgid "Cannot give description to detached HEAD"
msgstr "ä¸èƒ½å‘分离头指针æä¾›æè¿°"
-#: builtin/branch.c:916
+#: builtin/branch.c:922
msgid "cannot edit description of more than one branch"
msgstr "ä¸èƒ½ä¸ºä¸€ä¸ªä»¥ä¸Šçš„分支编辑æè¿°"
-#: builtin/branch.c:923
+#: builtin/branch.c:929
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "分支 '%s' å°šæ— æ交。"
-#: builtin/branch.c:926
+#: builtin/branch.c:932
#, c-format
msgid "No branch named '%s'."
msgstr "没有分支 '%s'。"
-#: builtin/branch.c:941
+#: builtin/branch.c:947
msgid "too many branches for a rename operation"
msgstr "为é‡å‘½åæ“作æ供了太多的分支å"
-#: builtin/branch.c:946
+#: builtin/branch.c:952
msgid "too many branches to set new upstream"
msgstr "为设置新上游æ供了太多的分支å"
-#: builtin/branch.c:950
+#: builtin/branch.c:956
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
msgstr "无法设置 HEAD 的上游为 %s,因为 HEAD 没有指å‘任何分支。"
-#: builtin/branch.c:953 builtin/branch.c:975 builtin/branch.c:997
+#: builtin/branch.c:959 builtin/branch.c:981 builtin/branch.c:1002
#, c-format
msgid "no such branch '%s'"
msgstr "没有此分支 '%s'"
-#: builtin/branch.c:957
+#: builtin/branch.c:963
#, c-format
msgid "branch '%s' does not exist"
msgstr "分支 '%s' ä¸å­˜åœ¨"
-#: builtin/branch.c:969
+#: builtin/branch.c:975
msgid "too many branches to unset upstream"
msgstr "为å–消上游设置æ“作æ供了太多的分支å"
-#: builtin/branch.c:973
+#: builtin/branch.c:979
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr "无法å–消 HEAD 的上游设置因为它没有指å‘一个分支"
-#: builtin/branch.c:979
+#: builtin/branch.c:985
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "分支 '%s' 没有上游信æ¯"
-#: builtin/branch.c:994
+#: builtin/branch.c:999
msgid "it does not make sense to create 'HEAD' manually"
msgstr "手工创建 'HEAD' 没有æ„义"
-#: builtin/branch.c:1000
+#: builtin/branch.c:1005
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr "'git branch' çš„ -a å’Œ -r 选项带一个分支åå‚数没有æ„义"
-#: builtin/branch.c:1003
+#: builtin/branch.c:1008
#, c-format
msgid ""
"The --set-upstream flag is deprecated and will be removed. Consider using --"
@@ -3095,7 +3119,7 @@ msgid ""
msgstr ""
"选项 --set-upstream 已弃用并将被移除。考虑使用 --track 或 --set-upstream-to\n"
-#: builtin/branch.c:1020
+#: builtin/branch.c:1025
#, c-format
msgid ""
"\n"
@@ -3106,12 +3130,12 @@ msgstr ""
"如果你想用 '%s' 跟踪 '%s', 这么åšï¼š\n"
"\n"
-#: builtin/branch.c:1021
+#: builtin/branch.c:1026
#, c-format
msgid " git branch -d %s\n"
msgstr " git branch -d %s\n"
-#: builtin/branch.c:1022
+#: builtin/branch.c:1027
#, c-format
msgid " git branch --set-upstream-to %s\n"
msgstr " git branch --set-upstream-to %s\n"
@@ -3129,43 +3153,43 @@ msgstr "需è¦ä¸€ä¸ªç‰ˆæœ¬åº“æ¥åˆ›å»ºåŒ…。"
msgid "Need a repository to unbundle."
msgstr "需è¦ä¸€ä¸ªç‰ˆæœ¬åº“æ¥è§£åŒ…。"
-#: builtin/cat-file.c:312
+#: builtin/cat-file.c:328
msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
msgstr "git cat-file (-t|-s|-e|-p|<类型>|--textconv) <对象>"
-#: builtin/cat-file.c:313
+#: builtin/cat-file.c:329
msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
msgstr "git cat-file (--batch|--batch-check) < <对象列表>"
-#: builtin/cat-file.c:350
+#: builtin/cat-file.c:366
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<类型> å¯ä»¥æ˜¯å…¶ä¸­ä¹‹ä¸€ï¼šblobã€treeã€commitã€tag"
-#: builtin/cat-file.c:351
+#: builtin/cat-file.c:367
msgid "show object type"
msgstr "显示对象类型"
-#: builtin/cat-file.c:352
+#: builtin/cat-file.c:368
msgid "show object size"
msgstr "显示对象大å°"
-#: builtin/cat-file.c:354
+#: builtin/cat-file.c:370
msgid "exit with zero when there's no error"
msgstr "当没有错误时退出并返回零"
-#: builtin/cat-file.c:355
+#: builtin/cat-file.c:371
msgid "pretty-print object's content"
msgstr "美观地打å°å¯¹è±¡çš„内容"
-#: builtin/cat-file.c:357
+#: builtin/cat-file.c:373
msgid "for blob objects, run textconv on object's content"
msgstr "对于数æ®ï¼ˆblob)对象,对其内容执行 textconv"
-#: builtin/cat-file.c:359
+#: builtin/cat-file.c:375
msgid "show info and content of objects fed from the standard input"
msgstr "显示从标准输入æ供的对象的信æ¯å’Œå†…容"
-#: builtin/cat-file.c:362
+#: builtin/cat-file.c:378
msgid "show info about objects fed from the standard input"
msgstr "显示从标准输入æ供的对象的信æ¯"
@@ -3193,7 +3217,7 @@ msgstr "从标准输入读出文件å"
msgid "terminate input and output records by a NUL character"
msgstr "输入和输出的记录使用 NUL 字符终结"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:259
+#: builtin/check-ignore.c:18 builtin/checkout.c:1090 builtin/gc.c:260
msgid "suppress progress reporting"
msgstr "ä¸æ˜¾ç¤ºè¿›åº¦æŠ¥å‘Š"
@@ -3483,7 +3507,7 @@ msgid "Cannot switch branch to a non-commit '%s'"
msgstr "ä¸èƒ½åˆ‡æ¢åˆ†æ”¯åˆ°ä¸€ä¸ªéžæ交 '%s'"
#: builtin/checkout.c:1091 builtin/checkout.c:1093 builtin/clone.c:88
-#: builtin/remote.c:169 builtin/remote.c:171
+#: builtin/remote.c:159 builtin/remote.c:161
msgid "branch"
msgstr "分支"
@@ -3531,11 +3555,11 @@ msgstr "强制检出(丢弃本地修改)"
msgid "perform a 3-way merge with the new branch"
msgstr "和新的分支执行三路åˆå¹¶"
-#: builtin/checkout.c:1106 builtin/merge.c:232
+#: builtin/checkout.c:1106 builtin/merge.c:225
msgid "update ignored files (default)"
msgstr "更新忽略的文件(默认)"
-#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:251
+#: builtin/checkout.c:1107 builtin/log.c:1228 parse-options.h:248
msgid "style"
msgstr "风格"
@@ -3732,7 +3756,7 @@ msgid "remove whole directories"
msgstr "删除整个目录"
#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:718
-#: builtin/ls-files.c:483 builtin/name-rev.c:315 builtin/show-ref.c:185
+#: builtin/ls-files.c:483 builtin/name-rev.c:314 builtin/show-ref.c:185
msgid "pattern"
msgstr "模å¼"
@@ -3770,8 +3794,8 @@ msgstr ""
msgid "git clone [options] [--] <repo> [<dir>]"
msgstr "git clone [选项] [--] <版本库> [<路径>]"
-#: builtin/clone.c:64 builtin/fetch.c:96 builtin/merge.c:229
-#: builtin/push.c:474
+#: builtin/clone.c:64 builtin/fetch.c:97 builtin/merge.c:222
+#: builtin/push.c:521
msgid "force progress reporting"
msgstr "强制显示进度报告"
@@ -3813,7 +3837,7 @@ msgstr "模æ¿ç›®å½•å°†è¢«ä½¿ç”¨"
#: builtin/clone.c:85
msgid "reference repository"
-msgstr "引用版本库"
+msgstr "å‚考版本库"
#: builtin/clone.c:86 builtin/column.c:26 builtin/merge-file.c:44
msgid "name"
@@ -3831,7 +3855,7 @@ msgstr "检出<分支>而ä¸æ˜¯è¿œç¨‹HEAD"
msgid "path to git-upload-pack on the remote"
msgstr "远程 git-upload-pack 路径"
-#: builtin/clone.c:92 builtin/fetch.c:97 builtin/grep.c:663
+#: builtin/clone.c:92 builtin/fetch.c:98 builtin/grep.c:663
msgid "depth"
msgstr "深度"
@@ -3862,44 +3886,54 @@ msgstr "在新版本库中设置é…置信æ¯"
#: builtin/clone.c:252
#, c-format
msgid "reference repository '%s' is not a local repository."
-msgstr "引用版本库 '%s' ä¸æ˜¯ä¸€ä¸ªæœ¬åœ°ç‰ˆæœ¬åº“。"
+msgstr "å‚考版本库 '%s' ä¸æ˜¯ä¸€ä¸ªæœ¬åœ°ç‰ˆæœ¬åº“。"
+
+#: builtin/clone.c:256
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "å‚考版本库 '%s' 是一个浅克隆"
-#: builtin/clone.c:315
+#: builtin/clone.c:259
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "å‚考版本库 '%s' 已被å«æŽ¥"
+
+#: builtin/clone.c:321
#, c-format
msgid "failed to create directory '%s'"
msgstr "无法创建目录 '%s'"
-#: builtin/clone.c:317 builtin/diff.c:77
+#: builtin/clone.c:323 builtin/diff.c:83
#, c-format
msgid "failed to stat '%s'"
msgstr "无法枚举 '%s' 状æ€"
-#: builtin/clone.c:319
+#: builtin/clone.c:325
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s 存在且ä¸æ˜¯ä¸€ä¸ªç›®å½•"
-#: builtin/clone.c:333
+#: builtin/clone.c:339
#, c-format
msgid "failed to stat %s\n"
msgstr "无法枚举 %s 状æ€\n"
-#: builtin/clone.c:355
+#: builtin/clone.c:361
#, c-format
msgid "failed to create link '%s'"
msgstr "无法创建链接 '%s'"
-#: builtin/clone.c:359
+#: builtin/clone.c:365
#, c-format
msgid "failed to copy file to '%s'"
msgstr "无法拷è´æ–‡ä»¶è‡³ '%s'"
-#: builtin/clone.c:382 builtin/clone.c:559
+#: builtin/clone.c:388 builtin/clone.c:565
#, c-format
msgid "done.\n"
msgstr "完æˆã€‚\n"
-#: builtin/clone.c:395
+#: builtin/clone.c:401
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -3909,99 +3943,108 @@ msgstr ""
"您å¯ä»¥é€šè¿‡ 'git status' 检查哪些已被检出,然åŽä½¿ç”¨å‘½ä»¤\n"
"'git checkout -f HEAD' é‡è¯•\n"
-#: builtin/clone.c:474
+#: builtin/clone.c:480
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "ä¸èƒ½å‘现è¦å…‹éš†çš„远程分支 %s。"
-#: builtin/clone.c:554
+#: builtin/clone.c:560
#, c-format
msgid "Checking connectivity... "
msgstr "检查连接... "
-#: builtin/clone.c:557
+#: builtin/clone.c:563
msgid "remote did not send all necessary objects"
msgstr "远程没有å‘é€æ‰€æœ‰å¿…须的对象"
-#: builtin/clone.c:620
+#: builtin/clone.c:626
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr "远程 HEAD 指å‘一个ä¸å­˜åœ¨çš„引用,无法检出。\n"
-#: builtin/clone.c:651
+#: builtin/clone.c:657
msgid "unable to checkout working tree"
msgstr "ä¸èƒ½æ£€å‡ºå·¥ä½œåŒº"
-#: builtin/clone.c:759
+#: builtin/clone.c:765
msgid "Too many arguments."
msgstr "太多å‚数。"
-#: builtin/clone.c:763
+#: builtin/clone.c:769
msgid "You must specify a repository to clone."
msgstr "您必须指定一个版本库æ¥å…‹éš†ã€‚"
-#: builtin/clone.c:774
+#: builtin/clone.c:780
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "--bare å’Œ --origin %s 选项ä¸å…¼å®¹ã€‚"
-#: builtin/clone.c:777
+#: builtin/clone.c:783
msgid "--bare and --separate-git-dir are incompatible."
msgstr "--bare å’Œ --separate-git-dir 选项ä¸å…¼å®¹ã€‚"
-#: builtin/clone.c:790
+#: builtin/clone.c:796
#, c-format
msgid "repository '%s' does not exist"
msgstr "版本库 '%s' ä¸å­˜åœ¨"
-#: builtin/clone.c:795
+#: builtin/clone.c:802
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth 在本地克隆被忽略,改为 file:// å议试试。"
-#: builtin/clone.c:797
+#: builtin/clone.c:805
+msgid "source repository is shallow, ignoring --local"
+msgstr "æºç‰ˆæœ¬åº“是浅克隆,忽略 --local"
+
+#: builtin/clone.c:810
msgid "--local is ignored"
msgstr "--local 被忽略"
-#: builtin/clone.c:807
+#: builtin/clone.c:814 builtin/fetch.c:1119
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr "深度 %s ä¸æ˜¯ä¸€ä¸ªæ­£æ•°"
+
+#: builtin/clone.c:824
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "目标路径 '%s' å·²ç»å­˜åœ¨ï¼Œå¹¶ä¸”ä¸æ˜¯ä¸€ä¸ªç©ºç›®å½•ã€‚"
-#: builtin/clone.c:817
+#: builtin/clone.c:834
#, c-format
msgid "working tree '%s' already exists."
msgstr "工作区 '%s' å·²ç»å­˜åœ¨ã€‚"
-#: builtin/clone.c:830 builtin/clone.c:842
+#: builtin/clone.c:847 builtin/clone.c:859
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "ä¸èƒ½ä¸º '%s' 创建先导目录"
-#: builtin/clone.c:833
+#: builtin/clone.c:850
#, c-format
msgid "could not create work tree dir '%s'."
msgstr "ä¸èƒ½ä¸º '%s' 创建工作区目录。"
-#: builtin/clone.c:852
+#: builtin/clone.c:869
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "克隆到裸版本库 '%s'...\n"
-#: builtin/clone.c:854
+#: builtin/clone.c:871
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "正克隆到 '%s'...\n"
-#: builtin/clone.c:888
+#: builtin/clone.c:906
#, c-format
msgid "Don't know how to clone %s"
msgstr "ä¸çŸ¥é“如何克隆 %s"
-#: builtin/clone.c:939 builtin/clone.c:947
+#: builtin/clone.c:957 builtin/clone.c:965
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "远程分支 %s 在上游 %s 未å‘现"
-#: builtin/clone.c:950
+#: builtin/clone.c:968
msgid "You appear to have cloned an empty repository."
msgstr "您似乎克隆了一个空版本库。"
@@ -4348,7 +4391,7 @@ msgstr "以简æ´çš„æ ¼å¼æ˜¾ç¤ºçŠ¶æ€"
msgid "show branch information"
msgstr "显示分支信æ¯"
-#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:460
+#: builtin/commit.c:1255 builtin/commit.c:1486 builtin/push.c:507
msgid "machine-readable output"
msgstr "机器å¯è¯»çš„输出"
@@ -4429,7 +4472,7 @@ msgstr "作者"
msgid "override author for commit"
msgstr "æ交时覆盖作者"
-#: builtin/commit.c:1458 builtin/gc.c:260
+#: builtin/commit.c:1458 builtin/gc.c:261
msgid "date"
msgstr "日期"
@@ -4437,7 +4480,7 @@ msgstr "日期"
msgid "override date for commit"
msgstr "æ交时覆盖日期"
-#: builtin/commit.c:1459 builtin/merge.c:223 builtin/notes.c:405
+#: builtin/commit.c:1459 builtin/merge.c:216 builtin/notes.c:405
#: builtin/notes.c:562 builtin/tag.c:455
msgid "message"
msgstr "说明"
@@ -4491,11 +4534,11 @@ msgstr "设置如何删除æ交说明里的空格和#注释"
msgid "include status in commit message template"
msgstr "在æ交说明模æ¿é‡ŒåŒ…å«çŠ¶æ€ä¿¡æ¯"
-#: builtin/commit.c:1470 builtin/merge.c:230 builtin/tag.c:461
+#: builtin/commit.c:1470 builtin/merge.c:223 builtin/tag.c:461
msgid "key id"
msgstr "key id"
-#: builtin/commit.c:1471 builtin/merge.c:231
+#: builtin/commit.c:1471 builtin/merge.c:224
msgid "GPG sign commit"
msgstr "GPG æ交签å"
@@ -4552,7 +4595,7 @@ msgstr "å…许空的æ交说明"
msgid "could not parse HEAD commit"
msgstr "ä¸èƒ½è§£æž HEAD æ交"
-#: builtin/commit.c:1567 builtin/merge.c:525
+#: builtin/commit.c:1567 builtin/merge.c:518
#, c-format
msgid "could not open '%s' for reading"
msgstr "ä¸èƒ½ä¸ºè¯»å…¥æ‰“å¼€ '%s'"
@@ -4571,29 +4614,29 @@ msgstr "ä¸èƒ½è¯»å– MERGE_MODE"
msgid "could not read commit message: %s"
msgstr "ä¸èƒ½è¯»å–æ交说明:%s"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1611
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "终止æ交;您未更改æ¥è‡ªæ¨¡ç‰ˆçš„æ交说明。\n"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1616
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "终止æ交因为æ交说明为空。\n"
-#: builtin/commit.c:1634 builtin/merge.c:861 builtin/merge.c:886
+#: builtin/commit.c:1631 builtin/merge.c:854 builtin/merge.c:879
msgid "failed to write commit object"
msgstr "无法写æ交对象"
-#: builtin/commit.c:1655
+#: builtin/commit.c:1652
msgid "cannot lock HEAD ref"
msgstr "无法é”定 HEAD 引用"
-#: builtin/commit.c:1659
+#: builtin/commit.c:1656
msgid "cannot update HEAD ref"
msgstr "无法更新 HEAD 引用"
-#: builtin/commit.c:1670
+#: builtin/commit.c:1667
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full or quota is\n"
@@ -4854,7 +4897,7 @@ msgstr "考虑最近 <n> 个 tags(默认:10)"
msgid "only consider tags matching <pattern>"
msgstr "åªè€ƒè™‘åŒ¹é… <模å¼> çš„ tags"
-#: builtin/describe.c:423 builtin/name-rev.c:322
+#: builtin/describe.c:423 builtin/name-rev.c:321
msgid "show abbreviated commit object as fallback"
msgstr "显示简写的æ交å·ä½œä¸ºåŽå¤‡"
@@ -4878,31 +4921,31 @@ msgstr "没有å‘现å称,无法æ述任何东西。"
msgid "--dirty is incompatible with commit-ishes"
msgstr "--dirty ä¸èƒ½ä¸Žæ交åŒæ—¶ä½¿ç”¨"
-#: builtin/diff.c:79
+#: builtin/diff.c:85
#, c-format
msgid "'%s': not a regular file or symlink"
msgstr "'%s':ä¸æ˜¯ä¸€ä¸ªæ­£è§„文件或符å·é“¾æŽ¥"
-#: builtin/diff.c:230
+#: builtin/diff.c:236
#, c-format
msgid "invalid option: %s"
msgstr "无效选项:%s"
-#: builtin/diff.c:307
+#: builtin/diff.c:357
msgid "Not a git repository"
msgstr "ä¸æ˜¯ä¸€ä¸ª git 版本库"
-#: builtin/diff.c:350
+#: builtin/diff.c:400
#, c-format
msgid "invalid object '%s' given."
msgstr "æ供了无效对象 '%s'。"
-#: builtin/diff.c:359
+#: builtin/diff.c:409
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "æ供了超过两个数æ®ï¼ˆblob)对象:'%s'"
-#: builtin/diff.c:366
+#: builtin/diff.c:416
#, c-format
msgid "unhandled object '%s' given."
msgstr "æ供了无法处ç†çš„对象 '%s'。"
@@ -4963,146 +5006,155 @@ msgstr "git fetch --multiple [<选项>] [(<版本库> | <组>)...]"
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<选项>]"
-#: builtin/fetch.c:74
+#: builtin/fetch.c:75
msgid "fetch from all remotes"
msgstr "从所有的远程抓å–"
-#: builtin/fetch.c:76
+#: builtin/fetch.c:77
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "追加到 .git/FETCH_HEAD 而ä¸æ˜¯è¦†ç›–它"
-#: builtin/fetch.c:78
+#: builtin/fetch.c:79
msgid "path to upload pack on remote end"
msgstr "上传包到远程的路径"
-#: builtin/fetch.c:79
+#: builtin/fetch.c:80
msgid "force overwrite of local branch"
msgstr "强制覆盖本地分支"
-#: builtin/fetch.c:81
+#: builtin/fetch.c:82
msgid "fetch from multiple remotes"
msgstr "从多个远程抓å–"
-#: builtin/fetch.c:83
+#: builtin/fetch.c:84
msgid "fetch all tags and associated objects"
msgstr "抓å–所有的 tags 和关è”对象"
-#: builtin/fetch.c:85
+#: builtin/fetch.c:86
msgid "do not fetch all tags (--no-tags)"
msgstr "ä¸æŠ“å–任何 tags (--no-tags)"
-#: builtin/fetch.c:87
+#: builtin/fetch.c:88
msgid "prune remote-tracking branches no longer on remote"
msgstr "清除远程已ç»ä¸å­˜åœ¨çš„分支的跟踪分支"
# 译者:å¯é€‰å€¼ï¼Œä¸èƒ½ç¿»è¯‘
-#: builtin/fetch.c:88
+#: builtin/fetch.c:89
msgid "on-demand"
msgstr "on-demand"
-#: builtin/fetch.c:89
+#: builtin/fetch.c:90
msgid "control recursive fetching of submodules"
msgstr "控制å­æ¨¡ç»„的递归抓å–"
-#: builtin/fetch.c:93
+#: builtin/fetch.c:94
msgid "keep downloaded pack"
msgstr "ä¿æŒä¸‹è½½åŒ…"
-#: builtin/fetch.c:95
+#: builtin/fetch.c:96
msgid "allow updating of HEAD ref"
msgstr "å…许更新 HEAD 引用"
-#: builtin/fetch.c:98
+#: builtin/fetch.c:99
msgid "deepen history of shallow clone"
msgstr "深化浅克隆的历å²"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:101
msgid "convert to a complete repository"
msgstr "转æ¢ä¸ºä¸€ä¸ªå®Œæ•´çš„版本库"
-#: builtin/fetch.c:102 builtin/log.c:1197
+#: builtin/fetch.c:103 builtin/log.c:1197
msgid "dir"
msgstr "目录"
-#: builtin/fetch.c:103
+#: builtin/fetch.c:104
msgid "prepend this to submodule path output"
msgstr "在å­æ¨¡ç»„路径输出的å‰é¢åŠ ä¸Šæ­¤ç›®å½•"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:107
msgid "default mode for recursion"
msgstr "递归的默认模å¼"
-#: builtin/fetch.c:236
+#: builtin/fetch.c:109
+msgid "accept refs that update .git/shallow"
+msgstr "接å—æ›´æ–° .git/shallow 的引用"
+
+#: builtin/fetch.c:347
msgid "Couldn't find remote ref HEAD"
msgstr "无法å‘现远程 HEAD 引用"
-#: builtin/fetch.c:290
+#: builtin/fetch.c:411
#, c-format
msgid "object %s not found"
msgstr "对象 %s 未å‘现"
-#: builtin/fetch.c:295
+#: builtin/fetch.c:416
msgid "[up to date]"
msgstr "[最新]"
-#: builtin/fetch.c:309
+#: builtin/fetch.c:430
#, c-format
msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
msgstr "! %-*s %-*s -> %s (在当å‰åˆ†æ”¯ä¸‹ä¸èƒ½èŽ·å–)"
-#: builtin/fetch.c:310 builtin/fetch.c:396
+#: builtin/fetch.c:431 builtin/fetch.c:517
msgid "[rejected]"
msgstr "[已拒ç»]"
-#: builtin/fetch.c:321
+#: builtin/fetch.c:442
msgid "[tag update]"
msgstr "[tagæ›´æ–°]"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: builtin/fetch.c:323 builtin/fetch.c:358 builtin/fetch.c:376
+#: builtin/fetch.c:444 builtin/fetch.c:479 builtin/fetch.c:497
msgid " (unable to update local ref)"
msgstr " (ä¸èƒ½æ›´æ–°æœ¬åœ°å¼•ç”¨ï¼‰"
-#: builtin/fetch.c:341
+#: builtin/fetch.c:462
msgid "[new tag]"
msgstr "[æ–°tag]"
-#: builtin/fetch.c:344
+#: builtin/fetch.c:465
msgid "[new branch]"
msgstr "[新分支]"
-#: builtin/fetch.c:347
+#: builtin/fetch.c:468
msgid "[new ref]"
msgstr "[新引用]"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "unable to update local ref"
msgstr "ä¸èƒ½æ›´æ–°æœ¬åœ°å¼•ç”¨"
-#: builtin/fetch.c:392
+#: builtin/fetch.c:513
msgid "forced update"
msgstr "强制更新"
-#: builtin/fetch.c:398
+#: builtin/fetch.c:519
msgid "(non-fast-forward)"
msgstr "(éžå¿«è¿›å¼ï¼‰"
-#: builtin/fetch.c:429 builtin/fetch.c:735
+#: builtin/fetch.c:552 builtin/fetch.c:785
#, c-format
msgid "cannot open %s: %s\n"
msgstr "无法打开 %s:%s\n"
-#: builtin/fetch.c:438
+#: builtin/fetch.c:561
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s 未å‘é€æ‰€æœ‰å¿…须的对象\n"
-#: builtin/fetch.c:537
+#: builtin/fetch.c:579
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr "æ‹’ç» %s 因为浅克隆ä¸å…许被更新"
+
+#: builtin/fetch.c:667 builtin/fetch.c:750
#, c-format
msgid "From %.*s\n"
msgstr "æ¥è‡ª %.*s\n"
-#: builtin/fetch.c:548
+#: builtin/fetch.c:678
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -5112,87 +5164,87 @@ msgstr ""
" 'git remote prune %s' æ¥åˆ é™¤æ—§çš„ã€æœ‰å†²çªçš„分支"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: builtin/fetch.c:598
+#: builtin/fetch.c:730
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s å°†æˆä¸ºæ‘‡æ‘†çŠ¶æ€ï¼‰"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: builtin/fetch.c:599
+#: builtin/fetch.c:731
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s å·²æˆä¸ºæ‘‡æ‘†çŠ¶æ€ï¼‰"
-#: builtin/fetch.c:606
+#: builtin/fetch.c:755
msgid "[deleted]"
msgstr "[已删除]"
-#: builtin/fetch.c:607 builtin/remote.c:1055
+#: builtin/fetch.c:756 builtin/remote.c:1050
msgid "(none)"
msgstr "(无)"
-#: builtin/fetch.c:725
+#: builtin/fetch.c:775
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "æ‹’ç»èŽ·å–到éžè£¸ç‰ˆæœ¬åº“的当å‰åˆ†æ”¯ %s"
-#: builtin/fetch.c:744
+#: builtin/fetch.c:794
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "选项 \"%s\" 的值 \"%s\" 对于 %s 是无效的"
-#: builtin/fetch.c:747
+#: builtin/fetch.c:797
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "选项 \"%s\" 为 %s 所忽略\n"
-#: builtin/fetch.c:801
+#: builtin/fetch.c:853
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "ä¸çŸ¥é“如何从 %s 获å–"
-#: builtin/fetch.c:976
+#: builtin/fetch.c:1015
#, c-format
msgid "Fetching %s\n"
msgstr "æ­£åœ¨èŽ·å– %s\n"
-#: builtin/fetch.c:978 builtin/remote.c:100
+#: builtin/fetch.c:1017 builtin/remote.c:90
#, c-format
msgid "Could not fetch %s"
msgstr "ä¸èƒ½èŽ·å– %s"
-#: builtin/fetch.c:997
+#: builtin/fetch.c:1036
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
msgstr "未指定远程版本库。请通过一个URL或远程版本库å指定,用以获å–æ–°æ交。"
-#: builtin/fetch.c:1020
+#: builtin/fetch.c:1059
msgid "You need to specify a tag name."
msgstr "您需è¦æŒ‡å®šä¸€ä¸ª tag å称。"
-#: builtin/fetch.c:1068
+#: builtin/fetch.c:1107
msgid "--depth and --unshallow cannot be used together"
msgstr "--depth å’Œ --unshallow ä¸èƒ½åŒæ—¶ä½¿ç”¨"
-#: builtin/fetch.c:1070
+#: builtin/fetch.c:1109
msgid "--unshallow on a complete repository does not make sense"
msgstr "对于一个完整的版本库,å‚æ•° --unshallow 没有æ„义"
-#: builtin/fetch.c:1089
+#: builtin/fetch.c:1132
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all ä¸èƒ½å¸¦ä¸€ä¸ªç‰ˆæœ¬åº“å‚æ•°"
-#: builtin/fetch.c:1091
+#: builtin/fetch.c:1134
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all 带引用规则没有任何æ„义"
-#: builtin/fetch.c:1102
+#: builtin/fetch.c:1145
#, c-format
msgid "No such remote or remote group: %s"
msgstr "没有这样的远程或远程组:%s"
-#: builtin/fetch.c:1110
+#: builtin/fetch.c:1153
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "获å–组并指定引用规则没有æ„义"
@@ -5202,8 +5254,9 @@ msgstr ""
"git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:702
-#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:178
-#: builtin/tag.c:446 parse-options.h:135 parse-options.h:245
+#: builtin/merge.c:196 builtin/repack.c:160 builtin/repack.c:164
+#: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:446
+#: parse-options.h:135 parse-options.h:242
msgid "n"
msgstr "n"
@@ -5227,43 +5280,43 @@ msgstr "使用 <文本> 作为æ交说明的开始"
msgid "file to read from"
msgstr "从文件中读å–"
-#: builtin/for-each-ref.c:995
+#: builtin/for-each-ref.c:1063
msgid "git for-each-ref [options] [<pattern>]"
msgstr "git for-each-ref [选项] [<模å¼>]"
-#: builtin/for-each-ref.c:1010
+#: builtin/for-each-ref.c:1078
msgid "quote placeholders suitably for shells"
msgstr "引用å ä½ç¬¦é€‚用于 shells"
-#: builtin/for-each-ref.c:1012
+#: builtin/for-each-ref.c:1080
msgid "quote placeholders suitably for perl"
msgstr "引用å ä½ç¬¦é€‚用于 perl"
-#: builtin/for-each-ref.c:1014
+#: builtin/for-each-ref.c:1082
msgid "quote placeholders suitably for python"
msgstr "引用å ä½ç¬¦é€‚用于 python"
-#: builtin/for-each-ref.c:1016
+#: builtin/for-each-ref.c:1084
msgid "quote placeholders suitably for tcl"
msgstr "引用å ä½ç¬¦é€‚用于 tcl"
-#: builtin/for-each-ref.c:1019
+#: builtin/for-each-ref.c:1087
msgid "show only <n> matched refs"
msgstr "åªæ˜¾ç¤º <n> 个匹é…的引用"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088 builtin/replace.c:177
msgid "format"
msgstr "æ ¼å¼"
-#: builtin/for-each-ref.c:1020
+#: builtin/for-each-ref.c:1088
msgid "format to use for the output"
msgstr "输出格å¼"
-#: builtin/for-each-ref.c:1021
+#: builtin/for-each-ref.c:1089
msgid "key"
msgstr "key"
-#: builtin/for-each-ref.c:1022
+#: builtin/for-each-ref.c:1090
msgid "field name to sort on"
msgstr "排åºçš„字段å"
@@ -5307,41 +5360,41 @@ msgstr "å¯ç”¨æ›´ä¸¥æ ¼çš„检查"
msgid "write dangling objects in .git/lost-found"
msgstr "将摇摆对象写入 .git/lost-found 中"
-#: builtin/fsck.c:623 builtin/prune.c:134
+#: builtin/fsck.c:623 builtin/prune.c:144
msgid "show progress"
msgstr "显示进度"
-#: builtin/gc.c:23
+#: builtin/gc.c:24
msgid "git gc [options]"
msgstr "git gc [选项]"
-#: builtin/gc.c:79
+#: builtin/gc.c:80
#, c-format
msgid "Invalid %s: '%s'"
msgstr "无效的 %s:'%s'"
-#: builtin/gc.c:106
+#: builtin/gc.c:107
#, c-format
msgid "insanely long object directory %.*s"
msgstr "ä¸æ­£å¸¸çš„长对象目录 %.*s"
-#: builtin/gc.c:261
+#: builtin/gc.c:262
msgid "prune unreferenced objects"
msgstr "清除未引用的对象"
-#: builtin/gc.c:263
+#: builtin/gc.c:264
msgid "be more thorough (increased runtime)"
msgstr "更彻底(增加è¿è¡Œæ—¶é—´ï¼‰"
-#: builtin/gc.c:264
+#: builtin/gc.c:265
msgid "enable auto-gc mode"
msgstr "å¯ç”¨è‡ªåŠ¨åžƒåœ¾å›žæ”¶æ¨¡å¼"
-#: builtin/gc.c:265
+#: builtin/gc.c:266
msgid "force running gc even if there may be another gc running"
msgstr "强制执行 gc å³ä½¿å¦å¤–一个 gc 正在执行"
-#: builtin/gc.c:305
+#: builtin/gc.c:306
#, c-format
msgid ""
"Auto packing the repository for optimum performance. You may also\n"
@@ -5351,14 +5404,14 @@ msgstr ""
"å‚è§ \"git help gc\" 以获å–更多信æ¯ã€‚\n"
#. be quiet on --auto
-#: builtin/gc.c:315
+#: builtin/gc.c:316
#, c-format
msgid ""
"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
msgstr ""
"å·²ç»æœ‰ä¸€ä¸ª gc æ­£è¿è¡Œåœ¨æœºå™¨ '%s' pid %<PRIuMAX> (如果ä¸æ˜¯ï¼Œä½¿ç”¨ --force)"
-#: builtin/gc.c:340
+#: builtin/gc.c:341
msgid ""
"There are too many unreachable loose objects; run 'git prune' to remove them."
msgstr "有太多ä¸å¯è¾¾çš„æ¾æ•£å¯¹è±¡ï¼Œè¿è¡Œ 'git prune' 删除它们。"
@@ -5695,57 +5748,57 @@ msgstr ""
"'%s': 支æŒçš„ man 手册查看器命令。\n"
"请使用 'man.<tool>.path'。"
-#: builtin/help.c:349
+#: builtin/help.c:353
#, c-format
msgid "'%s': unknown man viewer."
msgstr "'%s':未知的 man 查看器。"
-#: builtin/help.c:366
+#: builtin/help.c:370
msgid "no man viewer handled the request"
msgstr "没有 man 查看器处ç†æ­¤è¯·æ±‚"
-#: builtin/help.c:374
+#: builtin/help.c:378
msgid "no info viewer handled the request"
msgstr "没有 info 查看器处ç†æ­¤è¯·æ±‚"
-#: builtin/help.c:420
+#: builtin/help.c:424
msgid "Defining attributes per path"
msgstr "定义路径的属性"
-#: builtin/help.c:421
+#: builtin/help.c:425
msgid "A Git glossary"
msgstr "Git è¯æ±‡è¡¨"
-#: builtin/help.c:422
+#: builtin/help.c:426
msgid "Specifies intentionally untracked files to ignore"
msgstr "忽略指定的未跟踪文件"
-#: builtin/help.c:423
+#: builtin/help.c:427
msgid "Defining submodule properties"
msgstr "定义å­æ¨¡ç»„属性"
-#: builtin/help.c:424
+#: builtin/help.c:428
msgid "Specifying revisions and ranges for Git"
msgstr "指定 Git 的版本和版本范围"
-#: builtin/help.c:425
+#: builtin/help.c:429
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "一个 Git 教程(针对 1.5.1 或更新版本)"
-#: builtin/help.c:426
+#: builtin/help.c:430
msgid "An overview of recommended workflows with Git"
msgstr "Git 推è的工作æµæ¦‚览"
-#: builtin/help.c:438
+#: builtin/help.c:442
msgid "The common Git guides are:\n"
msgstr "最常用的 Git å‘导有:\n"
-#: builtin/help.c:460 builtin/help.c:476
+#: builtin/help.c:463 builtin/help.c:480
#, c-format
msgid "usage: %s%s"
msgstr "用法:%s%s"
-#: builtin/help.c:492
+#: builtin/help.c:496
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "`git %s' 是 `%s' 的别å"
@@ -6155,21 +6208,21 @@ msgstr "æƒé™"
msgid "specify that the git repository is to be shared amongst several users"
msgstr "指定 git 版本库是多个用户之间共享的"
-#: builtin/init-db.c:493 builtin/prune-packed.c:75 builtin/repack.c:155
+#: builtin/init-db.c:493 builtin/prune-packed.c:79 builtin/repack.c:155
msgid "be quiet"
msgstr "ä¿æŒå®‰é™"
-#: builtin/init-db.c:522 builtin/init-db.c:529
+#: builtin/init-db.c:525 builtin/init-db.c:530
#, c-format
msgid "cannot mkdir %s"
msgstr "ä¸èƒ½åˆ›å»ºç›®å½• %s"
-#: builtin/init-db.c:533
+#: builtin/init-db.c:534
#, c-format
msgid "cannot chdir to %s"
msgstr "ä¸èƒ½åˆ‡æ¢ç›®å½•åˆ° %s"
-#: builtin/init-db.c:555
+#: builtin/init-db.c:556
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -6178,11 +6231,11 @@ msgstr ""
"ä¸å…许 %s(或 --work-tree=<directory>)而没有指定 %s(或 --git-"
"dir=<directory>)"
-#: builtin/init-db.c:579
+#: builtin/init-db.c:580
msgid "Cannot access current working directory"
msgstr "ä¸èƒ½è®¿é—®å½“å‰å·¥ä½œç›®å½•"
-#: builtin/init-db.c:586
+#: builtin/init-db.c:587
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "ä¸èƒ½è®¿é—®å·¥ä½œåŒº '%s'"
@@ -6604,149 +6657,149 @@ msgstr "å¯ç”¨çš„策略有:"
msgid "Available custom strategies are:"
msgstr "å¯ç”¨çš„自定义策略有:"
-#: builtin/merge.c:198
+#: builtin/merge.c:191
msgid "do not show a diffstat at the end of the merge"
msgstr "在åˆå¹¶çš„最åŽä¸æ˜¾ç¤ºå·®å¼‚统计"
-#: builtin/merge.c:201
+#: builtin/merge.c:194
msgid "show a diffstat at the end of the merge"
msgstr "在åˆå¹¶çš„最åŽæ˜¾ç¤ºå·®å¼‚统计"
-#: builtin/merge.c:202
+#: builtin/merge.c:195
msgid "(synonym to --stat)"
msgstr "(和 --stat åŒä¹‰ï¼‰"
-#: builtin/merge.c:204
+#: builtin/merge.c:197
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr "在åˆå¹¶æ交信æ¯ä¸­æ·»åŠ ï¼ˆæœ€å¤š <n> æ¡ï¼‰ç²¾ç®€æ交记录"
-#: builtin/merge.c:207
+#: builtin/merge.c:200
msgid "create a single commit instead of doing a merge"
msgstr "创建一个å•ç‹¬çš„æ交而ä¸æ˜¯åšä¸€æ¬¡åˆå¹¶"
-#: builtin/merge.c:209
+#: builtin/merge.c:202
msgid "perform a commit if the merge succeeds (default)"
msgstr "如果åˆå¹¶æˆåŠŸï¼Œæ‰§è¡Œä¸€æ¬¡æ交(默认)"
-#: builtin/merge.c:211
+#: builtin/merge.c:204
msgid "edit message before committing"
msgstr "在æ交å‰ç¼–辑æ交说明"
-#: builtin/merge.c:212
+#: builtin/merge.c:205
msgid "allow fast-forward (default)"
msgstr "å…许快进(默认)"
-#: builtin/merge.c:214
+#: builtin/merge.c:207
msgid "abort if fast-forward is not possible"
msgstr "如果ä¸èƒ½å¿«è¿›å°±æ”¾å¼ƒåˆå¹¶"
-#: builtin/merge.c:218
+#: builtin/merge.c:211
msgid "Verify that the named commit has a valid GPG signature"
msgstr "验è¯æŒ‡å®šçš„æ交是å¦åŒ…å«ä¸€ä¸ªæœ‰æ•ˆçš„ GPG ç­¾å"
-#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:89
+#: builtin/merge.c:212 builtin/notes.c:738 builtin/revert.c:89
msgid "strategy"
msgstr "ç­–ç•¥"
-#: builtin/merge.c:220
+#: builtin/merge.c:213
msgid "merge strategy to use"
msgstr "è¦ä½¿ç”¨çš„åˆå¹¶ç­–ç•¥"
-#: builtin/merge.c:221
+#: builtin/merge.c:214
msgid "option=value"
msgstr "option=value"
-#: builtin/merge.c:222
+#: builtin/merge.c:215
msgid "option for selected merge strategy"
msgstr "所选的åˆå¹¶ç­–略的选项"
-#: builtin/merge.c:224
+#: builtin/merge.c:217
msgid "merge commit message (for a non-fast-forward merge)"
msgstr "åˆå¹¶çš„æ交说明(针对éžå¿«è¿›å¼åˆå¹¶ï¼‰"
-#: builtin/merge.c:228
+#: builtin/merge.c:221
msgid "abort the current in-progress merge"
msgstr "放弃当å‰æ­£åœ¨è¿›è¡Œçš„åˆå¹¶"
-#: builtin/merge.c:257
+#: builtin/merge.c:250
msgid "could not run stash."
msgstr "ä¸èƒ½è¿›è¡Œè¿›åº¦ä¿å­˜ã€‚"
-#: builtin/merge.c:262
+#: builtin/merge.c:255
msgid "stash failed"
msgstr "进度ä¿å­˜å¤±è´¥"
-#: builtin/merge.c:267
+#: builtin/merge.c:260
#, c-format
msgid "not a valid object: %s"
msgstr "ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆå¯¹è±¡ï¼š%s"
-#: builtin/merge.c:286 builtin/merge.c:303
+#: builtin/merge.c:279 builtin/merge.c:296
msgid "read-tree failed"
msgstr "读å–树失败"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: builtin/merge.c:333
+#: builtin/merge.c:326
msgid " (nothing to squash)"
msgstr " (无å¯åŽ‹ç¼©ï¼‰"
-#: builtin/merge.c:346
+#: builtin/merge.c:339
#, c-format
msgid "Squash commit -- not updating HEAD\n"
msgstr "压缩æ交 -- 未更新 HEAD\n"
-#: builtin/merge.c:378
+#: builtin/merge.c:371
msgid "Writing SQUASH_MSG"
msgstr "写入 SQUASH_MSG"
-#: builtin/merge.c:380
+#: builtin/merge.c:373
msgid "Finishing SQUASH_MSG"
msgstr "å®Œæˆ SQUASH_MSG"
-#: builtin/merge.c:403
+#: builtin/merge.c:396
#, c-format
msgid "No merge message -- not updating HEAD\n"
msgstr "æ— åˆå¹¶ä¿¡æ¯ -- 未更新 HEAD\n"
-#: builtin/merge.c:453
+#: builtin/merge.c:446
#, c-format
msgid "'%s' does not point to a commit"
msgstr "'%s' 没有指å‘一个æ交"
-#: builtin/merge.c:565
+#: builtin/merge.c:558
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "åçš„ branch.%s.mergeoptions 字符串:%s"
-#: builtin/merge.c:657
+#: builtin/merge.c:650
msgid "git write-tree failed to write a tree"
msgstr "git write-tree 无法写入一树对象"
-#: builtin/merge.c:685
+#: builtin/merge.c:678
msgid "Not handling anything other than two heads merge."
msgstr "ä¸èƒ½å¤„ç†ä¸¤ä¸ªå¤´åˆå¹¶ä¹‹å¤–的任何æ“作。"
-#: builtin/merge.c:699
+#: builtin/merge.c:692
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "merge-recursive 的未知选项:-X%s"
-#: builtin/merge.c:713
+#: builtin/merge.c:706
#, c-format
msgid "unable to write %s"
msgstr "ä¸èƒ½å†™ %s"
-#: builtin/merge.c:802
+#: builtin/merge.c:795
#, c-format
msgid "Could not read from '%s'"
msgstr "ä¸èƒ½ä»Ž '%s' 读å–"
-#: builtin/merge.c:811
+#: builtin/merge.c:804
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr "未æ交åˆå¹¶ï¼Œä½¿ç”¨ 'git commit' 完æˆæ­¤æ¬¡åˆå¹¶ã€‚\n"
-#: builtin/merge.c:817
+#: builtin/merge.c:810
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -6760,47 +6813,47 @@ msgstr ""
"\n"
"以 '%c' 开头的行将被忽略,而且空æ交说明将会终止æ交。\n"
-#: builtin/merge.c:841
+#: builtin/merge.c:834
msgid "Empty commit message."
msgstr "空æ交信æ¯ã€‚"
-#: builtin/merge.c:853
+#: builtin/merge.c:846
#, c-format
msgid "Wonderful.\n"
msgstr "太棒了。\n"
-#: builtin/merge.c:918
+#: builtin/merge.c:911
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr "自动åˆå¹¶å¤±è´¥ï¼Œä¿®æ­£å†²çªç„¶åŽæ交修正的结果。\n"
-#: builtin/merge.c:934
+#: builtin/merge.c:927
#, c-format
msgid "'%s' is not a commit"
msgstr "'%s' ä¸æ˜¯ä¸€ä¸ªæ交"
-#: builtin/merge.c:975
+#: builtin/merge.c:968
msgid "No current branch."
msgstr "没有当å‰åˆ†æ”¯ã€‚"
-#: builtin/merge.c:977
+#: builtin/merge.c:970
msgid "No remote for the current branch."
msgstr "当å‰åˆ†æ”¯æ²¡æœ‰å¯¹åº”的远程版本库。"
-#: builtin/merge.c:979
+#: builtin/merge.c:972
msgid "No default upstream defined for the current branch."
msgstr "当å‰åˆ†æ”¯æ²¡æœ‰å®šä¹‰é»˜è®¤çš„上游分支。"
-#: builtin/merge.c:984
+#: builtin/merge.c:977
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "对于 %s 没有æ¥è‡ª %s 的远程跟踪分支"
-#: builtin/merge.c:1140
+#: builtin/merge.c:1133
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "没有è¦ç»ˆæ­¢çš„åˆå¹¶ï¼ˆMERGE_HEAD 丢失)。"
-#: builtin/merge.c:1156 git-pull.sh:31
+#: builtin/merge.c:1149 git-pull.sh:31
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -6808,11 +6861,11 @@ msgstr ""
"您尚未结æŸæ‚¨çš„åˆå¹¶ï¼ˆå­˜åœ¨ MERGE_HEAD)。\n"
"请在åˆå¹¶å‰å…ˆæ交您的修改。"
-#: builtin/merge.c:1159 git-pull.sh:34
+#: builtin/merge.c:1152 git-pull.sh:34
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "您尚未结æŸæ‚¨çš„åˆå¹¶ï¼ˆå­˜åœ¨ MERGE_HEAD)。"
-#: builtin/merge.c:1163
+#: builtin/merge.c:1156
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you can merge."
@@ -6820,137 +6873,145 @@ msgstr ""
"您尚未结æŸæ‚¨çš„拣选(存在 CHERRY_PICK_HEAD)。\n"
"请在åˆå¹¶å‰å…ˆæ交您的修改。"
-#: builtin/merge.c:1166
+#: builtin/merge.c:1159
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr "您尚未结æŸæ‚¨çš„拣选(存在 CHERRY_PICK_HEAD)。"
-#: builtin/merge.c:1175
+#: builtin/merge.c:1168
msgid "You cannot combine --squash with --no-ff."
msgstr "您ä¸èƒ½å°† --squash 与 --no-ff åŒæ—¶ä½¿ç”¨ã€‚"
-#: builtin/merge.c:1184
+#: builtin/merge.c:1177
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr "未指定æ交并且 merge.defaultToUpstream 未设置。"
-#: builtin/merge.c:1216
+#: builtin/merge.c:1209
msgid "Can merge only exactly one commit into empty head"
msgstr "åªèƒ½å°†ä¸€ä¸ªæ交åˆå¹¶åˆ°ç©ºåˆ†æ”¯ä¸Š"
-#: builtin/merge.c:1219
+#: builtin/merge.c:1212
msgid "Squash commit into empty head not supported yet"
msgstr "å°šä¸æ”¯æŒåˆ°ç©ºåˆ†æ”¯çš„压缩æ交"
-#: builtin/merge.c:1221
+#: builtin/merge.c:1214
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr "到空分支的éžå¿«è¿›å¼æ交没有æ„义"
-#: builtin/merge.c:1226
+#: builtin/merge.c:1219
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - ä¸èƒ½è¢«åˆå¹¶"
-#: builtin/merge.c:1277
+#: builtin/merge.c:1270
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr "æ交 %s 有一个éžå¯ä¿¡çš„声称æ¥è‡ª %s çš„ GPG ç­¾å。"
-#: builtin/merge.c:1280
+#: builtin/merge.c:1273
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "æ交 %s 有一个错误的声称æ¥è‡ª %s çš„ GPG ç­¾å。"
#. 'N'
-#: builtin/merge.c:1283
+#: builtin/merge.c:1276
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "æ交 %s 没有一个 GPG ç­¾å。"
-#: builtin/merge.c:1286
+#: builtin/merge.c:1279
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "æ交 %s 有一个æ¥è‡ª %s 的好的 GPG ç­¾å。\n"
-#: builtin/merge.c:1370
+#: builtin/merge.c:1363
#, c-format
msgid "Updating %s..%s\n"
msgstr "æ›´æ–° %s..%s\n"
-#: builtin/merge.c:1409
+#: builtin/merge.c:1402
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "å°è¯•éžå¸¸å°çš„索引内åˆå¹¶...\n"
-#: builtin/merge.c:1416
+#: builtin/merge.c:1409
#, c-format
msgid "Nope.\n"
msgstr "无。\n"
-#: builtin/merge.c:1448
+#: builtin/merge.c:1441
msgid "Not possible to fast-forward, aborting."
msgstr "无法快进,终止。"
-#: builtin/merge.c:1471 builtin/merge.c:1550
+#: builtin/merge.c:1464 builtin/merge.c:1543
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "将树回滚至原始状æ€...\n"
-#: builtin/merge.c:1475
+#: builtin/merge.c:1468
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "å°è¯•åˆå¹¶ç­–ç•¥ %s...\n"
-#: builtin/merge.c:1541
+#: builtin/merge.c:1534
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "没有åˆå¹¶ç­–略处ç†æ­¤åˆå¹¶ã€‚\n"
-#: builtin/merge.c:1543
+#: builtin/merge.c:1536
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "使用策略 %s åˆå¹¶å¤±è´¥ã€‚\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1545
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "使用 %s 以准备手工解决。\n"
-#: builtin/merge.c:1564
+#: builtin/merge.c:1557
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr "自动åˆå¹¶è¿›å±•é¡ºåˆ©ï¼ŒæŒ‰è¦æ±‚在æ交å‰åœæ­¢\n"
-#: builtin/merge-base.c:26
+#: builtin/merge-base.c:29
msgid "git merge-base [-a|--all] <commit> <commit>..."
msgstr "git merge-base [-a|--all] <æ交> <æ交>..."
-#: builtin/merge-base.c:27
+#: builtin/merge-base.c:30
msgid "git merge-base [-a|--all] --octopus <commit>..."
msgstr "git merge-base [-a|--all] --octopus <æ交>..."
-#: builtin/merge-base.c:28
+#: builtin/merge-base.c:31
msgid "git merge-base --independent <commit>..."
msgstr "git merge-base --independent <æ交>..."
-#: builtin/merge-base.c:29
+#: builtin/merge-base.c:32
msgid "git merge-base --is-ancestor <commit> <commit>"
msgstr "git merge-base --is-ancestor <æ交> <æ交>"
-#: builtin/merge-base.c:98
+#: builtin/merge-base.c:33
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr "git merge-base --fork-point <æ交> [<æ交>]"
+
+#: builtin/merge-base.c:214
msgid "output all common ancestors"
msgstr "输出所有共åŒçš„祖先"
-#: builtin/merge-base.c:99
+#: builtin/merge-base.c:216
msgid "find ancestors for a single n-way merge"
msgstr "查找一个多路åˆå¹¶çš„祖先æ交"
-#: builtin/merge-base.c:100
+#: builtin/merge-base.c:218
msgid "list revs not reachable from others"
msgstr "显示ä¸èƒ½è¢«å…¶ä»–访问到的版本"
-#: builtin/merge-base.c:102
+#: builtin/merge-base.c:220
msgid "is the first one ancestor of the other?"
msgstr "第一个是其他的祖先æ交么?"
+#: builtin/merge-base.c:222
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr "查找 <commit> 从<引用>日志的何处分支的"
+
#: builtin/merge-file.c:8
msgid ""
"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
@@ -7010,122 +7071,126 @@ msgstr "å…许创建一个以上的树"
msgid "git mv [options] <source>... <destination>"
msgstr "git mv [选项] <æº>... <目标>"
-#: builtin/mv.c:67
+#: builtin/mv.c:71
msgid "force move/rename even if target exists"
msgstr "强制移动/é‡å‘½ä»¤ï¼Œå³ä½¿ç›®æ ‡å­˜åœ¨"
-#: builtin/mv.c:68
+#: builtin/mv.c:72
msgid "skip move/rename errors"
msgstr "跳过移动/é‡å‘½å错误"
-#: builtin/mv.c:113
+#: builtin/mv.c:122
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "检查 '%s' 到 '%s' çš„é‡å‘½å\n"
-#: builtin/mv.c:117
+#: builtin/mv.c:126
msgid "bad source"
msgstr "åçš„æº"
-#: builtin/mv.c:120
+#: builtin/mv.c:129
msgid "can not move directory into itself"
msgstr "ä¸èƒ½å°†ç›®å½•ç§»åŠ¨åˆ°è‡ªèº«"
-#: builtin/mv.c:123
+#: builtin/mv.c:132
msgid "cannot move directory over file"
msgstr "ä¸èƒ½å°†ç›®å½•ç§»åŠ¨åˆ°æ–‡ä»¶"
-#: builtin/mv.c:129
+#: builtin/mv.c:138
#, c-format
msgid "Huh? Directory %s is in index and no submodule?"
msgstr "嗯?目录 %s 在索引中并且ä¸æ˜¯å­æ¨¡ç»„?"
-#: builtin/mv.c:131 builtin/rm.c:318
+#: builtin/mv.c:140 builtin/rm.c:318
msgid "Please, stage your changes to .gitmodules or stash them to proceed"
msgstr "请将您的修改缓存到 .gitmodules 中或ä¿å­˜è¿›åº¦åŽå†ç»§ç»­"
-#: builtin/mv.c:147
+#: builtin/mv.c:156
#, c-format
msgid "Huh? %.*s is in index?"
msgstr "嗯?%.*s 在索引中?"
-#: builtin/mv.c:159
+#: builtin/mv.c:168
msgid "source directory is empty"
msgstr "æºç›®å½•ä¸ºç©º"
-#: builtin/mv.c:191
+#: builtin/mv.c:200
msgid "not under version control"
msgstr "ä¸åœ¨ç‰ˆæœ¬æŽ§åˆ¶ä¹‹ä¸‹"
-#: builtin/mv.c:193
+#: builtin/mv.c:202
msgid "destination exists"
msgstr "目标已存在"
-#: builtin/mv.c:201
+#: builtin/mv.c:210
#, c-format
msgid "overwriting '%s'"
msgstr "覆盖 '%s'"
-#: builtin/mv.c:204
+#: builtin/mv.c:213
msgid "Cannot overwrite"
msgstr "ä¸èƒ½è¦†ç›–"
-#: builtin/mv.c:207
+#: builtin/mv.c:216
msgid "multiple sources for the same target"
msgstr "åŒä¸€ç›®æ ‡å…·æœ‰å¤šä¸ªæº"
-#: builtin/mv.c:222
+#: builtin/mv.c:218
+msgid "destination directory does not exist"
+msgstr "目标目录ä¸å­˜åœ¨"
+
+#: builtin/mv.c:233
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s,æº=%s,目标=%s"
-#: builtin/mv.c:232
+#: builtin/mv.c:243
#, c-format
msgid "Renaming %s to %s\n"
msgstr "é‡å‘½å %s 至 %s\n"
-#: builtin/mv.c:235 builtin/remote.c:731 builtin/repack.c:330
+#: builtin/mv.c:246 builtin/remote.c:726 builtin/repack.c:328
#, c-format
msgid "renaming '%s' failed"
msgstr "é‡å‘½å '%s' 失败"
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [options] <commit>..."
msgstr "git name-rev [选项] <æ交>..."
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [options] --all"
msgstr "git name-rev [选项] --all"
-#: builtin/name-rev.c:261
+#: builtin/name-rev.c:260
msgid "git name-rev [options] --stdin"
msgstr "git name-rev [选项] --stdin"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "print only names (no SHA-1)"
msgstr "åªæ‰“å°å称(无 SHA-1)"
-#: builtin/name-rev.c:314
+#: builtin/name-rev.c:313
msgid "only use tags to name the commits"
msgstr "åªä½¿ç”¨ tags æ¥å‘½åæ交"
-#: builtin/name-rev.c:316
+#: builtin/name-rev.c:315
msgid "only use refs matching <pattern>"
msgstr "åªä½¿ç”¨å’Œ <模å¼> 相匹é…的引用"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "list all commits reachable from all refs"
msgstr "列出å¯ä»¥ä»Žæ‰€æœ‰å¼•ç”¨è®¿é—®çš„æ交"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "read from stdin"
msgstr "从标准输入读å–"
-#: builtin/name-rev.c:320
+#: builtin/name-rev.c:319
msgid "allow to print `undefined` names (default)"
msgstr "å…è®¸æ‰“å° `未定义` çš„å称(默认)"
-#: builtin/name-rev.c:326
+#: builtin/name-rev.c:325
msgid "dereference tags in the input (internal use)"
msgstr "åå‘解æžè¾“入中的 tags(内部使用)"
@@ -7440,7 +7505,7 @@ msgstr "注解引用"
msgid "use notes from <notes_ref>"
msgstr "从 <注解引用> 使用注解"
-#: builtin/notes.c:974 builtin/remote.c:1598
+#: builtin/notes.c:974 builtin/remote.c:1593
#, c-format
msgid "Unknown subcommand: %s"
msgstr "未知å­å‘½ä»¤ï¼š%s"
@@ -7458,145 +7523,145 @@ msgstr "git pack-objects [选项...] base-name [< 引用列表 | < 对象列表]
msgid "deflate error (%d)"
msgstr "压缩错误 (%d)"
-#: builtin/pack-objects.c:2398
+#: builtin/pack-objects.c:2396
#, c-format
msgid "unsupported index version %s"
msgstr "ä¸æ”¯æŒçš„索引版本 %s"
-#: builtin/pack-objects.c:2402
+#: builtin/pack-objects.c:2400
#, c-format
msgid "bad index version '%s'"
msgstr "å的索引版本 '%s'"
-#: builtin/pack-objects.c:2425
+#: builtin/pack-objects.c:2423
#, c-format
msgid "option %s does not accept negative form"
msgstr "选项 %s ä¸æŽ¥å—å¦å®šæ ¼å¼"
-#: builtin/pack-objects.c:2429
+#: builtin/pack-objects.c:2427
#, c-format
msgid "unable to parse value '%s' for option %s"
msgstr "ä¸èƒ½è§£æžé€‰é¡¹ %1$s 的值 '%2$s'"
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2446
msgid "do not show progress meter"
msgstr "ä¸æ˜¾ç¤ºè¿›åº¦è¡¨"
-#: builtin/pack-objects.c:2450
+#: builtin/pack-objects.c:2448
msgid "show progress meter"
msgstr "显示进度表"
-#: builtin/pack-objects.c:2452
+#: builtin/pack-objects.c:2450
msgid "show progress meter during object writing phase"
msgstr "在对象写入阶段显示进度表"
-#: builtin/pack-objects.c:2455
+#: builtin/pack-objects.c:2453
msgid "similar to --all-progress when progress meter is shown"
msgstr "当进度表显示时类似于 --all-progress"
-#: builtin/pack-objects.c:2456
+#: builtin/pack-objects.c:2454
msgid "version[,offset]"
msgstr "版本[,å移]"
-#: builtin/pack-objects.c:2457
+#: builtin/pack-objects.c:2455
msgid "write the pack index file in the specified idx format version"
msgstr "用指定的 idx æ ¼å¼ç‰ˆæœ¬æ¥å†™åŒ…索引文件"
-#: builtin/pack-objects.c:2460
+#: builtin/pack-objects.c:2458
msgid "maximum size of each output pack file"
msgstr "æ¯ä¸ªè¾“出包的最大尺寸"
-#: builtin/pack-objects.c:2462
+#: builtin/pack-objects.c:2460
msgid "ignore borrowed objects from alternate object store"
msgstr "忽略从替代对象存储里借用对象"
-#: builtin/pack-objects.c:2464
+#: builtin/pack-objects.c:2462
msgid "ignore packed objects"
msgstr "忽略包对象"
-#: builtin/pack-objects.c:2466
+#: builtin/pack-objects.c:2464
msgid "limit pack window by objects"
msgstr "é™åˆ¶æ‰“包窗å£çš„对象数"
-#: builtin/pack-objects.c:2468
+#: builtin/pack-objects.c:2466
msgid "limit pack window by memory in addition to object limit"
msgstr "除对象数é‡é™åˆ¶å¤–设置打包窗å£çš„内存é™åˆ¶"
-#: builtin/pack-objects.c:2470
+#: builtin/pack-objects.c:2468
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr "打包å…许的 delta 链的最大长度"
-#: builtin/pack-objects.c:2472
+#: builtin/pack-objects.c:2470
msgid "reuse existing deltas"
msgstr "é‡ç”¨å·²å­˜åœ¨çš„ deltas"
-#: builtin/pack-objects.c:2474
+#: builtin/pack-objects.c:2472
msgid "reuse existing objects"
msgstr "é‡ç”¨å·²å­˜åœ¨çš„对象"
-#: builtin/pack-objects.c:2476
+#: builtin/pack-objects.c:2474
msgid "use OFS_DELTA objects"
msgstr "使用 OFS_DELTA 对象"
-#: builtin/pack-objects.c:2478
+#: builtin/pack-objects.c:2476
msgid "use threads when searching for best delta matches"
msgstr "使用线程查询最佳 delta 匹é…"
-#: builtin/pack-objects.c:2480
+#: builtin/pack-objects.c:2478
msgid "do not create an empty pack output"
msgstr "ä¸åˆ›å»ºç©ºçš„包输出"
-#: builtin/pack-objects.c:2482
+#: builtin/pack-objects.c:2480
msgid "read revision arguments from standard input"
msgstr "从标准输入读å–修订å·å‚æ•°"
-#: builtin/pack-objects.c:2484
+#: builtin/pack-objects.c:2482
msgid "limit the objects to those that are not yet packed"
msgstr "é™åˆ¶é‚£äº›å°šæœªæ‰“包的对象"
-#: builtin/pack-objects.c:2487
+#: builtin/pack-objects.c:2485
msgid "include objects reachable from any reference"
msgstr "包括å¯ä»¥ä»Žä»»ä½•å¼•ç”¨è®¿é—®åˆ°çš„对象"
-#: builtin/pack-objects.c:2490
+#: builtin/pack-objects.c:2488
msgid "include objects referred by reflog entries"
msgstr "包括被引用日志引用到的对象"
-#: builtin/pack-objects.c:2493
+#: builtin/pack-objects.c:2491
msgid "output pack to stdout"
msgstr "输出包到标准输出"
-#: builtin/pack-objects.c:2495
+#: builtin/pack-objects.c:2493
msgid "include tag objects that refer to objects to be packed"
msgstr "包括引用了打包对象的 tag"
-#: builtin/pack-objects.c:2497
+#: builtin/pack-objects.c:2495
msgid "keep unreachable objects"
msgstr "ç»´æŒä¸å¯è¾¾çš„对象"
-#: builtin/pack-objects.c:2498 parse-options.h:143
+#: builtin/pack-objects.c:2496 parse-options.h:143
msgid "time"
msgstr "时间"
-#: builtin/pack-objects.c:2499
+#: builtin/pack-objects.c:2497
msgid "unpack unreachable objects newer than <time>"
msgstr "将比给定 <时间> 新的无法访问的对象解包"
-#: builtin/pack-objects.c:2502
+#: builtin/pack-objects.c:2500
msgid "create thin packs"
msgstr "创建精简包"
-#: builtin/pack-objects.c:2504
+#: builtin/pack-objects.c:2502
msgid "ignore packs that have companion .keep file"
msgstr "忽略é…有 .keep 文件的包"
-#: builtin/pack-objects.c:2506
+#: builtin/pack-objects.c:2504
msgid "pack compression level"
msgstr "打包压缩级别"
-#: builtin/pack-objects.c:2508
+#: builtin/pack-objects.c:2506
msgid "do not hide commits by grafts"
-msgstr "ä¸éšè—移æ¤è¦†ç›–çš„æ交"
+msgstr "显示被å«æŽ¥éšè—çš„æ交"
#: builtin/pack-refs.c:6
msgid "git pack-refs [options]"
@@ -7618,15 +7683,15 @@ msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]"
msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
msgstr "git prune [-n] [-v] [--expire <时间>] [--] [<头>...]"
-#: builtin/prune.c:132
+#: builtin/prune.c:142
msgid "do not remove, show only"
msgstr "ä¸åˆ é™¤ï¼Œåªæ˜¾ç¤º"
-#: builtin/prune.c:133
+#: builtin/prune.c:143
msgid "report pruned objects"
msgstr "报告清除的对象"
-#: builtin/prune.c:136
+#: builtin/prune.c:146
msgid "expire objects older than <time>"
msgstr "使早于给定时间的对象过期"
@@ -7634,15 +7699,15 @@ msgstr "使早于给定时间的对象过期"
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr "git push [<选项>] [<版本库> [<引用规则>...]]"
-#: builtin/push.c:47
+#: builtin/push.c:86
msgid "tag shorthand without <tag>"
msgstr "tag 简写没有跟 <tag> å‚æ•°"
-#: builtin/push.c:66
+#: builtin/push.c:96
msgid "--delete only accepts plain target ref names"
msgstr "--delete åªæŽ¥å—简å•çš„目标引用å"
-#: builtin/push.c:101
+#: builtin/push.c:141
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
@@ -7650,7 +7715,7 @@ msgstr ""
"\n"
"为了永久地选择任一选项,å‚è§ 'git help config' 中的 push.default。"
-#: builtin/push.c:104
+#: builtin/push.c:144
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -7674,7 +7739,7 @@ msgstr ""
" git push %s %s\n"
"%s"
-#: builtin/push.c:119
+#: builtin/push.c:159
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -7688,7 +7753,7 @@ msgstr ""
"\n"
" git push %s HEAD:<name-of-remote-branch>\n"
-#: builtin/push.c:133
+#: builtin/push.c:173
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -7701,12 +7766,12 @@ msgstr ""
"\n"
" git push --set-upstream %s %s\n"
-#: builtin/push.c:141
+#: builtin/push.c:181
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
msgstr "当å‰åˆ†æ”¯ %s 有多个上游分支,拒ç»æŽ¨é€ã€‚"
-#: builtin/push.c:144
+#: builtin/push.c:184
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -7717,7 +7782,7 @@ msgstr ""
"而没有告诉我è¦æŽ¨é€ä»€ä¹ˆã€æ›´æ–°å“ªä¸ªè¿œç¨‹åˆ†æ”¯ã€‚"
# 译者:字符串首行行首è¦æ·»åŠ â€œwarning: â€å­—串,故此首行è¦è¾ƒå…¶ä½™è¡ŒçŸ­
-#: builtin/push.c:167
+#: builtin/push.c:207
msgid ""
"push.default is unset; its implicit value is changing in\n"
"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7729,13 +7794,20 @@ msgid ""
"\n"
" git config --global push.default simple\n"
"\n"
+"When push.default is set to 'matching', git will push local branches\n"
+"to the remote branches that already exist with the same name.\n"
+"\n"
+"In Git 2.0, Git will default to the more conservative 'simple'\n"
+"behavior, which only pushes the current branch to the corresponding\n"
+"remote branch that 'git pull' uses to update the current branch.\n"
+"\n"
"See 'git help config' and search for 'push.default' for further "
"information.\n"
"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
"'current' instead of 'simple' if you sometimes use older versions of Git)"
msgstr ""
-"push.default 未设置,它的默认值将在 Git 2.0 由 'matching'\n"
-"改å˜ä¸º 'simple'。若è¦ä¸å†æ˜¾ç¤ºæœ¬ä¿¡æ¯å¹¶ä¿æŒä¼ ç»Ÿä¹ æƒ¯ï¼Œè¿›è¡Œå¦‚下设置:\n"
+"push.default 尚未设置,它的默认值在 Git 2.0 从 'matching'\n"
+"å˜æ›´ä¸º 'simple'。若è¦ä¸å†æ˜¾ç¤ºæœ¬ä¿¡æ¯å¹¶ä¿æŒä¼ ç»Ÿä¹ æƒ¯ï¼Œè¿›è¡Œå¦‚下设置:\n"
"\n"
" git config --global push.default matching\n"
"\n"
@@ -7743,16 +7815,22 @@ msgstr ""
"\n"
" git config --global push.default simple\n"
"\n"
+"当 push.default 设置为 'matching' åŽï¼Œgit 将推é€å’Œè¿œç¨‹åŒå的所有\n"
+"本地分支。\n"
+"\n"
+"从 Git 2.0 开始,Git 缺çœé‡‡ç”¨æ›´ä¸ºä¿å®ˆçš„ 'simple' 模å¼ï¼ŒåªæŽ¨é€å½“å‰\n"
+"分支到远程关è”çš„åŒååˆ†æ”¯ï¼Œå³ 'git push' 推é€å½“å‰åˆ†æ”¯ã€‚\n"
+"\n"
"å‚è§ 'git help config' 并查找 'push.default' 以获å–更多信æ¯ã€‚\n"
"('simple' 模å¼ç”± Git 1.7.11 版本引入。如果您有时è¦ä½¿ç”¨è€ç‰ˆæœ¬çš„ Git,\n"
"为ä¿æŒå…¼å®¹ï¼Œè¯·ç”¨ 'current' 代替 'simple')"
-#: builtin/push.c:227
+#: builtin/push.c:274
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr "您没有为推é€æŒ‡å®šä»»ä½•å¼•ç”¨è§„则,并且 push.default 为 \"nothing\"。"
-#: builtin/push.c:234
+#: builtin/push.c:281
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -7763,7 +7841,7 @@ msgstr ""
"å†æ¬¡æŽ¨é€å‰ï¼Œå…ˆä¸Žè¿œç¨‹å˜æ›´åˆå¹¶ï¼ˆå¦‚ 'git pull ...')。详è§\n"
"'git push --help' 中的 'Note about fast-forwards' å°èŠ‚。"
-#: builtin/push.c:240
+#: builtin/push.c:287
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. If you did not intend to push that branch, you may want to\n"
@@ -7775,7 +7853,7 @@ msgstr ""
"é…ç½®å˜é‡ 'push.default' 设置为 'simple'ã€'current' 或 'upstream'\n"
"以便åªæŽ¨é€å½“å‰åˆ†æ”¯ã€‚"
-#: builtin/push.c:246
+#: builtin/push.c:293
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -7786,7 +7864,7 @@ msgstr ""
"检出该分支并整åˆè¿œç¨‹å˜æ›´ï¼ˆå¦‚ 'git pull ...'),然åŽå†æŽ¨é€ã€‚详è§\n"
"'git push --help' 中的 'Note about fast-forwards' å°èŠ‚。"
-#: builtin/push.c:252
+#: builtin/push.c:299
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -7799,11 +7877,11 @@ msgstr ""
"(如 'git pull ...')。\n"
"è¯¦è§ 'git push --help' 中的 'Note about fast-forwards' å°èŠ‚。"
-#: builtin/push.c:259
+#: builtin/push.c:306
msgid "Updates were rejected because the tag already exists in the remote."
msgstr "更新被拒ç»å› ä¸º tag 在远程已ç»å­˜åœ¨ã€‚"
-#: builtin/push.c:262
+#: builtin/push.c:309
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
@@ -7812,22 +7890,22 @@ msgstr ""
"如果ä¸ä½¿ç”¨ '--force' å‚数,您ä¸èƒ½æ›´æ–°ä¸€ä¸ªæŒ‡å‘éžæ交对象的远程引用,\n"
"也ä¸èƒ½æ›´æ–°è¿œç¨‹å¼•ç”¨è®©å…¶æŒ‡å‘一个éžæ交对象。\n"
-#: builtin/push.c:328
+#: builtin/push.c:375
#, c-format
msgid "Pushing to %s\n"
msgstr "推é€åˆ° %s\n"
-#: builtin/push.c:332
+#: builtin/push.c:379
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "无法推é€ä¸€äº›å¼•ç”¨åˆ° '%s'"
-#: builtin/push.c:365
+#: builtin/push.c:412
#, c-format
msgid "bad repository '%s'"
msgstr "å的版本库 '%s'"
-#: builtin/push.c:366
+#: builtin/push.c:413
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -7848,95 +7926,95 @@ msgstr ""
"\n"
" git push <name>\n"
-#: builtin/push.c:381
+#: builtin/push.c:428
msgid "--all and --tags are incompatible"
msgstr "--all å’Œ --tags ä¸å…¼å®¹"
-#: builtin/push.c:382
+#: builtin/push.c:429
msgid "--all can't be combined with refspecs"
msgstr "--all ä¸èƒ½å’Œå¼•ç”¨è§„则åŒæ—¶ä½¿ç”¨"
-#: builtin/push.c:387
+#: builtin/push.c:434
msgid "--mirror and --tags are incompatible"
msgstr "--mirror å’Œ --tags ä¸å…¼å®¹"
-#: builtin/push.c:388
+#: builtin/push.c:435
msgid "--mirror can't be combined with refspecs"
msgstr "--mirror ä¸èƒ½å’Œå¼•ç”¨è§„则åŒæ—¶ä½¿ç”¨"
-#: builtin/push.c:393
+#: builtin/push.c:440
msgid "--all and --mirror are incompatible"
msgstr "--all å’Œ --mirror ä¸å…¼å®¹"
-#: builtin/push.c:453
+#: builtin/push.c:500
msgid "repository"
msgstr "版本库"
-#: builtin/push.c:454
+#: builtin/push.c:501
msgid "push all refs"
msgstr "推é€æ‰€æœ‰å¼•ç”¨"
-#: builtin/push.c:455
+#: builtin/push.c:502
msgid "mirror all refs"
msgstr "é•œåƒæ‰€æœ‰å¼•ç”¨"
-#: builtin/push.c:457
+#: builtin/push.c:504
msgid "delete refs"
msgstr "删除引用"
-#: builtin/push.c:458
+#: builtin/push.c:505
msgid "push tags (can't be used with --all or --mirror)"
msgstr "æŽ¨é€ tags(ä¸èƒ½ä½¿ç”¨ --all or --mirror)"
-#: builtin/push.c:461
+#: builtin/push.c:508
msgid "force updates"
msgstr "强制更新"
-#: builtin/push.c:463
+#: builtin/push.c:510
msgid "refname>:<expect"
msgstr "引用å>:<期望值"
-#: builtin/push.c:464
+#: builtin/push.c:511
msgid "require old value of ref to be at this value"
msgstr "è¦æ±‚引用旧的å–值为设定值"
-#: builtin/push.c:466
+#: builtin/push.c:513
msgid "check"
msgstr "检查"
-#: builtin/push.c:467
+#: builtin/push.c:514
msgid "control recursive pushing of submodules"
msgstr "控制å­æ¨¡ç»„的递归推é€"
-#: builtin/push.c:469
+#: builtin/push.c:516
msgid "use thin pack"
msgstr "使用精简打包"
-#: builtin/push.c:470 builtin/push.c:471
+#: builtin/push.c:517 builtin/push.c:518
msgid "receive pack program"
msgstr "接收包程åº"
-#: builtin/push.c:472
+#: builtin/push.c:519
msgid "set upstream for git pull/status"
msgstr "设置 git pull/status 的上游"
-#: builtin/push.c:475
+#: builtin/push.c:522
msgid "prune locally removed refs"
msgstr "清除本地删除的引用"
-#: builtin/push.c:477
+#: builtin/push.c:524
msgid "bypass pre-push hook"
msgstr "绕过 pre-push é’©å­"
-#: builtin/push.c:478
+#: builtin/push.c:525
msgid "push missing but relevant tags"
msgstr "推é€ç¼ºå¤±çš„有关的 tags"
-#: builtin/push.c:488
+#: builtin/push.c:535
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "--delete 与 --allã€--mirror åŠ --tags ä¸å…¼å®¹"
-#: builtin/push.c:490
+#: builtin/push.c:537
msgid "--delete doesn't make sense without any refs"
msgstr "--delete 未接任何引用没有æ„义"
@@ -8024,11 +8102,11 @@ msgstr "'%2$s' 的值 '%1$s' ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„时间戳"
msgid "'%s' is not a valid timestamp"
msgstr "'%s' ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„时间戳"
-#: builtin/remote.c:11
+#: builtin/remote.c:12
msgid "git remote [-v | --verbose]"
msgstr "git remote [-v | --verbose]"
-#: builtin/remote.c:12
+#: builtin/remote.c:13
msgid ""
"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <name> <url>"
@@ -8036,81 +8114,81 @@ msgstr ""
"git remote add [-t <分支>] [-m <master>] [-f] [--tags|--no-tags] [--"
"mirror=<fetch|push>] <å称> <url>"
-#: builtin/remote.c:13 builtin/remote.c:32
+#: builtin/remote.c:14 builtin/remote.c:33
msgid "git remote rename <old> <new>"
msgstr "git remote rename <æ—§å称> <æ–°å称>"
-#: builtin/remote.c:14 builtin/remote.c:37
+#: builtin/remote.c:15 builtin/remote.c:38
msgid "git remote remove <name>"
msgstr "git remote remove <å称>"
-#: builtin/remote.c:15
+#: builtin/remote.c:16
msgid "git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"
msgstr "git remote set-head <å称> (-a | --auto | -d | --delete |<分支>)"
-#: builtin/remote.c:16
+#: builtin/remote.c:17
msgid "git remote [-v | --verbose] show [-n] <name>"
msgstr "git remote [-v | --verbose] show [-n] <å称>"
-#: builtin/remote.c:17
+#: builtin/remote.c:18
msgid "git remote prune [-n | --dry-run] <name>"
msgstr "git remote prune [-n | --dry-run] <å称>"
-#: builtin/remote.c:18
+#: builtin/remote.c:19
msgid ""
"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
msgstr "git remote [-v | --verbose] update [-p | --prune] [(<组> | <远程>)...]"
-#: builtin/remote.c:19
+#: builtin/remote.c:20
msgid "git remote set-branches [--add] <name> <branch>..."
msgstr "git remote set-branches [--add] <å称> <分支>..."
-#: builtin/remote.c:20 builtin/remote.c:68
+#: builtin/remote.c:21 builtin/remote.c:69
msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
msgstr "git remote set-url [--push] <å称> <新的地å€> [<旧的地å€>]"
-#: builtin/remote.c:21 builtin/remote.c:69
+#: builtin/remote.c:22 builtin/remote.c:70
msgid "git remote set-url --add <name> <newurl>"
msgstr "git remote set-url --add <å称> <新的地å€>"
-#: builtin/remote.c:22 builtin/remote.c:70
+#: builtin/remote.c:23 builtin/remote.c:71
msgid "git remote set-url --delete <name> <url>"
msgstr "git remote set-url --delete <å称> <地å€>"
-#: builtin/remote.c:27
+#: builtin/remote.c:28
msgid "git remote add [<options>] <name> <url>"
msgstr "git remote add [<选项>] <å称> <地å€>"
-#: builtin/remote.c:42
+#: builtin/remote.c:43
msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
msgstr "git remote set-head <å称> (-a | --auto | -d | --delete | <分支>)"
-#: builtin/remote.c:47
+#: builtin/remote.c:48
msgid "git remote set-branches <name> <branch>..."
msgstr "git remote set-branches <å称> <分支>..."
-#: builtin/remote.c:48
+#: builtin/remote.c:49
msgid "git remote set-branches --add <name> <branch>..."
msgstr "git remote set-branches --add <å称> <分支>..."
-#: builtin/remote.c:53
+#: builtin/remote.c:54
msgid "git remote show [<options>] <name>"
msgstr "git remote show [<选项>] <å称>"
-#: builtin/remote.c:58
+#: builtin/remote.c:59
msgid "git remote prune [<options>] <name>"
msgstr "git remote prune [<选项>] <å称>"
-#: builtin/remote.c:63
+#: builtin/remote.c:64
msgid "git remote update [<options>] [<group> | <remote>]..."
msgstr "git remote update [<选项>] [<组> | <远程>]..."
-#: builtin/remote.c:98
+#: builtin/remote.c:88
#, c-format
msgid "Updating %s"
msgstr "更新 %s 中"
-#: builtin/remote.c:130
+#: builtin/remote.c:120
msgid ""
"--mirror is dangerous and deprecated; please\n"
"\t use --mirror=fetch or --mirror=push instead"
@@ -8118,101 +8196,101 @@ msgstr ""
"--mirror 选项å±é™©ä¸”过时,请使用 --mirror=fetch\n"
"\t 或 --mirror=push"
-#: builtin/remote.c:147
+#: builtin/remote.c:137
#, c-format
msgid "unknown mirror argument: %s"
msgstr "未知的镜åƒå‚数:%s"
-#: builtin/remote.c:163
+#: builtin/remote.c:153
msgid "fetch the remote branches"
msgstr "抓å–远程的分支"
-#: builtin/remote.c:165
+#: builtin/remote.c:155
msgid "import all tags and associated objects when fetching"
msgstr "抓å–时导入所有的 tags 和关è”对象"
-#: builtin/remote.c:168
+#: builtin/remote.c:158
msgid "or do not fetch any tag at all (--no-tags)"
msgstr "或ä¸æŠ“å–任何 tag(--no-tags)"
-#: builtin/remote.c:170
+#: builtin/remote.c:160
msgid "branch(es) to track"
msgstr "跟踪的分支"
-#: builtin/remote.c:171
+#: builtin/remote.c:161
msgid "master branch"
msgstr "主线分支"
-#: builtin/remote.c:172
+#: builtin/remote.c:162
msgid "push|fetch"
msgstr "push|fetch"
-#: builtin/remote.c:173
+#: builtin/remote.c:163
msgid "set up remote as a mirror to push to or fetch from"
msgstr "把远程设置为用以推é€æˆ–抓å–çš„é•œåƒ"
-#: builtin/remote.c:185
+#: builtin/remote.c:175
msgid "specifying a master branch makes no sense with --mirror"
msgstr "指定一个 master 分支并使用 --mirror 选项没有æ„义"
-#: builtin/remote.c:187
+#: builtin/remote.c:177
msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr "指定è¦è·Ÿè¸ªçš„分支åªåœ¨ä¸ŽèŽ·å–é•œåƒåŒæ—¶ä½¿ç”¨æ‰æœ‰æ„义"
-#: builtin/remote.c:195 builtin/remote.c:646
+#: builtin/remote.c:185 builtin/remote.c:641
#, c-format
msgid "remote %s already exists."
msgstr "远程 %s å·²ç»å­˜åœ¨ã€‚"
-#: builtin/remote.c:199 builtin/remote.c:650
+#: builtin/remote.c:189 builtin/remote.c:645
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "'%s' ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„远程å称"
-#: builtin/remote.c:243
+#: builtin/remote.c:233
#, c-format
msgid "Could not setup master '%s'"
msgstr "无法设置 master '%s'"
-#: builtin/remote.c:299
+#: builtin/remote.c:289
#, c-format
msgid "more than one %s"
msgstr "多于一个 %s"
-#: builtin/remote.c:339
+#: builtin/remote.c:334
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr "无法得到引用规则 %s 的获å–列表"
-#: builtin/remote.c:440 builtin/remote.c:448
+#: builtin/remote.c:435 builtin/remote.c:443
msgid "(matching)"
msgstr "(匹é…)"
-#: builtin/remote.c:452
+#: builtin/remote.c:447
msgid "(delete)"
msgstr "(删除)"
-#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607
+#: builtin/remote.c:590 builtin/remote.c:596 builtin/remote.c:602
#, c-format
msgid "Could not append '%s' to '%s'"
msgstr "ä¸èƒ½æ·»åŠ  '%s' 至 '%s'"
-#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890
+#: builtin/remote.c:634 builtin/remote.c:787 builtin/remote.c:885
#, c-format
msgid "No such remote: %s"
msgstr "没有这样的远程:%s"
-#: builtin/remote.c:656
+#: builtin/remote.c:651
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "ä¸èƒ½é‡å‘½åé…ç½®å°èŠ‚ '%s' 到 '%s'"
-#: builtin/remote.c:662 builtin/remote.c:799
+#: builtin/remote.c:657 builtin/remote.c:794
#, c-format
msgid "Could not remove config section '%s'"
msgstr "ä¸èƒ½ç§»é™¤é…ç½®å°èŠ‚ '%s'"
-#: builtin/remote.c:677
+#: builtin/remote.c:672
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -8223,32 +8301,32 @@ msgstr ""
"\t%s\n"
"\t如果必è¦è¯·æ‰‹åŠ¨æ›´æ–°é…置。"
-#: builtin/remote.c:683
+#: builtin/remote.c:678
#, c-format
msgid "Could not append '%s'"
msgstr "ä¸èƒ½è¿½åŠ  '%s'"
-#: builtin/remote.c:694
+#: builtin/remote.c:689
#, c-format
msgid "Could not set '%s'"
msgstr "ä¸èƒ½è®¾ç½® '%s'"
-#: builtin/remote.c:716
+#: builtin/remote.c:711
#, c-format
msgid "deleting '%s' failed"
msgstr "删除 '%s' 失败"
-#: builtin/remote.c:750
+#: builtin/remote.c:745
#, c-format
msgid "creating '%s' failed"
msgstr "创建 '%s' 失败"
-#: builtin/remote.c:764
+#: builtin/remote.c:759
#, c-format
msgid "Could not remove branch %s"
msgstr "无法移除分支 %s"
-#: builtin/remote.c:834
+#: builtin/remote.c:829
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -8258,126 +8336,126 @@ msgid_plural ""
msgstr[0] "注æ„:ref/remotes 层级之外的一个分支未被移除。è¦åˆ é™¤å®ƒï¼Œä½¿ç”¨ï¼š"
msgstr[1] "注æ„:ref/remotes 层级之外的一些分支未被移除。è¦åˆ é™¤å®ƒä»¬ï¼Œä½¿ç”¨ï¼š"
-#: builtin/remote.c:943
+#: builtin/remote.c:938
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " 新的(下一次获å–将存储于 remotes/%s)"
-#: builtin/remote.c:946
+#: builtin/remote.c:941
msgid " tracked"
msgstr " 已跟踪"
-#: builtin/remote.c:948
+#: builtin/remote.c:943
msgid " stale (use 'git remote prune' to remove)"
msgstr " 过时(使用 'git remote prune' æ¥ç§»é™¤ï¼‰"
-#: builtin/remote.c:950
+#: builtin/remote.c:945
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:991
+#: builtin/remote.c:986
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "无效的 branch.%s.merge,ä¸èƒ½å˜åŸºåˆ°ä¸€ä¸ªä»¥ä¸Šçš„分支"
-#: builtin/remote.c:998
+#: builtin/remote.c:993
#, c-format
msgid "rebases onto remote %s"
msgstr "å˜åŸºåˆ°è¿œç¨‹ %s"
-#: builtin/remote.c:1001
+#: builtin/remote.c:996
#, c-format
msgid " merges with remote %s"
msgstr " 与远程 %s åˆå¹¶"
-#: builtin/remote.c:1002
+#: builtin/remote.c:997
msgid " and with remote"
msgstr " 且有远程"
-#: builtin/remote.c:1004
+#: builtin/remote.c:999
#, c-format
msgid "merges with remote %s"
msgstr "与远程 %s åˆå¹¶"
-#: builtin/remote.c:1005
+#: builtin/remote.c:1000
msgid " and with remote"
msgstr " 且有远程"
-#: builtin/remote.c:1051
+#: builtin/remote.c:1046
msgid "create"
msgstr "创建"
-#: builtin/remote.c:1054
+#: builtin/remote.c:1049
msgid "delete"
msgstr "删除"
-#: builtin/remote.c:1058
+#: builtin/remote.c:1053
msgid "up to date"
msgstr "最新"
-#: builtin/remote.c:1061
+#: builtin/remote.c:1056
msgid "fast-forwardable"
msgstr "å¯å¿«è¿›"
-#: builtin/remote.c:1064
+#: builtin/remote.c:1059
msgid "local out of date"
msgstr "本地已过时"
-#: builtin/remote.c:1071
+#: builtin/remote.c:1066
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s 强制推é€è‡³ %-*s (%s)"
-#: builtin/remote.c:1074
+#: builtin/remote.c:1069
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s 推é€è‡³ %-*s (%s)"
-#: builtin/remote.c:1078
+#: builtin/remote.c:1073
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s 强制推é€è‡³ %s"
-#: builtin/remote.c:1081
+#: builtin/remote.c:1076
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s 推é€è‡³ %s"
-#: builtin/remote.c:1091
+#: builtin/remote.c:1144
msgid "do not query remotes"
msgstr "ä¸æŸ¥è¯¢è¿œç¨‹"
-#: builtin/remote.c:1118
+#: builtin/remote.c:1171
#, c-format
msgid "* remote %s"
msgstr "* 远程 %s"
-#: builtin/remote.c:1119
+#: builtin/remote.c:1172
#, c-format
msgid " Fetch URL: %s"
msgstr " 获å–地å€ï¼š%s"
-#: builtin/remote.c:1120 builtin/remote.c:1285
+#: builtin/remote.c:1173 builtin/remote.c:1318
msgid "(no URL)"
msgstr "(æ—  URL)"
-#: builtin/remote.c:1129 builtin/remote.c:1131
+#: builtin/remote.c:1182 builtin/remote.c:1184
#, c-format
msgid " Push URL: %s"
msgstr " 推é€åœ°å€ï¼š%s"
-#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137
+#: builtin/remote.c:1186 builtin/remote.c:1188 builtin/remote.c:1190
#, c-format
msgid " HEAD branch: %s"
msgstr " HEAD分支:%s"
-#: builtin/remote.c:1139
+#: builtin/remote.c:1192
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
msgstr " HEAD 分支(远程 HEAD 模糊,å¯èƒ½æ˜¯ä¸‹åˆ—中的一个):\n"
-#: builtin/remote.c:1151
+#: builtin/remote.c:1204
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
@@ -8385,138 +8463,138 @@ msgstr[0] " 远程分支:%s"
msgstr[1] " 远程分支:%s"
# 译者:中文字符串拼接,å¯åˆ é™¤å‰å¯¼ç©ºæ ¼
-#: builtin/remote.c:1154 builtin/remote.c:1181
+#: builtin/remote.c:1207 builtin/remote.c:1234
msgid " (status not queried)"
msgstr "(状æ€æœªæŸ¥è¯¢ï¼‰"
-#: builtin/remote.c:1163
+#: builtin/remote.c:1216
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " 为 'git pull' é…置的本地分支:"
msgstr[1] " 为 'git pull' é…置的本地分支:"
-#: builtin/remote.c:1171
+#: builtin/remote.c:1224
msgid " Local refs will be mirrored by 'git push'"
msgstr " 本地引用将在 'git push' 时被镜åƒ"
-#: builtin/remote.c:1178
+#: builtin/remote.c:1231
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " 为 'git push' é…置的本地引用%s:"
msgstr[1] " 为 'git push' é…置的本地引用%s:"
-#: builtin/remote.c:1199
+#: builtin/remote.c:1252
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "æ ¹æ®è¿œç¨‹è®¾ç½® refs/remotes/<å称>/HEAD"
-#: builtin/remote.c:1201
+#: builtin/remote.c:1254
msgid "delete refs/remotes/<name>/HEAD"
msgstr "删除 refs/remotes/<å称>/HEAD"
-#: builtin/remote.c:1216
+#: builtin/remote.c:1269
msgid "Cannot determine remote HEAD"
msgstr "无法确定远程 HEAD"
-#: builtin/remote.c:1218
+#: builtin/remote.c:1271
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr "多个远程 HEAD 分支。请明确地选择一个用命令:"
-#: builtin/remote.c:1228
+#: builtin/remote.c:1281
#, c-format
msgid "Could not delete %s"
msgstr "无法删除 %s"
-#: builtin/remote.c:1236
+#: builtin/remote.c:1289
#, c-format
msgid "Not a valid ref: %s"
msgstr "ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆå¼•ç”¨ï¼š%s"
-#: builtin/remote.c:1238
+#: builtin/remote.c:1291
#, c-format
msgid "Could not setup %s"
msgstr "ä¸èƒ½è®¾ç½® %s"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: builtin/remote.c:1274
+#: builtin/remote.c:1307
#, c-format
msgid " %s will become dangling!"
msgstr " %s å°†æˆä¸ºæ‘‡æ‘†çŠ¶æ€ï¼"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: builtin/remote.c:1275
+#: builtin/remote.c:1308
#, c-format
msgid " %s has become dangling!"
msgstr " %s å·²æˆä¸ºæ‘‡æ‘†çŠ¶æ€ï¼"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1314
#, c-format
msgid "Pruning %s"
msgstr "修剪 %s"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1315
#, c-format
msgid "URL: %s"
msgstr "URL:%s"
-#: builtin/remote.c:1295
+#: builtin/remote.c:1328
#, c-format
msgid " * [would prune] %s"
msgstr " * [将删除] %s"
-#: builtin/remote.c:1298
+#: builtin/remote.c:1331
#, c-format
msgid " * [pruned] %s"
msgstr " * [已删除] %s"
-#: builtin/remote.c:1321
+#: builtin/remote.c:1374
msgid "prune remotes after fetching"
msgstr "抓å–åŽæ¸…除远程"
-#: builtin/remote.c:1387 builtin/remote.c:1461
+#: builtin/remote.c:1440 builtin/remote.c:1514
#, c-format
msgid "No such remote '%s'"
msgstr "没有此远程 '%s'"
-#: builtin/remote.c:1407
+#: builtin/remote.c:1460
msgid "add branch"
msgstr "添加分支"
-#: builtin/remote.c:1414
+#: builtin/remote.c:1467
msgid "no remote specified"
msgstr "未指定远程"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1489
msgid "manipulate push URLs"
msgstr "æ“ä½œæŽ¨é€ URLS"
-#: builtin/remote.c:1438
+#: builtin/remote.c:1491
msgid "add URL"
msgstr "添加 URL"
-#: builtin/remote.c:1440
+#: builtin/remote.c:1493
msgid "delete URLs"
msgstr "删除 URLS"
-#: builtin/remote.c:1447
+#: builtin/remote.c:1500
msgid "--add --delete doesn't make sense"
msgstr "--add --delete æ— æ„义"
-#: builtin/remote.c:1487
+#: builtin/remote.c:1540
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "无效的旧URL匹é…模版:%s"
-#: builtin/remote.c:1495
+#: builtin/remote.c:1548
#, c-format
msgid "No such URL found: %s"
msgstr "未找到此URL:%s"
-#: builtin/remote.c:1497
+#: builtin/remote.c:1550
msgid "Will not delete all non-push URLs"
msgstr "å°†ä¸ä¼šåˆ é™¤æ‰€æœ‰éžæŽ¨é€URL地å€"
-#: builtin/remote.c:1569
+#: builtin/remote.c:1564
msgid "be verbose; must be placed before a subcommand"
msgstr "冗长输出;必须置于å­å‘½ä»¤ä¹‹å‰"
@@ -8564,6 +8642,10 @@ msgstr "使用 -A,ä¸è¦å°†æ—©äºŽç»™å®šæ—¶é—´çš„对象过期"
msgid "size of the window used for delta compression"
msgstr "用于增é‡åŽ‹ç¼©çš„窗å£å€¼"
+#: builtin/repack.c:162 builtin/repack.c:166
+msgid "bytes"
+msgstr "字节"
+
#: builtin/repack.c:163
msgid "same as the above, but limit memory size instead of entries count"
msgstr "和上é¢çš„相似,但é™åˆ¶å†…存大å°è€Œéžæ¡ç›®æ•°"
@@ -8576,7 +8658,7 @@ msgstr "é™åˆ¶æœ€å¤§å¢žé‡æ·±åº¦"
msgid "maximum size of each packfile"
msgstr "æ¯ä¸ªåŒ…的最大尺寸"
-#: builtin/repack.c:345
+#: builtin/repack.c:343
#, c-format
msgid "removing '%s' failed"
msgstr "删除 '%s' 失败"
@@ -8590,21 +8672,25 @@ msgid "git replace -d <object>..."
msgstr "git replace -d <对象>..."
#: builtin/replace.c:19
-msgid "git replace -l [<pattern>]"
-msgstr "git replace -l [<模å¼>]"
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
+msgstr "git replace [--format=<æ ¼å¼>] [-l [<模å¼>]]"
-#: builtin/replace.c:131
+#: builtin/replace.c:174
msgid "list replace refs"
msgstr "列出替æ¢çš„引用"
-#: builtin/replace.c:132
+#: builtin/replace.c:175
msgid "delete replace refs"
msgstr "删除替æ¢çš„引用"
-#: builtin/replace.c:133
+#: builtin/replace.c:176
msgid "replace the ref if it exists"
msgstr "如果存在则替æ¢å¼•ç”¨"
+#: builtin/replace.c:177
+msgid "use this format"
+msgstr "使用此格å¼"
+
#: builtin/rerere.c:12
msgid "git rerere [clear | forget path... | status | remaining | diff | gc]"
msgstr "git rerere [clear | forget path... | status | remaining | diff | gc]"
@@ -8738,19 +8824,23 @@ msgstr "ä¸èƒ½é‡ç½®ç´¢å¼•æ–‡ä»¶è‡³ç‰ˆæœ¬ '%s'。"
msgid "Could not write new index file."
msgstr "ä¸èƒ½å†™å…¥æ–°çš„索引文件。"
-#: builtin/rev-parse.c:345
+#: builtin/rev-parse.c:359
msgid "git rev-parse --parseopt [options] -- [<args>...]"
msgstr "git rev-parse --parseopt [选项] -- [<å‚æ•°>...]"
-#: builtin/rev-parse.c:350
+#: builtin/rev-parse.c:364
msgid "keep the `--` passed as an arg"
msgstr "ä¿æŒ `--` 作为一个å‚数传递"
-#: builtin/rev-parse.c:352
+#: builtin/rev-parse.c:366
msgid "stop parsing after the first non-option argument"
msgstr "é‡åˆ°ç¬¬ä¸€ä¸ªéžé€‰é¡¹å‚æ•°åŽåœæ­¢è§£æž"
-#: builtin/rev-parse.c:470
+#: builtin/rev-parse.c:369
+msgid "output in stuck long form"
+msgstr "以固定长格å¼è¾“出"
+
+#: builtin/rev-parse.c:486
msgid ""
"git rev-parse --parseopt [options] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
@@ -8988,67 +9078,67 @@ msgstr ""
msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:649
msgid "show remote-tracking and local branches"
msgstr "显示远程跟踪的和本地的分支"
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:651
msgid "show remote-tracking branches"
msgstr "显示远程跟踪的分支"
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
msgid "color '*!+-' corresponding to the branch"
msgstr "ç€è‰² '*!+-' 到相应的分支"
-#: builtin/show-branch.c:656
+#: builtin/show-branch.c:655
msgid "show <n> more commits after the common ancestor"
msgstr "显示共åŒç¥–å…ˆåŽçš„ <n> 个æ交"
-#: builtin/show-branch.c:658
+#: builtin/show-branch.c:657
msgid "synonym to more=-1"
msgstr "å’Œ more=-1 åŒä¹‰"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "suppress naming strings"
msgstr "ä¸æ˜¾ç¤ºå­—符串命å"
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:660
msgid "include the current branch"
msgstr "包括当å‰åˆ†æ”¯"
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:662
msgid "name commits with their object names"
msgstr "以对象å字命åæ交"
-#: builtin/show-branch.c:665
+#: builtin/show-branch.c:664
msgid "show possible merge bases"
msgstr "显示å¯èƒ½åˆå¹¶çš„基线"
-#: builtin/show-branch.c:667
+#: builtin/show-branch.c:666
msgid "show refs unreachable from any other ref"
msgstr "显示没有任何引用的的引用"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "show commits in topological order"
msgstr "以拓扑顺åºæ˜¾ç¤ºæ交"
-#: builtin/show-branch.c:672
+#: builtin/show-branch.c:671
msgid "show only commits not on the first branch"
msgstr "åªæ˜¾ç¤ºä¸åœ¨ç¬¬ä¸€ä¸ªåˆ†æ”¯ä¸Šçš„æ交"
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:673
msgid "show merges reachable from only one tip"
msgstr "显示仅一个分支å¯è®¿é—®çš„åˆå¹¶æ交"
-#: builtin/show-branch.c:676
+#: builtin/show-branch.c:675
msgid "topologically sort, maintaining date order where possible"
msgstr "拓扑方å¼æŽ’åºï¼Œå¹¶å°½å¯èƒ½åœ°ä¿æŒæ—¥æœŸé¡ºåº"
-#: builtin/show-branch.c:679
+#: builtin/show-branch.c:678
msgid "<n>[,<base>]"
msgstr "<n>[,<base>]"
-#: builtin/show-branch.c:680
+#: builtin/show-branch.c:679
msgid "show <n> most recent ref-log entries starting at base"
msgstr "显示从 base 开始的 <n> æ¡æœ€è¿‘的引用日志记录"
@@ -9533,15 +9623,15 @@ msgstr "逾期日期"
msgid "no-op (backward compatibility)"
msgstr "空æ“作(å‘åŽå…¼å®¹ï¼‰"
-#: parse-options.h:238
+#: parse-options.h:235
msgid "be more verbose"
msgstr "更加详细"
-#: parse-options.h:240
+#: parse-options.h:237
msgid "be more quiet"
msgstr "更加安é™"
-#: parse-options.h:246
+#: parse-options.h:243
msgid "use <n> digits to display SHA-1s"
msgstr "用 <n> ä½æ•°å­—显示 SHA-1 哈希值"
@@ -9833,8 +9923,8 @@ msgid ""
msgstr "检出 '$start_head' 失败。å°è¯• 'git bisect reset <validbranch>'。"
#: git-bisect.sh:140
-msgid "won't bisect on seeked tree"
-msgstr "ä¸ä¼šåœ¨å·²æŸ¥æ‰¾è¿‡çš„树上二分查找"
+msgid "won't bisect on cg-seek'ed tree"
+msgstr "ä¸ä¼šåœ¨åšäº† cg-seek 的树上åšäºŒåˆ†æŸ¥æ‰¾"
#: git-bisect.sh:144
msgid "Bad HEAD - strange symbolic ref"
@@ -9979,7 +10069,7 @@ msgstr "更新尚未诞生的分支,å˜æ›´æ·»åŠ è‡³ç´¢å¼•"
#. The working tree and the index file is still based on the
#. $orig_head commit, but we are merging into $curr_head.
#. First update the working tree to match $curr_head.
-#: git-pull.sh:255
+#: git-pull.sh:247
#, sh-format
msgid ""
"Warning: fetch updated the current branch head.\n"
@@ -9989,15 +10079,15 @@ msgstr ""
"警告:fetch 更新了当å‰çš„分支。您的工作区\n"
"警告:从原æ交 $orig_head 快进。"
-#: git-pull.sh:280
+#: git-pull.sh:272
msgid "Cannot merge multiple branches into empty head"
msgstr "无法将多个分支åˆå¹¶åˆ°ç©ºåˆ†æ”¯"
-#: git-pull.sh:284
+#: git-pull.sh:276
msgid "Cannot rebase onto multiple branches"
msgstr "无法å˜åŸºåˆ°å¤šä¸ªåˆ†æ”¯"
-#: git-rebase.sh:54
+#: git-rebase.sh:55
msgid ""
"When you have resolved this problem, run \"git rebase --continue\".\n"
"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
@@ -10008,16 +10098,16 @@ msgstr ""
"如果您想跳过此补ä¸ï¼Œåˆ™æ‰§è¡Œ \"git rebase --skip\"。\n"
"è¦æ¢å¤åŽŸåˆ†æ”¯å¹¶åœæ­¢å˜åŸºï¼Œæ‰§è¡Œ \"git rebase --abort\"。"
-#: git-rebase.sh:156
+#: git-rebase.sh:158
msgid "Applied autostash."
msgstr "æˆåŠŸåº”用 autostash。"
-#: git-rebase.sh:159
+#: git-rebase.sh:161
#, sh-format
msgid "Cannot store $stash_sha1"
msgstr "无法ä¿å­˜ $stash_sha1"
-#: git-rebase.sh:160
+#: git-rebase.sh:162
msgid ""
"Applying autostash resulted in conflicts.\n"
"Your changes are safe in the stash.\n"
@@ -10027,31 +10117,31 @@ msgstr ""
"您的修改安全地ä¿å­˜åœ¨ stash 中。\n"
"您å¯ä»¥åœ¨ä»»ä½•æ—¶å€™è¿è¡Œ \"git stash pop\" 或 \"git stash drop\"。\n"
-#: git-rebase.sh:199
+#: git-rebase.sh:201
msgid "The pre-rebase hook refused to rebase."
-msgstr "é’©å­ pre-rebase æ‹’ç»å˜åŸºã€‚"
+msgstr "é’©å­ pre-rebase æ‹’ç»å˜åŸºæ“作。"
-#: git-rebase.sh:204
+#: git-rebase.sh:206
msgid "It looks like git-am is in progress. Cannot rebase."
msgstr "似乎正处于在 git-am 的执行过程中。无法å˜åŸºã€‚"
-#: git-rebase.sh:338
+#: git-rebase.sh:346
msgid "The --exec option must be used with the --interactive option"
msgstr "选项 --exec 必须和选项 --interactive åŒæ—¶ä½¿ç”¨"
-#: git-rebase.sh:343
+#: git-rebase.sh:351
msgid "No rebase in progress?"
msgstr "没有正在进行的å˜åŸºï¼Ÿ"
-#: git-rebase.sh:354
+#: git-rebase.sh:362
msgid "The --edit-todo action can only be used during interactive rebase."
msgstr "动作 --edit-todo åªèƒ½ç”¨åœ¨äº¤äº’å¼å˜åŸºè¿‡ç¨‹ä¸­ã€‚"
-#: git-rebase.sh:361
+#: git-rebase.sh:369
msgid "Cannot read HEAD"
msgstr "ä¸èƒ½è¯»å– HEAD"
-#: git-rebase.sh:364
+#: git-rebase.sh:372
msgid ""
"You must edit all merge conflicts and then\n"
"mark them as resolved using git add"
@@ -10059,12 +10149,12 @@ msgstr ""
"您必须编辑所有的åˆå¹¶å†²çªï¼Œç„¶åŽé€šè¿‡ git add\n"
"命令将它们标记为已解决"
-#: git-rebase.sh:382
+#: git-rebase.sh:390
#, sh-format
msgid "Could not move back to $head_name"
msgstr "无法移回 $head_name"
-#: git-rebase.sh:401
+#: git-rebase.sh:409
#, sh-format
msgid ""
"It seems that there is already a $state_dir_base directory, and\n"
@@ -10076,72 +10166,72 @@ msgid ""
"and run me again. I am stopping in case you still have something\n"
"valuable there."
msgstr ""
-"好åƒå·²æœ‰ä¸€ä¸ª $state_dir_base 目录,我怀疑您正处于å¦å¤–一个å˜åŸºè¿‡ç¨‹ä¸­ã€‚\n"
-"如果是这样,请å°è¯•æ‰§è¡Œ\n"
+"好åƒå·²æœ‰ $state_dir_base 目录,我怀疑您正处于å¦å¤–一个å˜åŸºæ“作\n"
+"过程中。 如果是这样,请执行\n"
"\t$cmd_live_rebase\n"
"如果ä¸æ˜¯è¿™æ ·ï¼Œè¯·æ‰§è¡Œ\n"
"\t$cmd_clear_stale_rebase\n"
-"然åŽå†é‡æ–°æ‰§è¡Œå˜åŸºã€‚为é¿å…您丢失é‡è¦æ•°æ®ï¼Œæˆ‘å·²ç»åœæ­¢å½“å‰æ“作。"
+"然åŽå†é‡æ–°æ‰§è¡Œå˜åŸºæ“作。 为é¿å…丢失é‡è¦æ•°æ®ï¼Œæˆ‘å·²ç»åœæ­¢å½“å‰æ“作。"
-#: git-rebase.sh:446
+#: git-rebase.sh:456
#, sh-format
msgid "invalid upstream $upstream_name"
msgstr "无效的上游 $upstream_name"
-#: git-rebase.sh:470
+#: git-rebase.sh:480
#, sh-format
msgid "$onto_name: there are more than one merge bases"
msgstr "$onto_name: 有一个以上的åˆå¹¶åŸºå‡†"
-#: git-rebase.sh:473 git-rebase.sh:477
+#: git-rebase.sh:483 git-rebase.sh:487
#, sh-format
msgid "$onto_name: there is no merge base"
msgstr "$onto_name: 没有åˆå¹¶åŸºå‡†"
-#: git-rebase.sh:482
+#: git-rebase.sh:492
#, sh-format
msgid "Does not point to a valid commit: $onto_name"
msgstr "没有指å‘一个有效的æ交:$onto_name"
-#: git-rebase.sh:505
+#: git-rebase.sh:515
#, sh-format
msgid "fatal: no such branch: $branch_name"
msgstr "严é‡é”™è¯¯ï¼šæ— æ­¤åˆ†æ”¯ï¼š$branch_name"
-#: git-rebase.sh:528
+#: git-rebase.sh:548
msgid "Cannot autostash"
msgstr "无法 autostash"
-#: git-rebase.sh:533
+#: git-rebase.sh:553
#, sh-format
msgid "Created autostash: $stash_abbrev"
msgstr "创建了 autostash: $stash_abbrev"
-#: git-rebase.sh:537
+#: git-rebase.sh:557
msgid "Please commit or stash them."
msgstr "请æ交或为它们ä¿å­˜è¿›åº¦ã€‚"
-#: git-rebase.sh:557
+#: git-rebase.sh:577
#, sh-format
msgid "Current branch $branch_name is up to date."
msgstr "当å‰åˆ†æ”¯ $branch_name 是最新的。"
-#: git-rebase.sh:561
+#: git-rebase.sh:581
#, sh-format
msgid "Current branch $branch_name is up to date, rebase forced."
msgstr "当å‰åˆ†æ”¯ $branch_name 是最新的,强制å˜åŸºã€‚"
-#: git-rebase.sh:572
+#: git-rebase.sh:592
#, sh-format
msgid "Changes from $mb to $onto:"
msgstr "å˜æ›´ä»Ž $mb 到 $onto:"
#. Detach HEAD and reset the tree
-#: git-rebase.sh:581
+#: git-rebase.sh:601
msgid "First, rewinding head to replay your work on top of it..."
msgstr "首先,é‡ç½®å¤´æŒ‡é’ˆä»¥ä¾¿åœ¨ä¸Šé¢é‡æ”¾æ‚¨çš„工作..."
-#: git-rebase.sh:591
+#: git-rebase.sh:611
#, sh-format
msgid "Fast-forwarded $branch_name to $onto_name."
msgstr "快进 $branch_name 至 $onto_name。"
@@ -10384,75 +10474,75 @@ msgstr "无法注册å­æ¨¡ç»„ '$sm_path'"
msgid "Entering '$prefix$displaypath'"
msgstr "正在进入 '$prefix$displaypath'"
-#: git-submodule.sh:554
+#: git-submodule.sh:559
#, sh-format
msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
msgstr "åœæ­¢äºŽ '$prefix$displaypath',脚本返回éžé›¶å€¼ã€‚"
-#: git-submodule.sh:600
+#: git-submodule.sh:605
#, sh-format
msgid "No url found for submodule path '$displaypath' in .gitmodules"
msgstr "在 .gitmodules 中未找到å­æ¨¡ç»„路径 '$displaypath' çš„ url"
-#: git-submodule.sh:609
+#: git-submodule.sh:614
#, sh-format
msgid "Failed to register url for submodule path '$displaypath'"
msgstr "无法为å­æ¨¡ç»„路径 '$displaypath' 注册 url"
-#: git-submodule.sh:611
+#: git-submodule.sh:616
#, sh-format
msgid "Submodule '$name' ($url) registered for path '$displaypath'"
msgstr "å­æ¨¡ç»„ '$name' ($url) 未对路径 '$displaypath' 注册"
-#: git-submodule.sh:619
+#: git-submodule.sh:633
#, sh-format
msgid "Failed to register update mode for submodule path '$displaypath'"
msgstr "无法为å­æ¨¡ç»„路径 '$displaypath' 注册更新模å¼"
-#: git-submodule.sh:656
+#: git-submodule.sh:671
#, sh-format
msgid "Use '.' if you really want to deinitialize all submodules"
msgstr "使用 '.' 如果您真的想è¦å¯¹æ‰€æœ‰å­æ¨¡ç»„å–消åˆå§‹åŒ–"
-#: git-submodule.sh:673
+#: git-submodule.sh:688
#, sh-format
msgid "Submodule work tree '$displaypath' contains a .git directory"
msgstr "å­æ¨¡ç»„工作区 '$displaypath' 包å«ä¸€ä¸ª .git 目录"
-#: git-submodule.sh:674
+#: git-submodule.sh:689
#, sh-format
msgid ""
"(use 'rm -rf' if you really want to remove it including all of its history)"
msgstr "(使用 'rm -rf' 命令如果您真的想删除它åŠå…¶å…¨éƒ¨åŽ†å²ï¼‰"
-#: git-submodule.sh:680
+#: git-submodule.sh:695
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
"discard them"
msgstr "å­æ¨¡ç»„工作区 '$displaypath' 包å«æœ¬åœ°ä¿®æ”¹ï¼›ä½¿ç”¨ '-f' 丢弃它们"
-#: git-submodule.sh:683
+#: git-submodule.sh:698
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "已清除目录 '$displaypath'"
-#: git-submodule.sh:684
+#: git-submodule.sh:699
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr "无法移除å­æ¨¡ç»„工作区 '$displaypath'"
-#: git-submodule.sh:687
+#: git-submodule.sh:702
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr "ä¸èƒ½åˆ›å»ºç©ºçš„å­æ¨¡ç»„目录 '$displaypath'"
-#: git-submodule.sh:696
+#: git-submodule.sh:711
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr "å­æ¨¡ç»„ '$name' ($url) 未对路径 '$displaypath' 注册"
-#: git-submodule.sh:811
+#: git-submodule.sh:834
#, sh-format
msgid ""
"Submodule path '$displaypath' not initialized\n"
@@ -10461,109 +10551,159 @@ msgstr ""
"å­æ¨¡ç»„路径 '$displaypath' 没有åˆå§‹åŒ–\n"
"也许您想用 'update --init'?"
-#: git-submodule.sh:824
+#: git-submodule.sh:847
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr "无法在å­æ¨¡ç»„路径 '$displaypath' 中找到当å‰ç‰ˆæœ¬"
-#: git-submodule.sh:833
+#: git-submodule.sh:856
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "无法在å­æ¨¡ç»„路径 '$sm_path' 中获å–"
-#: git-submodule.sh:857
+#: git-submodule.sh:880
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "无法在å­æ¨¡ç»„路径 '$displaypath' 中获å–"
-#: git-submodule.sh:871
+#: git-submodule.sh:894
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr "无法在å­æ¨¡ç»„路径 '$displaypath' 中å˜åŸº '$sha1'"
-#: git-submodule.sh:872
+#: git-submodule.sh:895
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "å­æ¨¡ç»„路径 '$displaypath':å˜åŸºè‡³ '$sha1'"
-#: git-submodule.sh:877
+#: git-submodule.sh:900
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr "无法åˆå¹¶ '$sha1' 到å­æ¨¡ç»„路径 '$displaypath' 中"
-#: git-submodule.sh:878
+#: git-submodule.sh:901
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "å­æ¨¡ç»„路径 '$displaypath':已åˆå¹¶å…¥ '$sha1'"
-#: git-submodule.sh:883
+#: git-submodule.sh:906
#, sh-format
msgid ""
"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
msgstr "在å­æ¨¡ç»„路径 '$prefix$sm_path' 中执行 '$command $sha1' 失败"
-#: git-submodule.sh:884
+#: git-submodule.sh:907
#, sh-format
msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
msgstr "å­æ¨¡ç»„路径 '$prefix$sm_path': '$command $sha1'"
-#: git-submodule.sh:889
+#: git-submodule.sh:912
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "无法在å­æ¨¡ç»„路径 '$displaypath' 中检出 '$sha1'"
-#: git-submodule.sh:890
+#: git-submodule.sh:913
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "å­æ¨¡ç»„路径 '$displaypath':检出 '$sha1'"
-#: git-submodule.sh:917
+#: git-submodule.sh:940
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "无法递归进å­æ¨¡ç»„路径 '$displaypath'"
-#: git-submodule.sh:1025
+#: git-submodule.sh:1048
msgid "The --cached option cannot be used with the --files option"
msgstr "选项 --cached ä¸èƒ½å’Œé€‰é¡¹ --files åŒæ—¶ä½¿ç”¨"
#. unexpected type
-#: git-submodule.sh:1073
+#: git-submodule.sh:1096
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "æ„å¤–çš„æ¨¡å¼ $mod_dst"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: git-submodule.sh:1093
+#: git-submodule.sh:1116
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " 警告:$display_name 未包å«æ交 $sha1_src"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: git-submodule.sh:1096
+#: git-submodule.sh:1119
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " 警告:$display_name 未包å«æ交 $sha1_dst"
# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼
-#: git-submodule.sh:1099
+#: git-submodule.sh:1122
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr " 警告:$display_name 未包å«æ交 $sha1_src å’Œ $sha1_dst"
-#: git-submodule.sh:1124
+#: git-submodule.sh:1147
msgid "blob"
msgstr "æ•°æ®å¯¹è±¡"
-#: git-submodule.sh:1238
+#: git-submodule.sh:1261
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "无法递归进å­æ¨¡ç»„路径 '$sm_path'"
-#: git-submodule.sh:1302
+#: git-submodule.sh:1325
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "为 '$displaypath' åŒæ­¥å­æ¨¡ç»„ url"
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#~ msgid "copied: %s -> %s"
+#~ msgstr "æ‹·è´ï¼š %s -> %s"
+
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#~ msgid "deleted: %s"
+#~ msgstr "删除: %s"
+
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#~ msgid "modified: %s"
+#~ msgstr "修改: %s"
+
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#~ msgid "renamed: %s -> %s"
+#~ msgstr "é‡å‘½å: %s -> %s"
+
+# 译者:为ä¿è¯åœ¨è¾“出中对é½ï¼Œæ³¨æ„调整å¥ä¸­ç©ºæ ¼ï¼
+#~ msgid "unmerged: %s"
+#~ msgstr "未åˆå¹¶ï¼š %s"
+
+# 译者:字符串首行行首è¦æ·»åŠ â€œwarning: â€å­—串,故此首行è¦è¾ƒå…¶ä½™è¡ŒçŸ­
+#~ msgid ""
+#~ "push.default is unset; its implicit value is changing in\n"
+#~ "Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
+#~ "and maintain the current behavior after the default changes, use:\n"
+#~ "\n"
+#~ " git config --global push.default matching\n"
+#~ "\n"
+#~ "To squelch this message and adopt the new behavior now, use:\n"
+#~ "\n"
+#~ " git config --global push.default simple\n"
+#~ "\n"
+#~ "See 'git help config' and search for 'push.default' for further "
+#~ "information.\n"
+#~ "(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
+#~ "'current' instead of 'simple' if you sometimes use older versions of Git)"
+#~ msgstr ""
+#~ "push.default 未设置,它的默认值将在 Git 2.0 由 'matching'\n"
+#~ "改å˜ä¸º 'simple'。若è¦ä¸å†æ˜¾ç¤ºæœ¬ä¿¡æ¯å¹¶ä¿æŒä¼ ç»Ÿä¹ æƒ¯ï¼Œè¿›è¡Œå¦‚下设置:\n"
+#~ "\n"
+#~ " git config --global push.default matching\n"
+#~ "\n"
+#~ "è‹¥è¦ä¸å†æ˜¾ç¤ºæœ¬ä¿¡æ¯å¹¶ä»ŽçŽ°åœ¨å¼€å§‹é‡‡ç”¨æ–°çš„使用习惯,设置:\n"
+#~ "\n"
+#~ " git config --global push.default simple\n"
+#~ "\n"
+#~ "å‚è§ 'git help config' 并查找 'push.default' 以获å–更多信æ¯ã€‚\n"
+#~ "('simple' 模å¼ç”± Git 1.7.11 版本引入。如果您有时è¦ä½¿ç”¨è€ç‰ˆæœ¬çš„ Git,\n"
+#~ "为ä¿æŒå…¼å®¹ï¼Œè¯·ç”¨ 'current' 代替 'simple')"
+
#~ msgid "done\n"
#~ msgstr "完æˆ\n"
diff --git a/preload-index.c b/preload-index.c
index 8c44ceb2c..968ee25ea 100644
--- a/preload-index.c
+++ b/preload-index.c
@@ -3,6 +3,7 @@
*/
#include "cache.h"
#include "pathspec.h"
+#include "dir.h"
#ifdef NO_PTHREADS
static void preload_index(struct index_state *index,
@@ -53,7 +54,7 @@ static void *preload_thread(void *_data)
continue;
if (ce_uptodate(ce))
continue;
- if (!ce_path_match(ce, &p->pathspec))
+ if (!ce_path_match(ce, &p->pathspec, NULL))
continue;
if (threaded_has_symlink_leading_path(&cache, ce->name, ce_namelen(ce)))
continue;
diff --git a/pretty.c b/pretty.c
index 87db08bd7..3c43db558 100644
--- a/pretty.c
+++ b/pretty.c
@@ -397,12 +397,18 @@ static const char *show_ident_date(const struct ident_split *ident,
enum date_mode mode)
{
unsigned long date = 0;
- int tz = 0;
+ long tz = 0;
if (ident->date_begin && ident->date_end)
date = strtoul(ident->date_begin, NULL, 10);
- if (ident->tz_begin && ident->tz_end)
- tz = strtol(ident->tz_begin, NULL, 10);
+ if (date_overflows(date))
+ date = 0;
+ else {
+ if (ident->tz_begin && ident->tz_end)
+ tz = strtol(ident->tz_begin, NULL, 10);
+ if (tz >= INT_MAX || tz <= INT_MIN)
+ tz = 0;
+ }
return show_date(date, tz, mode);
}
@@ -549,14 +555,13 @@ static char *get_header(const struct commit *commit, const char *msg,
const char *line = msg;
while (line) {
- const char *eol = strchr(line, '\n'), *next;
+ const char *eol = strchrnul(line, '\n'), *next;
if (line == eol)
return NULL;
- if (!eol) {
+ if (!*eol) {
warning("malformed commit (header is missing newline): %s",
sha1_to_hex(commit->object.sha1));
- eol = line + strlen(line);
next = NULL;
} else
next = eol + 1;
diff --git a/progress.c b/progress.c
index 10652b174..261314ef3 100644
--- a/progress.c
+++ b/progress.c
@@ -9,6 +9,7 @@
*/
#include "git-compat-util.h"
+#include "gettext.h"
#include "progress.h"
#include "strbuf.h"
@@ -220,7 +221,7 @@ struct progress *start_progress(const char *title, unsigned total)
void stop_progress(struct progress **p_progress)
{
- stop_progress_msg(p_progress, "done");
+ stop_progress_msg(p_progress, _("done"));
}
void stop_progress_msg(struct progress **p_progress, const char *msg)
diff --git a/read-cache.c b/read-cache.c
index 33dd676cc..ba13353b3 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -15,7 +15,8 @@
#include "strbuf.h"
#include "varint.h"
-static struct cache_entry *refresh_cache_entry(struct cache_entry *ce, int really);
+static struct cache_entry *refresh_cache_entry(struct cache_entry *ce,
+ unsigned int options);
/* Mask for the name length in ce_flags in the on-disk index */
@@ -47,6 +48,7 @@ static void replace_index_entry(struct index_state *istate, int nr, struct cache
struct cache_entry *old = istate->cache[nr];
remove_name_hash(istate, old);
+ free(old);
set_index_entry(istate, nr, ce);
istate->cache_changed = 1;
}
@@ -58,7 +60,7 @@ void rename_index_entry_at(struct index_state *istate, int nr, const char *new_n
new = xmalloc(cache_entry_size(namelen));
copy_cache_entry(new, old);
- new->ce_flags &= ~CE_STATE_MASK;
+ new->ce_flags &= ~CE_HASHED;
new->ce_namelen = namelen;
memcpy(new->name, new_name, namelen + 1);
@@ -478,6 +480,7 @@ int remove_index_entry_at(struct index_state *istate, int pos)
record_resolve_undo(istate, ce);
remove_name_hash(istate, ce);
+ free(ce);
istate->cache_changed = 1;
istate->cache_nr--;
if (pos >= istate->cache_nr)
@@ -499,8 +502,10 @@ void remove_marked_cache_entries(struct index_state *istate)
unsigned int i, j;
for (i = j = 0; i < istate->cache_nr; i++) {
- if (ce_array[i]->ce_flags & CE_REMOVE)
+ if (ce_array[i]->ce_flags & CE_REMOVE) {
remove_name_hash(istate, ce_array[i]);
+ free(ce_array[i]);
+ }
else
ce_array[j++] = ce_array[i];
}
@@ -579,7 +584,7 @@ static struct cache_entry *create_alias_ce(struct cache_entry *ce, struct cache_
return new;
}
-static void record_intent_to_add(struct cache_entry *ce)
+void set_object_name_for_intent_to_add_entry(struct cache_entry *ce)
{
unsigned char sha1[20];
if (write_sha1_file("", 0, blob_type, sha1))
@@ -665,7 +670,7 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
if (index_path(ce->sha1, path, st, HASH_WRITE_OBJECT))
return error("unable to index file %s", path);
} else
- record_intent_to_add(ce);
+ set_object_name_for_intent_to_add_entry(ce);
if (ignore_case && alias && different_name(ce, alias))
ce = create_alias_ce(ce, alias);
@@ -696,7 +701,7 @@ int add_file_to_index(struct index_state *istate, const char *path, int flags)
struct cache_entry *make_cache_entry(unsigned int mode,
const unsigned char *sha1, const char *path, int stage,
- int refresh)
+ unsigned int refresh_options)
{
int size, len;
struct cache_entry *ce;
@@ -716,10 +721,7 @@ struct cache_entry *make_cache_entry(unsigned int mode,
ce->ce_namelen = len;
ce->ce_mode = create_ce_mode(mode);
- if (refresh)
- return refresh_cache_entry(ce, 0);
-
- return ce;
+ return refresh_cache_entry(ce, refresh_options);
}
int ce_same_name(const struct cache_entry *a, const struct cache_entry *b)
@@ -728,11 +730,6 @@ int ce_same_name(const struct cache_entry *a, const struct cache_entry *b)
return ce_namelen(b) == len && !memcmp(a->name, b->name, len);
}
-int ce_path_match(const struct cache_entry *ce, const struct pathspec *pathspec)
-{
- return match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL);
-}
-
/*
* We fundamentally don't like some paths: we don't want
* dot or dot-dot anywhere, and for obvious reasons don't
@@ -993,11 +990,7 @@ int add_index_entry(struct index_state *istate, struct cache_entry *ce, int opti
}
/* Make sure the array is big enough .. */
- if (istate->cache_nr == istate->cache_alloc) {
- istate->cache_alloc = alloc_nr(istate->cache_alloc);
- istate->cache = xrealloc(istate->cache,
- istate->cache_alloc * sizeof(*istate->cache));
- }
+ ALLOC_GROW(istate->cache, istate->cache_nr + 1, istate->cache_alloc);
/* Add it in.. */
istate->cache_nr++;
@@ -1029,10 +1022,12 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
struct stat st;
struct cache_entry *updated;
int changed, size;
+ int refresh = options & CE_MATCH_REFRESH;
int ignore_valid = options & CE_MATCH_IGNORE_VALID;
int ignore_skip_worktree = options & CE_MATCH_IGNORE_SKIP_WORKTREE;
+ int ignore_missing = options & CE_MATCH_IGNORE_MISSING;
- if (ce_uptodate(ce))
+ if (!refresh || ce_uptodate(ce))
return ce;
/*
@@ -1050,6 +1045,8 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
}
if (lstat(ce->name, &st) < 0) {
+ if (ignore_missing && errno == ENOENT)
+ return ce;
if (err)
*err = errno;
return NULL;
@@ -1127,7 +1124,9 @@ int refresh_index(struct index_state *istate, unsigned int flags,
int ignore_submodules = (flags & REFRESH_IGNORE_SUBMODULES) != 0;
int first = 1;
int in_porcelain = (flags & REFRESH_IN_PORCELAIN);
- unsigned int options = really ? CE_MATCH_IGNORE_VALID : 0;
+ unsigned int options = (CE_MATCH_REFRESH |
+ (really ? CE_MATCH_IGNORE_VALID : 0) |
+ (not_new ? CE_MATCH_IGNORE_MISSING : 0));
const char *modified_fmt;
const char *deleted_fmt;
const char *typechange_fmt;
@@ -1149,8 +1148,7 @@ int refresh_index(struct index_state *istate, unsigned int flags,
if (ignore_submodules && S_ISGITLINK(ce->ce_mode))
continue;
- if (pathspec &&
- !match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, seen))
+ if (pathspec && !ce_path_match(ce, pathspec, seen))
filtered = 1;
if (ce_stage(ce)) {
@@ -1176,8 +1174,6 @@ int refresh_index(struct index_state *istate, unsigned int flags,
if (!new) {
const char *fmt;
- if (not_new && cache_errno == ENOENT)
- continue;
if (really && cache_errno == EINVAL) {
/* If we are doing --really-refresh that
* means the index is not valid anymore.
@@ -1207,9 +1203,10 @@ int refresh_index(struct index_state *istate, unsigned int flags,
return has_errors;
}
-static struct cache_entry *refresh_cache_entry(struct cache_entry *ce, int really)
+static struct cache_entry *refresh_cache_entry(struct cache_entry *ce,
+ unsigned int options)
{
- return refresh_cache_ent(&the_index, ce, really, NULL, NULL);
+ return refresh_cache_ent(&the_index, ce, options, NULL, NULL);
}
@@ -1219,6 +1216,42 @@ static struct cache_entry *refresh_cache_entry(struct cache_entry *ce, int reall
#define INDEX_FORMAT_DEFAULT 3
+static int index_format_config(const char *var, const char *value, void *cb)
+{
+ unsigned int *version = cb;
+ if (!strcmp(var, "index.version")) {
+ *version = git_config_int(var, value);
+ return 0;
+ }
+ return 1;
+}
+
+static unsigned int get_index_format_default(void)
+{
+ char *envversion = getenv("GIT_INDEX_VERSION");
+ char *endp;
+ unsigned int version = INDEX_FORMAT_DEFAULT;
+
+ if (!envversion) {
+ git_config(index_format_config, &version);
+ if (version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) {
+ warning(_("index.version set, but the value is invalid.\n"
+ "Using version %i"), INDEX_FORMAT_DEFAULT);
+ return INDEX_FORMAT_DEFAULT;
+ }
+ return version;
+ }
+
+ version = strtoul(envversion, &endp, 10);
+ if (*endp ||
+ version < INDEX_FORMAT_LB || INDEX_FORMAT_UB < version) {
+ warning(_("GIT_INDEX_VERSION set, but the value is invalid.\n"
+ "Using version %i"), INDEX_FORMAT_DEFAULT);
+ version = INDEX_FORMAT_DEFAULT;
+ }
+ return version;
+}
+
/*
* dev/ino/uid/gid/size are also just tracked to the low 32 bits
* Again - this is just a (very strong in practice) heuristic that
@@ -1313,26 +1346,6 @@ int read_index(struct index_state *istate)
return read_index_from(istate, get_index_file());
}
-#ifndef NEEDS_ALIGNED_ACCESS
-#define ntoh_s(var) ntohs(var)
-#define ntoh_l(var) ntohl(var)
-#else
-static inline uint16_t ntoh_s_force_align(void *p)
-{
- uint16_t x;
- memcpy(&x, p, sizeof(x));
- return ntohs(x);
-}
-static inline uint32_t ntoh_l_force_align(void *p)
-{
- uint32_t x;
- memcpy(&x, p, sizeof(x));
- return ntohl(x);
-}
-#define ntoh_s(var) ntoh_s_force_align(&(var))
-#define ntoh_l(var) ntoh_l_force_align(&(var))
-#endif
-
static struct cache_entry *cache_entry_from_ondisk(struct ondisk_cache_entry *ondisk,
unsigned int flags,
const char *name,
@@ -1340,16 +1353,16 @@ static struct cache_entry *cache_entry_from_ondisk(struct ondisk_cache_entry *on
{
struct cache_entry *ce = xmalloc(cache_entry_size(len));
- ce->ce_stat_data.sd_ctime.sec = ntoh_l(ondisk->ctime.sec);
- ce->ce_stat_data.sd_mtime.sec = ntoh_l(ondisk->mtime.sec);
- ce->ce_stat_data.sd_ctime.nsec = ntoh_l(ondisk->ctime.nsec);
- ce->ce_stat_data.sd_mtime.nsec = ntoh_l(ondisk->mtime.nsec);
- ce->ce_stat_data.sd_dev = ntoh_l(ondisk->dev);
- ce->ce_stat_data.sd_ino = ntoh_l(ondisk->ino);
- ce->ce_mode = ntoh_l(ondisk->mode);
- ce->ce_stat_data.sd_uid = ntoh_l(ondisk->uid);
- ce->ce_stat_data.sd_gid = ntoh_l(ondisk->gid);
- ce->ce_stat_data.sd_size = ntoh_l(ondisk->size);
+ ce->ce_stat_data.sd_ctime.sec = get_be32(&ondisk->ctime.sec);
+ ce->ce_stat_data.sd_mtime.sec = get_be32(&ondisk->mtime.sec);
+ ce->ce_stat_data.sd_ctime.nsec = get_be32(&ondisk->ctime.nsec);
+ ce->ce_stat_data.sd_mtime.nsec = get_be32(&ondisk->mtime.nsec);
+ ce->ce_stat_data.sd_dev = get_be32(&ondisk->dev);
+ ce->ce_stat_data.sd_ino = get_be32(&ondisk->ino);
+ ce->ce_mode = get_be32(&ondisk->mode);
+ ce->ce_stat_data.sd_uid = get_be32(&ondisk->uid);
+ ce->ce_stat_data.sd_gid = get_be32(&ondisk->gid);
+ ce->ce_stat_data.sd_size = get_be32(&ondisk->size);
ce->ce_flags = flags & ~CE_NAMEMASK;
ce->ce_namelen = len;
hashcpy(ce->sha1, ondisk->sha1);
@@ -1389,14 +1402,14 @@ static struct cache_entry *create_from_disk(struct ondisk_cache_entry *ondisk,
unsigned int flags;
/* On-disk flags are just 16 bits */
- flags = ntoh_s(ondisk->flags);
+ flags = get_be16(&ondisk->flags);
len = flags & CE_NAMEMASK;
if (flags & CE_EXTENDED) {
struct ondisk_cache_entry_extended *ondisk2;
int extended_flags;
ondisk2 = (struct ondisk_cache_entry_extended *)ondisk;
- extended_flags = ntoh_s(ondisk2->flags2) << 16;
+ extended_flags = get_be16(&ondisk2->flags2) << 16;
/* We do not yet understand any bit out of CE_EXTENDED_FLAGS */
if (extended_flags & ~CE_EXTENDED_FLAGS)
die("Unknown index entry format %08x", extended_flags);
@@ -1795,7 +1808,7 @@ int write_index(struct index_state *istate, int newfd)
}
if (!istate->version)
- istate->version = INDEX_FORMAT_DEFAULT;
+ istate->version = get_index_format_default();
/* demote version 3 to version 2 when the latter suffices */
if (istate->version == 3 || istate->version == 2)
@@ -1894,7 +1907,7 @@ int read_index_unmerged(struct index_state *istate)
new_ce->ce_mode = ce->ce_mode;
if (add_index_entry(istate, new_ce, 0))
return error("%s: cannot drop to stage #0",
- ce->name);
+ new_ce->name);
i = index_name_pos(istate, new_ce->name, len);
}
return unmerged;
diff --git a/reflog-walk.c b/reflog-walk.c
index b2fbdb239..0dd5084fe 100644
--- a/reflog-walk.c
+++ b/reflog-walk.c
@@ -26,14 +26,10 @@ static int read_one_reflog(unsigned char *osha1, unsigned char *nsha1,
struct complete_reflogs *array = cb_data;
struct reflog_info *item;
- if (array->nr >= array->alloc) {
- array->alloc = alloc_nr(array->nr + 1);
- array->items = xrealloc(array->items, array->alloc *
- sizeof(struct reflog_info));
- }
+ ALLOC_GROW(array->items, array->nr + 1, array->alloc);
item = array->items + array->nr;
- memcpy(item->osha1, osha1, 20);
- memcpy(item->nsha1, nsha1, 20);
+ hashcpy(item->osha1, osha1);
+ hashcpy(item->nsha1, nsha1);
item->email = xstrdup(email);
item->timestamp = timestamp;
item->tz = tz;
@@ -114,11 +110,7 @@ static void add_commit_info(struct commit *commit, void *util,
struct commit_info_lifo *lifo)
{
struct commit_info *info;
- if (lifo->nr >= lifo->alloc) {
- lifo->alloc = alloc_nr(lifo->nr + 1);
- lifo->items = xrealloc(lifo->items,
- lifo->alloc * sizeof(struct commit_info));
- }
+ ALLOC_GROW(lifo->items, lifo->nr + 1, lifo->alloc);
info = lifo->items + lifo->nr;
info->commit = commit;
info->util = util;
diff --git a/refs.c b/refs.c
index 490b57b88..28d5eca8e 100644
--- a/refs.c
+++ b/refs.c
@@ -1222,7 +1222,7 @@ static int resolve_gitlink_packed_ref(struct ref_cache *refs,
if (ref == NULL)
return -1;
- memcpy(sha1, ref->u.value.sha1, 20);
+ hashcpy(sha1, ref->u.value.sha1);
return 0;
}
@@ -1477,7 +1477,7 @@ static int filter_refs(const char *refname, const unsigned char *sha1, int flags
void *data)
{
struct ref_filter *filter = (struct ref_filter *)data;
- if (fnmatch(filter->pattern, refname, 0))
+ if (wildmatch(filter->pattern, refname, 0, NULL))
return 0;
return filter->fn(refname, sha1, flags, filter->cb_data);
}
@@ -1880,7 +1880,7 @@ const char *prettify_refname(const char *name)
0);
}
-const char *ref_rev_parse_rules[] = {
+static const char *ref_rev_parse_rules[] = {
"%.*s",
"refs/%.*s",
"refs/tags/%.*s",
@@ -1890,12 +1890,12 @@ const char *ref_rev_parse_rules[] = {
NULL
};
-int refname_match(const char *abbrev_name, const char *full_name, const char **rules)
+int refname_match(const char *abbrev_name, const char *full_name)
{
const char **p;
const int abbrev_name_len = strlen(abbrev_name);
- for (p = rules; *p; p++) {
+ for (p = ref_rev_parse_rules; *p; p++) {
if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name))) {
return 1;
}
@@ -2039,6 +2039,7 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
int type, lflags;
int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
int missing = 0;
+ int attempts_remaining = 3;
lock = xcalloc(1, sizeof(struct ref_lock));
lock->lock_fd = -1;
@@ -2080,7 +2081,7 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
lock->lk = xcalloc(1, sizeof(struct lock_file));
- lflags = LOCK_DIE_ON_ERROR;
+ lflags = 0;
if (flags & REF_NODEREF) {
refname = orig_refname;
lflags |= LOCK_NODEREF;
@@ -2093,13 +2094,32 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
if ((flags & REF_NODEREF) && (type & REF_ISSYMREF))
lock->force_write = 1;
- if (safe_create_leading_directories(ref_file)) {
+ retry:
+ switch (safe_create_leading_directories(ref_file)) {
+ case SCLD_OK:
+ break; /* success */
+ case SCLD_VANISHED:
+ if (--attempts_remaining > 0)
+ goto retry;
+ /* fall through */
+ default:
last_errno = errno;
error("unable to create directory for %s", ref_file);
goto error_return;
}
lock->lock_fd = hold_lock_file_for_update(lock->lk, ref_file, lflags);
+ if (lock->lock_fd < 0) {
+ if (errno == ENOENT && --attempts_remaining > 0)
+ /*
+ * Maybe somebody just deleted one of the
+ * directories leading to ref_file. Try
+ * again:
+ */
+ goto retry;
+ else
+ unable_to_lock_index_die(ref_file, errno);
+ }
return old_sha1 ? verify_lock(lock, old_sha1, mustexist) : lock;
error_return:
@@ -2508,6 +2528,51 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
*/
#define TMP_RENAMED_LOG "logs/refs/.tmp-renamed-log"
+static int rename_tmp_log(const char *newrefname)
+{
+ int attempts_remaining = 4;
+
+ retry:
+ switch (safe_create_leading_directories(git_path("logs/%s", newrefname))) {
+ case SCLD_OK:
+ break; /* success */
+ case SCLD_VANISHED:
+ if (--attempts_remaining > 0)
+ goto retry;
+ /* fall through */
+ default:
+ error("unable to create directory for %s", newrefname);
+ return -1;
+ }
+
+ if (rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", newrefname))) {
+ if ((errno==EISDIR || errno==ENOTDIR) && --attempts_remaining > 0) {
+ /*
+ * rename(a, b) when b is an existing
+ * directory ought to result in ISDIR, but
+ * Solaris 5.8 gives ENOTDIR. Sheesh.
+ */
+ if (remove_empty_directories(git_path("logs/%s", newrefname))) {
+ error("Directory not empty: logs/%s", newrefname);
+ return -1;
+ }
+ goto retry;
+ } else if (errno == ENOENT && --attempts_remaining > 0) {
+ /*
+ * Maybe another process just deleted one of
+ * the directories in the path to newrefname.
+ * Try again from the beginning.
+ */
+ goto retry;
+ } else {
+ error("unable to move logfile "TMP_RENAMED_LOG" to logs/%s: %s",
+ newrefname, strerror(errno));
+ return -1;
+ }
+ }
+ return 0;
+}
+
int rename_ref(const char *oldrefname, const char *newrefname, const char *logmsg)
{
unsigned char sha1[20], orig_sha1[20];
@@ -2555,30 +2620,9 @@ int rename_ref(const char *oldrefname, const char *newrefname, const char *logms
}
}
- if (log && safe_create_leading_directories(git_path("logs/%s", newrefname))) {
- error("unable to create directory for %s", newrefname);
+ if (log && rename_tmp_log(newrefname))
goto rollback;
- }
- retry:
- if (log && rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", newrefname))) {
- if (errno==EISDIR || errno==ENOTDIR) {
- /*
- * rename(a, b) when b is an existing
- * directory ought to result in ISDIR, but
- * Solaris 5.8 gives ENOTDIR. Sheesh.
- */
- if (remove_empty_directories(git_path("logs/%s", newrefname))) {
- error("Directory not empty: logs/%s", newrefname);
- goto rollback;
- }
- goto retry;
- } else {
- error("unable to move logfile "TMP_RENAMED_LOG" to logs/%s: %s",
- newrefname, strerror(errno));
- goto rollback;
- }
- }
logmoved = log;
lock = lock_ref_sha1_basic(newrefname, NULL, 0, NULL);
diff --git a/remote-curl.c b/remote-curl.c
index 10cb0114e..52c2d96ce 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -423,11 +423,8 @@ static int run_slot(struct active_request_slot *slot,
if (!results)
results = &results_buf;
- slot->results = results;
- slot->curl_result = curl_easy_perform(slot->curl);
- finish_active_slot(slot);
+ err = run_one_slot(slot, results);
- err = handle_curl_result(results);
if (err != HTTP_OK && err != HTTP_REAUTH) {
error("RPC failed; result=%d, HTTP code = %ld",
results->curl_result, results->http_code);
diff --git a/remote-testsvn.c b/remote-testsvn.c
index 078f1ffa4..6be55cbe9 100644
--- a/remote-testsvn.c
+++ b/remote-testsvn.c
@@ -78,8 +78,8 @@ static int parse_rev_note(const char *msg, struct rev_note *res)
size_t len;
while (*msg) {
- end = strchr(msg, '\n');
- len = end ? end - msg : strlen(msg);
+ end = strchrnul(msg, '\n');
+ len = end - msg;
key = "Revision-number: ";
if (starts_with(msg, key)) {
diff --git a/remote.c b/remote.c
index a89efab5b..21b096932 100644
--- a/remote.c
+++ b/remote.c
@@ -49,6 +49,7 @@ static int branches_nr;
static struct branch *current_branch;
static const char *default_remote_name;
+static const char *branch_pushremote_name;
static const char *pushremote_name;
static int explicit_default_remote_name;
@@ -352,7 +353,7 @@ static int handle_config(const char *key, const char *value, void *cb)
}
} else if (!strcmp(subkey, ".pushremote")) {
if (branch == current_branch)
- if (git_config_string(&pushremote_name, key, value))
+ if (git_config_string(&branch_pushremote_name, key, value))
return -1;
} else if (!strcmp(subkey, ".merge")) {
if (!value)
@@ -492,6 +493,10 @@ static void read_config(void)
make_branch(head_ref + strlen("refs/heads/"), 0);
}
git_config(handle_config, NULL);
+ if (branch_pushremote_name) {
+ free((char *)pushremote_name);
+ pushremote_name = branch_pushremote_name;
+ }
alias_all_urls();
}
@@ -1000,7 +1005,7 @@ int count_refspec_match(const char *pattern,
char *name = refs->name;
int namelen = strlen(name);
- if (!refname_match(pattern, name, ref_rev_parse_rules))
+ if (!refname_match(pattern, name))
continue;
/* A match is "weak" if it is with refs outside
@@ -1031,11 +1036,13 @@ int count_refspec_match(const char *pattern,
}
}
if (!matched) {
- *matched_ref = matched_weak;
+ if (matched_ref)
+ *matched_ref = matched_weak;
return weak_match;
}
else {
- *matched_ref = matched;
+ if (matched_ref)
+ *matched_ref = matched;
return match;
}
}
@@ -1055,18 +1062,25 @@ static struct ref *alloc_delete_ref(void)
return ref;
}
-static struct ref *try_explicit_object_name(const char *name)
+static int try_explicit_object_name(const char *name,
+ struct ref **match)
{
unsigned char sha1[20];
- struct ref *ref;
- if (!*name)
- return alloc_delete_ref();
+ if (!*name) {
+ if (match)
+ *match = alloc_delete_ref();
+ return 0;
+ }
+
if (get_sha1(name, sha1))
- return NULL;
- ref = alloc_ref(name);
- hashcpy(ref->new_sha1, sha1);
- return ref;
+ return -1;
+
+ if (match) {
+ *match = alloc_ref(name);
+ hashcpy((*match)->new_sha1, sha1);
+ }
+ return 0;
}
static struct ref *make_linked_ref(const char *name, struct ref ***tail)
@@ -1096,12 +1110,37 @@ static char *guess_ref(const char *name, struct ref *peer)
return strbuf_detach(&buf, NULL);
}
+static int match_explicit_lhs(struct ref *src,
+ struct refspec *rs,
+ struct ref **match,
+ int *allocated_match)
+{
+ switch (count_refspec_match(rs->src, src, match)) {
+ case 1:
+ if (allocated_match)
+ *allocated_match = 0;
+ return 0;
+ case 0:
+ /* The source could be in the get_sha1() format
+ * not a reference name. :refs/other is a
+ * way to delete 'other' ref at the remote end.
+ */
+ if (try_explicit_object_name(rs->src, match) < 0)
+ return error("src refspec %s does not match any.", rs->src);
+ if (allocated_match)
+ *allocated_match = 1;
+ return 0;
+ default:
+ return error("src refspec %s matches more than one.", rs->src);
+ }
+}
+
static int match_explicit(struct ref *src, struct ref *dst,
struct ref ***dst_tail,
struct refspec *rs)
{
struct ref *matched_src, *matched_dst;
- int copy_src;
+ int allocated_src;
const char *dst_value = rs->dst;
char *dst_guess;
@@ -1110,23 +1149,8 @@ static int match_explicit(struct ref *src, struct ref *dst,
return 0;
matched_src = matched_dst = NULL;
- switch (count_refspec_match(rs->src, src, &matched_src)) {
- case 1:
- copy_src = 1;
- break;
- case 0:
- /* The source could be in the get_sha1() format
- * not a reference name. :refs/other is a
- * way to delete 'other' ref at the remote end.
- */
- matched_src = try_explicit_object_name(rs->src);
- if (!matched_src)
- return error("src refspec %s does not match any.", rs->src);
- copy_src = 0;
- break;
- default:
- return error("src refspec %s matches more than one.", rs->src);
- }
+ if (match_explicit_lhs(src, rs, &matched_src, &allocated_src) < 0)
+ return -1;
if (!dst_value) {
unsigned char sha1[20];
@@ -1171,7 +1195,9 @@ static int match_explicit(struct ref *src, struct ref *dst,
return error("dst ref %s receives from more than one src.",
matched_dst->name);
else {
- matched_dst->peer_ref = copy_src ? copy_ref(matched_src) : matched_src;
+ matched_dst->peer_ref = allocated_src ?
+ matched_src :
+ copy_ref(matched_src);
matched_dst->force = rs->force;
}
return 0;
@@ -1353,6 +1379,31 @@ static void prepare_ref_index(struct string_list *ref_index, struct ref *ref)
}
/*
+ * Given only the set of local refs, sanity-check the set of push
+ * refspecs. We can't catch all errors that match_push_refs would,
+ * but we can catch some errors early before even talking to the
+ * remote side.
+ */
+int check_push_refs(struct ref *src, int nr_refspec, const char **refspec_names)
+{
+ struct refspec *refspec = parse_push_refspec(nr_refspec, refspec_names);
+ int ret = 0;
+ int i;
+
+ for (i = 0; i < nr_refspec; i++) {
+ struct refspec *rs = refspec + i;
+
+ if (rs->pattern || rs->matching)
+ continue;
+
+ ret |= match_explicit_lhs(src, rs, NULL, NULL);
+ }
+
+ free_refspec(nr_refspec, refspec);
+ return ret;
+}
+
+/*
* Given the set of refs the local repository has, the set of refs the
* remote repository has, and the refspec used for push, determine
* what remote refs we will update and with what value by setting
@@ -1571,7 +1622,7 @@ int branch_merge_matches(struct branch *branch,
{
if (!branch || i < 0 || i >= branch->merge_nr)
return 0;
- return refname_match(branch->merge[i]->src, refname, ref_fetch_rules);
+ return refname_match(branch->merge[i]->src, refname);
}
static int ignore_symref_update(const char *refname)
@@ -1624,7 +1675,7 @@ static const struct ref *find_ref_by_name_abbrev(const struct ref *refs, const c
{
const struct ref *ref;
for (ref = refs; ref; ref = ref->next) {
- if (refname_match(name, ref->name, ref_fetch_rules))
+ if (refname_match(name, ref->name))
return ref;
}
return NULL;
@@ -2121,7 +2172,7 @@ static void apply_cas(struct push_cas_option *cas,
/* Find an explicit --<option>=<name>[:<value>] entry */
for (i = 0; i < cas->nr; i++) {
struct push_cas *entry = &cas->entry[i];
- if (!refname_match(entry->refname, ref->name, ref_rev_parse_rules))
+ if (!refname_match(entry->refname, ref->name))
continue;
ref->expect_old_sha1 = 1;
if (!entry->use_tracking)
diff --git a/remote.h b/remote.h
index fb7647fab..917d383a8 100644
--- a/remote.h
+++ b/remote.h
@@ -166,6 +166,7 @@ extern int query_refspecs(struct refspec *specs, int nr, struct refspec *query);
char *apply_refspecs(struct refspec *refspecs, int nr_refspec,
const char *name);
+int check_push_refs(struct ref *src, int nr_refspec, const char **refspec);
int match_push_refs(struct ref *src, struct ref **dst,
int nr_refspec, const char **refspec, int all);
void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
diff --git a/replace_object.c b/replace_object.c
index cdcaf8cbe..0ab2dc137 100644
--- a/replace_object.c
+++ b/replace_object.c
@@ -3,8 +3,13 @@
#include "refs.h"
#include "commit.h"
+/*
+ * An array of replacements. The array is kept sorted by the original
+ * sha1.
+ */
static struct replace_object {
- unsigned char sha1[2][20];
+ unsigned char original[20];
+ unsigned char replacement[20];
} **replace_object;
static int replace_object_alloc, replace_object_nr;
@@ -12,7 +17,7 @@ static int replace_object_alloc, replace_object_nr;
static const unsigned char *replace_sha1_access(size_t index, void *table)
{
struct replace_object **replace = table;
- return replace[index]->sha1[0];
+ return replace[index]->original;
}
static int replace_object_pos(const unsigned char *sha1)
@@ -24,7 +29,7 @@ static int replace_object_pos(const unsigned char *sha1)
static int register_replace_object(struct replace_object *replace,
int ignore_dups)
{
- int pos = replace_object_pos(replace->sha1[0]);
+ int pos = replace_object_pos(replace->original);
if (0 <= pos) {
if (ignore_dups)
@@ -36,12 +41,8 @@ static int register_replace_object(struct replace_object *replace,
return 1;
}
pos = -pos - 1;
- if (replace_object_alloc <= ++replace_object_nr) {
- replace_object_alloc = alloc_nr(replace_object_alloc);
- replace_object = xrealloc(replace_object,
- sizeof(*replace_object) *
- replace_object_alloc);
- }
+ ALLOC_GROW(replace_object, replace_object_nr + 1, replace_object_alloc);
+ replace_object_nr++;
if (pos < replace_object_nr)
memmove(replace_object + pos + 1,
replace_object + pos,
@@ -60,14 +61,14 @@ static int register_replace_ref(const char *refname,
const char *hash = slash ? slash + 1 : refname;
struct replace_object *repl_obj = xmalloc(sizeof(*repl_obj));
- if (strlen(hash) != 40 || get_sha1_hex(hash, repl_obj->sha1[0])) {
+ if (strlen(hash) != 40 || get_sha1_hex(hash, repl_obj->original)) {
free(repl_obj);
warning("bad replace ref name: %s", refname);
return 0;
}
/* Copy sha1 from the read ref */
- hashcpy(repl_obj->sha1[1], sha1);
+ hashcpy(repl_obj->replacement, sha1);
/* Register new object */
if (register_replace_object(repl_obj, 1))
@@ -86,12 +87,19 @@ static void prepare_replace_object(void)
for_each_replace_ref(register_replace_ref, NULL);
replace_object_prepared = 1;
if (!replace_object_nr)
- read_replace_refs = 0;
+ check_replace_refs = 0;
}
/* We allow "recursive" replacement. Only within reason, though */
#define MAXREPLACEDEPTH 5
+/*
+ * If a replacement for object sha1 has been set up, return the
+ * replacement object's name (replaced recursively, if necessary).
+ * The return value is either sha1 or a pointer to a
+ * permanently-allocated value. This function always respects replace
+ * references, regardless of the value of check_replace_refs.
+ */
const unsigned char *do_lookup_replace_object(const unsigned char *sha1)
{
int pos, depth = MAXREPLACEDEPTH;
@@ -107,7 +115,7 @@ const unsigned char *do_lookup_replace_object(const unsigned char *sha1)
pos = replace_object_pos(cur);
if (0 <= pos)
- cur = replace_object[pos]->sha1[1];
+ cur = replace_object[pos]->replacement;
} while (0 <= pos);
return cur;
diff --git a/rerere.c b/rerere.c
index 1f2d21a72..d55aa8a01 100644
--- a/rerere.c
+++ b/rerere.c
@@ -672,8 +672,8 @@ int rerere_forget(struct pathspec *pathspec)
find_conflict(&conflict);
for (i = 0; i < conflict.nr; i++) {
struct string_list_item *it = &conflict.items[i];
- if (!match_pathspec_depth(pathspec, it->string, strlen(it->string),
- 0, NULL))
+ if (!match_pathspec(pathspec, it->string,
+ strlen(it->string), 0, NULL, 0))
continue;
rerere_forget_one_path(it->string, &merge_rr);
}
diff --git a/resolve-undo.c b/resolve-undo.c
index c09b00664..44c697c36 100644
--- a/resolve-undo.c
+++ b/resolve-undo.c
@@ -119,6 +119,7 @@ int unmerge_index_entry_at(struct index_state *istate, int pos)
struct string_list_item *item;
struct resolve_undo_info *ru;
int i, err = 0, matched;
+ char *name;
if (!istate->resolve_undo)
return pos;
@@ -138,20 +139,22 @@ int unmerge_index_entry_at(struct index_state *istate, int pos)
if (!ru)
return pos;
matched = ce->ce_flags & CE_MATCHED;
+ name = xstrdup(ce->name);
remove_index_entry_at(istate, pos);
for (i = 0; i < 3; i++) {
struct cache_entry *nce;
if (!ru->mode[i])
continue;
nce = make_cache_entry(ru->mode[i], ru->sha1[i],
- ce->name, i + 1, 0);
+ name, i + 1, 0);
if (matched)
nce->ce_flags |= CE_MATCHED;
if (add_index_entry(istate, nce, ADD_CACHE_OK_TO_ADD)) {
err = 1;
- error("cannot unmerge '%s'", ce->name);
+ error("cannot unmerge '%s'", name);
}
}
+ free(name);
if (err)
return pos;
free(ru);
@@ -182,7 +185,7 @@ void unmerge_index(struct index_state *istate, const struct pathspec *pathspec)
for (i = 0; i < istate->cache_nr; i++) {
const struct cache_entry *ce = istate->cache[i];
- if (!match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL))
+ if (!ce_path_match(ce, pathspec, NULL))
continue;
i = unmerge_index_entry_at(istate, i);
}
diff --git a/revision.c b/revision.c
index a68fde6e9..78b5c3ac0 100644
--- a/revision.c
+++ b/revision.c
@@ -16,6 +16,7 @@
#include "line-log.h"
#include "mailmap.h"
#include "commit-slab.h"
+#include "dir.h"
volatile show_early_output_fn_t show_early_output;
@@ -104,17 +105,12 @@ static void mark_blob_uninteresting(struct blob *blob)
blob->object.flags |= UNINTERESTING;
}
-void mark_tree_uninteresting(struct tree *tree)
+static void mark_tree_contents_uninteresting(struct tree *tree)
{
struct tree_desc desc;
struct name_entry entry;
struct object *obj = &tree->object;
- if (!tree)
- return;
- if (obj->flags & UNINTERESTING)
- return;
- obj->flags |= UNINTERESTING;
if (!has_sha1_file(obj->sha1))
return;
if (parse_tree(tree) < 0)
@@ -142,6 +138,18 @@ void mark_tree_uninteresting(struct tree *tree)
free_tree_buffer(tree);
}
+void mark_tree_uninteresting(struct tree *tree)
+{
+ struct object *obj = &tree->object;
+
+ if (!tree)
+ return;
+ if (obj->flags & UNINTERESTING)
+ return;
+ obj->flags |= UNINTERESTING;
+ mark_tree_contents_uninteresting(tree);
+}
+
void mark_parents_uninteresting(struct commit *commit)
{
struct commit_list *parents = NULL, *l;
@@ -276,6 +284,7 @@ static struct commit *handle_commit(struct rev_info *revs,
return NULL;
die("bad object %s", sha1_to_hex(tag->tagged->sha1));
}
+ object->flags |= flags;
}
/*
@@ -287,7 +296,6 @@ static struct commit *handle_commit(struct rev_info *revs,
if (parse_commit(commit) < 0)
die("unable to parse commit %s", name);
if (flags & UNINTERESTING) {
- commit->object.flags |= UNINTERESTING;
mark_parents_uninteresting(commit);
revs->limited = 1;
}
@@ -305,7 +313,7 @@ static struct commit *handle_commit(struct rev_info *revs,
if (!revs->tree_objects)
return NULL;
if (flags & UNINTERESTING) {
- mark_tree_uninteresting(tree);
+ mark_tree_contents_uninteresting(tree);
return NULL;
}
add_pending_object(revs, object, "");
@@ -316,13 +324,10 @@ static struct commit *handle_commit(struct rev_info *revs,
* Blob object? You know the drill by now..
*/
if (object->type == OBJ_BLOB) {
- struct blob *blob = (struct blob *)object;
if (!revs->blob_objects)
return NULL;
- if (flags & UNINTERESTING) {
- mark_blob_uninteresting(blob);
+ if (flags & UNINTERESTING)
return NULL;
- }
add_pending_object(revs, object, "");
return NULL;
}
@@ -492,24 +497,14 @@ static int rev_compare_tree(struct rev_info *revs,
static int rev_same_tree_as_empty(struct rev_info *revs, struct commit *commit)
{
int retval;
- void *tree;
- unsigned long size;
- struct tree_desc empty, real;
struct tree *t1 = commit->tree;
if (!t1)
return 0;
- tree = read_object_with_reference(t1->object.sha1, tree_type, &size, NULL);
- if (!tree)
- return 0;
- init_tree_desc(&real, tree, size);
- init_tree_desc(&empty, "", 0);
-
tree_difference = REV_TREE_SAME;
DIFF_OPT_CLR(&revs->pruning, HAS_CHANGES);
- retval = diff_tree(&empty, &real, "", &revs->pruning);
- free(tree);
+ retval = diff_tree_sha1(NULL, t1->object.sha1, "", &revs->pruning);
return retval >= 0 && (tree_difference == REV_TREE_SAME);
}
@@ -779,6 +774,10 @@ static int add_parents_to_list(struct rev_info *revs, struct commit *commit,
return 0;
commit->object.flags |= ADDED;
+ if (revs->include_check &&
+ !revs->include_check(commit, revs->include_check_data))
+ return 0;
+
/*
* If the commit is uninteresting, don't try to
* prune parents - we want the maximal uninteresting
@@ -1187,7 +1186,7 @@ int ref_excluded(struct string_list *ref_excludes, const char *path)
if (!ref_excludes)
return 0;
for_each_string_list_item(item, ref_excludes) {
- if (!fnmatch(item->string, path, 0))
+ if (!wildmatch(item->string, path, 0, NULL))
return 1;
}
return 0;
@@ -1396,7 +1395,7 @@ static void prepare_show_merge(struct rev_info *revs)
const struct cache_entry *ce = active_cache[i];
if (!ce_stage(ce))
continue;
- if (ce_path_match(ce, &revs->prune_data)) {
+ if (ce_path_match(ce, &revs->prune_data, NULL)) {
prune_num++;
prune = xrealloc(prune, sizeof(*prune) * prune_num);
prune[prune_num-2] = ce->name;
diff --git a/revision.h b/revision.h
index 88967d6a2..1eb94c154 100644
--- a/revision.h
+++ b/revision.h
@@ -172,6 +172,8 @@ struct rev_info {
unsigned long min_age;
int min_parents;
int max_parents;
+ int (*include_check)(struct commit *, void *);
+ void *include_check_data;
/* diff info for patches and for paths limiting */
struct diff_options diffopt;
diff --git a/sequencer.c b/sequencer.c
index 90cac7b02..bde5f047b 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -392,11 +392,18 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts,
{
struct argv_array array;
int rc;
+ char *gpg_sign;
argv_array_init(&array);
argv_array_push(&array, "commit");
argv_array_push(&array, "-n");
+ if (opts->gpg_sign) {
+ gpg_sign = xmalloc(3 + strlen(opts->gpg_sign));
+ sprintf(gpg_sign, "-S%s", opts->gpg_sign);
+ argv_array_push(&array, gpg_sign);
+ free(gpg_sign);
+ }
if (opts->signoff)
argv_array_push(&array, "-s");
if (!opts->edit) {
@@ -808,6 +815,8 @@ static int populate_opts_cb(const char *key, const char *value, void *data)
opts->mainline = git_config_int(key, value);
else if (!strcmp(key, "options.strategy"))
git_config_string(&opts->strategy, key, value);
+ else if (!strcmp(key, "options.gpg-sign"))
+ git_config_string(&opts->gpg_sign, key, value);
else if (!strcmp(key, "options.strategy-option")) {
ALLOC_GROW(opts->xopts, opts->xopts_nr + 1, opts->xopts_alloc);
opts->xopts[opts->xopts_nr++] = xstrdup(value);
@@ -981,6 +990,8 @@ static void save_opts(struct replay_opts *opts)
}
if (opts->strategy)
git_config_set_in_file(opts_file, "options.strategy", opts->strategy);
+ if (opts->gpg_sign)
+ git_config_set_in_file(opts_file, "options.gpg-sign", opts->gpg_sign);
if (opts->xopts) {
int i;
for (i = 0; i < opts->xopts_nr; i++)
diff --git a/sequencer.h b/sequencer.h
index 1fc22dcab..db43e9cf8 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -37,6 +37,8 @@ struct replay_opts {
int mainline;
+ const char *gpg_sign;
+
/* Merge strategy */
const char *strategy;
const char **xopts;
diff --git a/setup.c b/setup.c
index 6c3f85ff7..613e3b3c1 100644
--- a/setup.c
+++ b/setup.c
@@ -6,6 +6,70 @@ static int inside_git_dir = -1;
static int inside_work_tree = -1;
/*
+ * The input parameter must contain an absolute path, and it must already be
+ * normalized.
+ *
+ * Find the part of an absolute path that lies inside the work tree by
+ * dereferencing symlinks outside the work tree, for example:
+ * /dir1/repo/dir2/file (work tree is /dir1/repo) -> dir2/file
+ * /dir/file (work tree is /) -> dir/file
+ * /dir/symlink1/symlink2 (symlink1 points to work tree) -> symlink2
+ * /dir/repolink/file (repolink points to /dir/repo) -> file
+ * /dir/repo (exactly equal to work tree) -> (empty string)
+ */
+static int abspath_part_inside_repo(char *path)
+{
+ size_t len;
+ size_t wtlen;
+ char *path0;
+ int off;
+ const char *work_tree = get_git_work_tree();
+
+ if (!work_tree)
+ return -1;
+ wtlen = strlen(work_tree);
+ len = strlen(path);
+ off = 0;
+
+ /* check if work tree is already the prefix */
+ if (wtlen <= len && !strncmp(path, work_tree, wtlen)) {
+ if (path[wtlen] == '/') {
+ memmove(path, path + wtlen + 1, len - wtlen);
+ return 0;
+ } else if (path[wtlen - 1] == '/' || path[wtlen] == '\0') {
+ /* work tree is the root, or the whole path */
+ memmove(path, path + wtlen, len - wtlen + 1);
+ return 0;
+ }
+ /* work tree might match beginning of a symlink to work tree */
+ off = wtlen;
+ }
+ path0 = path;
+ path += offset_1st_component(path) + off;
+
+ /* check each '/'-terminated level */
+ while (*path) {
+ path++;
+ if (*path == '/') {
+ *path = '\0';
+ if (strcmp(real_path(path0), work_tree) == 0) {
+ memmove(path0, path + 1, len - (path - path0));
+ return 0;
+ }
+ *path = '/';
+ }
+ }
+
+ /* check whole path */
+ if (strcmp(real_path(path0), work_tree) == 0) {
+ *path0 = '\0';
+ return 0;
+ }
+
+ return -1;
+}
+
+/*
* Normalize "path", prepending the "prefix" for relative paths. If
* remaining_prefix is not NULL, return the actual prefix still
* remains in the path. For example, prefix = sub1/sub2/ and path is
@@ -22,11 +86,17 @@ char *prefix_path_gently(const char *prefix, int len,
const char *orig = path;
char *sanitized;
if (is_absolute_path(orig)) {
- const char *temp = real_path(path);
- sanitized = xmalloc(len + strlen(temp) + 1);
- strcpy(sanitized, temp);
+ sanitized = xmalloc(strlen(path) + 1);
if (remaining_prefix)
*remaining_prefix = 0;
+ if (normalize_path_copy_len(sanitized, path, remaining_prefix)) {
+ free(sanitized);
+ return NULL;
+ }
+ if (abspath_part_inside_repo(sanitized)) {
+ free(sanitized);
+ return NULL;
+ }
} else {
sanitized = xmalloc(len + strlen(path) + 1);
if (len)
@@ -34,26 +104,10 @@ char *prefix_path_gently(const char *prefix, int len,
strcpy(sanitized + len, path);
if (remaining_prefix)
*remaining_prefix = len;
- }
- if (normalize_path_copy_len(sanitized, sanitized, remaining_prefix))
- goto error_out;
- if (is_absolute_path(orig)) {
- size_t root_len, len, total;
- const char *work_tree = get_git_work_tree();
- if (!work_tree)
- goto error_out;
- len = strlen(work_tree);
- root_len = offset_1st_component(work_tree);
- total = strlen(sanitized) + 1;
- if (strncmp(sanitized, work_tree, len) ||
- (len > root_len && sanitized[len] != '\0' && sanitized[len] != '/')) {
- error_out:
+ if (normalize_path_copy_len(sanitized, sanitized, remaining_prefix)) {
free(sanitized);
return NULL;
}
- if (sanitized[len] == '/')
- len++;
- memmove(sanitized, sanitized + len, total - len);
}
return sanitized;
}
@@ -787,3 +841,27 @@ void sanitize_stdfds(void)
if (fd > 2)
close(fd);
}
+
+int daemonize(void)
+{
+#ifdef NO_POSIX_GOODIES
+ errno = ENOSYS;
+ return -1;
+#else
+ switch (fork()) {
+ case 0:
+ break;
+ case -1:
+ die_errno("fork failed");
+ default:
+ exit(0);
+ }
+ if (setsid() == -1)
+ die_errno("setsid failed");
+ close(0);
+ close(1);
+ close(2);
+ sanitize_stdfds();
+ return 0;
+#endif
+}
diff --git a/sh-i18n--envsubst.c b/sh-i18n--envsubst.c
index 5ddd6886c..855d28cf9 100644
--- a/sh-i18n--envsubst.c
+++ b/sh-i18n--envsubst.c
@@ -237,18 +237,6 @@ string_list_sort (string_list_ty *slp)
qsort (slp->item, slp->nitems, sizeof (slp->item[0]), cmp_string);
}
-/* Test whether a string list contains a given string. */
-static inline int
-string_list_member (const string_list_ty *slp, const char *s)
-{
- size_t j;
-
- for (j = 0; j < slp->nitems; ++j)
- if (strcmp (slp->item[j], s) == 0)
- return 1;
- return 0;
-}
-
/* Test whether a sorted string list contains a given string. */
static int
sorted_string_list_member (const string_list_ty *slp, const char *s)
diff --git a/sha1_file.c b/sha1_file.c
index e13bd2c3e..400aa463a 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -60,6 +60,12 @@ static struct cached_object empty_tree = {
0
};
+/*
+ * A pointer to the last packed_git in which an object was found.
+ * When an object is sought, we look in this packfile first, because
+ * objects that are looked up at similar times are often in the same
+ * packfile as one another.
+ */
static struct packed_git *last_found_pack;
static struct cached_object *find_cached_object(const unsigned char *sha1)
@@ -105,50 +111,63 @@ int mkdir_in_gitdir(const char *path)
return adjust_shared_perm(path);
}
-int safe_create_leading_directories(char *path)
+enum scld_error safe_create_leading_directories(char *path)
{
- char *pos = path + offset_1st_component(path);
- struct stat st;
+ char *next_component = path + offset_1st_component(path);
+ enum scld_error ret = SCLD_OK;
+
+ while (ret == SCLD_OK && next_component) {
+ struct stat st;
+ char *slash = next_component, slash_character;
- while (pos) {
- pos = strchr(pos, '/');
- if (!pos)
+ while (*slash && !is_dir_sep(*slash))
+ slash++;
+
+ if (!*slash)
break;
- while (*++pos == '/')
- ;
- if (!*pos)
+
+ next_component = slash + 1;
+ while (is_dir_sep(*next_component))
+ next_component++;
+ if (!*next_component)
break;
- *--pos = '\0';
+
+ slash_character = *slash;
+ *slash = '\0';
if (!stat(path, &st)) {
/* path exists */
- if (!S_ISDIR(st.st_mode)) {
- *pos = '/';
- return -3;
- }
- }
- else if (mkdir(path, 0777)) {
+ if (!S_ISDIR(st.st_mode))
+ ret = SCLD_EXISTS;
+ } else if (mkdir(path, 0777)) {
if (errno == EEXIST &&
- !stat(path, &st) && S_ISDIR(st.st_mode)) {
+ !stat(path, &st) && S_ISDIR(st.st_mode))
; /* somebody created it since we checked */
- } else {
- *pos = '/';
- return -1;
- }
- }
- else if (adjust_shared_perm(path)) {
- *pos = '/';
- return -2;
+ else if (errno == ENOENT)
+ /*
+ * Either mkdir() failed because
+ * somebody just pruned the containing
+ * directory, or stat() failed because
+ * the file that was in our way was
+ * just removed. Either way, inform
+ * the caller that it might be worth
+ * trying again:
+ */
+ ret = SCLD_VANISHED;
+ else
+ ret = SCLD_FAILED;
+ } else if (adjust_shared_perm(path)) {
+ ret = SCLD_PERMS;
}
- *pos++ = '/';
+ *slash = slash_character;
}
- return 0;
+ return ret;
}
-int safe_create_leading_directories_const(const char *path)
+enum scld_error safe_create_leading_directories_const(const char *path)
{
/* path points to cache entries, so xstrdup before messing with it */
char *buf = xstrdup(path);
- int result = safe_create_leading_directories(buf);
+ enum scld_error result = safe_create_leading_directories(buf);
free(buf);
return result;
}
@@ -165,17 +184,7 @@ static void fill_sha1_path(char *pathbuf, const unsigned char *sha1)
}
}
-/*
- * NOTE! This returns a statically allocated buffer, so you have to be
- * careful about using it. Do an "xstrdup()" if you need to save the
- * filename.
- *
- * Also note that this returns the location for creating. Reading
- * SHA1 file can happen from any alternate directory listed in the
- * DB_ENVIRONMENT environment variable if it is not found in
- * the primary object database.
- */
-char *sha1_file_name(const unsigned char *sha1)
+const char *sha1_file_name(const unsigned char *sha1)
{
static char buf[PATH_MAX];
const char *objdir;
@@ -195,6 +204,11 @@ char *sha1_file_name(const unsigned char *sha1)
return buf;
}
+/*
+ * Return the name of the pack or index file with the specified sha1
+ * in its filename. *base and *name are scratch space that must be
+ * provided by the caller. which should be "pack" or "idx".
+ */
static char *sha1_get_pack_name(const unsigned char *sha1,
char **name, char **base, const char *which)
{
@@ -239,8 +253,6 @@ char *sha1_pack_index_name(const unsigned char *sha1)
struct alternate_object_database *alt_odb_list;
static struct alternate_object_database **alt_odb_tail;
-static int git_open_noatime(const char *name);
-
/*
* Prepare alternate object database registry.
*
@@ -425,8 +437,7 @@ void prepare_alt_odb(void)
static int has_loose_object_local(const unsigned char *sha1)
{
- char *name = sha1_file_name(sha1);
- return !access(name, F_OK);
+ return !access(sha1_file_name(sha1), F_OK);
}
int has_loose_object_nonlocal(const unsigned char *sha1)
@@ -478,7 +489,12 @@ void pack_report(void)
sz_fmt(pack_mapped), sz_fmt(peak_pack_mapped));
}
-static int check_packed_git_idx(const char *path, struct packed_git *p)
+/*
+ * Open and mmap the index file at path, perform a couple of
+ * consistency checks, then record its information to p. Return 0 on
+ * success.
+ */
+static int check_packed_git_idx(const char *path, struct packed_git *p)
{
void *idx_map;
struct pack_idx_header *hdr;
@@ -1219,6 +1235,7 @@ static void prepare_packed_git_one(char *objdir, int local)
if (has_extension(de->d_name, ".idx") ||
has_extension(de->d_name, ".pack") ||
+ has_extension(de->d_name, ".bitmap") ||
has_extension(de->d_name, ".keep"))
string_list_append(&garbage, path);
else
@@ -1303,7 +1320,6 @@ void prepare_packed_git(void)
void reprepare_packed_git(void)
{
- discard_revindex();
prepare_packed_git_run_once = 0;
prepare_packed_git();
}
@@ -1380,7 +1396,7 @@ int check_sha1_signature(const unsigned char *sha1, void *map,
return hashcmp(sha1, real_sha1) ? -1 : 0;
}
-static int git_open_noatime(const char *name)
+int git_open_noatime(const char *name)
{
static int sha1_file_open_flag = O_NOATIME;
@@ -1401,17 +1417,15 @@ static int git_open_noatime(const char *name)
static int stat_sha1_file(const unsigned char *sha1, struct stat *st)
{
- char *name = sha1_file_name(sha1);
struct alternate_object_database *alt;
- if (!lstat(name, st))
+ if (!lstat(sha1_file_name(sha1), st))
return 0;
prepare_alt_odb();
errno = ENOENT;
for (alt = alt_odb_list; alt; alt = alt->next) {
- name = alt->name;
- fill_sha1_path(name, sha1);
+ fill_sha1_path(alt->name, sha1);
if (!lstat(alt->base, st))
return 0;
}
@@ -1422,18 +1436,16 @@ static int stat_sha1_file(const unsigned char *sha1, struct stat *st)
static int open_sha1_file(const unsigned char *sha1)
{
int fd;
- char *name = sha1_file_name(sha1);
struct alternate_object_database *alt;
- fd = git_open_noatime(name);
+ fd = git_open_noatime(sha1_file_name(sha1));
if (fd >= 0)
return fd;
prepare_alt_odb();
errno = ENOENT;
for (alt = alt_odb_list; alt; alt = alt->next) {
- name = alt->name;
- fill_sha1_path(name, sha1);
+ fill_sha1_path(alt->name, sha1);
fd = git_open_noatime(alt->base);
if (fd >= 0)
return fd;
@@ -2276,6 +2288,10 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
*final_size = size;
unuse_pack(&w_curs);
+
+ if (delta_stack != small_delta_stack)
+ free(delta_stack);
+
return data;
}
@@ -2435,6 +2451,10 @@ static int fill_pack_entry(const unsigned char *sha1,
return 1;
}
+/*
+ * Iff a pack file contains the object named by sha1, return true and
+ * store its location to e.
+ */
static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e)
{
struct packed_git *p;
@@ -2447,11 +2467,13 @@ static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e)
return 1;
for (p = packed_git; p; p = p->next) {
- if (p == last_found_pack || !fill_pack_entry(sha1, e, p))
- continue;
+ if (p == last_found_pack)
+ continue; /* we already checked this one */
- last_found_pack = p;
- return 1;
+ if (fill_pack_entry(sha1, e, p)) {
+ last_found_pack = p;
+ return 1;
+ }
}
return 0;
}
@@ -2613,12 +2635,7 @@ int pretend_sha1_file(void *buf, unsigned long len, enum object_type type,
hash_sha1_file(buf, len, typename(type), sha1);
if (has_sha1_file(sha1) || find_cached_object(sha1))
return 0;
- if (cached_object_alloc <= cached_object_nr) {
- cached_object_alloc = alloc_nr(cached_object_alloc);
- cached_objects = xrealloc(cached_objects,
- sizeof(*cached_objects) *
- cached_object_alloc);
- }
+ ALLOC_GROW(cached_objects, cached_object_nr + 1, cached_object_alloc);
co = &cached_objects[cached_object_nr++];
co->size = len;
co->type = type;
@@ -2666,7 +2683,6 @@ void *read_sha1_file_extended(const unsigned char *sha1,
unsigned flag)
{
void *data;
- char *path;
const struct packed_git *p;
const unsigned char *repl = lookup_replace_object_extended(sha1, flag);
@@ -2684,7 +2700,8 @@ void *read_sha1_file_extended(const unsigned char *sha1,
sha1_to_hex(repl), sha1_to_hex(sha1));
if (has_loose_object(repl)) {
- path = sha1_file_name(sha1);
+ const char *path = sha1_file_name(sha1);
+
die("loose object %s (stored in %s) is corrupt",
sha1_to_hex(repl), path);
}
@@ -2882,10 +2899,9 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen,
git_zstream stream;
git_SHA_CTX c;
unsigned char parano_sha1[20];
- char *filename;
static char tmp_file[PATH_MAX];
+ const char *filename = sha1_file_name(sha1);
- filename = sha1_file_name(sha1);
fd = create_tmpfile(tmp_file, sizeof(tmp_file), filename);
if (fd < 0) {
if (errno == EACCES)
diff --git a/sha1_name.c b/sha1_name.c
index a5578f718..6fca8692d 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -430,7 +430,7 @@ static inline int upstream_mark(const char *string, int len)
}
static int get_sha1_1(const char *name, int len, unsigned char *sha1, unsigned lookup_flags);
-static int interpret_nth_prior_checkout(const char *name, struct strbuf *buf);
+static int interpret_nth_prior_checkout(const char *name, int namelen, struct strbuf *buf);
static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
{
@@ -492,7 +492,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
struct strbuf buf = STRBUF_INIT;
int detached;
- if (interpret_nth_prior_checkout(str, &buf) > 0) {
+ if (interpret_nth_prior_checkout(str, len, &buf) > 0) {
detached = (buf.len == 40 && !get_sha1_hex(buf.buf, sha1));
strbuf_release(&buf);
if (detached)
@@ -929,7 +929,8 @@ static int grab_nth_branch_switch(unsigned char *osha1, unsigned char *nsha1,
* Parse @{-N} syntax, return the number of characters parsed
* if successful; otherwise signal an error with negative value.
*/
-static int interpret_nth_prior_checkout(const char *name, struct strbuf *buf)
+static int interpret_nth_prior_checkout(const char *name, int namelen,
+ struct strbuf *buf)
{
long nth;
int retval;
@@ -937,9 +938,11 @@ static int interpret_nth_prior_checkout(const char *name, struct strbuf *buf)
const char *brace;
char *num_end;
+ if (namelen < 4)
+ return -1;
if (name[0] != '@' || name[1] != '{' || name[2] != '-')
return -1;
- brace = strchr(name, '}');
+ brace = memchr(name, '}', namelen);
if (!brace)
return -1;
nth = strtol(name + 3, &num_end, 10);
@@ -1012,7 +1015,7 @@ static int interpret_empty_at(const char *name, int namelen, int len, struct str
return -1;
/* make sure it's a single @, or @@{.*}, not @foo */
- next = strchr(name + len + 1, '@');
+ next = memchr(name + len + 1, '@', namelen - len - 1);
if (next && next[1] != '{')
return -1;
if (!next)
@@ -1046,6 +1049,57 @@ static int reinterpret(const char *name, int namelen, int len, struct strbuf *bu
return ret - used + len;
}
+static void set_shortened_ref(struct strbuf *buf, const char *ref)
+{
+ char *s = shorten_unambiguous_ref(ref, 0);
+ strbuf_reset(buf);
+ strbuf_addstr(buf, s);
+ free(s);
+}
+
+static const char *get_upstream_branch(const char *branch_buf, int len)
+{
+ char *branch = xstrndup(branch_buf, len);
+ struct branch *upstream = branch_get(*branch ? branch : NULL);
+
+ /*
+ * Upstream can be NULL only if branch refers to HEAD and HEAD
+ * points to something different than a branch.
+ */
+ if (!upstream)
+ die(_("HEAD does not point to a branch"));
+ if (!upstream->merge || !upstream->merge[0]->dst) {
+ if (!ref_exists(upstream->refname))
+ die(_("No such branch: '%s'"), branch);
+ if (!upstream->merge) {
+ die(_("No upstream configured for branch '%s'"),
+ upstream->name);
+ }
+ die(
+ _("Upstream branch '%s' not stored as a remote-tracking branch"),
+ upstream->merge[0]->src);
+ }
+ free(branch);
+
+ return upstream->merge[0]->dst;
+}
+
+static int interpret_upstream_mark(const char *name, int namelen,
+ int at, struct strbuf *buf)
+{
+ int len;
+
+ len = upstream_mark(name + at, namelen - at);
+ if (!len)
+ return -1;
+
+ if (memchr(name, ':', at))
+ return -1;
+
+ set_shortened_ref(buf, get_upstream_branch(name, at));
+ return len + at;
+}
+
/*
* This reads short-hand syntax that not only evaluates to a commit
* object name, but also can act as if the end user spelled the name
@@ -1069,10 +1123,9 @@ static int reinterpret(const char *name, int namelen, int len, struct strbuf *bu
*/
int interpret_branch_name(const char *name, int namelen, struct strbuf *buf)
{
- char *cp;
- struct branch *upstream;
- int len = interpret_nth_prior_checkout(name, buf);
- int tmp_len;
+ char *at;
+ const char *start;
+ int len = interpret_nth_prior_checkout(name, namelen, buf);
if (!namelen)
namelen = strlen(name);
@@ -1086,44 +1139,20 @@ int interpret_branch_name(const char *name, int namelen, struct strbuf *buf)
return reinterpret(name, namelen, len, buf);
}
- cp = strchr(name, '@');
- if (!cp)
- return -1;
-
- len = interpret_empty_at(name, namelen, cp - name, buf);
- if (len > 0)
- return reinterpret(name, namelen, len, buf);
+ for (start = name;
+ (at = memchr(start, '@', namelen - (start - name)));
+ start = at + 1) {
- tmp_len = upstream_mark(cp, namelen - (cp - name));
- if (!tmp_len)
- return -1;
+ len = interpret_empty_at(name, namelen, at - name, buf);
+ if (len > 0)
+ return reinterpret(name, namelen, len, buf);
- len = cp + tmp_len - name;
- cp = xstrndup(name, cp - name);
- upstream = branch_get(*cp ? cp : NULL);
- /*
- * Upstream can be NULL only if cp refers to HEAD and HEAD
- * points to something different than a branch.
- */
- if (!upstream)
- die(_("HEAD does not point to a branch"));
- if (!upstream->merge || !upstream->merge[0]->dst) {
- if (!ref_exists(upstream->refname))
- die(_("No such branch: '%s'"), cp);
- if (!upstream->merge) {
- die(_("No upstream configured for branch '%s'"),
- upstream->name);
- }
- die(
- _("Upstream branch '%s' not stored as a remote-tracking branch"),
- upstream->merge[0]->src);
+ len = interpret_upstream_mark(name, namelen, at - name, buf);
+ if (len > 0)
+ return len;
}
- free(cp);
- cp = shorten_unambiguous_ref(upstream->merge[0]->dst, 0);
- strbuf_reset(buf);
- strbuf_addstr(buf, cp);
- free(cp);
- return len;
+
+ return -1;
}
int strbuf_branchname(struct strbuf *sb, const char *name)
diff --git a/shallow.c b/shallow.c
index bbc98b55c..0b267b641 100644
--- a/shallow.c
+++ b/shallow.c
@@ -8,9 +8,10 @@
#include "diff.h"
#include "revision.h"
#include "commit-slab.h"
+#include "sigchain.h"
static int is_shallow = -1;
-static struct stat shallow_stat;
+static struct stat_validity shallow_stat;
static char *alternate_shallow_file;
void set_alternate_shallow_file(const char *path, int override)
@@ -52,12 +53,12 @@ int is_repository_shallow(void)
* shallow file should be used. We could just open it and it
* will likely fail. But let's do an explicit check instead.
*/
- if (!*path ||
- stat(path, &shallow_stat) ||
- (fp = fopen(path, "r")) == NULL) {
+ if (!*path || (fp = fopen(path, "r")) == NULL) {
+ stat_validity_clear(&shallow_stat);
is_shallow = 0;
return is_shallow;
}
+ stat_validity_update(&shallow_stat, fileno(fp));
is_shallow = 1;
while (fgets(buf, sizeof(buf), fp)) {
@@ -137,21 +138,11 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth,
void check_shallow_file_for_update(void)
{
- struct stat st;
-
- if (!is_shallow)
- return;
- else if (is_shallow == -1)
+ if (is_shallow == -1)
die("BUG: shallow must be initialized by now");
- if (stat(git_path("shallow"), &st))
- die("shallow file was removed during fetch");
- else if (st.st_mtime != shallow_stat.st_mtime
-#ifdef USE_NSEC
- || ST_MTIME_NSEC(st) != ST_MTIME_NSEC(shallow_stat)
-#endif
- )
- die("shallow file was changed during fetch");
+ if (!stat_validity_check(&shallow_stat, git_path("shallow")))
+ die("shallow file has changed since we read it");
}
#define SEEN_ONLY 1
@@ -216,27 +207,53 @@ int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
return write_shallow_commits_1(out, use_pack_protocol, extra, 0);
}
-char *setup_temporary_shallow(const struct sha1_array *extra)
+static struct strbuf temporary_shallow = STRBUF_INIT;
+
+static void remove_temporary_shallow(void)
+{
+ if (temporary_shallow.len) {
+ unlink_or_warn(temporary_shallow.buf);
+ strbuf_reset(&temporary_shallow);
+ }
+}
+
+static void remove_temporary_shallow_on_signal(int signo)
+{
+ remove_temporary_shallow();
+ sigchain_pop(signo);
+ raise(signo);
+}
+
+const char *setup_temporary_shallow(const struct sha1_array *extra)
{
+ static int installed_handler;
struct strbuf sb = STRBUF_INIT;
int fd;
+ if (temporary_shallow.len)
+ die("BUG: attempt to create two temporary shallow files");
+
if (write_shallow_commits(&sb, 0, extra)) {
- struct strbuf path = STRBUF_INIT;
- strbuf_addstr(&path, git_path("shallow_XXXXXX"));
- fd = xmkstemp(path.buf);
+ strbuf_addstr(&temporary_shallow, git_path("shallow_XXXXXX"));
+ fd = xmkstemp(temporary_shallow.buf);
+
+ if (!installed_handler) {
+ atexit(remove_temporary_shallow);
+ sigchain_push_common(remove_temporary_shallow_on_signal);
+ }
+
if (write_in_full(fd, sb.buf, sb.len) != sb.len)
die_errno("failed to write to %s",
- path.buf);
+ temporary_shallow.buf);
close(fd);
strbuf_release(&sb);
- return strbuf_detach(&path, NULL);
+ return temporary_shallow.buf;
}
/*
* is_repository_shallow() sees empty string as "no shallow
* file".
*/
- return xstrdup("");
+ return temporary_shallow.buf;
}
void setup_alternate_shallow(struct lock_file *shallow_lock,
@@ -246,9 +263,9 @@ void setup_alternate_shallow(struct lock_file *shallow_lock,
struct strbuf sb = STRBUF_INIT;
int fd;
- check_shallow_file_for_update();
fd = hold_lock_file_for_update(shallow_lock, git_path("shallow"),
LOCK_DIE_ON_ERROR);
+ check_shallow_file_for_update();
if (write_shallow_commits(&sb, 0, extra)) {
if (write_in_full(fd, sb.buf, sb.len) != sb.len)
die_errno("failed to write to %s",
@@ -293,9 +310,9 @@ void prune_shallow(int show_only)
strbuf_release(&sb);
return;
}
- check_shallow_file_for_update();
fd = hold_lock_file_for_update(&shallow_lock, git_path("shallow"),
LOCK_DIE_ON_ERROR);
+ check_shallow_file_for_update();
if (write_shallow_commits_1(&sb, 0, NULL, SEEN_ONLY)) {
if (write_in_full(fd, sb.buf, sb.len) != sb.len)
die_errno("failed to write to %s",
diff --git a/strbuf.c b/strbuf.c
index 83caf4a91..ee96dcfb8 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -10,15 +10,6 @@ int starts_with(const char *str, const char *prefix)
return 0;
}
-int prefixcmp(const char *str, const char *prefix)
-{
- for (; ; str++, prefix++)
- if (!*prefix)
- return 0;
- else if (*str != *prefix)
- return (unsigned char)*prefix - (unsigned char)*str;
-}
-
int ends_with(const char *str, const char *suffix)
{
int len = strlen(str), suflen = strlen(suffix);
@@ -28,15 +19,6 @@ int ends_with(const char *str, const char *suffix)
return !strcmp(str + len - suflen, suffix);
}
-int suffixcmp(const char *str, const char *suffix)
-{
- int len = strlen(str), suflen = strlen(suffix);
- if (len < suflen)
- return -1;
- else
- return strcmp(str + len - suflen, suffix);
-}
-
/*
* Used as the default ->buf value, so that people can always assume
* buf is non NULL and ->buf is NUL terminated even for a freshly
diff --git a/strbuf.h b/strbuf.h
index 73e80cea6..39c14cfa3 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -17,20 +17,23 @@ extern void strbuf_init(struct strbuf *, size_t);
extern void strbuf_release(struct strbuf *);
extern char *strbuf_detach(struct strbuf *, size_t *);
extern void strbuf_attach(struct strbuf *, void *, size_t, size_t);
-static inline void strbuf_swap(struct strbuf *a, struct strbuf *b) {
+static inline void strbuf_swap(struct strbuf *a, struct strbuf *b)
+{
struct strbuf tmp = *a;
*a = *b;
*b = tmp;
}
/*----- strbuf size related -----*/
-static inline size_t strbuf_avail(const struct strbuf *sb) {
+static inline size_t strbuf_avail(const struct strbuf *sb)
+{
return sb->alloc ? sb->alloc - sb->len - 1 : 0;
}
extern void strbuf_grow(struct strbuf *, size_t);
-static inline void strbuf_setlen(struct strbuf *sb, size_t len) {
+static inline void strbuf_setlen(struct strbuf *sb, size_t len)
+{
if (len > (sb->alloc ? sb->alloc - 1 : 0))
die("BUG: strbuf_setlen() beyond buffer");
sb->len = len;
@@ -97,7 +100,8 @@ static inline struct strbuf **strbuf_split(const struct strbuf *sb,
extern void strbuf_list_free(struct strbuf **);
/*----- add data in your buffer -----*/
-static inline void strbuf_addch(struct strbuf *sb, int c) {
+static inline void strbuf_addch(struct strbuf *sb, int c)
+{
strbuf_grow(sb, 1);
sb->buf[sb->len++] = c;
sb->buf[sb->len] = '\0';
@@ -113,10 +117,12 @@ extern void strbuf_splice(struct strbuf *, size_t pos, size_t len,
extern void strbuf_add_commented_lines(struct strbuf *out, const char *buf, size_t size);
extern void strbuf_add(struct strbuf *, const void *, size_t);
-static inline void strbuf_addstr(struct strbuf *sb, const char *s) {
+static inline void strbuf_addstr(struct strbuf *sb, const char *s)
+{
strbuf_add(sb, s, strlen(s));
}
-static inline void strbuf_addbuf(struct strbuf *sb, const struct strbuf *sb2) {
+static inline void strbuf_addbuf(struct strbuf *sb, const struct strbuf *sb2)
+{
strbuf_grow(sb, sb2->len);
strbuf_add(sb, sb2->buf, sb2->len);
}
diff --git a/streaming.c b/streaming.c
index 9659f18be..2ff036a0f 100644
--- a/streaming.c
+++ b/streaming.c
@@ -152,8 +152,10 @@ struct git_istream *open_istream(const unsigned char *sha1,
if (filter) {
/* Add "&& !is_null_stream_filter(filter)" for performance */
struct git_istream *nst = attach_stream_filter(st, filter);
- if (!nst)
+ if (!nst) {
close_istream(st);
+ return NULL;
+ }
st = nst;
}
@@ -538,7 +540,7 @@ int stream_blob_to_fd(int fd, unsigned const char *sha1, struct stream_filter *f
goto close_and_exit;
}
if (kept && (lseek(fd, kept - 1, SEEK_CUR) == (off_t) -1 ||
- write(fd, "", 1) != 1))
+ xwrite(fd, "", 1) != 1))
goto close_and_exit;
result = 0;
diff --git a/submodule.c b/submodule.c
index 613857e40..b80ecacf6 100644
--- a/submodule.c
+++ b/submodule.c
@@ -116,30 +116,7 @@ int remove_path_from_gitmodules(const char *path)
void stage_updated_gitmodules(void)
{
- struct strbuf buf = STRBUF_INIT;
- struct stat st;
- int pos;
- struct cache_entry *ce;
- int namelen = strlen(".gitmodules");
-
- pos = cache_name_pos(".gitmodules", namelen);
- if (pos < 0) {
- warning(_("could not find .gitmodules in index"));
- return;
- }
- ce = active_cache[pos];
- ce->ce_flags = namelen;
- if (strbuf_read_file(&buf, ".gitmodules", 0) < 0)
- die(_("reading updated .gitmodules failed"));
- if (lstat(".gitmodules", &st) < 0)
- die_errno(_("unable to stat updated .gitmodules"));
- fill_stat_cache_info(ce, &st);
- ce->ce_mode = ce_mode_from_stat(ce, st.st_mode);
- if (remove_cache_entry_at(pos) < 0)
- die(_("unable to remove .gitmodules from index"));
- if (write_sha1_file(buf.buf, buf.len, blob_type, ce->sha1))
- die(_("adding updated .gitmodules failed"));
- if (add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE))
+ if (add_file_to_cache(".gitmodules", 0))
die(_("staging updated .gitmodules failed"));
}
diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
index 394b06b32..bc4b3412f 100644
--- a/t/lib-git-daemon.sh
+++ b/t/lib-git-daemon.sh
@@ -16,13 +16,14 @@
# stop_git_daemon
# test_done
-if test -z "$GIT_TEST_GIT_DAEMON"
+test_tristate GIT_TEST_GIT_DAEMON
+if test "$GIT_TEST_GIT_DAEMON" = false
then
- skip_all="git-daemon testing disabled (define GIT_TEST_GIT_DAEMON to enable)"
+ skip_all="git-daemon testing disabled (unset GIT_TEST_GIT_DAEMON to enable)"
test_done
fi
-LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-'8121'}
+LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-${this_test#t}}
GIT_DAEMON_PID=
GIT_DAEMON_DOCUMENT_ROOT_PATH="$PWD"/repo
@@ -58,7 +59,8 @@ start_git_daemon() {
kill "$GIT_DAEMON_PID"
wait "$GIT_DAEMON_PID"
trap 'die' EXIT
- error "git daemon failed to start"
+ test_skip_or_die $GIT_TEST_GIT_DAEMON \
+ "git daemon failed to start"
fi
}
diff --git a/t/lib-git-p4.sh b/t/lib-git-p4.sh
index ccd918e79..5aa8adcf9 100644
--- a/t/lib-git-p4.sh
+++ b/t/lib-git-p4.sh
@@ -47,15 +47,22 @@ P4DPORT=$((10669 + ($testid - $git_p4_test_start)))
P4PORT=localhost:$P4DPORT
P4CLIENT=client
-P4EDITOR=:
+P4USER=author
+P4EDITOR=true
unset P4CHARSET
-export P4PORT P4CLIENT P4EDITOR P4CHARSET
+export P4PORT P4CLIENT P4USER P4EDITOR P4CHARSET
db="$TRASH_DIRECTORY/db"
cli="$TRASH_DIRECTORY/cli"
git="$TRASH_DIRECTORY/git"
pidfile="$TRASH_DIRECTORY/p4d.pid"
+# git p4 submit generates a temp file, which will
+# not get cleaned up if the submission fails. Don't
+# clutter up /tmp on the test machine.
+TMPDIR="$TRASH_DIRECTORY"
+export TMPDIR
+
start_p4d() {
mkdir -p "$db" "$cli" "$git" &&
rm -f "$pidfile" &&
@@ -96,12 +103,24 @@ start_p4d() {
return 1
fi
+ # build a p4 user so author@example.com has an entry
+ p4_add_user author
+
# build a client
client_view "//depot/... //client/..." &&
return 0
}
+p4_add_user() {
+ name=$1 &&
+ p4 user -f -i <<-EOF
+ User: $name
+ Email: $name@example.com
+ FullName: Dr. $name
+ EOF
+}
+
kill_p4d() {
pid=$(cat "$pidfile")
# it had better exist for the first kill
diff --git a/t/lib-httpd.sh b/t/lib-httpd.sh
index bfdff2a8c..252cbf163 100644
--- a/t/lib-httpd.sh
+++ b/t/lib-httpd.sh
@@ -30,9 +30,10 @@
# Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>
#
-if test -z "$GIT_TEST_HTTPD"
+test_tristate GIT_TEST_HTTPD
+if test "$GIT_TEST_HTTPD" = false
then
- skip_all="Network testing disabled (define GIT_TEST_HTTPD to enable)"
+ skip_all="Network testing disabled (unset GIT_TEST_HTTPD to enable)"
test_done
fi
@@ -64,7 +65,7 @@ case $(uname) in
esac
LIB_HTTPD_PATH=${LIB_HTTPD_PATH-"$DEFAULT_HTTPD_PATH"}
-LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'8111'}
+LIB_HTTPD_PORT=${LIB_HTTPD_PORT-${this_test#t}}
TEST_PATH="$TEST_DIRECTORY"/lib-httpd
HTTPD_ROOT_PATH="$PWD"/httpd
@@ -76,8 +77,7 @@ GIT_VALGRIND_OPTIONS=$GIT_VALGRIND_OPTIONS; export GIT_VALGRIND_OPTIONS
if ! test -x "$LIB_HTTPD_PATH"
then
- skip_all="skipping test, no web server found at '$LIB_HTTPD_PATH'"
- test_done
+ test_skip_or_die $GIT_TEST_HTTPD "no web server found at '$LIB_HTTPD_PATH'"
fi
HTTPD_VERSION=`$LIB_HTTPD_PATH -v | \
@@ -89,19 +89,20 @@ then
then
if ! test $HTTPD_VERSION -ge 2
then
- skip_all="skipping test, at least Apache version 2 is required"
- test_done
+ test_skip_or_die $GIT_TEST_HTTPD \
+ "at least Apache version 2 is required"
fi
if ! test -d "$DEFAULT_HTTPD_MODULE_PATH"
then
- skip_all="Apache module directory not found. Skipping tests."
- test_done
+ test_skip_or_die $GIT_TEST_HTTPD \
+ "Apache module directory not found"
fi
LIB_HTTPD_MODULE_PATH="$DEFAULT_HTTPD_MODULE_PATH"
fi
else
- error "Could not identify web server at '$LIB_HTTPD_PATH'"
+ test_skip_or_die $GIT_TEST_HTTPD \
+ "Could not identify web server at '$LIB_HTTPD_PATH'"
fi
prepare_httpd() {
@@ -155,9 +156,8 @@ start_httpd() {
>&3 2>&4
if test $? -ne 0
then
- skip_all="skipping test, web server setup failed"
trap 'die' EXIT
- test_done
+ test_skip_or_die $GIT_TEST_HTTPD "web server setup failed"
fi
}
diff --git a/t/perf/p0001-rev-list.sh b/t/perf/p0001-rev-list.sh
index 4f71a63b0..16359d51a 100755
--- a/t/perf/p0001-rev-list.sh
+++ b/t/perf/p0001-rev-list.sh
@@ -14,4 +14,16 @@ test_perf 'rev-list --all --objects' '
git rev-list --all --objects >/dev/null
'
+test_expect_success 'create new unreferenced commit' '
+ commit=$(git commit-tree HEAD^{tree} -p HEAD)
+'
+
+test_perf 'rev-list $commit --not --all' '
+ git rev-list $commit --not --all >/dev/null
+'
+
+test_perf 'rev-list --objects $commit --not --all' '
+ git rev-list --objects $commit --not --all >/dev/null
+'
+
test_done
diff --git a/t/perf/p5310-pack-bitmaps.sh b/t/perf/p5310-pack-bitmaps.sh
new file mode 100755
index 000000000..685d46f8b
--- /dev/null
+++ b/t/perf/p5310-pack-bitmaps.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+test_description='Tests pack performance using bitmaps'
+. ./perf-lib.sh
+
+test_perf_large_repo
+
+# note that we do everything through config,
+# since we want to be able to compare bitmap-aware
+# git versus non-bitmap git
+test_expect_success 'setup bitmap config' '
+ git config pack.writebitmaps true &&
+ git config pack.writebitmaphashcache true
+'
+
+test_perf 'repack to disk' '
+ git repack -ad
+'
+
+test_perf 'simulated clone' '
+ git pack-objects --stdout --all </dev/null >/dev/null
+'
+
+test_perf 'simulated fetch' '
+ have=$(git rev-list HEAD~100 -1) &&
+ {
+ echo HEAD &&
+ echo ^$have
+ } | git pack-objects --revs --stdout >/dev/null
+'
+
+test_expect_success 'create partial bitmap state' '
+ # pick a commit to represent the repo tip in the past
+ cutoff=$(git rev-list HEAD~100 -1) &&
+ orig_tip=$(git rev-parse HEAD) &&
+
+ # now kill off all of the refs and pretend we had
+ # just the one tip
+ rm -rf .git/logs .git/refs/* .git/packed-refs
+ git update-ref HEAD $cutoff
+
+ # and then repack, which will leave us with a nice
+ # big bitmap pack of the "old" history, and all of
+ # the new history will be loose, as if it had been pushed
+ # up incrementally and exploded via unpack-objects
+ git repack -Ad
+
+ # and now restore our original tip, as if the pushes
+ # had happened
+ git update-ref HEAD $orig_tip
+'
+
+test_perf 'partial bitmap' '
+ git pack-objects --stdout --all </dev/null >/dev/null
+'
+
+test_done
diff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh
index b9d79476e..f0fbb4255 100755
--- a/t/t0003-attributes.sh
+++ b/t/t0003-attributes.sh
@@ -243,40 +243,58 @@ EOF
test_line_count = 0 err
'
+test_expect_success 'using --git-dir and --work-tree' '
+ mkdir unreal real &&
+ git init real &&
+ echo "file test=in-real" >real/.gitattributes &&
+ (
+ cd unreal &&
+ attr_check file in-real "--git-dir ../real/.git --work-tree ../real"
+ )
+'
+
test_expect_success 'setup bare' '
- git clone --bare . bare.git &&
- cd bare.git
+ git clone --bare . bare.git
'
test_expect_success 'bare repository: check that .gitattribute is ignored' '
(
- echo "f test=f"
- echo "a/i test=a/i"
- ) >.gitattributes &&
- attr_check f unspecified &&
- attr_check a/f unspecified &&
- attr_check a/c/f unspecified &&
- attr_check a/i unspecified &&
- attr_check subdir/a/i unspecified
+ cd bare.git &&
+ (
+ echo "f test=f"
+ echo "a/i test=a/i"
+ ) >.gitattributes &&
+ attr_check f unspecified &&
+ attr_check a/f unspecified &&
+ attr_check a/c/f unspecified &&
+ attr_check a/i unspecified &&
+ attr_check subdir/a/i unspecified
+ )
'
test_expect_success 'bare repository: check that --cached honors index' '
- GIT_INDEX_FILE=../.git/index \
- git check-attr --cached --stdin --all <../stdin-all |
- sort >actual &&
- test_cmp ../specified-all actual
+ (
+ cd bare.git &&
+ GIT_INDEX_FILE=../.git/index \
+ git check-attr --cached --stdin --all <../stdin-all |
+ sort >actual &&
+ test_cmp ../specified-all actual
+ )
'
test_expect_success 'bare repository: test info/attributes' '
(
- echo "f test=f"
- echo "a/i test=a/i"
- ) >info/attributes &&
- attr_check f f &&
- attr_check a/f f &&
- attr_check a/c/f f &&
- attr_check a/i a/i &&
- attr_check subdir/a/i unspecified
+ cd bare.git &&
+ (
+ echo "f test=f"
+ echo "a/i test=a/i"
+ ) >info/attributes &&
+ attr_check f f &&
+ attr_check a/f f &&
+ attr_check a/c/f f &&
+ attr_check a/i a/i &&
+ attr_check subdir/a/i unspecified
+ )
'
test_done
diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
index b4d98e602..63beb9982 100755
--- a/t/t0008-ignores.sh
+++ b/t/t0008-ignores.sh
@@ -775,4 +775,35 @@ test_expect_success PIPE 'streaming support for --stdin' '
echo "$response" | grep "^:: two"
'
+############################################################################
+#
+# test whitespace handling
+
+test_expect_success 'trailing whitespace is ignored' '
+ mkdir whitespace &&
+ >whitespace/trailing &&
+ >whitespace/untracked &&
+ echo "whitespace/trailing " >ignore &&
+ cat >expect <<EOF &&
+whitespace/untracked
+EOF
+ : >err.expect &&
+ git ls-files -o -X ignore whitespace >actual 2>err &&
+ test_cmp expect actual &&
+ test_cmp err.expect err
+'
+
+test_expect_success !MINGW 'quoting allows trailing whitespace' '
+ rm -rf whitespace &&
+ mkdir whitespace &&
+ >"whitespace/trailing " &&
+ >whitespace/untracked &&
+ echo "whitespace/trailing\\ \\ " >ignore &&
+ echo whitespace/untracked >expect &&
+ : >err.expect &&
+ git ls-files -o -X ignore whitespace >actual 2>err &&
+ test_cmp expect actual &&
+ test_cmp err.expect err
+'
+
test_done
diff --git a/t/t0011-hashmap.sh b/t/t0011-hashmap.sh
new file mode 100755
index 000000000..391e2b649
--- /dev/null
+++ b/t/t0011-hashmap.sh
@@ -0,0 +1,240 @@
+#!/bin/sh
+
+test_description='test hashmap and string hash functions'
+. ./test-lib.sh
+
+test_hashmap() {
+ echo "$1" | test-hashmap $3 > actual &&
+ echo "$2" > expect &&
+ test_cmp expect actual
+}
+
+test_expect_success 'hash functions' '
+
+test_hashmap "hash key1" "2215982743 2215982743 116372151 116372151" &&
+test_hashmap "hash key2" "2215982740 2215982740 116372148 116372148" &&
+test_hashmap "hash fooBarFrotz" "1383912807 1383912807 3189766727 3189766727" &&
+test_hashmap "hash foobarfrotz" "2862305959 2862305959 3189766727 3189766727"
+
+'
+
+test_expect_success 'put' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+put foobarfrotz value4
+size" "NULL
+NULL
+NULL
+NULL
+64 4"
+
+'
+
+test_expect_success 'put (case insensitive)' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+size" "NULL
+NULL
+NULL
+64 3" ignorecase
+
+'
+
+test_expect_success 'replace' '
+
+test_hashmap "put key1 value1
+put key1 value2
+put fooBarFrotz value3
+put fooBarFrotz value4
+size" "NULL
+value1
+NULL
+value3
+64 2"
+
+'
+
+test_expect_success 'replace (case insensitive)' '
+
+test_hashmap "put key1 value1
+put Key1 value2
+put fooBarFrotz value3
+put foobarfrotz value4
+size" "NULL
+value1
+NULL
+value3
+64 2" ignorecase
+
+'
+
+test_expect_success 'get' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+put foobarfrotz value4
+get key1
+get key2
+get fooBarFrotz
+get notInMap" "NULL
+NULL
+NULL
+NULL
+value1
+value2
+value3
+NULL"
+
+'
+
+test_expect_success 'get (case insensitive)' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+get Key1
+get keY2
+get foobarfrotz
+get notInMap" "NULL
+NULL
+NULL
+value1
+value2
+value3
+NULL" ignorecase
+
+'
+
+test_expect_success 'add' '
+
+test_hashmap "add key1 value1
+add key1 value2
+add fooBarFrotz value3
+add fooBarFrotz value4
+get key1
+get fooBarFrotz
+get notInMap" "value2
+value1
+value4
+value3
+NULL"
+
+'
+
+test_expect_success 'add (case insensitive)' '
+
+test_hashmap "add key1 value1
+add Key1 value2
+add fooBarFrotz value3
+add foobarfrotz value4
+get key1
+get Foobarfrotz
+get notInMap" "value2
+value1
+value4
+value3
+NULL" ignorecase
+
+'
+
+test_expect_success 'remove' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+remove key1
+remove key2
+remove notInMap
+size" "NULL
+NULL
+NULL
+value1
+value2
+NULL
+64 1"
+
+'
+
+test_expect_success 'remove (case insensitive)' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+remove Key1
+remove keY2
+remove notInMap
+size" "NULL
+NULL
+NULL
+value1
+value2
+NULL
+64 1" ignorecase
+
+'
+
+test_expect_success 'iterate' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+iterate" "NULL
+NULL
+NULL
+key2 value2
+key1 value1
+fooBarFrotz value3"
+
+'
+
+test_expect_success 'iterate (case insensitive)' '
+
+test_hashmap "put key1 value1
+put key2 value2
+put fooBarFrotz value3
+iterate" "NULL
+NULL
+NULL
+fooBarFrotz value3
+key2 value2
+key1 value1" ignorecase
+
+'
+
+test_expect_success 'grow / shrink' '
+
+ rm -f in &&
+ rm -f expect &&
+ for n in $(test_seq 51)
+ do
+ echo put key$n value$n >> in &&
+ echo NULL >> expect
+ done &&
+ echo size >> in &&
+ echo 64 51 >> expect &&
+ echo put key52 value52 >> in &&
+ echo NULL >> expect
+ echo size >> in &&
+ echo 256 52 >> expect &&
+ for n in $(test_seq 12)
+ do
+ echo remove key$n >> in &&
+ echo value$n >> expect
+ done &&
+ echo size >> in &&
+ echo 256 40 >> expect &&
+ echo remove key40 >> in &&
+ echo value40 >> expect &&
+ echo size >> in &&
+ echo 64 39 >> expect &&
+ cat in | test-hashmap > out &&
+ test_cmp expect out
+
+'
+
+test_done
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index 07c10c8dc..c0143a0a7 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -190,6 +190,27 @@ test_expect_success SYMLINKS 'real path works on symlinks' '
test "$sym" = "$(test-path-utils real_path "$dir2/syml")"
'
+test_expect_success SYMLINKS 'prefix_path works with absolute paths to work tree symlinks' '
+ ln -s target symlink &&
+ test "$(test-path-utils prefix_path prefix "$(pwd)/symlink")" = "symlink"
+'
+
+test_expect_success 'prefix_path works with only absolute path to work tree' '
+ echo "" >expected &&
+ test-path-utils prefix_path prefix "$(pwd)" >actual &&
+ test_cmp expected actual
+'
+
+test_expect_success 'prefix_path rejects absolute path to dir with same beginning as work tree' '
+ test_must_fail test-path-utils prefix_path prefix "$(pwd)a"
+'
+
+test_expect_success SYMLINKS 'prefix_path works with absolute path to a symlink to work tree having same beginning as work tree' '
+ git init repo &&
+ ln -s repo repolink &&
+ test "a" = "$(cd repo && test-path-utils prefix_path prefix "$(pwd)/../repolink/a")"
+'
+
relative_path /foo/a/b/c/ /foo/a/b/ c/
relative_path /foo/a/b/c/ /foo/a/b c/
relative_path /foo/a//b//c/ ///foo/a/b// c/ POSIX
diff --git a/t/t1020-subdirectory.sh b/t/t1020-subdirectory.sh
index 1e2945ec7..6902320e8 100755
--- a/t/t1020-subdirectory.sh
+++ b/t/t1020-subdirectory.sh
@@ -148,7 +148,7 @@ test_expect_success 'GIT_PREFIX for built-ins' '
(
cd dir &&
printf "change" >two &&
- env GIT_EXTERNAL_DIFF=./diff git diff >../actual
+ GIT_EXTERNAL_DIFF=./diff git diff >../actual
git checkout -- two
) &&
test_cmp expect actual
diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
index 967359344..c9c426c27 100755
--- a/t/t1300-repo-config.sh
+++ b/t/t1300-repo-config.sh
@@ -475,15 +475,28 @@ ein.bahn=strasse
EOF
test_expect_success 'alternative GIT_CONFIG' '
- GIT_CONFIG=other-config git config -l >output &&
+ GIT_CONFIG=other-config git config --list >output &&
test_cmp expect output
'
test_expect_success 'alternative GIT_CONFIG (--file)' '
- git config --file other-config -l > output &&
+ git config --file other-config --list >output &&
test_cmp expect output
'
+test_expect_success 'alternative GIT_CONFIG (--file=-)' '
+ git config --file - --list <other-config >output &&
+ test_cmp expect output
+'
+
+test_expect_success 'setting a value in stdin is an error' '
+ test_must_fail git config --file - some.value foo
+'
+
+test_expect_success 'editing stdin is an error' '
+ test_must_fail git config --file - --edit
+'
+
test_expect_success 'refer config from subdirectory' '
mkdir x &&
(
diff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh
index a70707620..9ba2ba11c 100755
--- a/t/t1305-config-include.sh
+++ b/t/t1305-config-include.sh
@@ -113,7 +113,7 @@ test_expect_success 'missing include files are ignored' '
test_expect_success 'absolute includes from command line work' '
echo "[test]one = 1" >one &&
echo 1 >expect &&
- git -c include.path="$PWD/one" config test.one >actual &&
+ git -c include.path="$(pwd)/one" config test.one >actual &&
test_cmp expect actual
'
@@ -122,6 +122,36 @@ test_expect_success 'relative includes from command line fail' '
test_must_fail git -c include.path=one config test.one
'
+test_expect_success 'absolute includes from blobs work' '
+ echo "[test]one = 1" >one &&
+ echo "[include]path=$(pwd)/one" >blob &&
+ blob=$(git hash-object -w blob) &&
+ echo 1 >expect &&
+ git config --blob=$blob test.one >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'relative includes from blobs fail' '
+ echo "[test]one = 1" >one &&
+ echo "[include]path=one" >blob &&
+ blob=$(git hash-object -w blob) &&
+ test_must_fail git config --blob=$blob test.one
+'
+
+test_expect_success 'absolute includes from stdin work' '
+ echo "[test]one = 1" >one &&
+ echo 1 >expect &&
+ echo "[include]path=\"$(pwd)/one\"" |
+ git config --file - test.one >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'relative includes from stdin line fail' '
+ echo "[test]one = 1" >one &&
+ echo "[include]path=one" |
+ test_must_fail git config --file - test.one
+'
+
test_expect_success 'include cycles are detected' '
cat >.gitconfig <<-\EOF &&
[test]value = gitconfig
diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index d730734fd..8c739c961 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -142,6 +142,20 @@ test_expect_success '> in name is reported' '
grep "error in commit $new" out
'
+# date is 2^64 + 1
+test_expect_success 'integer overflow in timestamps is reported' '
+ git cat-file commit HEAD >basis &&
+ sed "s/^\\(author .*>\\) [0-9]*/\\1 18446744073709551617/" \
+ <basis >bad-timestamp &&
+ new=$(git hash-object -t commit -w --stdin <bad-timestamp) &&
+ test_when_finished "remove_object $new" &&
+ git update-ref refs/heads/bogus "$new" &&
+ test_when_finished "git update-ref -d refs/heads/bogus" &&
+ git fsck 2>out &&
+ cat out &&
+ grep "error in commit $new.*integer overflow" out
+'
+
test_expect_success 'tag pointing to nonexistent' '
cat >invalid-tag <<-\EOF &&
object ffffffffffffffffffffffffffffffffffffffff
diff --git a/t/t1507-rev-parse-upstream.sh b/t/t1507-rev-parse-upstream.sh
index 2a19e797e..178694ee6 100755
--- a/t/t1507-rev-parse-upstream.sh
+++ b/t/t1507-rev-parse-upstream.sh
@@ -17,6 +17,9 @@ test_expect_success 'setup' '
test_commit 4 &&
git branch --track my-side origin/side &&
git branch --track local-master master &&
+ git branch --track fun@ny origin/side &&
+ git branch --track @funny origin/side &&
+ git branch --track funny@ origin/side &&
git remote add -t master master-only .. &&
git fetch master-only &&
git branch bad-upstream &&
@@ -54,6 +57,24 @@ test_expect_success 'my-side@{upstream} resolves to correct full name' '
test refs/remotes/origin/side = "$(full_name my-side@{u})"
'
+test_expect_success 'upstream of branch with @ in middle' '
+ full_name fun@ny@{u} >actual &&
+ echo refs/remotes/origin/side >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success 'upstream of branch with @ at start' '
+ full_name @funny@{u} >actual &&
+ echo refs/remotes/origin/side >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success 'upstream of branch with @ at end' '
+ full_name funny@@{u} >actual &&
+ echo refs/remotes/origin/side >expect &&
+ test_cmp expect actual
+'
+
test_expect_success 'refs/heads/my-side@{upstream} does not resolve to my-side{upstream}' '
test_must_fail full_name refs/heads/my-side@{upstream}
'
@@ -210,4 +231,20 @@ test_expect_success 'log -g other@{u}@{now}' '
test_cmp expect actual
'
+test_expect_success '@{reflog}-parsing does not look beyond colon' '
+ echo content >@{yesterday} &&
+ git add @{yesterday} &&
+ git commit -m "funny reflog file" &&
+ git hash-object @{yesterday} >expect &&
+ git rev-parse HEAD:@{yesterday} >actual
+'
+
+test_expect_success '@{upstream}-parsing does not look beyond colon' '
+ echo content >@{upstream} &&
+ git add @{upstream} &&
+ git commit -m "funny upstream file" &&
+ git hash-object @{upstream} >expect &&
+ git rev-parse HEAD:@{upstream} >actual
+'
+
test_done
diff --git a/t/t1508-at-combinations.sh b/t/t1508-at-combinations.sh
index ceb844985..078e1195d 100755
--- a/t/t1508-at-combinations.sh
+++ b/t/t1508-at-combinations.sh
@@ -9,8 +9,11 @@ check() {
if test '$2' = 'commit'
then
git log -1 --format=%s '$1' >actual
- else
+ elif test '$2' = 'ref'
+ then
git rev-parse --symbolic-full-name '$1' >actual
+ else
+ git cat-file -p '$1' >actual
fi &&
test_cmp expect actual
"
@@ -82,4 +85,14 @@ check HEAD ref refs/heads/old-branch
check "HEAD@{1}" commit new-two
check "@{1}" commit old-one
+test_expect_success 'create path with @' '
+ echo content >normal &&
+ echo content >fun@ny &&
+ git add normal fun@ny &&
+ git commit -m "funny path"
+'
+
+check "@:normal" blob content
+check "@:fun@ny" blob content
+
test_done
diff --git a/t/t1600-index.sh b/t/t1600-index.sh
new file mode 100755
index 000000000..079d24114
--- /dev/null
+++ b/t/t1600-index.sh
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+test_description='index file specific tests'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+ echo 1 >a
+'
+
+test_expect_success 'bogus GIT_INDEX_VERSION issues warning' '
+ (
+ rm -f .git/index &&
+ GIT_INDEX_VERSION=2bogus &&
+ export GIT_INDEX_VERSION &&
+ git add a 2>&1 | sed "s/[0-9]//" >actual.err &&
+ sed -e "s/ Z$/ /" <<-\EOF >expect.err &&
+ warning: GIT_INDEX_VERSION set, but the value is invalid.
+ Using version Z
+ EOF
+ test_i18ncmp expect.err actual.err
+ )
+'
+
+test_expect_success 'out of bounds GIT_INDEX_VERSION issues warning' '
+ (
+ rm -f .git/index &&
+ GIT_INDEX_VERSION=1 &&
+ export GIT_INDEX_VERSION &&
+ git add a 2>&1 | sed "s/[0-9]//" >actual.err &&
+ sed -e "s/ Z$/ /" <<-\EOF >expect.err &&
+ warning: GIT_INDEX_VERSION set, but the value is invalid.
+ Using version Z
+ EOF
+ test_i18ncmp expect.err actual.err
+ )
+'
+
+test_expect_success 'no warning with bogus GIT_INDEX_VERSION and existing index' '
+ (
+ GIT_INDEX_VERSION=1 &&
+ export GIT_INDEX_VERSION &&
+ git add a 2>actual.err &&
+ >expect.err &&
+ test_i18ncmp expect.err actual.err
+ )
+'
+
+test_expect_success 'out of bounds index.version issues warning' '
+ (
+ sane_unset GIT_INDEX_VERSION &&
+ rm -f .git/index &&
+ git config --add index.version 1 &&
+ git add a 2>&1 | sed "s/[0-9]//" >actual.err &&
+ sed -e "s/ Z$/ /" <<-\EOF >expect.err &&
+ warning: index.version set, but the value is invalid.
+ Using version Z
+ EOF
+ test_i18ncmp expect.err actual.err
+ )
+'
+
+test_expect_success 'GIT_INDEX_VERSION takes precedence over config' '
+ (
+ rm -f .git/index &&
+ GIT_INDEX_VERSION=4 &&
+ export GIT_INDEX_VERSION &&
+ git config --add index.version 2 &&
+ git add a 2>&1 &&
+ echo 4 >expect &&
+ test-index-version <.git/index >actual &&
+ test_cmp expect actual
+ )
+'
+
+test_done
diff --git a/t/t2104-update-index-skip-worktree.sh b/t/t2104-update-index-skip-worktree.sh
index 1d0879be0..29c1fb10c 100755
--- a/t/t2104-update-index-skip-worktree.sh
+++ b/t/t2104-update-index-skip-worktree.sh
@@ -7,6 +7,8 @@ test_description='skip-worktree bit test'
. ./test-lib.sh
+test_set_index_version 3
+
cat >expect.full <<EOF
H 1
H 2
diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh
index 9bf2bdffd..e16b15d3e 100755
--- a/t/t2200-add-update.sh
+++ b/t/t2200-add-update.sh
@@ -80,18 +80,13 @@ test_expect_success 'change gets noticed' '
'
-# Note that this is scheduled to change in Git 2.0, when
-# "git add -u" will become full-tree by default.
-test_expect_success 'non-limited update in subdir leaves root alone' '
+test_expect_success 'non-qualified update in subdir updates from the root' '
(
cd dir1 &&
echo even more >>sub2 &&
git add -u
) &&
- cat >expect <<-\EOF &&
- check
- top
- EOF
+ : >expect &&
git diff-files --name-only >actual &&
test_cmp expect actual
'
diff --git a/t/t3004-ls-files-basic.sh b/t/t3004-ls-files-basic.sh
index 8d9bc3c2a..9c7adbdbe 100755
--- a/t/t3004-ls-files-basic.sh
+++ b/t/t3004-ls-files-basic.sh
@@ -36,4 +36,21 @@ test_expect_success 'ls-files -h in corrupt repository' '
test_i18ngrep "[Uu]sage: git ls-files " broken/usage
'
+test_expect_success SYMLINKS 'ls-files with absolute paths to symlinks' '
+ mkdir subs &&
+ ln -s nosuch link &&
+ ln -s ../nosuch subs/link &&
+ git add link subs/link &&
+ git ls-files -s link subs/link >expect &&
+ git ls-files -s "$(pwd)/link" "$(pwd)/subs/link" >actual &&
+ test_cmp expect actual &&
+
+ (
+ cd subs &&
+ git ls-files -s link >../expect &&
+ git ls-files -s "$(pwd)/link" >../actual
+ ) &&
+ test_cmp expect actual
+'
+
test_done
diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
index 2f96100a5..82e18548c 100755
--- a/t/t3030-merge-recursive.sh
+++ b/t/t3030-merge-recursive.sh
@@ -257,6 +257,7 @@ test_expect_success 'setup 8' '
git add e &&
test_tick &&
git commit -m "rename a->e" &&
+ c7=$(git rev-parse --verify HEAD) &&
git checkout rename-ln &&
git mv a e &&
test_ln_s_add e a &&
@@ -517,6 +518,52 @@ test_expect_success 'reset and bind merge' '
'
+test_expect_success 'merge-recursive w/ empty work tree - ours has rename' '
+ (
+ GIT_WORK_TREE="$PWD/ours-has-rename-work" &&
+ export GIT_WORK_TREE &&
+ GIT_INDEX_FILE="$PWD/ours-has-rename-index" &&
+ export GIT_INDEX_FILE &&
+ mkdir "$GIT_WORK_TREE" &&
+ git read-tree -i -m $c7 &&
+ git update-index --ignore-missing --refresh &&
+ git merge-recursive $c0 -- $c7 $c3 &&
+ git ls-files -s >actual-files
+ ) 2>actual-err &&
+ >expected-err &&
+ cat >expected-files <<-EOF &&
+ 100644 $o3 0 b/c
+ 100644 $o0 0 c
+ 100644 $o0 0 d/e
+ 100644 $o0 0 e
+ EOF
+ test_cmp expected-files actual-files &&
+ test_cmp expected-err actual-err
+'
+
+test_expect_success 'merge-recursive w/ empty work tree - theirs has rename' '
+ (
+ GIT_WORK_TREE="$PWD/theirs-has-rename-work" &&
+ export GIT_WORK_TREE &&
+ GIT_INDEX_FILE="$PWD/theirs-has-rename-index" &&
+ export GIT_INDEX_FILE &&
+ mkdir "$GIT_WORK_TREE" &&
+ git read-tree -i -m $c3 &&
+ git update-index --ignore-missing --refresh &&
+ git merge-recursive $c0 -- $c3 $c7 &&
+ git ls-files -s >actual-files
+ ) 2>actual-err &&
+ >expected-err &&
+ cat >expected-files <<-EOF &&
+ 100644 $o3 0 b/c
+ 100644 $o0 0 c
+ 100644 $o0 0 d/e
+ 100644 $o0 0 e
+ EOF
+ test_cmp expected-files actual-files &&
+ test_cmp expected-err actual-err
+'
+
test_expect_success 'merge removes empty directories' '
git reset --hard master &&
diff --git a/t/t3070-wildmatch.sh b/t/t3070-wildmatch.sh
index 38446a0e8..ef509df35 100755
--- a/t/t3070-wildmatch.sh
+++ b/t/t3070-wildmatch.sh
@@ -14,19 +14,6 @@ match() {
! test-wildmatch wildmatch '$3' '$4'
"
fi
- if [ $2 = 1 ]; then
- test_expect_success "fnmatch: match '$3' '$4'" "
- test-wildmatch fnmatch '$3' '$4'
- "
- elif [ $2 = 0 ]; then
- test_expect_success "fnmatch: no match '$3' '$4'" "
- ! test-wildmatch fnmatch '$3' '$4'
- "
-# else
-# test_expect_success BROKEN_FNMATCH "fnmatch: '$3' '$4'" "
-# ! test-wildmatch fnmatch '$3' '$4'
-# "
- fi
}
imatch() {
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index fcdb86774..83037b1cd 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -507,6 +507,16 @@ EOF
test_cmp expected actual
'
+test_expect_success '--set-upstream-to notices an error to set branch as own upstream' '
+ git branch --set-upstream-to refs/heads/my13 my13 2>actual &&
+ cat >expected <<-\EOF &&
+ warning: Not setting branch my13 as its own upstream.
+ EOF
+ test_expect_code 1 git config branch.my13.remote &&
+ test_expect_code 1 git config branch.my13.merge &&
+ test_i18ncmp expected actual
+'
+
# Keep this test last, as it changes the current branch
cat >expect <<EOF
$_z40 $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000 branch: Created from master
diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh
index 16de05aff..3bb79a47a 100755
--- a/t/t3301-notes.sh
+++ b/t/t3301-notes.sh
@@ -812,6 +812,33 @@ test_expect_success 'create note from non-existing note with "git notes add -C"
test_must_fail git notes list HEAD
'
+test_expect_success 'create note from non-blob with "git notes add -C" fails' '
+ commit=$(git rev-parse --verify HEAD) &&
+ tree=$(git rev-parse --verify HEAD:) &&
+ test_must_fail git notes add -C $commit &&
+ test_must_fail git notes add -C $tree &&
+ test_must_fail git notes list HEAD
+'
+
+cat > expect << EOF
+commit 80d796defacd5db327b7a4e50099663902fbdc5c
+Author: A U Thor <author@example.com>
+Date: Thu Apr 7 15:20:13 2005 -0700
+
+ 8th
+
+Notes (other):
+ This is a blob object
+EOF
+
+test_expect_success 'create note from blob with "git notes add -C" reuses blob id' '
+ blob=$(echo "This is a blob object" | git hash-object -w --stdin) &&
+ git notes add -C $blob &&
+ git log -1 > actual &&
+ test_cmp expect actual &&
+ test "$(git notes list HEAD)" = "$blob"
+'
+
cat > expect << EOF
commit 016e982bad97eacdbda0fcbd7ce5b0ba87c81f1b
Author: A U Thor <author@example.com>
diff --git a/t/t4010-diff-pathspec.sh b/t/t4010-diff-pathspec.sh
index af5134b70..2bb973655 100755
--- a/t/t4010-diff-pathspec.sh
+++ b/t/t4010-diff-pathspec.sh
@@ -110,4 +110,40 @@ test_expect_success 'diff-tree -r with wildcard' '
test_cmp expected result
'
+test_expect_success 'setup submodules' '
+ test_tick &&
+ git init submod &&
+ ( cd submod && test_commit first; ) &&
+ git add submod &&
+ git commit -m first &&
+ ( cd submod && test_commit second; ) &&
+ git add submod &&
+ git commit -m second
+'
+
+test_expect_success 'diff-tree ignores trailing slash on submodule path' '
+ git diff --name-only HEAD^ HEAD submod >expect &&
+ git diff --name-only HEAD^ HEAD submod/ >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'diff multiple wildcard pathspecs' '
+ mkdir path2 &&
+ echo rezrov >path2/file1 &&
+ git update-index --add path2/file1 &&
+ tree3=`git write-tree` &&
+ git diff --name-only $tree $tree3 -- "path2*1" "path1*1" >actual &&
+ cat <<-\EOF >expect &&
+ path1/file1
+ path2/file1
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'diff-cache ignores trailing slash on submodule path' '
+ git diff --name-only HEAD^ submod >expect &&
+ git diff --name-only HEAD^ submod/ >actual &&
+ test_cmp expect actual
+'
+
test_done
diff --git a/t/t4020-diff-external.sh b/t/t4020-diff-external.sh
index bcae35ac1..044620186 100755
--- a/t/t4020-diff-external.sh
+++ b/t/t4020-diff-external.sh
@@ -226,12 +226,13 @@ keep_only_cr () {
}
test_expect_success 'external diff with autocrlf = true' '
- git config core.autocrlf true &&
+ test_config core.autocrlf true &&
GIT_EXTERNAL_DIFF=./fake-diff.sh git diff &&
test $(wc -l < crlfed.txt) = $(cat crlfed.txt | keep_only_cr | wc -c)
'
test_expect_success 'diff --cached' '
+ test_config core.autocrlf true &&
git add file &&
git update-index --assume-unchanged file &&
echo second >file &&
@@ -239,4 +240,31 @@ test_expect_success 'diff --cached' '
test_cmp "$TEST_DIRECTORY"/t4020/diff.NUL actual
'
+test_expect_success 'clean up crlf leftovers' '
+ git update-index --no-assume-unchanged file &&
+ rm -f file* &&
+ git reset --hard
+'
+
+test_expect_success 'submodule diff' '
+ git init sub &&
+ ( cd sub && test_commit sub1 ) &&
+ git add sub &&
+ test_tick &&
+ git commit -m "add submodule" &&
+ ( cd sub && test_commit sub2 ) &&
+ write_script gather_pre_post.sh <<-\EOF &&
+ echo "$1 $4" # path, mode
+ cat "$2" # old file
+ cat "$5" # new file
+ EOF
+ GIT_EXTERNAL_DIFF=./gather_pre_post.sh git diff >actual &&
+ cat >expected <<-EOF &&
+ sub 160000
+ Subproject commit $(git rev-parse HEAD:sub)
+ Subproject commit $(cd sub && git rev-parse HEAD)
+ EOF
+ test_cmp expected actual
+'
+
test_done
diff --git a/t/t4034/ada/expect b/t/t4034/ada/expect
index be2376e90..a682d288b 100644
--- a/t/t4034/ada/expect
+++ b/t/t4034/ada/expect
@@ -4,7 +4,7 @@
<BOLD>+++ b/post<RESET>
<CYAN>@@ -1,13 +1,13 @@<RESET>
Ada.Text_IO.Put_Line("Hello World<RED>!<RESET><GREEN>?<RESET>");
-1 1e<RED>-<RESET>10 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
+1 <RED>1e-10<RESET><GREEN>1e10<RESET> 16#FE12#E2 3.141_592 '<RED>x<RESET><GREEN>y<RESET>'
<RED>a<RESET><GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET>
<RED>a<RESET><GREEN>y<RESET>
<GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b<RESET>
diff --git a/t/t4035-diff-quiet.sh b/t/t4035-diff-quiet.sh
index 231412d10..e8ae2a03f 100755
--- a/t/t4035-diff-quiet.sh
+++ b/t/t4035-diff-quiet.sh
@@ -148,4 +148,10 @@ test_expect_success 'git diff --ignore-all-space, both files outside repo' '
)
'
+test_expect_success 'git diff --quiet ignores stat-change only entries' '
+ test-chmtime +10 a &&
+ echo modified >>b &&
+ test_expect_code 1 git diff --quiet
+'
+
test_done
diff --git a/t/t4056-diff-order.sh b/t/t4056-diff-order.sh
index 9e2b29ede..c0460bb0e 100755
--- a/t/t4056-diff-order.sh
+++ b/t/t4056-diff-order.sh
@@ -97,4 +97,25 @@ do
'
done
+test_expect_success 'setup for testing combine-diff order' '
+ git checkout -b tmp HEAD~ &&
+ create_files 3 &&
+ git checkout master &&
+ git merge --no-commit -s ours tmp &&
+ create_files 5
+'
+
+test_expect_success "combine-diff: no order (=tree object order)" '
+ git diff --name-only HEAD HEAD^ HEAD^2 >actual &&
+ test_cmp expect_none actual
+'
+
+for i in 1 2
+do
+ test_expect_success "combine-diff: orderfile using option ($i)" '
+ git diff -Oorder_file_$i --name-only HEAD HEAD^ HEAD^2 >actual &&
+ test_cmp expect_$i actual
+ '
+done
+
test_done
diff --git a/t/t4057-diff-combined-paths.sh b/t/t4057-diff-combined-paths.sh
new file mode 100755
index 000000000..097e63215
--- /dev/null
+++ b/t/t4057-diff-combined-paths.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+
+test_description='combined diff show only paths that are different to all parents'
+
+. ./test-lib.sh
+
+# verify that diffc.expect matches output of
+# `git diff -c --name-only HEAD HEAD^ HEAD^2`
+diffc_verify () {
+ git diff -c --name-only HEAD HEAD^ HEAD^2 >diffc.actual &&
+ test_cmp diffc.expect diffc.actual
+}
+
+test_expect_success 'trivial merge - combine-diff empty' '
+ for i in $(test_seq 1 9)
+ do
+ echo $i >$i.txt &&
+ git add $i.txt
+ done &&
+ git commit -m "init" &&
+ git checkout -b side &&
+ for i in $(test_seq 2 9)
+ do
+ echo $i/2 >>$i.txt
+ done &&
+ git commit -a -m "side 2-9" &&
+ git checkout master &&
+ echo 1/2 >1.txt &&
+ git commit -a -m "master 1" &&
+ git merge side &&
+ >diffc.expect &&
+ diffc_verify
+'
+
+
+test_expect_success 'only one trully conflicting path' '
+ git checkout side &&
+ for i in $(test_seq 2 9)
+ do
+ echo $i/3 >>$i.txt
+ done &&
+ echo "4side" >>4.txt &&
+ git commit -a -m "side 2-9 +4" &&
+ git checkout master &&
+ for i in $(test_seq 1 9)
+ do
+ echo $i/3 >>$i.txt
+ done &&
+ echo "4master" >>4.txt &&
+ git commit -a -m "master 1-9 +4" &&
+ test_must_fail git merge side &&
+ cat <<-\EOF >4.txt &&
+ 4
+ 4/2
+ 4/3
+ 4master
+ 4side
+ EOF
+ git add 4.txt &&
+ git commit -m "merge side (2)" &&
+ echo 4.txt >diffc.expect &&
+ diffc_verify
+'
+
+test_expect_success 'merge introduces new file' '
+ git checkout side &&
+ for i in $(test_seq 5 9)
+ do
+ echo $i/4 >>$i.txt
+ done &&
+ git commit -a -m "side 5-9" &&
+ git checkout master &&
+ for i in $(test_seq 1 3)
+ do
+ echo $i/4 >>$i.txt
+ done &&
+ git commit -a -m "master 1-3 +4hello" &&
+ git merge side &&
+ echo "Hello World" >4hello.txt &&
+ git add 4hello.txt &&
+ git commit --amend &&
+ echo 4hello.txt >diffc.expect &&
+ diffc_verify
+'
+
+test_expect_success 'merge removed a file' '
+ git checkout side &&
+ for i in $(test_seq 5 9)
+ do
+ echo $i/5 >>$i.txt
+ done &&
+ git commit -a -m "side 5-9" &&
+ git checkout master &&
+ for i in $(test_seq 1 3)
+ do
+ echo $i/4 >>$i.txt
+ done &&
+ git commit -a -m "master 1-3" &&
+ git merge side &&
+ git rm 4.txt &&
+ git commit --amend &&
+ echo 4.txt >diffc.expect &&
+ diffc_verify
+'
+
+test_done
diff --git a/t/t4212-log-corrupt.sh b/t/t4212-log-corrupt.sh
index 93c7c366c..3fa171541 100755
--- a/t/t4212-log-corrupt.sh
+++ b/t/t4212-log-corrupt.sh
@@ -44,4 +44,49 @@ test_expect_success 'git log --format with broken author email' '
test_cmp expect.err actual.err
'
+munge_author_date () {
+ git cat-file commit "$1" >commit.orig &&
+ sed "s/^\(author .*>\) [0-9]*/\1 $2/" <commit.orig >commit.munge &&
+ git hash-object -w -t commit commit.munge
+}
+
+test_expect_success 'unparsable dates produce sentinel value' '
+ commit=$(munge_author_date HEAD totally_bogus) &&
+ echo "Date: Thu Jan 1 00:00:00 1970 +0000" >expect &&
+ git log -1 $commit >actual.full &&
+ grep Date <actual.full >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'unparsable dates produce sentinel value (%ad)' '
+ commit=$(munge_author_date HEAD totally_bogus) &&
+ echo >expect &&
+ git log -1 --format=%ad $commit >actual
+ test_cmp expect actual
+'
+
+# date is 2^64 + 1
+test_expect_success 'date parser recognizes integer overflow' '
+ commit=$(munge_author_date HEAD 18446744073709551617) &&
+ echo "Thu Jan 1 00:00:00 1970 +0000" >expect &&
+ git log -1 --format=%ad $commit >actual &&
+ test_cmp expect actual
+'
+
+# date is 2^64 - 2
+test_expect_success 'date parser recognizes time_t overflow' '
+ commit=$(munge_author_date HEAD 18446744073709551614) &&
+ echo "Thu Jan 1 00:00:00 1970 +0000" >expect &&
+ git log -1 --format=%ad $commit >actual &&
+ test_cmp expect actual
+'
+
+# date is within 2^63-1, but enough to choke glibc's gmtime
+test_expect_success 'absurdly far-in-future dates produce sentinel' '
+ commit=$(munge_author_date HEAD 999999999999999999) &&
+ echo "Thu Jan 1 00:00:00 1970 +0000" >expect &&
+ git log -1 --format=%ad $commit >actual &&
+ test_cmp expect actual
+'
+
test_done
diff --git a/t/t5000-tar-tree.sh b/t/t5000-tar-tree.sh
index 05f011d38..1cf0a4e10 100755
--- a/t/t5000-tar-tree.sh
+++ b/t/t5000-tar-tree.sh
@@ -213,6 +213,15 @@ test_expect_success 'clients cannot access unreachable commits' '
test_must_fail git archive --remote=. $sha1 >remote.tar
'
+test_expect_success 'upload-archive can allow unreachable commits' '
+ test_commit unreachable1 &&
+ sha1=`git rev-parse HEAD` &&
+ git reset --hard HEAD^ &&
+ git archive $sha1 >remote.tar &&
+ test_config uploadarchive.allowUnreachable true &&
+ git archive --remote=. $sha1 >remote.tar
+'
+
test_expect_success 'setup tar filters' '
git config tar.tar.foo.command "tr ab ba" &&
git config tar.bar.command "tr ab ba" &&
diff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh
new file mode 100755
index 000000000..d3a3afaba
--- /dev/null
+++ b/t/t5310-pack-bitmaps.sh
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+test_description='exercise basic bitmap functionality'
+. ./test-lib.sh
+
+test_expect_success 'setup repo with moderate-sized history' '
+ for i in $(test_seq 1 10); do
+ test_commit $i
+ done &&
+ git checkout -b other HEAD~5 &&
+ for i in $(test_seq 1 10); do
+ test_commit side-$i
+ done &&
+ git checkout master &&
+ blob=$(echo tagged-blob | git hash-object -w --stdin) &&
+ git tag tagged-blob $blob &&
+ git config pack.writebitmaps true &&
+ git config pack.writebitmaphashcache true
+'
+
+test_expect_success 'full repack creates bitmaps' '
+ git repack -ad &&
+ ls .git/objects/pack/ | grep bitmap >output &&
+ test_line_count = 1 output
+'
+
+test_expect_success 'rev-list --test-bitmap verifies bitmaps' '
+ git rev-list --test-bitmap HEAD
+'
+
+rev_list_tests() {
+ state=$1
+
+ test_expect_success "counting commits via bitmap ($state)" '
+ git rev-list --count HEAD >expect &&
+ git rev-list --use-bitmap-index --count HEAD >actual &&
+ test_cmp expect actual
+ '
+
+ test_expect_success "counting partial commits via bitmap ($state)" '
+ git rev-list --count HEAD~5..HEAD >expect &&
+ git rev-list --use-bitmap-index --count HEAD~5..HEAD >actual &&
+ test_cmp expect actual
+ '
+
+ test_expect_success "counting non-linear history ($state)" '
+ git rev-list --count other...master >expect &&
+ git rev-list --use-bitmap-index --count other...master >actual &&
+ test_cmp expect actual
+ '
+
+ test_expect_success "enumerate --objects ($state)" '
+ git rev-list --objects --use-bitmap-index HEAD >tmp &&
+ cut -d" " -f1 <tmp >tmp2 &&
+ sort <tmp2 >actual &&
+ git rev-list --objects HEAD >tmp &&
+ cut -d" " -f1 <tmp >tmp2 &&
+ sort <tmp2 >expect &&
+ test_cmp expect actual
+ '
+
+ test_expect_success "bitmap --objects handles non-commit objects ($state)" '
+ git rev-list --objects --use-bitmap-index HEAD tagged-blob >actual &&
+ grep $blob actual
+ '
+}
+
+rev_list_tests 'full bitmap'
+
+test_expect_success 'clone from bitmapped repository' '
+ git clone --no-local --bare . clone.git &&
+ git rev-parse HEAD >expect &&
+ git --git-dir=clone.git rev-parse HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'setup further non-bitmapped commits' '
+ for i in $(test_seq 1 10); do
+ test_commit further-$i
+ done
+'
+
+rev_list_tests 'partial bitmap'
+
+test_expect_success 'fetch (partial bitmap)' '
+ git --git-dir=clone.git fetch origin master:master &&
+ git rev-parse HEAD >expect &&
+ git --git-dir=clone.git rev-parse HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'incremental repack cannot create bitmaps' '
+ test_commit more-1 &&
+ test_must_fail git repack -d
+'
+
+test_expect_success 'incremental repack can disable bitmaps' '
+ test_commit more-2 &&
+ git repack -d --no-write-bitmap-index
+'
+
+test_expect_success 'full repack, reusing previous bitmaps' '
+ git repack -ad &&
+ ls .git/objects/pack/ | grep bitmap >output &&
+ test_line_count = 1 output
+'
+
+test_expect_success 'fetch (full bitmap)' '
+ git --git-dir=clone.git fetch origin master:master &&
+ git rev-parse HEAD >expect &&
+ git --git-dir=clone.git rev-parse HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_lazy_prereq JGIT '
+ type jgit
+'
+
+test_expect_success JGIT 'we can read jgit bitmaps' '
+ git clone . compat-jgit &&
+ (
+ cd compat-jgit &&
+ rm -f .git/objects/pack/*.bitmap &&
+ jgit gc &&
+ git rev-list --test-bitmap HEAD
+ )
+'
+
+test_expect_success JGIT 'jgit can read our bitmaps' '
+ git clone . compat-us &&
+ (
+ cd compat-us &&
+ git repack -adb &&
+ # jgit gc will barf if it does not like our bitmaps
+ jgit gc
+ )
+'
+
+test_done
diff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh
index 129fc88bd..0736bcbcd 100755
--- a/t/t5400-send-pack.sh
+++ b/t/t5400-send-pack.sh
@@ -164,6 +164,7 @@ test_expect_success 'receive-pack runs auto-gc in remote repo' '
# Set the child to auto-pack if more than one pack exists
cd child &&
git config gc.autopacklimit 1 &&
+ git config gc.autodetach false &&
git branch test_auto_gc &&
# And create a file that follows the temporary object naming
# convention for the auto-gc to remove
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 12674ac09..ab28594c6 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -640,4 +640,15 @@ test_expect_success 'branchname D/F conflict resolved by --prune' '
test_cmp expect actual
'
+test_expect_success 'fetching a one-level ref works' '
+ test_commit extra &&
+ git reset --hard HEAD^ &&
+ git update-ref refs/foo extra &&
+ git init one-level &&
+ (
+ cd one-level &&
+ git fetch .. HEAD refs/foo
+ )
+'
+
test_done
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 926e7f6b9..67e0ab346 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -536,6 +536,19 @@ test_expect_success 'push with config branch.*.pushremote' '
check_push_result down_repo $the_commit heads/master
'
+test_expect_success 'branch.*.pushremote config order is irrelevant' '
+ mk_test one_repo heads/master &&
+ mk_test two_repo heads/master &&
+ test_config remote.one.url one_repo &&
+ test_config remote.two.url two_repo &&
+ test_config branch.master.pushremote two_repo &&
+ test_config remote.pushdefault one_repo &&
+ test_config push.default matching &&
+ git push &&
+ check_push_result one_repo $the_first_commit heads/master &&
+ check_push_result two_repo $the_commit heads/master
+'
+
test_expect_success 'push with dry-run' '
mk_test testrepo heads/master &&
diff --git a/t/t5529-push-errors.sh b/t/t5529-push-errors.sh
new file mode 100755
index 000000000..9871307fd
--- /dev/null
+++ b/t/t5529-push-errors.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+test_description='detect some push errors early (before contacting remote)'
+. ./test-lib.sh
+
+test_expect_success 'setup commits' '
+ test_commit one
+'
+
+test_expect_success 'setup remote' '
+ git init --bare remote.git &&
+ git remote add origin remote.git
+'
+
+test_expect_success 'setup fake receive-pack' '
+ FAKE_RP_ROOT=$(pwd) &&
+ export FAKE_RP_ROOT &&
+ write_script fake-rp <<-\EOF &&
+ echo yes >"$FAKE_RP_ROOT"/rp-ran
+ exit 1
+ EOF
+ git config remote.origin.receivepack "\"\$FAKE_RP_ROOT/fake-rp\""
+'
+
+test_expect_success 'detect missing branches early' '
+ echo no >rp-ran &&
+ echo no >expect &&
+ test_must_fail git push origin missing &&
+ test_cmp expect rp-ran
+'
+
+test_expect_success 'detect missing sha1 expressions early' '
+ echo no >rp-ran &&
+ echo no >expect &&
+ test_must_fail git push origin master~2:master &&
+ test_cmp expect rp-ran
+'
+
+test_expect_success 'detect ambiguous refs early' '
+ git branch foo &&
+ git tag foo &&
+ echo no >rp-ran &&
+ echo no >expect &&
+ test_must_fail git push origin foo &&
+ test_cmp expect rp-ran
+'
+
+test_done
diff --git a/t/t5537-fetch-shallow.sh b/t/t5537-fetch-shallow.sh
index b0fa7387c..be951a467 100755
--- a/t/t5537-fetch-shallow.sh
+++ b/t/t5537-fetch-shallow.sh
@@ -200,5 +200,18 @@ EOF
)
'
+test_expect_success POSIXPERM,SANITY 'shallow fetch from a read-only repo' '
+ cp -R .git read-only.git &&
+ find read-only.git -print | xargs chmod -w &&
+ test_when_finished "find read-only.git -type d -print | xargs chmod +w" &&
+ git clone --no-local --depth=2 read-only.git from-read-only &&
+ git --git-dir=from-read-only/.git log --format=%s >actual &&
+ cat >expect <<EOF &&
+add-1-back
+4
+EOF
+ test_cmp expect actual
+'
+
stop_httpd
test_done
diff --git a/t/t5538-push-shallow.sh b/t/t5538-push-shallow.sh
index 0a6e40f14..8e54ac574 100755
--- a/t/t5538-push-shallow.sh
+++ b/t/t5538-push-shallow.sh
@@ -126,7 +126,6 @@ if test -n "$NO_CURL" -o -z "$GIT_TEST_HTTPD"; then
test_done
fi
-LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5537'}
. "$TEST_DIRECTORY"/lib-httpd.sh
start_httpd
diff --git a/t/t5539-fetch-http-shallow.sh b/t/t5539-fetch-http-shallow.sh
new file mode 100755
index 000000000..94553e103
--- /dev/null
+++ b/t/t5539-fetch-http-shallow.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+test_description='fetch/clone from a shallow clone over http'
+
+. ./test-lib.sh
+
+if test -n "$NO_CURL"; then
+ skip_all='skipping test, git built without http support'
+ test_done
+fi
+
+. "$TEST_DIRECTORY"/lib-httpd.sh
+start_httpd
+
+commit() {
+ echo "$1" >tracked &&
+ git add tracked &&
+ git commit -m "$1"
+}
+
+test_expect_success 'setup shallow clone' '
+ commit 1 &&
+ commit 2 &&
+ commit 3 &&
+ commit 4 &&
+ commit 5 &&
+ commit 6 &&
+ commit 7 &&
+ git clone --no-local --depth=5 .git shallow &&
+ git config --global transfer.fsckObjects true
+'
+
+test_expect_success 'clone http repository' '
+ git clone --bare --no-local shallow "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+ git clone $HTTPD_URL/smart/repo.git clone &&
+ (
+ cd clone &&
+ git fsck &&
+ git log --format=%s origin/master >actual &&
+ cat <<EOF >expect &&
+7
+6
+5
+4
+3
+EOF
+ test_cmp expect actual
+ )
+'
+
+# This test is tricky. We need large enough "have"s that fetch-pack
+# will put pkt-flush in between. Then we need a "have" the server
+# does not have, it'll send "ACK %s ready"
+test_expect_success 'no shallow lines after receiving ACK ready' '
+ (
+ cd shallow &&
+ for i in $(test_seq 15)
+ do
+ git checkout --orphan unrelated$i &&
+ test_commit unrelated$i &&
+ git push -q "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \
+ refs/heads/unrelated$i:refs/heads/unrelated$i &&
+ git push -q ../clone/.git \
+ refs/heads/unrelated$i:refs/heads/unrelated$i ||
+ exit 1
+ done &&
+ git checkout master &&
+ test_commit new &&
+ git push "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" master
+ ) &&
+ (
+ cd clone &&
+ git checkout --orphan newnew &&
+ test_commit new-too &&
+ GIT_TRACE_PACKET="$TRASH_DIRECTORY/trace" git fetch --depth=2 &&
+ grep "fetch-pack< ACK .* ready" ../trace &&
+ ! grep "fetch-pack> done" ../trace
+ )
+'
+
+stop_httpd
+test_done
diff --git a/t/t5540-http-push.sh b/t/t5540-http-push-webdav.sh
index 5b0198cbc..8d7b3c57e 100755
--- a/t/t5540-http-push.sh
+++ b/t/t5540-http-push-webdav.sh
@@ -16,7 +16,6 @@ then
fi
LIB_HTTPD_DAV=t
-LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5540'}
. "$TEST_DIRECTORY"/lib-httpd.sh
ROOT_PATH="$PWD"
start_httpd
diff --git a/t/t5541-http-push.sh b/t/t5541-http-push-smart.sh
index bfd241ea8..73af16f48 100755
--- a/t/t5541-http-push.sh
+++ b/t/t5541-http-push-smart.sh
@@ -12,7 +12,6 @@ if test -n "$NO_CURL"; then
fi
ROOT_PATH="$PWD"
-LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5541'}
. "$TEST_DIRECTORY"/lib-httpd.sh
. "$TEST_DIRECTORY"/lib-terminal.sh
start_httpd
diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch-dumb.sh
index 839262471..1a3a2b6c1 100755
--- a/t/t5550-http-fetch.sh
+++ b/t/t5550-http-fetch-dumb.sh
@@ -8,7 +8,6 @@ if test -n "$NO_CURL"; then
test_done
fi
-LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'}
. "$TEST_DIRECTORY"/lib-httpd.sh
start_httpd
diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch-smart.sh
index a124efe11..e07eaf35f 100755
--- a/t/t5551-http-fetch.sh
+++ b/t/t5551-http-fetch-smart.sh
@@ -8,7 +8,6 @@ if test -n "$NO_CURL"; then
test_done
fi
-LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5551'}
. "$TEST_DIRECTORY"/lib-httpd.sh
start_httpd
diff --git a/t/t5561-http-backend.sh b/t/t5561-http-backend.sh
index b5d7fbc38..d23fb0238 100755
--- a/t/t5561-http-backend.sh
+++ b/t/t5561-http-backend.sh
@@ -8,7 +8,6 @@ if test -n "$NO_CURL"; then
test_done
fi
-LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5561'}
. "$TEST_DIRECTORY"/lib-httpd.sh
start_httpd
diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
index e06146835..6b1637995 100755
--- a/t/t5570-git-daemon.sh
+++ b/t/t5570-git-daemon.sh
@@ -3,7 +3,6 @@
test_description='test fetching over git protocol'
. ./test-lib.sh
-LIB_GIT_DAEMON_PORT=${LIB_GIT_DAEMON_PORT-5570}
. "$TEST_DIRECTORY"/lib-git-daemon.sh
start_git_daemon
diff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh
index 613f69a25..c33cc2580 100755
--- a/t/t5801-remote-helpers.sh
+++ b/t/t5801-remote-helpers.sh
@@ -94,6 +94,19 @@ test_expect_failure 'push new branch with old:new refspec' '
compare_refs local HEAD server refs/heads/new-refspec
'
+test_expect_success 'forced push' '
+ (cd local &&
+ git checkout -b force-test &&
+ echo content >> file &&
+ git commit -a -m eight &&
+ git push origin force-test &&
+ echo content >> file &&
+ git commit -a --amend -m eight-modified &&
+ git push --force origin force-test
+ ) &&
+ compare_refs local refs/heads/force-test server refs/heads/force-test
+'
+
test_expect_success 'cloning without refspec' '
GIT_REMOTE_TESTGIT_REFSPEC="" \
git clone "testgit::${PWD}/server" local2 2>error &&
diff --git a/t/t6000-rev-list-misc.sh b/t/t6000-rev-list-misc.sh
index 15e3d6476..3794e4cea 100755
--- a/t/t6000-rev-list-misc.sh
+++ b/t/t6000-rev-list-misc.sh
@@ -56,4 +56,21 @@ test_expect_success 'rev-list A..B and rev-list ^A B are the same' '
test_cmp expect actual
'
+test_expect_success 'propagate uninteresting flag down correctly' '
+ git rev-list --objects ^HEAD^{tree} HEAD^{tree} >actual &&
+ >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success 'symleft flag bit is propagated down from tag' '
+ git log --format="%m %s" --left-right v1.0...master >actual &&
+ cat >expect <<-\EOF &&
+ > two
+ > one
+ < another
+ < that
+ EOF
+ test_cmp expect actual
+'
+
test_done
diff --git a/t/t6131-pathspec-icase.sh b/t/t6131-pathspec-icase.sh
index a7c7ff5f4..39fc3f676 100755
--- a/t/t6131-pathspec-icase.sh
+++ b/t/t6131-pathspec-icase.sh
@@ -69,7 +69,7 @@ test_expect_success 'tree_entry_interesting matches :(icase)bar with empty prefi
test_cmp expect actual
'
-test_expect_success 'match_pathspec_depth matches :(icase)bar' '
+test_expect_success 'match_pathspec matches :(icase)bar' '
cat <<-EOF >expect &&
BAR
bAr
@@ -79,7 +79,7 @@ test_expect_success 'match_pathspec_depth matches :(icase)bar' '
test_cmp expect actual
'
-test_expect_success 'match_pathspec_depth matches :(icase)bar with prefix' '
+test_expect_success 'match_pathspec matches :(icase)bar with prefix' '
cat <<-EOF >expect &&
fOo/BAR
fOo/bAr
@@ -89,7 +89,7 @@ test_expect_success 'match_pathspec_depth matches :(icase)bar with prefix' '
test_cmp expect actual
'
-test_expect_success 'match_pathspec_depth matches :(icase)bar with empty prefix' '
+test_expect_success 'match_pathspec matches :(icase)bar with empty prefix' '
cat <<-EOF >expect &&
bar
fOo/BAR
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index c8d6e9f88..143a8ea60 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -1380,4 +1380,47 @@ test_expect_success 'multiple --points-at are OR-ed together' '
test_cmp expect actual
'
+test_expect_success 'lexical sort' '
+ git tag foo1.3 &&
+ git tag foo1.6 &&
+ git tag foo1.10 &&
+ git tag -l --sort=refname "foo*" >actual &&
+ cat >expect <<EOF &&
+foo1.10
+foo1.3
+foo1.6
+EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'version sort' '
+ git tag -l --sort=version:refname "foo*" >actual &&
+ cat >expect <<EOF &&
+foo1.3
+foo1.6
+foo1.10
+EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'reverse version sort' '
+ git tag -l --sort=-version:refname "foo*" >actual &&
+ cat >expect <<EOF &&
+foo1.10
+foo1.6
+foo1.3
+EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'reverse lexical sort' '
+ git tag -l --sort=-refname "foo*" >actual &&
+ cat >expect <<EOF &&
+foo1.6
+foo1.3
+foo1.10
+EOF
+ test_cmp expect actual
+'
+
test_done
diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh
index 7fe3367b6..b9365b431 100755
--- a/t/t7006-pager.sh
+++ b/t/t7006-pager.sh
@@ -40,7 +40,7 @@ test_expect_failure TTY 'pager runs from subdir' '
test_expect_success TTY 'LESS and LV envvars are set for pagination' '
(
sane_unset LESS LV &&
- PAGER="env >pager-env.out" &&
+ PAGER="env >pager-env.out; wc" &&
export PAGER &&
test_terminal git log
diff --git a/t/t7060-wtstatus.sh b/t/t7060-wtstatus.sh
index 7d467c034..741ec0857 100755
--- a/t/t7060-wtstatus.sh
+++ b/t/t7060-wtstatus.sh
@@ -38,7 +38,7 @@ You have unmerged paths.
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
- deleted by us: foo
+ deleted by us: foo
no changes added to commit (use "git add" and/or "git commit -a")
EOF
@@ -142,8 +142,8 @@ You have unmerged paths.
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
- both added: conflict.txt
- deleted by them: main.txt
+ both added: conflict.txt
+ deleted by them: main.txt
no changes added to commit (use "git add" and/or "git commit -a")
EOF
@@ -175,9 +175,9 @@ You have unmerged paths.
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
- both deleted: main.txt
- added by them: sub_master.txt
- added by us: sub_second.txt
+ both deleted: main.txt
+ added by them: sub_master.txt
+ added by us: sub_second.txt
no changes added to commit (use "git add" and/or "git commit -a")
EOF
@@ -203,7 +203,7 @@ Changes to be committed:
Unmerged paths:
(use "git rm <file>..." to mark resolution)
- both deleted: main.txt
+ both deleted: main.txt
Untracked files not listed (use -u option to show untracked files)
EOF
diff --git a/t/t7101-reset.sh b/t/t7101-reset-empty-subdirs.sh
index 96e163f08..96e163f08 100755
--- a/t/t7101-reset.sh
+++ b/t/t7101-reset-empty-subdirs.sh
diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 8d4b50d1b..450529404 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -535,4 +535,30 @@ test_expect_success 'reset with paths accepts tree' '
git diff HEAD --exit-code
'
+test_expect_success 'reset -N keeps removed files as intent-to-add' '
+ echo new-file >new-file &&
+ git add new-file &&
+ git reset -N HEAD &&
+
+ tree=$(git write-tree) &&
+ git ls-tree $tree new-file >actual &&
+ >expect &&
+ test_cmp expect actual &&
+
+ git diff --name-only >actual &&
+ echo new-file >expect &&
+ test_cmp expect actual
+'
+
+test_expect_success 'reset --mixed sets up work tree' '
+ git init mixed_worktree &&
+ (
+ cd mixed_worktree &&
+ test_commit dummy
+ ) &&
+ : >expect &&
+ git --git-dir=mixed_worktree/.git --work-tree=mixed_worktree reset >actual &&
+ test_cmp expect actual
+'
+
test_done
diff --git a/t/t7104-reset.sh b/t/t7104-reset-hard.sh
index f136ee7bb..f136ee7bb 100755
--- a/t/t7104-reset.sh
+++ b/t/t7104-reset-hard.sh
diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh
index 710be9048..74de814ae 100755
--- a/t/t7300-clean.sh
+++ b/t/t7300-clean.sh
@@ -511,4 +511,20 @@ test_expect_success SANITY 'git clean -d with an unreadable empty directory' '
! test -d foo
'
+test_expect_success 'git clean -d respects pathspecs (dir is prefix of pathspec)' '
+ mkdir -p foo &&
+ mkdir -p foobar &&
+ git clean -df foobar &&
+ test_path_is_dir foo &&
+ test_path_is_missing foobar
+'
+
+test_expect_success 'git clean -d respects pathspecs (pathspec is prefix of dir)' '
+ mkdir -p foo &&
+ mkdir -p foobar &&
+ git clean -df foo &&
+ test_path_is_missing foo &&
+ test_path_is_dir foobar
+'
+
test_done
diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
index 0246e80b1..28ca76384 100755
--- a/t/t7406-submodule-update.sh
+++ b/t/t7406-submodule-update.sh
@@ -63,6 +63,9 @@ test_expect_success 'setup a submodule tree' '
git submodule add ../none none &&
test_tick &&
git commit -m "none"
+ ) &&
+ (cd super &&
+ git tag initial-setup
)
'
@@ -703,7 +706,7 @@ test_expect_success 'submodule update places git-dir in superprojects git-dir re
git clone super_update_r super_update_r2 &&
(cd super_update_r2 &&
git submodule update --init --recursive >actual &&
- test_i18ngrep "Submodule path .submodule/subsubmodule.: checked out" actual &&
+ test_i18ngrep "Submodule path .submodule/subsubmodule.: .git reset --hard -q" actual &&
(cd submodule/subsubmodule &&
git log > ../../expected
) &&
@@ -775,4 +778,37 @@ test_expect_success 'submodule update --recursive drops module name before recur
)
'
+test_expect_success 'submodule update --checkout clones detached HEAD' '
+ git clone super super4 &&
+ echo "detached HEAD" >expected &&
+ (cd super4 &&
+ git reset --hard initial-setup &&
+ git submodule init submodule &&
+ git submodule update >> /tmp/log 2>&1 &&
+ (cd submodule &&
+ git symbolic-ref HEAD > ../../actual ||
+ echo "detached HEAD" > ../../actual
+ )
+ ) &&
+ test_cmp actual expected &&
+ rm -rf super4
+'
+
+test_expect_success 'submodule update --merge clones attached HEAD' '
+ git clone super super4 &&
+ echo "refs/heads/master" >expected &&
+ (cd super4 &&
+ git reset --hard initial-setup &&
+ git submodule init submodule &&
+ git config submodule.submodule.update merge &&
+ git submodule update --merge &&
+ (cd submodule &&
+ git symbolic-ref HEAD > ../../actual ||
+ echo "detached HEAD" > ../../actual
+ )
+ ) &&
+ test_cmp actual expected &&
+ rm -rf super4
+'
+
test_done
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
index f04798f87..d58b097ff 100755
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh
@@ -57,14 +57,51 @@ test_expect_success 'using invalid commit with -C' '
'
test_expect_success 'nothing to commit' '
+ git reset --hard &&
test_must_fail git commit -m initial
'
+test_expect_success '--dry-run fails with nothing to commit' '
+ test_must_fail git commit -m initial --dry-run
+'
+
+test_expect_success '--short fails with nothing to commit' '
+ test_must_fail git commit -m initial --short
+'
+
+test_expect_success '--porcelain fails with nothing to commit' '
+ test_must_fail git commit -m initial --porcelain
+'
+
+test_expect_success '--long fails with nothing to commit' '
+ test_must_fail git commit -m initial --long
+'
+
test_expect_success 'setup: non-initial commit' '
echo bongo bongo bongo >file &&
git commit -m next -a
'
+test_expect_success '--dry-run with stuff to commit returns ok' '
+ echo bongo bongo bongo >>file &&
+ git commit -m next -a --dry-run
+'
+
+test_expect_failure '--short with stuff to commit returns ok' '
+ echo bongo bongo bongo >>file &&
+ git commit -m next -a --short
+'
+
+test_expect_failure '--porcelain with stuff to commit returns ok' '
+ echo bongo bongo bongo >>file &&
+ git commit -m next -a --porcelain
+'
+
+test_expect_success '--long with stuff to commit returns ok' '
+ echo bongo bongo bongo >>file &&
+ git commit -m next -a --long
+'
+
test_expect_success 'commit message from non-existing file' '
echo more bongo: bongo bongo bongo bongo >file &&
test_must_fail git commit -F gah -a
diff --git a/t/t7510-signed-commit.sh b/t/t7510-signed-commit.sh
index 1d3c56fe6..5ddac1a9f 100755
--- a/t/t7510-signed-commit.sh
+++ b/t/t7510-signed-commit.sh
@@ -5,6 +5,8 @@ test_description='signed commit tests'
. "$TEST_DIRECTORY/lib-gpg.sh"
test_expect_success GPG 'create signed commits' '
+ test_when_finished "test_unconfig commit.gpgsign" &&
+
echo 1 >file && git add file &&
test_tick && git commit -S -m initial &&
git tag initial &&
@@ -25,12 +27,27 @@ test_expect_success GPG 'create signed commits' '
git tag fourth-unsigned &&
test_tick && git commit --amend -S -m "fourth signed" &&
- git tag fourth-signed
+ git tag fourth-signed &&
+
+ git config commit.gpgsign true &&
+ echo 5 >file && test_tick && git commit -a -m "fifth signed" &&
+ git tag fifth-signed &&
+
+ git config commit.gpgsign false &&
+ echo 6 >file && test_tick && git commit -a -m "sixth" &&
+ git tag sixth-unsigned &&
+
+ git config commit.gpgsign true &&
+ echo 7 >file && test_tick && git commit -a -m "seventh" --no-gpg-sign &&
+ git tag seventh-unsigned &&
+
+ test_tick && git rebase -f HEAD^^ && git tag sixth-signed HEAD^ &&
+ git tag seventh-signed
'
test_expect_success GPG 'show signatures' '
(
- for commit in initial second merge master
+ for commit in initial second merge fourth-signed fifth-signed sixth-signed master
do
git show --pretty=short --show-signature $commit >actual &&
grep "Good signature from" actual || exit 1
@@ -39,7 +56,7 @@ test_expect_success GPG 'show signatures' '
done
) &&
(
- for commit in merge^2 fourth-unsigned
+ for commit in merge^2 fourth-unsigned sixth-unsigned seventh-unsigned
do
git show --pretty=short --show-signature $commit >actual &&
grep "Good signature from" actual && exit 1
@@ -52,7 +69,7 @@ test_expect_success GPG 'show signatures' '
test_expect_success GPG 'detect fudged signature' '
git cat-file commit master >raw &&
- sed -e "s/fourth signed/4th forged/" raw >forged1 &&
+ sed -e "s/seventh/7th forged/" raw >forged1 &&
git hash-object -w -t commit forged1 >forged1.commit &&
git show --pretty=short --show-signature $(cat forged1.commit) >actual1 &&
grep "BAD signature from" actual1 &&
diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh
index 3cec57af1..68ad2d745 100755
--- a/t/t7512-status-help.sh
+++ b/t/t7512-status-help.sh
@@ -33,7 +33,7 @@ You have unmerged paths.
Unmerged paths:
(use "git add <file>..." to mark resolution)
- both modified: main.txt
+ both modified: main.txt
no changes added to commit (use "git add" and/or "git commit -a")
EOF
@@ -87,7 +87,7 @@ Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
- both modified: main.txt
+ both modified: main.txt
no changes added to commit (use "git add" and/or "git commit -a")
EOF
@@ -146,7 +146,7 @@ Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
- both modified: main.txt
+ both modified: main.txt
no changes added to commit (use "git add" and/or "git commit -a")
EOF
@@ -602,7 +602,7 @@ rebase in progress; onto $ONTO
You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''.
Unmerged paths:
- both modified: main.txt
+ both modified: main.txt
no changes added to commit
EOF
@@ -636,7 +636,7 @@ You are currently cherry-picking commit $TO_CHERRY_PICK.
Unmerged paths:
(use "git add <file>..." to mark resolution)
- both modified: main.txt
+ both modified: main.txt
no changes added to commit (use "git add" and/or "git commit -a")
EOF
@@ -707,7 +707,7 @@ Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
- both modified: to-revert.txt
+ both modified: to-revert.txt
no changes added to commit (use "git add" and/or "git commit -a")
EOF
diff --git a/t/t7601-merge-pull-config.sh b/t/t7601-merge-pull-config.sh
index 830a4c3e9..f768c900a 100755
--- a/t/t7601-merge-pull-config.sh
+++ b/t/t7601-merge-pull-config.sh
@@ -38,6 +38,27 @@ test_expect_success 'merge c1 with c2' '
test -f c2.c
'
+test_expect_success 'fast-forward pull succeeds with "true" in pull.ff' '
+ git reset --hard c0 &&
+ test_config pull.ff true &&
+ git pull . c1 &&
+ test "$(git rev-parse HEAD)" = "$(git rev-parse c1)"
+'
+
+test_expect_success 'fast-forward pull creates merge with "false" in pull.ff' '
+ git reset --hard c0 &&
+ test_config pull.ff false &&
+ git pull . c1 &&
+ test "$(git rev-parse HEAD^1)" = "$(git rev-parse c0)" &&
+ test "$(git rev-parse HEAD^2)" = "$(git rev-parse c1)"
+'
+
+test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' '
+ git reset --hard c1 &&
+ test_config pull.ff only &&
+ test_must_fail git pull . c3
+'
+
test_expect_success 'merge c1 with c2 (ours in pull.twohead)' '
git reset --hard c1 &&
git config pull.twohead ours &&
diff --git a/t/t7700-repack.sh b/t/t7700-repack.sh
index d954b846a..284018e3c 100755
--- a/t/t7700-repack.sh
+++ b/t/t7700-repack.sh
@@ -17,11 +17,11 @@ test_expect_success 'objects in packs marked .keep are not repacked' '
# The second pack will contain the excluded object
packsha1=$(git rev-list --objects --all | grep file2 |
git pack-objects pack) &&
- touch -r pack-$packsha1.pack pack-$packsha1.keep &&
+ >pack-$packsha1.keep &&
objsha1=$(git verify-pack -v pack-$packsha1.idx | head -n 1 |
sed -e "s/^\([0-9a-f]\{40\}\).*/\1/") &&
mv pack-* .git/objects/pack/ &&
- git repack -A -d -l &&
+ git repack --no-pack-kept-objects -A -d -l &&
git prune-packed &&
for p in .git/objects/pack/*.idx; do
idx=$(basename $p)
@@ -35,6 +35,22 @@ test_expect_success 'objects in packs marked .keep are not repacked' '
test -z "$found_duplicate_object"
'
+test_expect_success 'writing bitmaps can duplicate .keep objects' '
+ # build on $objsha1, $packsha1, and .keep state from previous
+ git repack -Adl &&
+ test_when_finished "found_duplicate_object=" &&
+ for p in .git/objects/pack/*.idx; do
+ idx=$(basename $p)
+ test "pack-$packsha1.idx" = "$idx" && continue
+ if git verify-pack -v $p | egrep "^$objsha1"; then
+ found_duplicate_object=1
+ echo "DUPLICATE OBJECT FOUND"
+ break
+ fi
+ done &&
+ test "$found_duplicate_object" = 1
+'
+
test_expect_success 'loose objects in alternate ODB are not repacked' '
mkdir alt_objects &&
echo `pwd`/alt_objects > .git/objects/info/alternates &&
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index 241852848..5a193c500 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -434,4 +434,18 @@ test_expect_success PERL 'difftool --no-symlinks detects conflict ' '
)
'
+test_expect_success PERL 'difftool properly honors gitlink and core.worktree' '
+ git submodule add ./. submod/ule &&
+ (
+ cd submod/ule &&
+ test_config diff.tool checktrees &&
+ test_config difftool.checktrees.cmd '\''
+ test -d "$LOCAL" && test -d "$REMOTE" && echo good
+ '\'' &&
+ echo good >expect &&
+ git difftool --tool=checktrees --dir-diff HEAD~ >actual &&
+ test_cmp expect actual
+ )
+'
+
test_done
diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
index f698001c9..63b303924 100755
--- a/t/t7810-grep.sh
+++ b/t/t7810-grep.sh
@@ -105,7 +105,7 @@ do
test_expect_success "grep -w $L (w)" '
: >expected &&
- test_must_fail git grep -n -w -e "^w" >actual &&
+ test_must_fail git grep -n -w -e "^w" $H >actual &&
test_cmp expected actual
'
@@ -240,92 +240,104 @@ do
test_cmp expected actual
'
test_expect_success "grep $L with grep.extendedRegexp=false" '
- echo "ab:a+bc" >expected &&
- git -c grep.extendedRegexp=false grep "a+b*c" ab >actual &&
+ echo "${HC}ab:a+bc" >expected &&
+ git -c grep.extendedRegexp=false grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
test_expect_success "grep $L with grep.extendedRegexp=true" '
- echo "ab:abc" >expected &&
- git -c grep.extendedRegexp=true grep "a+b*c" ab >actual &&
+ echo "${HC}ab:abc" >expected &&
+ git -c grep.extendedRegexp=true grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
test_expect_success "grep $L with grep.patterntype=basic" '
- echo "ab:a+bc" >expected &&
- git -c grep.patterntype=basic grep "a+b*c" ab >actual &&
+ echo "${HC}ab:a+bc" >expected &&
+ git -c grep.patterntype=basic grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
test_expect_success "grep $L with grep.patterntype=extended" '
- echo "ab:abc" >expected &&
- git -c grep.patterntype=extended grep "a+b*c" ab >actual &&
+ echo "${HC}ab:abc" >expected &&
+ git -c grep.patterntype=extended grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
test_expect_success "grep $L with grep.patterntype=fixed" '
- echo "ab:a+b*c" >expected &&
- git -c grep.patterntype=fixed grep "a+b*c" ab >actual &&
+ echo "${HC}ab:a+b*c" >expected &&
+ git -c grep.patterntype=fixed grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
test_expect_success LIBPCRE "grep $L with grep.patterntype=perl" '
- echo "ab:a+b*c" >expected &&
- git -c grep.patterntype=perl grep "a\x{2b}b\x{2a}c" ab >actual &&
+ echo "${HC}ab:a+b*c" >expected &&
+ git -c grep.patterntype=perl grep "a\x{2b}b\x{2a}c" $H ab >actual &&
test_cmp expected actual
'
test_expect_success "grep $L with grep.patternType=default and grep.extendedRegexp=true" '
- echo "ab:abc" >expected &&
+ echo "${HC}ab:abc" >expected &&
git \
-c grep.patternType=default \
-c grep.extendedRegexp=true \
- grep "a+b*c" ab >actual &&
+ grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
test_expect_success "grep $L with grep.extendedRegexp=true and grep.patternType=default" '
- echo "ab:abc" >expected &&
+ echo "${HC}ab:abc" >expected &&
git \
-c grep.extendedRegexp=true \
-c grep.patternType=default \
- grep "a+b*c" ab >actual &&
+ grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
- test_expect_success 'grep $L with grep.patternType=extended and grep.extendedRegexp=false' '
- echo "ab:abc" >expected &&
+ test_expect_success "grep $L with grep.patternType=extended and grep.extendedRegexp=false" '
+ echo "${HC}ab:abc" >expected &&
git \
-c grep.patternType=extended \
-c grep.extendedRegexp=false \
- grep "a+b*c" ab >actual &&
+ grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
- test_expect_success 'grep $L with grep.patternType=basic and grep.extendedRegexp=true' '
- echo "ab:a+bc" >expected &&
+ test_expect_success "grep $L with grep.patternType=basic and grep.extendedRegexp=true" '
+ echo "${HC}ab:a+bc" >expected &&
git \
-c grep.patternType=basic \
-c grep.extendedRegexp=true \
- grep "a+b*c" ab >actual &&
+ grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
- test_expect_success 'grep $L with grep.extendedRegexp=false and grep.patternType=extended' '
- echo "ab:abc" >expected &&
+ test_expect_success "grep $L with grep.extendedRegexp=false and grep.patternType=extended" '
+ echo "${HC}ab:abc" >expected &&
git \
-c grep.extendedRegexp=false \
-c grep.patternType=extended \
- grep "a+b*c" ab >actual &&
+ grep "a+b*c" $H ab >actual &&
test_cmp expected actual
'
- test_expect_success 'grep $L with grep.extendedRegexp=true and grep.patternType=basic' '
- echo "ab:a+bc" >expected &&
+ test_expect_success "grep $L with grep.extendedRegexp=true and grep.patternType=basic" '
+ echo "${HC}ab:a+bc" >expected &&
git \
-c grep.extendedRegexp=true \
-c grep.patternType=basic \
- grep "a+b*c" ab >actual &&
+ grep "a+b*c" $H ab >actual &&
+ test_cmp expected actual
+ '
+
+ test_expect_success "grep --count $L" '
+ echo ${HC}ab:3 >expected &&
+ git grep --count -e b $H -- ab >actual &&
+ test_cmp expected actual
+ '
+
+ test_expect_success "grep --count -h $L" '
+ echo 3 >expected &&
+ git grep --count -h -e b $H -- ab >actual &&
test_cmp expected actual
'
done
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 3119c8c52..1ecdacb6f 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -409,7 +409,7 @@ test_expect_success $PREREQ 'Valid In-Reply-To when prompting' '
(echo "From Example <from@example.com>"
echo "To Example <to@example.com>"
echo ""
- ) | env GIT_SEND_EMAIL_NOTTY=1 git send-email \
+ ) | GIT_SEND_EMAIL_NOTTY=1 git send-email \
--smtp-server="$(pwd)/fake.sendmail" \
$patches 2>errors &&
! grep "^In-Reply-To: < *>" msgtxt1
diff --git a/t/t9802-git-p4-filetype.sh b/t/t9802-git-p4-filetype.sh
index a82744bab..66d3fc91a 100755
--- a/t/t9802-git-p4-filetype.sh
+++ b/t/t9802-git-p4-filetype.sh
@@ -250,6 +250,89 @@ test_expect_success 'ignore apple' '
)
'
+test_expect_success SYMLINKS 'create p4 symlink' '
+ cd "$cli" &&
+ ln -s symlink-target symlink &&
+ p4 add symlink &&
+ p4 submit -d "add symlink"
+'
+
+test_expect_success SYMLINKS 'ensure p4 symlink parsed correctly' '
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot@all &&
+ (
+ cd "$git" &&
+ test -L symlink &&
+ test $(readlink symlink) = symlink-target
+ )
+'
+
+test_expect_success SYMLINKS 'empty symlink target' '
+ (
+ # first create the file as a file
+ cd "$cli" &&
+ >empty-symlink &&
+ p4 add empty-symlink &&
+ p4 submit -d "add empty-symlink as a file"
+ ) &&
+ (
+ # now change it to be a symlink to "target1"
+ cd "$cli" &&
+ p4 edit empty-symlink &&
+ p4 reopen -t symlink empty-symlink &&
+ rm empty-symlink &&
+ ln -s target1 empty-symlink &&
+ p4 add empty-symlink &&
+ p4 submit -d "make empty-symlink point to target1"
+ ) &&
+ (
+ # Hack the p4 depot to make the symlink point to nothing;
+ # this should not happen in reality, but shows up
+ # in p4 repos in the wild.
+ #
+ # The sed expression changes this:
+ # @@
+ # text
+ # @target1
+ # @
+ # to this:
+ # @@
+ # text
+ # @@
+ #
+ cd "$db/depot" &&
+ sed "/@target1/{; s/target1/@/; n; d; }" \
+ empty-symlink,v >empty-symlink,v.tmp &&
+ mv empty-symlink,v.tmp empty-symlink,v
+ ) &&
+ (
+ # Make sure symlink really is empty. Asking
+ # p4 to sync here will make it generate errors.
+ cd "$cli" &&
+ p4 print -q //depot/empty-symlink#2 >out &&
+ test ! -s out
+ ) &&
+ test_when_finished cleanup_git &&
+
+ # make sure git p4 handles it without error
+ git p4 clone --dest="$git" //depot@all &&
+
+ # fix the symlink, make it point to "target2"
+ (
+ cd "$cli" &&
+ p4 open empty-symlink &&
+ rm empty-symlink &&
+ ln -s target2 empty-symlink &&
+ p4 submit -d "make empty-symlink point to target2"
+ ) &&
+ cleanup_git &&
+ git p4 clone --dest="$git" //depot@all &&
+ (
+ cd "$git" &&
+ test $(readlink empty-symlink) = target2
+ )
+'
+
test_expect_success 'kill p4d' '
kill_p4d
'
diff --git a/t/t9805-git-p4-skip-submit-edit.sh b/t/t9805-git-p4-skip-submit-edit.sh
index ff2cc7970..89311886d 100755
--- a/t/t9805-git-p4-skip-submit-edit.sh
+++ b/t/t9805-git-p4-skip-submit-edit.sh
@@ -17,7 +17,7 @@ test_expect_success 'init depot' '
)
'
-# this works because EDITOR is set to :
+# this works because P4EDITOR is set to true
test_expect_success 'no config, unedited, say yes' '
git p4 clone --dest="$git" //depot &&
test_when_finished cleanup_git &&
@@ -90,7 +90,9 @@ test_expect_success 'no config, edited' '
cd "$git" &&
echo line >>file1 &&
git commit -a -m "change 5" &&
- P4EDITOR="" EDITOR="\"$TRASH_DIRECTORY/ed.sh\"" git p4 submit &&
+ P4EDITOR="$TRASH_DIRECTORY/ed.sh" &&
+ export P4EDITOR &&
+ git p4 submit &&
p4 changes //depot/... >wc &&
test_line_count = 5 wc
)
diff --git a/t/t9807-git-p4-submit.sh b/t/t9807-git-p4-submit.sh
index 1fb7bc7cf..4caf36e00 100755
--- a/t/t9807-git-p4-submit.sh
+++ b/t/t9807-git-p4-submit.sh
@@ -17,7 +17,7 @@ test_expect_success 'init depot' '
)
'
-test_expect_failure 'is_cli_file_writeable function' '
+test_expect_success 'is_cli_file_writeable function' '
(
cd "$cli" &&
echo a >a &&
diff --git a/t/t9809-git-p4-client-view.sh b/t/t9809-git-p4-client-view.sh
index 77f63492d..23a827fa7 100755
--- a/t/t9809-git-p4-client-view.sh
+++ b/t/t9809-git-p4-client-view.sh
@@ -76,28 +76,28 @@ test_expect_success 'init depot' '
'
# double % for printf
-test_expect_success 'unsupported view wildcard %%n' '
+test_expect_success 'view wildcard %%n' '
client_view "//depot/%%%%1/sub/... //client/sub/%%%%1/..." &&
test_when_finished cleanup_git &&
- test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
+ git p4 clone --use-client-spec --dest="$git" //depot
'
-test_expect_success 'unsupported view wildcard *' '
+test_expect_success 'view wildcard *' '
client_view "//depot/*/bar/... //client/*/bar/..." &&
test_when_finished cleanup_git &&
- test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
+ git p4 clone --use-client-spec --dest="$git" //depot
'
-test_expect_success 'wildcard ... only supported at end of spec 1' '
+test_expect_success 'wildcard ... in the middle' '
client_view "//depot/.../file11 //client/.../file11" &&
test_when_finished cleanup_git &&
- test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
+ git p4 clone --use-client-spec --dest="$git" //depot
'
-test_expect_success 'wildcard ... only supported at end of spec 2' '
+test_expect_success 'wildcard ... in the middle and at the end' '
client_view "//depot/.../a/... //client/.../a/..." &&
test_when_finished cleanup_git &&
- test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
+ git p4 clone --use-client-spec --dest="$git" //depot
'
test_expect_success 'basic map' '
diff --git a/t/t9812-git-p4-wildcards.sh b/t/t9812-git-p4-wildcards.sh
index 67633257f..c7472cbf5 100755
--- a/t/t9812-git-p4-wildcards.sh
+++ b/t/t9812-git-p4-wildcards.sh
@@ -161,6 +161,56 @@ test_expect_success 'wildcard files submit back to p4, delete' '
)
'
+test_expect_success 'p4 deleted a wildcard file' '
+ (
+ cd "$cli" &&
+ echo "wild delete test" >wild@delete &&
+ p4 add -f wild@delete &&
+ p4 submit -d "add wild@delete"
+ ) &&
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ test_path_is_file wild@delete
+ ) &&
+ (
+ cd "$cli" &&
+ # must use its encoded name
+ p4 delete wild%40delete &&
+ p4 submit -d "delete wild@delete"
+ ) &&
+ (
+ cd "$git" &&
+ git p4 sync &&
+ git merge --ff-only p4/master &&
+ test_path_is_missing wild@delete
+ )
+'
+
+test_expect_success 'wildcard files requiring keyword scrub' '
+ (
+ cd "$cli" &&
+ cat <<-\EOF >scrub@wild &&
+ $Id$
+ line2
+ EOF
+ p4 add -t text+k -f scrub@wild &&
+ p4 submit -d "scrub at wild"
+ ) &&
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ git config git-p4.skipSubmitEdit true &&
+ git config git-p4.attemptRCSCleanup true &&
+ sed "s/^line2/line2 edit/" <scrub@wild >scrub@wild.tmp &&
+ mv -f scrub@wild.tmp scrub@wild &&
+ git commit -m "scrub at wild line2 edit" scrub@wild &&
+ git p4 submit
+ )
+'
+
test_expect_success 'kill p4d' '
kill_p4d
'
diff --git a/t/t9813-git-p4-preserve-users.sh b/t/t9813-git-p4-preserve-users.sh
index f2e85e518..166b840bf 100755
--- a/t/t9813-git-p4-preserve-users.sh
+++ b/t/t9813-git-p4-preserve-users.sh
@@ -19,16 +19,6 @@ test_expect_success 'create files' '
)
'
-p4_add_user() {
- name=$1 fullname=$2 &&
- p4 user -f -i <<-EOF &&
- User: $name
- Email: $name@localhost
- FullName: $fullname
- EOF
- p4 passwd -P secret $name
-}
-
p4_grant_admin() {
name=$1 &&
{
@@ -51,8 +41,8 @@ make_change_by_user() {
# Test username support, submitting as user 'alice'
test_expect_success 'preserve users' '
- p4_add_user alice Alice &&
- p4_add_user bob Bob &&
+ p4_add_user alice &&
+ p4_add_user bob &&
p4_grant_admin alice &&
git p4 clone --dest="$git" //depot &&
test_when_finished cleanup_git &&
@@ -60,8 +50,8 @@ test_expect_success 'preserve users' '
cd "$git" &&
echo "username: a change by alice" >>file1 &&
echo "username: a change by bob" >>file2 &&
- git commit --author "Alice <alice@localhost>" -m "a change by alice" file1 &&
- git commit --author "Bob <bob@localhost>" -m "a change by bob" file2 &&
+ git commit --author "Alice <alice@example.com>" -m "a change by alice" file1 &&
+ git commit --author "Bob <bob@example.com>" -m "a change by bob" file2 &&
git config git-p4.skipSubmitEditCheck true &&
P4EDITOR=touch P4USER=alice P4PASSWD=secret git p4 commit --preserve-user &&
p4_check_commit_author file1 alice &&
@@ -78,7 +68,7 @@ test_expect_success 'refuse to preserve users without perms' '
cd "$git" &&
git config git-p4.skipSubmitEditCheck true &&
echo "username-noperms: a change by alice" >>file1 &&
- git commit --author "Alice <alice@localhost>" -m "perms: a change by alice" file1 &&
+ git commit --author "Alice <alice@example.com>" -m "perms: a change by alice" file1 &&
P4EDITOR=touch P4USER=bob P4PASSWD=secret &&
export P4EDITOR P4USER P4PASSWD &&
test_must_fail git p4 commit --preserve-user &&
@@ -94,9 +84,9 @@ test_expect_success 'preserve user where author is unknown to p4' '
cd "$git" &&
git config git-p4.skipSubmitEditCheck true &&
echo "username-bob: a change by bob" >>file1 &&
- git commit --author "Bob <bob@localhost>" -m "preserve: a change by bob" file1 &&
+ git commit --author "Bob <bob@example.com>" -m "preserve: a change by bob" file1 &&
echo "username-unknown: a change by charlie" >>file1 &&
- git commit --author "Charlie <charlie@localhost>" -m "preserve: a change by charlie" file1 &&
+ git commit --author "Charlie <charlie@example.com>" -m "preserve: a change by charlie" file1 &&
P4EDITOR=touch P4USER=alice P4PASSWD=secret &&
export P4EDITOR P4USER P4PASSWD &&
test_must_fail git p4 commit --preserve-user &&
@@ -121,24 +111,24 @@ test_expect_success 'not preserving user with mixed authorship' '
(
cd "$git" &&
git config git-p4.skipSubmitEditCheck true &&
- p4_add_user derek Derek &&
+ p4_add_user derek &&
- make_change_by_user usernamefile3 Derek derek@localhost &&
+ make_change_by_user usernamefile3 Derek derek@example.com &&
P4EDITOR=cat P4USER=alice P4PASSWD=secret &&
export P4EDITOR P4USER P4PASSWD &&
git p4 commit |\
- grep "git author derek@localhost does not match" &&
+ grep "git author derek@example.com does not match" &&
- make_change_by_user usernamefile3 Charlie charlie@localhost &&
+ make_change_by_user usernamefile3 Charlie charlie@example.com &&
git p4 commit |\
- grep "git author charlie@localhost does not match" &&
+ grep "git author charlie@example.com does not match" &&
- make_change_by_user usernamefile3 alice alice@localhost &&
+ make_change_by_user usernamefile3 alice alice@example.com &&
git p4 commit |\
test_must_fail grep "git author.*does not match" &&
git config git-p4.skipUserNameCheck true &&
- make_change_by_user usernamefile3 Charlie charlie@localhost &&
+ make_change_by_user usernamefile3 Charlie charlie@example.com &&
git p4 commit |\
test_must_fail grep "git author.*does not match" &&
diff --git a/t/t9816-git-p4-locked.sh b/t/t9816-git-p4-locked.sh
new file mode 100755
index 000000000..e71e54334
--- /dev/null
+++ b/t/t9816-git-p4-locked.sh
@@ -0,0 +1,145 @@
+#!/bin/sh
+
+test_description='git p4 locked file behavior'
+
+. ./lib-git-p4.sh
+
+test_expect_success 'start p4d' '
+ start_p4d
+'
+
+# See
+# http://www.perforce.com/perforce/doc.current/manuals/p4sag/03_superuser.html#1088563
+# for suggestions on how to configure "sitewide pessimistic locking"
+# where only one person can have a file open for edit at a time.
+test_expect_success 'init depot' '
+ (
+ cd "$cli" &&
+ echo "TypeMap: +l //depot/..." | p4 typemap -i &&
+ echo file1 >file1 &&
+ p4 add file1 &&
+ p4 submit -d "add file1"
+ )
+'
+
+test_expect_success 'edit with lock not taken' '
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ echo line2 >>file1 &&
+ git add file1 &&
+ git commit -m "line2 in file1" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit
+ )
+'
+
+test_expect_failure 'add with lock not taken' '
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ echo line1 >>add-lock-not-taken &&
+ git add file2 &&
+ git commit -m "add add-lock-not-taken" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit --verbose
+ )
+'
+
+lock_in_another_client() {
+ # build a different client
+ cli2="$TRASH_DIRECTORY/cli2" &&
+ mkdir -p "$cli2" &&
+ test_when_finished "p4 client -f -d client2 && rm -rf \"$cli2\"" &&
+ (
+ cd "$cli2" &&
+ P4CLIENT=client2 &&
+ cli="$cli2" &&
+ client_view "//depot/... //client2/..." &&
+ p4 sync &&
+ p4 open file1
+ )
+}
+
+test_expect_failure 'edit with lock taken' '
+ lock_in_another_client &&
+ test_when_finished cleanup_git &&
+ test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ echo line3 >>file1 &&
+ git add file1 &&
+ git commit -m "line3 in file1" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit --verbose
+ )
+'
+
+test_expect_failure 'delete with lock taken' '
+ lock_in_another_client &&
+ test_when_finished cleanup_git &&
+ test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ git rm file1 &&
+ git commit -m "delete file1" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit --verbose
+ )
+'
+
+test_expect_failure 'chmod with lock taken' '
+ lock_in_another_client &&
+ test_when_finished cleanup_git &&
+ test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ chmod +x file1 &&
+ git add file1 &&
+ git commit -m "chmod +x file1" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit --verbose
+ )
+'
+
+test_expect_failure 'copy with lock taken' '
+ lock_in_another_client &&
+ test_when_finished cleanup_git &&
+ test_when_finished "cd \"$cli\" && p4 revert file2 && rm -f file2" &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ cp file1 file2 &&
+ git add file2 &&
+ git commit -m "cp file1 to file2" &&
+ git config git-p4.skipSubmitEdit true &&
+ git config git-p4.detectCopies true &&
+ git p4 submit --verbose
+ )
+'
+
+test_expect_failure 'move with lock taken' '
+ lock_in_another_client &&
+ test_when_finished cleanup_git &&
+ test_when_finished "cd \"$cli\" && p4 sync file1 && rm -f file2" &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ git mv file1 file2 &&
+ git commit -m "mv file1 to file2" &&
+ git config git-p4.skipSubmitEdit true &&
+ git config git-p4.detectRenames true &&
+ git p4 submit --verbose
+ )
+'
+
+test_expect_success 'kill p4d' '
+ kill_p4d
+'
+
+test_done
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index aeae3ca76..158e10a67 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -32,6 +32,11 @@ test_set_editor () {
export EDITOR
}
+test_set_index_version () {
+ GIT_INDEX_VERSION="$1"
+ export GIT_INDEX_VERSION
+}
+
test_decode_color () {
awk '
function name(n) {
@@ -716,6 +721,64 @@ perl () {
command "$PERL_PATH" "$@"
}
+# Is the value one of the various ways to spell a boolean true/false?
+test_normalize_bool () {
+ git -c magic.variable="$1" config --bool magic.variable 2>/dev/null
+}
+
+# Given a variable $1, normalize the value of it to one of "true",
+# "false", or "auto" and store the result to it.
+#
+# test_tristate GIT_TEST_HTTPD
+#
+# A variable set to an empty string is set to 'false'.
+# A variable set to 'false' or 'auto' keeps its value.
+# Anything else is set to 'true'.
+# An unset variable defaults to 'auto'.
+#
+# The last rule is to allow people to set the variable to an empty
+# string and export it to decline testing the particular feature
+# for versions both before and after this change. We used to treat
+# both unset and empty variable as a signal for "do not test" and
+# took any non-empty string as "please test".
+
+test_tristate () {
+ if eval "test x\"\${$1+isset}\" = xisset"
+ then
+ # explicitly set
+ eval "
+ case \"\$$1\" in
+ '') $1=false ;;
+ auto) ;;
+ *) $1=\$(test_normalize_bool \$$1 || echo true) ;;
+ esac
+ "
+ else
+ eval "$1=auto"
+ fi
+}
+
+# Exit the test suite, either by skipping all remaining tests or by
+# exiting with an error. If "$1" is "auto", we then we assume we were
+# opportunistically trying to set up some tests and we skip. If it is
+# "true", then we report a failure.
+#
+# The error/skip message should be given by $2.
+#
+test_skip_or_die () {
+ case "$1" in
+ auto)
+ skip_all=$2
+ test_done
+ ;;
+ true)
+ error "$2"
+ ;;
+ *)
+ error "BUG: test tristate is '$1' (real error: $2)"
+ esac
+}
+
# The following mingw_* functions obey POSIX shell syntax, but are actually
# bash scripts, and are meant to be used only with bash on Windows.
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 1531c241c..569b52dc0 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -108,6 +108,12 @@ export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME
export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME
export EDITOR
+if test -n "${TEST_GIT_INDEX_VERSION:+isset}"
+then
+ GIT_INDEX_VERSION="$TEST_GIT_INDEX_VERSION"
+ export GIT_INDEX_VERSION
+fi
+
# Add libc MALLOC and MALLOC_PERTURB test
# only if we are not executing the test with valgrind
if expr " $GIT_TEST_OPTS " : ".* --valgrind " >/dev/null ||
diff --git a/test-hashmap.c b/test-hashmap.c
new file mode 100644
index 000000000..f5183fb9e
--- /dev/null
+++ b/test-hashmap.c
@@ -0,0 +1,255 @@
+#include "git-compat-util.h"
+#include "hashmap.h"
+
+struct test_entry
+{
+ struct hashmap_entry ent;
+ /* key and value as two \0-terminated strings */
+ char key[FLEX_ARRAY];
+};
+
+static const char *get_value(const struct test_entry *e)
+{
+ return e->key + strlen(e->key) + 1;
+}
+
+static int test_entry_cmp(const struct test_entry *e1,
+ const struct test_entry *e2, const char* key)
+{
+ return strcmp(e1->key, key ? key : e2->key);
+}
+
+static int test_entry_cmp_icase(const struct test_entry *e1,
+ const struct test_entry *e2, const char* key)
+{
+ return strcasecmp(e1->key, key ? key : e2->key);
+}
+
+static struct test_entry *alloc_test_entry(int hash, char *key, int klen,
+ char *value, int vlen)
+{
+ struct test_entry *entry = malloc(sizeof(struct test_entry) + klen
+ + vlen + 2);
+ hashmap_entry_init(entry, hash);
+ memcpy(entry->key, key, klen + 1);
+ memcpy(entry->key + klen + 1, value, vlen + 1);
+ return entry;
+}
+
+#define HASH_METHOD_FNV 0
+#define HASH_METHOD_I 1
+#define HASH_METHOD_IDIV10 2
+#define HASH_METHOD_0 3
+#define HASH_METHOD_X2 4
+#define TEST_SPARSE 8
+#define TEST_ADD 16
+#define TEST_SIZE 100000
+
+static unsigned int hash(unsigned int method, unsigned int i, const char *key)
+{
+ unsigned int hash;
+ switch (method & 3)
+ {
+ case HASH_METHOD_FNV:
+ hash = strhash(key);
+ break;
+ case HASH_METHOD_I:
+ hash = i;
+ break;
+ case HASH_METHOD_IDIV10:
+ hash = i / 10;
+ break;
+ case HASH_METHOD_0:
+ hash = 0;
+ break;
+ }
+
+ if (method & HASH_METHOD_X2)
+ hash = 2 * hash;
+ return hash;
+}
+
+/*
+ * Test performance of hashmap.[ch]
+ * Usage: time echo "perfhashmap method rounds" | test-hashmap
+ */
+static void perf_hashmap(unsigned int method, unsigned int rounds)
+{
+ struct hashmap map;
+ char buf[16];
+ struct test_entry **entries;
+ unsigned int *hashes;
+ unsigned int i, j;
+
+ entries = malloc(TEST_SIZE * sizeof(struct test_entry *));
+ hashes = malloc(TEST_SIZE * sizeof(int));
+ for (i = 0; i < TEST_SIZE; i++) {
+ snprintf(buf, sizeof(buf), "%i", i);
+ entries[i] = alloc_test_entry(0, buf, strlen(buf), "", 0);
+ hashes[i] = hash(method, i, entries[i]->key);
+ }
+
+ if (method & TEST_ADD) {
+ /* test adding to the map */
+ for (j = 0; j < rounds; j++) {
+ hashmap_init(&map, (hashmap_cmp_fn) test_entry_cmp, 0);
+
+ /* add entries */
+ for (i = 0; i < TEST_SIZE; i++) {
+ hashmap_entry_init(entries[i], hashes[i]);
+ hashmap_add(&map, entries[i]);
+ }
+
+ hashmap_free(&map, 0);
+ }
+ } else {
+ /* test map lookups */
+ hashmap_init(&map, (hashmap_cmp_fn) test_entry_cmp, 0);
+
+ /* fill the map (sparsely if specified) */
+ j = (method & TEST_SPARSE) ? TEST_SIZE / 10 : TEST_SIZE;
+ for (i = 0; i < j; i++) {
+ hashmap_entry_init(entries[i], hashes[i]);
+ hashmap_add(&map, entries[i]);
+ }
+
+ for (j = 0; j < rounds; j++) {
+ for (i = 0; i < TEST_SIZE; i++) {
+ struct hashmap_entry key;
+ hashmap_entry_init(&key, hashes[i]);
+ hashmap_get(&map, &key, entries[i]->key);
+ }
+ }
+
+ hashmap_free(&map, 0);
+ }
+}
+
+#define DELIM " \t\r\n"
+
+/*
+ * Read stdin line by line and print result of commands to stdout:
+ *
+ * hash key -> strhash(key) memhash(key) strihash(key) memihash(key)
+ * put key value -> NULL / old value
+ * get key -> NULL / value
+ * remove key -> NULL / old value
+ * iterate -> key1 value1\nkey2 value2\n...
+ * size -> tablesize numentries
+ *
+ * perfhashmap method rounds -> test hashmap.[ch] performance
+ */
+int main(int argc, char *argv[])
+{
+ char line[1024];
+ struct hashmap map;
+ int icase;
+
+ /* init hash map */
+ icase = argc > 1 && !strcmp("ignorecase", argv[1]);
+ hashmap_init(&map, (hashmap_cmp_fn) (icase ? test_entry_cmp_icase
+ : test_entry_cmp), 0);
+
+ /* process commands from stdin */
+ while (fgets(line, sizeof(line), stdin)) {
+ char *cmd, *p1 = NULL, *p2 = NULL;
+ int l1 = 0, l2 = 0, hash = 0;
+ struct test_entry *entry;
+
+ /* break line into command and up to two parameters */
+ cmd = strtok(line, DELIM);
+ /* ignore empty lines */
+ if (!cmd || *cmd == '#')
+ continue;
+
+ p1 = strtok(NULL, DELIM);
+ if (p1) {
+ l1 = strlen(p1);
+ hash = icase ? strihash(p1) : strhash(p1);
+ p2 = strtok(NULL, DELIM);
+ if (p2)
+ l2 = strlen(p2);
+ }
+
+ if (!strcmp("hash", cmd) && l1) {
+
+ /* print results of different hash functions */
+ printf("%u %u %u %u\n", strhash(p1), memhash(p1, l1),
+ strihash(p1), memihash(p1, l1));
+
+ } else if (!strcmp("add", cmd) && l1 && l2) {
+
+ /* create entry with key = p1, value = p2 */
+ entry = alloc_test_entry(hash, p1, l1, p2, l2);
+
+ /* add to hashmap */
+ hashmap_add(&map, entry);
+
+ } else if (!strcmp("put", cmd) && l1 && l2) {
+
+ /* create entry with key = p1, value = p2 */
+ entry = alloc_test_entry(hash, p1, l1, p2, l2);
+
+ /* add / replace entry */
+ entry = hashmap_put(&map, entry);
+
+ /* print and free replaced entry, if any */
+ puts(entry ? get_value(entry) : "NULL");
+ free(entry);
+
+ } else if (!strcmp("get", cmd) && l1) {
+
+ /* setup static key */
+ struct hashmap_entry key;
+ hashmap_entry_init(&key, hash);
+
+ /* lookup entry in hashmap */
+ entry = hashmap_get(&map, &key, p1);
+
+ /* print result */
+ if (!entry)
+ puts("NULL");
+ while (entry) {
+ puts(get_value(entry));
+ entry = hashmap_get_next(&map, entry);
+ }
+
+ } else if (!strcmp("remove", cmd) && l1) {
+
+ /* setup static key */
+ struct hashmap_entry key;
+ hashmap_entry_init(&key, hash);
+
+ /* remove entry from hashmap */
+ entry = hashmap_remove(&map, &key, p1);
+
+ /* print result and free entry*/
+ puts(entry ? get_value(entry) : "NULL");
+ free(entry);
+
+ } else if (!strcmp("iterate", cmd)) {
+
+ struct hashmap_iter iter;
+ hashmap_iter_init(&map, &iter);
+ while ((entry = hashmap_iter_next(&iter)))
+ printf("%s %s\n", entry->key, get_value(entry));
+
+ } else if (!strcmp("size", cmd)) {
+
+ /* print table sizes */
+ printf("%u %u\n", map.tablesize, map.size);
+
+ } else if (!strcmp("perfhashmap", cmd) && l1 && l2) {
+
+ perf_hashmap(atoi(p1), atoi(p2));
+
+ } else {
+
+ printf("Unknown command %s\n", cmd);
+
+ }
+ }
+
+ hashmap_free(&map, 1);
+ return 0;
+}
diff --git a/test-wildmatch.c b/test-wildmatch.c
index a3e2643fb..578b164fe 100644
--- a/test-wildmatch.c
+++ b/test-wildmatch.c
@@ -1,85 +1,8 @@
-#ifdef USE_WILDMATCH
-#undef USE_WILDMATCH /* We need real fnmatch implementation here */
-#endif
#include "cache.h"
-#include "wildmatch.h"
-
-static int perf(int ac, char **av)
-{
- struct timeval tv1, tv2;
- struct stat st;
- int fd, i, n, flags1 = 0, flags2 = 0;
- char *buffer, *p;
- uint32_t usec1, usec2;
- const char *lang;
- const char *file = av[0];
- const char *pattern = av[1];
-
- lang = getenv("LANG");
- if (lang && strcmp(lang, "C"))
- die("Please test it on C locale.");
-
- if ((fd = open(file, O_RDONLY)) == -1 || fstat(fd, &st))
- die_errno("file open");
-
- buffer = xmalloc(st.st_size + 2);
- if (read(fd, buffer, st.st_size) != st.st_size)
- die_errno("read");
-
- buffer[st.st_size] = '\0';
- buffer[st.st_size + 1] = '\0';
- for (i = 0; i < st.st_size; i++)
- if (buffer[i] == '\n')
- buffer[i] = '\0';
-
- n = atoi(av[2]);
- if (av[3] && !strcmp(av[3], "pathname")) {
- flags1 = WM_PATHNAME;
- flags2 = FNM_PATHNAME;
- }
-
- gettimeofday(&tv1, NULL);
- for (i = 0; i < n; i++) {
- for (p = buffer; *p; p += strlen(p) + 1)
- wildmatch(pattern, p, flags1, NULL);
- }
- gettimeofday(&tv2, NULL);
-
- usec1 = (uint32_t)tv2.tv_sec * 1000000 + tv2.tv_usec;
- usec1 -= (uint32_t)tv1.tv_sec * 1000000 + tv1.tv_usec;
- printf("wildmatch %ds %dus\n",
- (int)(usec1 / 1000000),
- (int)(usec1 % 1000000));
-
- gettimeofday(&tv1, NULL);
- for (i = 0; i < n; i++) {
- for (p = buffer; *p; p += strlen(p) + 1)
- fnmatch(pattern, p, flags2);
- }
- gettimeofday(&tv2, NULL);
-
- usec2 = (uint32_t)tv2.tv_sec * 1000000 + tv2.tv_usec;
- usec2 -= (uint32_t)tv1.tv_sec * 1000000 + tv1.tv_usec;
- if (usec2 > usec1)
- printf("fnmatch %ds %dus or %.2f%% slower\n",
- (int)((usec2 - usec1) / 1000000),
- (int)((usec2 - usec1) % 1000000),
- (float)(usec2 - usec1) / usec1 * 100);
- else
- printf("fnmatch %ds %dus or %.2f%% faster\n",
- (int)((usec1 - usec2) / 1000000),
- (int)((usec1 - usec2) % 1000000),
- (float)(usec1 - usec2) / usec1 * 100);
- return 0;
-}
int main(int argc, char **argv)
{
int i;
-
- if (!strcmp(argv[1], "perf"))
- return perf(argc - 2, argv + 2);
-
for (i = 2; i < argc; i++) {
if (argv[i][0] == '/')
die("Forward slash is not allowed at the beginning of the\n"
@@ -93,8 +16,6 @@ int main(int argc, char **argv)
return !!wildmatch(argv[3], argv[2], WM_PATHNAME | WM_CASEFOLD, NULL);
else if (!strcmp(argv[1], "pathmatch"))
return !!wildmatch(argv[3], argv[2], 0, NULL);
- else if (!strcmp(argv[1], "fnmatch"))
- return !!fnmatch(argv[3], argv[2], FNM_PATHNAME);
else
return 1;
}
diff --git a/transport-helper.c b/transport-helper.c
index 087f617d3..86e1679c1 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -650,7 +650,7 @@ static int push_update_ref_status(struct strbuf *buf,
struct ref *remote_refs)
{
char *refname, *msg;
- int status;
+ int status, forced = 0;
if (starts_with(buf->buf, "ok ")) {
status = REF_STATUS_OK;
@@ -708,6 +708,11 @@ static int push_update_ref_status(struct strbuf *buf,
free(msg);
msg = NULL;
}
+ else if (!strcmp(msg, "forced update")) {
+ forced = 1;
+ free(msg);
+ msg = NULL;
+ }
}
if (*ref)
@@ -729,12 +734,14 @@ static int push_update_ref_status(struct strbuf *buf,
}
(*ref)->status = status;
+ (*ref)->forced_update |= forced;
(*ref)->remote_status = msg;
return !(status == REF_STATUS_OK);
}
static void push_update_refs_status(struct helper_data *data,
- struct ref *remote_refs)
+ struct ref *remote_refs,
+ int flags)
{
struct strbuf buf = STRBUF_INIT;
struct ref *ref = remote_refs;
@@ -748,7 +755,7 @@ static void push_update_refs_status(struct helper_data *data,
if (push_update_ref_status(&buf, &ref, remote_refs))
continue;
- if (!data->refspecs || data->no_private_update)
+ if (flags & TRANSPORT_PUSH_DRY_RUN || !data->refspecs || data->no_private_update)
continue;
/* propagate back the update to the remote namespace */
@@ -839,7 +846,7 @@ static int push_refs_with_push(struct transport *transport,
sendline(data, &buf);
strbuf_release(&buf);
- push_update_refs_status(data, remote_refs);
+ push_update_refs_status(data, remote_refs, flags);
return 0;
}
@@ -860,6 +867,11 @@ static int push_refs_with_export(struct transport *transport,
die("helper %s does not support dry-run", data->name);
}
+ if (flags & TRANSPORT_PUSH_FORCE) {
+ if (set_helper_option(transport, "force", "true") != 0)
+ warning("helper %s does not support 'force'", data->name);
+ }
+
helper = get_helper(transport);
write_constant(helper->in, "export\n");
@@ -881,9 +893,6 @@ static int push_refs_with_export(struct transport *transport,
}
free(private);
- if (ref->deletion)
- die("remote-helpers do not support ref deletion");
-
if (ref->peer_ref) {
if (strcmp(ref->peer_ref->name, ref->name))
die("remote-helpers do not support old:new syntax");
@@ -896,7 +905,7 @@ static int push_refs_with_export(struct transport *transport,
if (finish_command(&exporter))
die("Error while running fast-export");
- push_update_refs_status(data, remote_refs);
+ push_update_refs_status(data, remote_refs, flags);
return 0;
}
@@ -1135,9 +1144,8 @@ static int udt_do_write(struct unidirectional_transfer *t)
return 0; /* Nothing to write. */
transfer_debug("%s is writable", t->dest_name);
- bytes = write(t->dest, t->buf, t->bufuse);
- if (bytes < 0 && errno != EWOULDBLOCK && errno != EAGAIN &&
- errno != EINTR) {
+ bytes = xwrite(t->dest, t->buf, t->bufuse);
+ if (bytes < 0 && errno != EWOULDBLOCK) {
error("write(%s) failed: %s", t->dest_name, strerror(errno));
return -1;
} else if (bytes > 0) {
diff --git a/transport.c b/transport.c
index ca7bb441b..325f03e1e 100644
--- a/transport.c
+++ b/transport.c
@@ -1132,8 +1132,7 @@ int transport_push(struct transport *transport,
return transport->push(transport, refspec_nr, refspec, flags);
} else if (transport->push_refs) {
- struct ref *remote_refs =
- transport->get_refs_list(transport, 1);
+ struct ref *remote_refs;
struct ref *local_refs = get_local_heads();
int match_flags = MATCH_REFS_NONE;
int verbose = (transport->verbose > 0);
@@ -1142,6 +1141,11 @@ int transport_push(struct transport *transport,
int pretend = flags & TRANSPORT_PUSH_DRY_RUN;
int push_ret, ret, err;
+ if (check_push_refs(local_refs, refspec_nr, refspec) < 0)
+ return -1;
+
+ remote_refs = transport->get_refs_list(transport, 1);
+
if (flags & TRANSPORT_PUSH_ALL)
match_flags |= MATCH_REFS_ALL;
if (flags & TRANSPORT_PUSH_MIRROR)
diff --git a/tree-diff.c b/tree-diff.c
index 456660c7a..11c355017 100644
--- a/tree-diff.c
+++ b/tree-diff.c
@@ -294,14 +294,10 @@ int diff_tree_sha1(const unsigned char *old, const unsigned char *new, const cha
unsigned long size1, size2;
int retval;
- tree1 = read_object_with_reference(old, tree_type, &size1, NULL);
- if (!tree1)
- die("unable to read source tree (%s)", sha1_to_hex(old));
- tree2 = read_object_with_reference(new, tree_type, &size2, NULL);
- if (!tree2)
- die("unable to read destination tree (%s)", sha1_to_hex(new));
- init_tree_desc(&t1, tree1, size1);
- init_tree_desc(&t2, tree2, size2);
+ tree1 = fill_tree_descriptor(&t1, old);
+ tree2 = fill_tree_descriptor(&t2, new);
+ size1 = t1.size;
+ size2 = t2.size;
retval = diff_tree(&t1, &t2, base, opt);
if (!*base && DIFF_OPT_TST(opt, FOLLOW_RENAMES) && diff_might_be_rename()) {
init_tree_desc(&t1, tree1, size1);
@@ -315,18 +311,5 @@ int diff_tree_sha1(const unsigned char *old, const unsigned char *new, const cha
int diff_root_tree_sha1(const unsigned char *new, const char *base, struct diff_options *opt)
{
- int retval;
- void *tree;
- unsigned long size;
- struct tree_desc empty, real;
-
- tree = read_object_with_reference(new, tree_type, &size, NULL);
- if (!tree)
- die("unable to read root tree (%s)", sha1_to_hex(new));
- init_tree_desc(&real, tree, size);
-
- init_tree_desc(&empty, "", 0);
- retval = diff_tree(&empty, &real, base, opt);
- free(tree);
- return retval;
+ return diff_tree_sha1(NULL, new, base, opt);
}
diff --git a/tree-walk.c b/tree-walk.c
index 680afda06..4dc86c7fe 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -37,7 +37,7 @@ static void decode_tree_entry(struct tree_desc *desc, const char *buf, unsigned
/* Initialize the descriptor entry */
desc->entry.path = path;
- desc->entry.mode = mode;
+ desc->entry.mode = canon_mode(mode);
desc->entry.sha1 = (const unsigned char *)(path + len);
}
@@ -543,7 +543,7 @@ static int match_entry(const struct pathspec_item *item,
if (matchlen > pathlen) {
if (match[pathlen] != '/')
return 0;
- if (!S_ISDIR(entry->mode))
+ if (!S_ISDIR(entry->mode) && !S_ISGITLINK(entry->mode))
return 0;
}
@@ -749,7 +749,7 @@ match_wildcards:
if (item->nowildcard_len &&
!match_wildcard_base(item, base_str, baselen, &matched))
- return entry_not_interesting;
+ continue;
/*
* Concatenate base and entry->path into one and do
diff --git a/tree-walk.h b/tree-walk.h
index ae04b6417..ae7fb3a82 100644
--- a/tree-walk.h
+++ b/tree-walk.h
@@ -16,7 +16,7 @@ struct tree_desc {
static inline const unsigned char *tree_entry_extract(struct tree_desc *desc, const char **pathp, unsigned int *modep)
{
*pathp = desc->entry.path;
- *modep = canon_mode(desc->entry.mode);
+ *modep = desc->entry.mode;
return desc->entry.sha1;
}
diff --git a/unpack-trees.c b/unpack-trees.c
index 164354dad..97fc99546 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -105,12 +105,11 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
static void do_add_entry(struct unpack_trees_options *o, struct cache_entry *ce,
unsigned int set, unsigned int clear)
{
- clear |= CE_HASHED | CE_UNHASHED;
+ clear |= CE_HASHED;
if (set & CE_REMOVE)
set |= CE_WT_REMOVE;
- ce->next = NULL;
ce->ce_flags = (ce->ce_flags & ~clear) | set;
add_index_entry(&o->result, ce,
ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
@@ -204,7 +203,7 @@ static int check_updates(struct unpack_trees_options *o)
total++;
}
- progress = start_progress_delay("Checking out files",
+ progress = start_progress_delay(_("Checking out files"),
total, 50, 1);
cnt = 0;
}
diff --git a/upload-pack.c b/upload-pack.c
index 0c44f6b29..286a9ed3e 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -70,6 +70,14 @@ static ssize_t send_client_data(int fd, const char *data, ssize_t sz)
return sz;
}
+static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
+{
+ FILE *fp = cb_data;
+ if (graft->nr_parent == -1)
+ fprintf(fp, "--shallow %s\n", sha1_to_hex(graft->sha1));
+ return 0;
+}
+
static void create_pack_file(void)
{
struct child_process pack_objects;
@@ -81,12 +89,10 @@ static void create_pack_file(void)
const char *argv[12];
int i, arg = 0;
FILE *pipe_fd;
- char *shallow_file = NULL;
if (shallow_nr) {
- shallow_file = setup_temporary_shallow(NULL);
argv[arg++] = "--shallow-file";
- argv[arg++] = shallow_file;
+ argv[arg++] = "";
}
argv[arg++] = "pack-objects";
argv[arg++] = "--revs";
@@ -114,6 +120,9 @@ static void create_pack_file(void)
pipe_fd = xfdopen(pack_objects.in, "w");
+ if (shallow_nr)
+ for_each_commit_graft(write_one_shallow, pipe_fd);
+
for (i = 0; i < want_obj.nr; i++)
fprintf(pipe_fd, "%s\n",
sha1_to_hex(want_obj.objects[i].item->sha1));
@@ -242,11 +251,6 @@ static void create_pack_file(void)
error("git upload-pack: git-pack-objects died with error.");
goto fail;
}
- if (shallow_file) {
- if (*shallow_file)
- unlink(shallow_file);
- free(shallow_file);
- }
/* flush the data */
if (0 <= buffered) {
@@ -796,7 +800,7 @@ int main(int argc, char **argv)
packet_trace_identity("upload-pack");
git_extract_argv0_path(argv[0]);
- read_replace_refs = 0;
+ check_replace_refs = 0;
for (i = 1; i < argc; i++) {
char *arg = argv[i];
diff --git a/userdiff.c b/userdiff.c
index ea43a0306..10b61ec37 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -15,13 +15,13 @@ static int drivers_alloc;
word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
static struct userdiff_driver builtin_drivers[] = {
IPATTERN("ada",
- "!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
+ "!^(.*[ \t])?(is[ \t]+new|renames|is[ \t]+separate)([ \t].*)?$\n"
"!^[ \t]*with[ \t].*$\n"
"^[ \t]*((procedure|function)[ \t]+.*)$\n"
"^[ \t]*((package|protected|task)[ \t]+.*)$",
/* -- */
"[a-zA-Z][a-zA-Z0-9_]*"
- "|[0-9][-+0-9#_.eE]"
+ "|[-+]?[0-9][0-9#_.aAbBcCdDeEfF]*([eE][+-]?[0-9_]+)?"
"|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
IPATTERN("fortran",
"!^([C*]|[ \t]*!)\n"
diff --git a/utf8.c b/utf8.c
index 0d20e0acb..a831d5089 100644
--- a/utf8.c
+++ b/utf8.c
@@ -5,8 +5,8 @@
/* This code is originally from http://www.cl.cam.ac.uk/~mgk25/ucs/ */
struct interval {
- int first;
- int last;
+ ucs_char_t first;
+ ucs_char_t last;
};
size_t display_mode_esc_sequence_len(const char *s)
@@ -529,7 +529,7 @@ char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, int *outs
while (1) {
size_t cnt = iconv(conv, &cp, &insz, &outpos, &outsz);
- if (cnt == -1) {
+ if (cnt == (size_t) -1) {
size_t sofar;
if (errno != E2BIG) {
free(out);
diff --git a/versioncmp.c b/versioncmp.c
new file mode 100644
index 000000000..7511e0827
--- /dev/null
+++ b/versioncmp.c
@@ -0,0 +1,93 @@
+#include "cache.h"
+
+/*
+ * versioncmp(): copied from string/strverscmp.c in glibc commit
+ * ee9247c38a8def24a59eb5cfb7196a98bef8cfdc, reformatted to Git coding
+ * style. The implementation is under LGPL-2.1 and Git relicenses it
+ * to GPLv2.
+ */
+
+/*
+ * states: S_N: normal, S_I: comparing integral part, S_F: comparing
+ * fractionnal parts, S_Z: idem but with leading Zeroes only
+ */
+#define S_N 0x0
+#define S_I 0x3
+#define S_F 0x6
+#define S_Z 0x9
+
+/* result_type: CMP: return diff; LEN: compare using len_diff/diff */
+#define CMP 2
+#define LEN 3
+
+
+/*
+ * Compare S1 and S2 as strings holding indices/version numbers,
+ * returning less than, equal to or greater than zero if S1 is less
+ * than, equal to or greater than S2 (for more info, see the texinfo
+ * doc).
+ */
+
+int versioncmp(const char *s1, const char *s2)
+{
+ const unsigned char *p1 = (const unsigned char *) s1;
+ const unsigned char *p2 = (const unsigned char *) s2;
+ unsigned char c1, c2;
+ int state, diff;
+
+ /*
+ * Symbol(s) 0 [1-9] others
+ * Transition (10) 0 (01) d (00) x
+ */
+ static const uint8_t next_state[] = {
+ /* state x d 0 */
+ /* S_N */ S_N, S_I, S_Z,
+ /* S_I */ S_N, S_I, S_I,
+ /* S_F */ S_N, S_F, S_F,
+ /* S_Z */ S_N, S_F, S_Z
+ };
+
+ static const int8_t result_type[] = {
+ /* state x/x x/d x/0 d/x d/d d/0 0/x 0/d 0/0 */
+
+ /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP,
+ /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN,
+ /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+ /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP
+ };
+
+ if (p1 == p2)
+ return 0;
+
+ c1 = *p1++;
+ c2 = *p2++;
+ /* Hint: '0' is a digit too. */
+ state = S_N + ((c1 == '0') + (isdigit (c1) != 0));
+
+ while ((diff = c1 - c2) == 0) {
+ if (c1 == '\0')
+ return diff;
+
+ state = next_state[state];
+ c1 = *p1++;
+ c2 = *p2++;
+ state += (c1 == '0') + (isdigit (c1) != 0);
+ }
+
+ state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))];
+
+ switch (state) {
+ case CMP:
+ return diff;
+
+ case LEN:
+ while (isdigit (*p1++))
+ if (!isdigit (*p2++))
+ return 1;
+
+ return isdigit (*p2) ? -1 : diff;
+
+ default:
+ return state;
+ }
+}
diff --git a/ws.c b/ws.c
index b498d7599..ea4b2b1df 100644
--- a/ws.c
+++ b/ws.c
@@ -33,11 +33,8 @@ unsigned parse_whitespace_rule(const char *string)
int negated = 0;
string = string + strspn(string, ", \t\n\r");
- ep = strchr(string, ',');
- if (!ep)
- len = strlen(string);
- else
- len = ep - string;
+ ep = strchrnul(string, ',');
+ len = ep - string;
if (*string == '-') {
negated = 1;
diff --git a/wt-status.c b/wt-status.c
index 4e5581005..c89c3bb53 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -245,53 +245,92 @@ static void wt_status_print_trailer(struct wt_status *s)
#define quote_path quote_path_relative
-static void wt_status_print_unmerged_data(struct wt_status *s,
- struct string_list_item *it)
+static const char *wt_status_unmerged_status_string(int stagemask)
{
- const char *c = color(WT_STATUS_UNMERGED, s);
- struct wt_status_change_data *d = it->util;
- struct strbuf onebuf = STRBUF_INIT;
- const char *one, *how = _("bug");
-
- one = quote_path(it->string, s->prefix, &onebuf);
- status_printf(s, color(WT_STATUS_HEADER, s), "\t");
- switch (d->stagemask) {
- case 1: how = _("both deleted:"); break;
- case 2: how = _("added by us:"); break;
- case 3: how = _("deleted by them:"); break;
- case 4: how = _("added by them:"); break;
- case 5: how = _("deleted by us:"); break;
- case 6: how = _("both added:"); break;
- case 7: how = _("both modified:"); break;
+ switch (stagemask) {
+ case 1:
+ return _("both deleted:");
+ case 2:
+ return _("added by us:");
+ case 3:
+ return _("deleted by them:");
+ case 4:
+ return _("added by them:");
+ case 5:
+ return _("deleted by us:");
+ case 6:
+ return _("both added:");
+ case 7:
+ return _("both modified:");
+ default:
+ die(_("bug: unhandled unmerged status %x"), stagemask);
}
- status_printf_more(s, c, "%-20s%s\n", how, one);
- strbuf_release(&onebuf);
}
static const char *wt_status_diff_status_string(int status)
{
switch (status) {
case DIFF_STATUS_ADDED:
- return _("new file");
+ return _("new file:");
case DIFF_STATUS_COPIED:
- return _("copied");
+ return _("copied:");
case DIFF_STATUS_DELETED:
- return _("deleted");
+ return _("deleted:");
case DIFF_STATUS_MODIFIED:
- return _("modified");
+ return _("modified:");
case DIFF_STATUS_RENAMED:
- return _("renamed");
+ return _("renamed:");
case DIFF_STATUS_TYPE_CHANGED:
- return _("typechange");
+ return _("typechange:");
case DIFF_STATUS_UNKNOWN:
- return _("unknown");
+ return _("unknown:");
case DIFF_STATUS_UNMERGED:
- return _("unmerged");
+ return _("unmerged:");
default:
return NULL;
}
}
+static int maxwidth(const char *(*label)(int), int minval, int maxval)
+{
+ int result = 0, i;
+
+ for (i = minval; i <= maxval; i++) {
+ const char *s = label(i);
+ int len = s ? utf8_strwidth(s) : 0;
+ if (len > result)
+ result = len;
+ }
+ return result;
+}
+
+static void wt_status_print_unmerged_data(struct wt_status *s,
+ struct string_list_item *it)
+{
+ const char *c = color(WT_STATUS_UNMERGED, s);
+ struct wt_status_change_data *d = it->util;
+ struct strbuf onebuf = STRBUF_INIT;
+ static char *padding;
+ static int label_width;
+ const char *one, *how;
+ int len;
+
+ if (!padding) {
+ label_width = maxwidth(wt_status_unmerged_status_string, 1, 7);
+ label_width += strlen(" ");
+ padding = xmallocz(label_width);
+ memset(padding, ' ', label_width);
+ }
+
+ one = quote_path(it->string, s->prefix, &onebuf);
+ status_printf(s, color(WT_STATUS_HEADER, s), "\t");
+
+ how = wt_status_unmerged_status_string(d->stagemask);
+ len = label_width - utf8_strwidth(how);
+ status_printf_more(s, c, "%s%.*s%s\n", how, len, padding, one);
+ strbuf_release(&onebuf);
+}
+
static void wt_status_print_change_data(struct wt_status *s,
int change_type,
struct string_list_item *it)
@@ -305,21 +344,16 @@ static void wt_status_print_change_data(struct wt_status *s,
struct strbuf onebuf = STRBUF_INIT, twobuf = STRBUF_INIT;
struct strbuf extra = STRBUF_INIT;
static char *padding;
+ static int label_width;
const char *what;
int len;
if (!padding) {
- int width = 0;
- /* If DIFF_STATUS_* uses outside this range, we're in trouble */
- for (status = 'A'; status <= 'Z'; status++) {
- what = wt_status_diff_status_string(status);
- len = what ? strlen(what) : 0;
- if (len > width)
- width = len;
- }
- width += 2; /* colon and a space */
- padding = xmallocz(width);
- memset(padding, ' ', width);
+ /* If DIFF_STATUS_* uses outside the range [A..Z], we're in trouble */
+ label_width = maxwidth(wt_status_diff_status_string, 'A', 'Z');
+ label_width += strlen(" ");
+ padding = xmallocz(label_width);
+ memset(padding, ' ', label_width);
}
one_name = two_name = it->string;
@@ -355,14 +389,13 @@ static void wt_status_print_change_data(struct wt_status *s,
what = wt_status_diff_status_string(status);
if (!what)
die(_("bug: unhandled diff status %c"), status);
- /* 1 for colon, which is not part of "what" */
- len = strlen(padding) - (utf8_strwidth(what) + 1);
+ len = label_width - utf8_strwidth(what);
assert(len >= 0);
if (status == DIFF_STATUS_COPIED || status == DIFF_STATUS_RENAMED)
- status_printf_more(s, c, "%s:%.*s%s -> %s",
+ status_printf_more(s, c, "%s%.*s%s -> %s",
what, len, padding, one, two);
else
- status_printf_more(s, c, "%s:%.*s%s",
+ status_printf_more(s, c, "%s%.*s%s",
what, len, padding, one);
if (extra.len) {
status_printf_more(s, color(WT_STATUS_HEADER, s), "%s", extra.buf);
@@ -510,7 +543,7 @@ static void wt_status_collect_changes_initial(struct wt_status *s)
struct wt_status_change_data *d;
const struct cache_entry *ce = active_cache[i];
- if (!ce_path_match(ce, &s->pathspec))
+ if (!ce_path_match(ce, &s->pathspec, NULL))
continue;
it = string_list_insert(&s->change, ce->name);
d = it->util;
@@ -552,7 +585,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
for (i = 0; i < dir.nr; i++) {
struct dir_entry *ent = dir.entries[i];
if (cache_name_is_other(ent->name, ent->len) &&
- match_pathspec_depth(&s->pathspec, ent->name, ent->len, 0, NULL))
+ dir_path_match(ent, &s->pathspec, 0, NULL))
string_list_insert(&s->untracked, ent->name);
free(ent);
}
@@ -560,7 +593,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
for (i = 0; i < dir.ignored_nr; i++) {
struct dir_entry *ent = dir.ignored[i];
if (cache_name_is_other(ent->name, ent->len) &&
- match_pathspec_depth(&s->pathspec, ent->name, ent->len, 0, NULL))
+ dir_path_match(ent, &s->pathspec, 0, NULL))
string_list_insert(&s->ignored, ent->name);
free(ent);
}