Test updates.
* da/t7800-cleanup:
t7800: replace "wc -l" with test_line_count
/git-rebase--merge
/git-receive-pack
/git-reflog
-/git-relink
/git-remote
/git-remote-http
/git-remote-https
/config.mak.autogen
/config.mak.append
/configure
-/unicode
/tags
/TAGS
/cscope*
Ralf Thielow <ralf.thielow@gmail.com> <ralf.thielow@googlemail.com>
Ramsay Jones <ramsay@ramsayjones.plus.com> <ramsay@ramsay1.demon.co.uk>
René Scharfe <l.s.r@web.de> <rene.scharfe@lsrfire.ath.cx>
+Richard Hansen <rhansen@rhansen.org> <hansenr@google.com>
+Richard Hansen <rhansen@rhansen.org> <rhansen@bbn.com>
Robert Fitzsimons <robfitz@273k.net>
Robert Shearman <robertshearman@gmail.com> <rob@codeweavers.com>
Robert Zeh <robert.a.zeh@gmail.com>
Steven Walter <stevenrwalter@gmail.com> <swalter@lpdev.prtdev.lexmark.com>
Sven Verdoolaege <skimo@kotnet.org> <Sven.Verdoolaege@cs.kuleuven.ac.be>
Sven Verdoolaege <skimo@kotnet.org> <skimo@liacs.nl>
+SZEDER Gábor <szeder.dev@gmail.com> <szeder@ira.uka.de>
Tay Ray Chuan <rctay89@gmail.com>
Ted Percival <ted@midg3t.net> <ted.percival@quest.com>
Theodore Ts'o <tytso@mit.edu>
# The Linux build installs the defined dependency versions below.
# The OS X build installs the latest available versions. Keep that
# in mind when you encounter a broken OS X build!
- - LINUX_P4_VERSION="16.1"
- - LINUX_GIT_LFS_VERSION="1.2.0"
+ - LINUX_P4_VERSION="16.2"
+ - LINUX_GIT_LFS_VERSION="1.5.2"
- DEFAULT_TEST_TARGET=prove
- GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save"
- GIT_TEST_OPTS="--verbose-log"
popd
;;
osx)
- brew_force_set_latest_binary_hash () {
- FORMULA=$1
- SHA=$(brew fetch --force $FORMULA 2>&1 | grep ^SHA256: | cut -d ' ' -f 2)
- sed -E -i.bak "s/sha256 \"[0-9a-f]{64}\"/sha256 \"$SHA\"/g" \
- "$(brew --repository homebrew/homebrew-binary)/$FORMULA.rb"
- }
brew update --quiet
- brew tap homebrew/binary --quiet
- brew_force_set_latest_binary_hash perforce
- brew_force_set_latest_binary_hash perforce-server
# Uncomment this if you want to run perf tests:
# brew install gnu-time
- brew install git-lfs perforce-server perforce gettext
+ brew install git-lfs gettext
brew link --force gettext
+ brew install caskroom/cask/perforce
;;
esac;
echo "$(tput setaf 6)Perforce Server Version$(tput sgr0)";
x = 1;
}
- is frowned upon. A gray area is when the statement extends
- over a few lines, and/or you have a lengthy comment atop of
- it. Also, like in the Linux kernel, if there is a long list
- of "else if" statements, it can make sense to add braces to
- single line blocks.
+ is frowned upon. But there are a few exceptions:
+
+ - When the statement extends over a few lines (e.g., a while loop
+ with an embedded conditional, or a comment). E.g.:
+
+ while (foo) {
+ if (x)
+ one();
+ else
+ two();
+ }
+
+ if (foo) {
+ /*
+ * This one requires some explanation,
+ * so we're better off with braces to make
+ * it obvious that the indentation is correct.
+ */
+ doit();
+ }
+
+ - When there are multiple arms to a conditional and some of them
+ require braces, enclose even a single line block in braces for
+ consistency. E.g.:
+
+ if (foo) {
+ doit();
+ } else {
+ one();
+ two();
+ three();
+ }
- We try to avoid assignments in the condition of an "if" statement.
DOCBOOK2X_TEXI = docbook2x-texi
DBLATEX = dblatex
ASCIIDOC_DBLATEX_DIR = /etc/asciidoc/dblatex
+DBLATEX_COMMON = -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty
ifndef PERL_PATH
PERL_PATH = /usr/bin/perl
endif
XMLTO_EXTRA += -m manpage-quote-apos.xsl
endif
+ifdef USE_ASCIIDOCTOR
+ASCIIDOC = asciidoctor
+ASCIIDOC_CONF =
+ASCIIDOC_HTML = xhtml5
+ASCIIDOC_DOCBOOK = docbook45
+ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
+ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
+DBLATEX_COMMON =
+endif
+
SHELL_PATH ?= $(SHELL)
# Shell quote;
SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
user-manual.xml: user-manual.txt user-manual.conf
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
- $(TXT_TO_XML) -d article -o $@+ $< && \
+ $(TXT_TO_XML) -d book -o $@+ $< && \
mv $@+ $@
technical/api-index.txt: technical/api-index-skel.txt \
user-manual.pdf: user-manual.xml
$(QUIET_DBLATEX)$(RM) $@+ $@ && \
- $(DBLATEX) -o $@+ -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty $< && \
+ $(DBLATEX) -o $@+ $(DBLATEX_COMMON) $< && \
mv $@+ $@
-gitman.texi: $(MAN_XML) cat-texi.perl
+gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
- ($(foreach xml,$(MAN_XML),$(DOCBOOK2X_TEXI) --encoding=UTF-8 \
- --to-stdout $(xml) &&) true) > $@++ && \
+ ($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml)+ texi.xsl $(xml) && \
+ $(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml)+ && \
+ rm $(xml)+ &&) true) > $@++ && \
$(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \
rm $@++ && \
mv $@+ $@
--- /dev/null
+Git v2.10.3 Release Notes
+=========================
+
+Fixes since v2.10.2
+-------------------
+
+ * Extract a small helper out of the function that reads the authors
+ script file "git am" internally uses.
+ This by itself is not useful until a second caller appears in the
+ future for "rebase -i" helper.
+
+ * The command-line completion script (in contrib/) learned to
+ complete "git cmd ^mas<HT>" to complete the negative end of
+ reference to "git cmd ^master".
+
+ * "git send-email" attempts to pick up valid e-mails from the
+ trailers, but people in real world write non-addresses there, like
+ "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
+ on the availability and vintage of Mail::Address perl module.
+
+ * The code that we have used for the past 10+ years to cycle
+ 4-element ring buffers turns out to be not quite portable in
+ theoretical world.
+
+ * "git daemon" used fixed-length buffers to turn URL to the
+ repository the client asked for into the server side directory
+ path, using snprintf() to avoid overflowing these buffers, but
+ allowed possibly truncated paths to the directory. This has been
+ tightened to reject such a request that causes overlong path to be
+ required to serve.
+
+ * Recent update to git-sh-setup (a library of shell functions that
+ are used by our in-tree scripted Porcelain commands) included
+ another shell library git-sh-i18n without specifying where it is,
+ relying on the $PATH. This has been fixed to be more explicit by
+ prefixing $(git --exec-path) output in front.
+
+ * Fix for a racy false-positive test failure.
+
+ * Portability update and workaround for builds on recent Mac OS X.
+
+ * Update to the test framework made in 2.9 timeframe broke running
+ the tests under valgrind, which has been fixed.
+
+ * Improve the rule to convert "unsigned char [20]" into "struct
+ object_id *" in contrib/coccinelle/
+
+Also contains minor documentation updates and code clean-ups.
* Even though "git hash-objects", which is a tool to take an
on-filesystem data stream and put it into the Git object store,
- allowed to perform the "outside-world-to-Git" conversions (e.g.
+ can perform "outside-world-to-Git" conversions (e.g.
end-of-line conversions and application of the clean-filter), and
- it had the feature on by default from very early days, its reverse
+ it has had this feature on by default from very early days, its reverse
operation "git cat-file", which takes an object from the Git object
- store and externalize for the consumption by the outside world,
+ store and externalizes it for consumption by the outside world,
lacked an equivalent mechanism to run the "Git-to-outside-world"
conversion. The command learned the "--filters" option to do so.
- * Output from "git diff" can be made easier to read by selecting
+ * Output from "git diff" can be made easier to read by intelligently selecting
which lines are common and which lines are added/deleted
- intelligently when the lines before and after the changed section
- are the same. A command line option is added to help with the
- experiment to find a good heuristics.
+ when the lines before and after the changed section
+ are the same. A command line option (--indent-heuristic) and a
+ configuration variable (diff.indentHeuristic) are added to help with the
+ experiment to find good heuristics.
* In some projects, it is common to use "[RFC PATCH]" as the subject
prefix for a patch meant for discussion rather than application. A
- new option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH"
+ new format-patch option "--rfc" is a short-hand for "--subject-prefix=RFC PATCH"
to help the participants of such projects.
- * "git add --chmod=+x <pathspec>" added recently only toggled the
+ * "git add --chmod={+,-}x <pathspec>" only changed the
executable bit for paths that are either new or modified. This has
- been corrected to flip the executable bit for all paths that match
+ been corrected to change the executable bit for all paths that match
the given pathspec.
* When "git format-patch --stdout" output is placed as an in-body
- header and it uses the RFC2822 header folding, "git am" failed to
+ header and it uses RFC2822 header folding, "git am" fails to
put the header line back into a single logical line. The
underlying "git mailinfo" was taught to handle this properly.
* "gitweb" can spawn "highlight" to show blob contents with
(programming) language-specific syntax highlighting, but only
when the language is known. "highlight" can however be told
- to make the guess itself by giving it "--force" option, which
+ to guess the language itself by giving it "--force" option, which
has been enabled.
* "git gui" l10n to Portuguese.
history leading to nth parent was looking the other way.
* In recent versions of cURL, GSSAPI credential delegation is
- disabled by default due to CVE-2011-2192; introduce a configuration
- to selectively allow enabling this.
+ disabled by default due to CVE-2011-2192; introduce a http.delegation
+ configuration variable to selectively allow enabling this.
(merge 26a7b23429 ps/http-gssapi-cred-delegation later to maint).
* "git mergetool" learned to honor "-O<orderfile>" to control the
order of paths to present to the end user.
* "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
- configuration variable to set it by default.
+ configuration variable (diff.wsErrorHighlight) to set it by default.
- * "git ls-files" learned "--recurse-submodules" option that can be
- used to get a listing of tracked files across submodules (i.e. this
- only works with "--cached" option, not for listing untracked or
+ * "git ls-files" learned the "--recurse-submodules" option
+ to get a listing of tracked files across submodules (i.e. this
+ only works with the "--cached" option, not for listing untracked or
ignored files). This would be a useful tool to sit on the upstream
side of a pipe that is read with xargs to work on all working tree
files from the top-level superproject.
implementations of XDG Secret Service API has been added to
contrib/credential/.
- * The GPG verification status shown in "%G?" pretty format specifier
+ * The GPG verification status shown by the "%G?" pretty format specifier
was not rich enough to differentiate a signature made by an expired
key, a signature made by a revoked key, etc. New output letters
have been assigned to express them.
learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
into clickable links in its output.
- * When new paths were added by "git add -N" to the index, it was
- enough to circumvent the check by "git commit" to refrain from
- making an empty commit without "--allow-empty". The same logic
- prevented "git status" to show such a path as "new file" in the
+ * "git commit" created an empty commit when invoked with an index
+ consisting solely of intend-to-add paths (added with "git add -N").
+ It now requires the "--allow-empty" option to create such a commit.
+ The same logic prevented "git status" from showing such paths as "new files" in the
"Changes not staged for commit" section.
- * The smudge/clean filter API expect an external process is spawned
- to filter the contents for each path that has a filter defined. A
+ * The smudge/clean filter API spawns an external process
+ to filter the contents of each path that has a filter defined. A
new type of "process" filter API has been added to allow the first
request to run the filter for a path to spawn a single process, and
- all filtering need is served by this single process for multiple
+ all filtering is served by this single process for multiple
paths, reducing the process creation overhead.
* The user always has to say "stash@{$N}" when naming a single
script file "git am" internally uses.
(merge a77598e jc/am-read-author-file later to maint).
- * Lifts calls to exit(2) and die() higher in the callchain in
+ * Lift calls to exit(2) and die() higher in the callchain in
sequencer.c files so that more helper functions in it can be used
by callers that want to handle error conditions themselves.
does not advertise any refs, but "git fetch" was not prepared to
see such an advertisement. When the other side disconnects without
giving any ref advertisement, we used to say "there may not be a
- repository at that URL", but we may have seen other advertisement
+ repository at that URL", but we may have seen other advertisements
like "shallow" and ".have" in which case we definitely know that a
repository is there. The code to detect this case has also been
updated.
* Some codepaths in "git pack-objects" were not ready to use an
- existing pack bitmap; now they are and as the result they have
+ existing pack bitmap; now they are and as a result they have
become faster.
* The codepath in "git fsck" to detect malformed tree objects has
packfile first.
(merge c9af708b1a jk/pack-objects-optim-mru later to maint).
- * Codepaths involved in interacting alternate object store have
+ * Codepaths involved in interacting alternate object stores have
been cleaned up.
* In order for the receiving end of "git push" to inspect the
from the sending end need to be made available to the hook and
the mechanism for the connectivity check, and this was done
traditionally by storing the objects in the receiving repository
- and letting "git gc" to expire it. Instead, store the newly
+ and letting "git gc" expire them. Instead, store the newly
received objects in a temporary area, and make them available by
reusing the alternate object store mechanism to them only while we
decide if we accept the check, and once we decide, either migrate
replaced with a priority queue.
* "git diff --no-index" codepath has been updated not to try to peek
- into .git/ directory that happens to be under the current
+ into a .git/ directory that happens to be under the current
directory, when we know we are operating outside any repository.
* Update of the sequencer codebase to make it reusable to reimplement
holding onto them. Use O_CLOEXEC flag to open files in various
codepaths.
- * Update "interpret-trailers" machinery and teaches it that people in
- real world write all sorts of crufts in the "trailer" that was
+ * Update "interpret-trailers" machinery and teach it that people in
+ the real world write all sorts of cruft in the "trailer" that was
originally designed to have the neat-o "Mail-Header: like thing"
and nothing else.
has been removed.
* Having a submodule whose ".git" repository is somehow corrupt
- caused a few commands that recurse into submodules loop forever.
+ caused a few commands that recurse into submodules to loop forever.
* "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
the resulting repository becomes an invalid one. Teach the command
forgot to update "git gui" to look at the configuration to match
this change.
- * "git add --chmod=+x" added recently lacked documentation, which has
+ * "git add --chmod={+,-}x" added recently lacked documentation, which has
been corrected.
* "git log --cherry-pick" used to include merge commits as candidates
to be matched up with other commits, resulting a lot of wasted time.
- The patch-id generation logic has been updated to ignore merges to
+ The patch-id generation logic has been updated to ignore merges and
avoid the wastage.
* The http transport (with curl-multi option, which is the default
line of the next one. This process may have to merge two adjacent
hunks, but the code forgot to do so in some cases.
- * Performance tests done via "t/perf" did not use the same set of
+ * Performance tests done via "t/perf" did not use the right
build configuration if the user relied on autoconf generated
configuration.
* "git format-patch --base=..." feature that was recently added
- showed the base commit information after "-- " e-mail signature
+ showed the base commit information after the "-- " e-mail signature
line, which turned out to be inconvenient. The base information
has been moved above the signature line.
* More i18n.
* Even when "git pull --rebase=preserve" (and the underlying "git
- rebase --preserve") can complete without creating any new commit
- (i.e. fast-forwards), it still insisted on having a usable ident
+ rebase --preserve") can complete without creating any new commits
+ (i.e. fast-forwards), it still insisted on having usable ident
information (read: user.email is set correctly), which was less
than nice. As the underlying commands used inside "git rebase"
would fail with a more meaningful error message and advice text
* Documentation around tools to import from CVS was fairly outdated.
* "git clone --recurse-submodules" lost the progress eye-candy in
- recent update, which has been corrected.
+ a recent update, which has been corrected.
* A low-level function verify_packfile() was meant to show errors
that were detected without dying itself, but under some conditions
to a design bug, which has been fixed.
* In the codepath that comes up with the hostname to be used in an
- e-mail when the user didn't tell us, we looked at ai_canonname
+ e-mail when the user didn't tell us, we looked at the ai_canonname
field in struct addrinfo without making sure it is not NULL first.
* "git worktree", even though it used the default_abbrev setting that
- ought to be affected by core.abbrev configuration variable, ignored
+ ought to be affected by the core.abbrev configuration variable, ignored
the variable setting. The command has been taught to read the
default set of configuration variables to correct this.
* "git init" tried to record core.worktree in the repository's
- 'config' file when GIT_WORK_TREE environment variable was set and
+ 'config' file when the GIT_WORK_TREE environment variable was set and
it was different from where GIT_DIR appears as ".git" at its top,
but the logic was faulty when .git is a "gitdir:" file that points
at the real place, causing trouble in working trees that are
managed by "git worktree". This has been corrected.
* Codepaths that read from an on-disk loose object were too loose in
- validating what they are reading is a proper object file and
+ validating that they are reading a proper object file and
sometimes read past the data they read from the disk, which has
been corrected. H/t to Gustavo Grieco for reporting.
time, and "git gui" was the last in-tree user of the syntax. This
is finally fixed, so that we can move forward with the deprecation.
- * An author name, that spelled a backslash-quoted double quote in the
- human readable part "My \"double quoted\" name", was not unquoted
+ * An author name that has a backslash-quoted double quote in the
+ human readable part ("My \"double quoted\" name"), was not unquoted
correctly while applying a patch from a piece of e-mail.
* Doc update to clarify what "log -3 --reverse" does.
has been fixed; this did not affect any existing code as nobody
tried to write anything after the padding on such a line, though.
- * The code that parses the format parameter of for-each-ref command
+ * The code that parses the format parameter of the for-each-ref command
has seen a micro-optimization.
- * When we started cURL to talk to imap server when a new enough
- version of cURL library is available, we forgot to explicitly add
+ * When we started to use cURL to talk to an imap server, we forgot to explicitly add
imap(s):// before the destination. To some folks, that didn't work
and the library tried to make HTTP(s) requests instead.
"Give me only the history since that version".
(merge cccf74e2da nd/shallow-deepen later to maint).
- * It is a common mistake to say "git blame --reverse OLD path",
- expecting that the command line is dwimmed as if asking how lines
+ * "git blame --reverse OLD path" is now DWIMmed to show how lines
in path in an old revision OLD have survived up to the current
commit.
(merge e1d09701a4 jc/blame-reverse later to maint).
- * http.emptyauth configuration is a way to allow an empty username to
+ * The http.emptyauth configuration variable is a way to allow an empty username to
pass when attempting to authenticate using mechanisms like
Kerberos. We took an unspecified (NULL) username and sent ":"
(i.e. no username, no password) to CURLOPT_USERPWD, but did not do
-p <paths>" adds to the current contents of the index to come up
with what to commit.
- * A stray symbolic link in $GIT_DIR/refs/ directory could make name
+ * A stray symbolic link in the $GIT_DIR/refs/ directory could make name
resolution loop forever, which has been corrected.
* The "submodule.<name>.path" stored in .gitmodules is never copied
to .git/config and such a key in .git/config has no meaning, but
- the documentation described it and submodule.<name>.url next to
- each other as if both belong to .git/config. This has been fixed.
+ the documentation described it next to submodule.<name>.url
+ as if both belong to .git/config. This has been fixed.
- * In a worktree connected to a repository elsewhere, created via "git
+ * In a worktree created via "git
worktree", "git checkout" attempts to protect users from confusion
by refusing to check out a branch that is already checked out in
another worktree. However, this also prevented checking out a
- branch, which is designated as the primary branch of a bare
- reopsitory, in a worktree that is connected to the bare
+ branch which is designated as the primary branch of a bare
+ repository, in a worktree that is connected to the bare
repository. The check has been corrected to allow it.
* "git rebase" immediately after "git clone" failed to find the fork
* When fetching from a remote that has many tags that are irrelevant
to branches we are following, we used to waste way too many cycles
- when checking if the object pointed at by a tag (that we are not
+ checking if the object pointed at by a tag (that we are not
going to fetch!) exists in our repository too carefully.
* Protect our code from over-eager compilers.
"." instead of the branch name; the documentation has been updated
to describe it.
- * A hot-fix for a test added by a recent topic that went to both
- 'master' and 'maint' already.
-
* "git send-email" attempts to pick up valid e-mails from the
- trailers, but people in real world write non-addresses there, like
+ trailers, but people in the real world write non-addresses there, like
"Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
- on the availability and vintage of Mail::Address perl module.
+ on the availability and vintage of the Mail::Address perl module.
(merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).
- * The Travis CI configuration we ship ran the tests with --verbose
+ * The Travis CI configuration we ship ran the tests with the --verbose
option but this risks non-TAP output that happens to be "ok" to be
misinterpreted as TAP signalling a test that passed. This resulted
- in unnecessary failure. This has been corrected by introducing a
+ in unnecessary failures. This has been corrected by introducing a
new mode to run our tests in the test harness to send the verbose
output separately to the log file.
- * Some AsciiDoc formatter mishandles a displayed illustration with
+ * Some AsciiDoc formatters mishandle a displayed illustration with
tabs in it. Adjust a few of them in merge-base documentation to
work around them.
- * A minor regression fix for "git submodule" that was introduced
+ * Fixed a minor regression in "git submodule" that was introduced
when more helper functions were reimplemented in C.
(merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).
theoretical world.
(merge bb84735c80 rs/ring-buffer-wraparound later to maint).
- * "git daemon" used fixed-length buffers to turn URL to the
+ * "git daemon" used fixed-length buffers to turn URLs to the
repository the client asked for into the server side directory
- path, using snprintf() to avoid overflowing these buffers, but
+ paths, using snprintf() to avoid overflowing these buffers, but
allowed possibly truncated paths to the directory. This has been
- tightened to reject such a request that causes overlong path to be
- required to serve.
+ tightened to reject such a request that causes an overlong path to be
+ served.
(merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).
* Recent update to git-sh-setup (a library of shell functions that
are used by our in-tree scripted Porcelain commands) included
another shell library git-sh-i18n without specifying where it is,
relying on the $PATH. This has been fixed to be more explicit by
- prefixing $(git --exec-path) output in front.
+ prefixing with $(git --exec-path) output.
(merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).
* Fix for a racy false-positive test failure.
caused the command to segfault when on an unborn branch.
(merge 84679d470d jc/for-each-ref-head-segfault-fix later to maint).
- * "git rebase -i" did not work well with core.commentchar
+ * "git rebase -i" did not work well with the core.commentchar
configuration variable for two reasons, both of which have been
fixed.
(merge 882cd23777 js/rebase-i-commentchar-fix later to maint).
--- /dev/null
+Git v2.11.1 Release Notes
+=========================
+
+Fixes since v2.11
+-----------------
+
+ * The default Travis-CI configuration specifies newer P4 and GitLFS.
+
+ * The character width table has been updated to match Unicode 9.0
+
+ * Update the isatty() emulation for Windows by updating the previous
+ hack that depended on internals of (older) MSVC runtime.
+
+ * "git rev-parse --symbolic" failed with a more recent notation like
+ "HEAD^-1" and "HEAD^!".
+
+ * An empty directory in a working tree that can simply be nuked used
+ to interfere while merging or cherry-picking a change to create a
+ submodule directory there, which has been fixed..
+
+ * The code in "git push" to compute if any commit being pushed in the
+ superproject binds a commit in a submodule that hasn't been pushed
+ out was overly inefficient, making it unusable even for a small
+ project that does not have any submodule but have a reasonable
+ number of refs.
+
+ * "git push --dry-run --recurse-submodule=on-demand" wasn't
+ "--dry-run" in the submodules.
+
+ * The output from "git worktree list" was made in readdir() order,
+ and was unstable.
+
+ * mergetool.<tool>.trustExitCode configuration variable did not apply
+ to built-in tools, but now it does.
+
+ * "git p4" LFS support was broken when LFS stores an empty blob.
+
+ * Fix a corner case in merge-recursive regression that crept in
+ during 2.10 development cycle.
+
+ * Update the error messages from the dumb-http client when it fails
+ to obtain loose objects; we used to give sensible error message
+ only upon 404 but we now forbid unexpected redirects that needs to
+ be reported with something sensible.
+
+ * When diff.renames configuration is on (and with Git 2.9 and later,
+ it is enabled by default, which made it worse), "git stash"
+ misbehaved if a file is removed and another file with a very
+ similar content is added.
+
+ * "git diff --no-index" did not take "--no-abbrev" option.
+
+ * "git difftool --dir-diff" had a minor regression when started from
+ a subdirectory, which has been fixed.
+
+ * "git commit --allow-empty --only" (no pathspec) with dirty index
+ ought to be an acceptable way to create a new commit that does not
+ change any paths, but it was forbidden, perhaps because nobody
+ needed it so far.
+
+ * A pathname that begins with "//" or "\\" on Windows is special but
+ path normalization logic was unaware of it.
+
+ * "git pull --rebase", when there is no new commits on our side since
+ we forked from the upstream, should be able to fast-forward without
+ invoking "git rebase", but it didn't.
+
+ * The way to specify hotkeys to "xxdiff" that is used by "git
+ mergetool" has been modernized to match recent versions of xxdiff.
+
+ * Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
+ to where cherry-pick started while picking multiple changes, when
+ the cherry-pick stopped to ask for help from the user, and the user
+ did "git reset --hard" to a different commit in order to re-attempt
+ the operation.
+
+ * Code cleanup in shallow boundary computation.
+
+ * A recent update to receive-pack to make it easier to drop garbage
+ objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
+ have a pathname with a colon in it (no surprise!), and this in turn
+ made it impossible to push into a repository at such a path. This
+ has been fixed by introducing a quoting mechanism used when
+ appending such a path to the colon-separated list.
+
+ * The function usage_msg_opt() has been updated to say "fatal:"
+ before the custom message programs give, when they want to die
+ with a message about wrong command line options followed by the
+ standard usage string.
+
+ * "git index-pack --stdin" needs an access to an existing repository,
+ but "git index-pack file.pack" to generate an .idx file that
+ corresponds to a packfile does not.
+
+ * Fix for NDEBUG builds.
+
+ * A lazy "git push" without refspec did not internally use a fully
+ specified refspec to perform 'current', 'simple', or 'upstream'
+ push, causing unnecessary "ambiguous ref" errors.
+
+ * "git p4" misbehaved when swapping a directory and a symbolic link.
+
+ * Even though an fix was attempted in Git 2.9.3 days, but running
+ "git difftool --dir-diff" from a subdirectory never worked. This
+ has been fixed.
+
+ * "git p4" that tracks multile p4 paths imported a single changelist
+ that touches files in these multiple paths as one commit, followed
+ by many empty commits. This has been fixed.
+
+ * A potential but unlikely buffer overflow in Windows port has been
+ fixed.
+
+ * When the http server gives an incomplete response to a smart-http
+ rpc call, it could lead to client waiting for a full response that
+ will never come. Teach the client side to notice this condition
+ and abort the transfer.
+
+ * Some platforms no longer understand "latin-1" that is still seen in
+ the wild in e-mail headers; replace them with "iso-8859-1" that is
+ more widely known when conversion fails from/to it.
+
+ * Update the procedure to generate "tags" for developer support.
+
+ * Update the definition of the MacOSX test environment used by
+ TravisCI.
+
+ * A few git-svn updates.
+
+ * Compression setting for producing packfiles were spread across
+ three codepaths, one of which did not honor any configuration.
+ Unify these so that all of them honor core.compression and
+ pack.compression variables the same way.
+
+ * "git fast-import" sometimes mishandled while rebalancing notes
+ tree, which has been fixed.
+
+ * Recent update to the default abbreviation length that auto-scales
+ lacked documentation update, which has been corrected.
+
+ * Leakage of lockfiles in the config subsystem has been fixed.
+
+ * It is natural that "git gc --auto" may not attempt to pack
+ everything into a single pack, and there is no point in warning
+ when the user has configured the system to use the pack bitmap,
+ leading to disabling further "gc".
+
+ * "git archive" did not read the standard configuration files, and
+ failed to notice a file that is marked as binary via the userdiff
+ driver configuration.
+
+ * "git blame --porcelain" misidentified the "previous" <commit, path>
+ pair (aka "source") when contents came from two or more files.
+
+ * "git rebase -i" with a recent update started showing an incorrect
+ count when squashing more than 10 commits.
+
+ * "git <cmd> @{push}" on a detached HEAD used to segfault; it has
+ been corrected to error out with a message.
+
+ * Tighten a test to avoid mistaking an extended ERE regexp engine as
+ a PRE regexp engine.
+
+ * Typing ^C to pager, which usually does not kill it, killed Git and
+ took the pager down as a collateral damage in certain process-tree
+ structure. This has been fixed.
+
+Also contains various documentation updates and code clean-ups.
--- /dev/null
+Git 2.12 Release Notes
+======================
+
+Backward compatibility notes.
+
+ * Use of an empty string that is used for 'everything matches' is
+ still warned and Git asks users to use a more explicit '.' for that
+ instead. The hope is that existing users will not mind this
+ change, and eventually the warning can be turned into a hard error,
+ upgrading the deprecation into removal of this (mis)feature. That
+ is not scheduled to happen in the upcoming release (yet).
+
+ * The historical argument order "git merge <msg> HEAD <commit>..."
+ has been deprecated for quite some time, and will be removed in a
+ future release.
+
+ * An ancient script "git relink" has been removed.
+
+
+Updates since v2.11
+-------------------
+
+UI, Workflows & Features
+
+ * Various updates to "git p4".
+
+ * "git p4" didn't interact with the internal of .git directory
+ correctly in the modern "git-worktree"-enabled world.
+
+ * "git branch --list" and friends learned "--ignore-case" option to
+ optionally sort branches and tags case insensitively.
+
+ * In addition to %(subject), %(body), "log --pretty=format:..."
+ learned a new placeholder %(trailers).
+
+ * "git rebase" learned "--quit" option, which allows a user to
+ remove the metadata left by an earlier "git rebase" that was
+ manually aborted without using "git rebase --abort".
+
+ * "git clone --reference $there --recurse-submodules $super" has been
+ taught to guess repositories usable as references for submodules of
+ $super that are embedded in $there while making a clone of the
+ superproject borrow objects from $there; extend the mechanism to
+ also allow submodules of these submodules to borrow repositories
+ embedded in these clones of the submodules embedded in the clone of
+ the superproject.
+
+ * Porcelain scripts written in Perl are getting internationalized.
+
+ * "git merge --continue" has been added as a synonym to "git commit"
+ to conclude a merge that has stopped due to conflicts.
+
+ * Finer-grained control of what protocols are allowed for transports
+ during clone/fetch/push have been enabled via a new configuration
+ mechanism.
+
+ * "git shortlog" learned "--committer" option to group commits by
+ committer, instead of author.
+
+ * GitLFS integration with "git p4" has been updated.
+
+ * The isatty() emulation for Windows has been updated to eradicate
+ the previous hack that depended on internals of (older) MSVC
+ runtime.
+
+ * Some platforms no longer understand "latin-1" that is still seen in
+ the wild in e-mail headers; replace them with "iso-8859-1" that is
+ more widely known when conversion fails from/to it.
+
+ * "git grep" has been taught to optionally recurse into submodules.
+
+ * "git rm" used to refuse to remove a submodule when it has its own
+ git repository embedded in its working tree. It learned to move
+ the repository away to $GIT_DIR/modules/ of the superproject
+ instead, and allow the submodule to be deleted (as long as there
+ will be no loss of local modifications, that is).
+
+ * A recent updates to "git p4" was not usable for older p4 but it
+ could be made to work with minimum changes. Do so.
+
+ * "git diff" learned diff.interHunkContext configuration variable
+ that gives the default value for its --inter-hunk-context option.
+
+ * The prereleaseSuffix feature of version comparison that is used in
+ "git tag -l" did not correctly when two or more prereleases for the
+ same release were present (e.g. when 2.0, 2.0-beta1, and 2.0-beta2
+ are there and the code needs to compare 2.0-beta1 and 2.0-beta2).
+
+ * "git submodule push" learned "--recurse-submodules=only option to
+ push submodules out without pushing the top-level superproject.
+
+ * "git tag" and "git verify-tag" learned to put GPG verification
+ status in their "--format=<placeholders>" output format.
+
+ * An ancient repository conversion tool left in contrib/ has been
+ removed.
+
+ * "git show-ref HEAD" used with "--verify" because the user is not
+ interested in seeing refs/remotes/origin/HEAD, and used with
+ "--head" because the user does not want HEAD to be filtered out,
+ i.e. "git show-ref --head --verify HEAD", did not work as expected.
+
+ * "git submodule add" used to be confused and refused to add a
+ locally created repository; users can now use "--force" option
+ to add them.
+ (merge 619acfc78c sb/submodule-add-force later to maint).
+
+ * Some people feel the default set of colors used by "git log --graph"
+ rather limiting. A mechanism to customize the set of colors has
+ been introduced.
+
+ * "git read-tree" and its underlying unpack_trees() machinery learned
+ to report problematic paths prefixed with the --super-prefix option.
+
+ * When a submodule "A", which has another submodule "B" nested within
+ it, is "absorbed" into the top-level superproject, the inner
+ submodule "B" used to be left in a strange state. The logic to
+ adjust the .git pointers in these submodules has been corrected.
+
+ * The user can specify a custom update method that is run when
+ "submodule update" updates an already checked out submodule. This
+ was ignored when checking the submodule out for the first time and
+ we instead always just checked out the commit that is bound to the
+ path in the superproject's index.
+
+ * The command line completion (in contrib/) learned that
+ "git diff --submodule=" can take "diff" as a recently added option.
+
+ * The "core.logAllRefUpdates" that used to be boolean has been
+ enhanced to take 'always' as well, to record ref updates to refs
+ other than the ones that are expected to be updated (i.e. branches,
+ remote-tracking branches and notes).
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * Commands that operate on a log message and add lines to the trailer
+ blocks, such as "format-patch -s", "cherry-pick (-x|-s)", and
+ "commit -s", have been taught to use the logic of and share the
+ code with "git interpret-trailer".
+
+ * The default Travis-CI configuration specifies newer P4 and GitLFS.
+
+ * The "fast hash" that had disastrous performance issues in some
+ corner cases has been retired from the internal diff.
+
+ * The character width table has been updated to match Unicode 9.0
+
+ * Update the procedure to generate "tags" for developer support.
+
+ * The codeflow of setting NOATIME and CLOEXEC on file descriptors Git
+ opens has been simplified.
+
+ * "git diff" and its family had two experimental heuristics to shift
+ the contents of a hunk to make the patch easier to read. One of
+ them turns out to be better than the other, so leave only the
+ "--indent-heuristic" option and remove the other one.
+
+ * A new submodule helper "git submodule embedgitdirs" to make it
+ easier to move embedded .git/ directory for submodules in a
+ superproject to .git/modules/ (and point the latter with the former
+ that is turned into a "gitdir:" file) has been added.
+
+ * "git push \\server\share\dir" has recently regressed and then
+ fixed. A test has retroactively been added for this breakage.
+
+ * Build updates for Cygwin.
+
+ * The implementation of "real_path()" was to go there with chdir(2)
+ and call getcwd(3), but this obviously wouldn't be usable in a
+ threaded environment. Rewrite it to manually resolve relative
+ paths including symbolic links in path components.
+
+ * Adjust documentation to help AsciiDoctor render better while not
+ breaking the rendering done by AsciiDoc.
+
+ * The sequencer machinery has been further enhanced so that a later
+ set of patches can start using it to reimplement "rebase -i".
+
+ * Update the definition of the MacOSX test environment used by
+ TravisCI.
+
+ * Rewrite a scripted porcelain "git difftool" in C.
+
+ * "make -C t failed" will now run only the tests that failed in the
+ previous run. This is usable only when prove is not use, and gives
+ a useless error message when run after "make clean", but otherwise
+ is serviceable.
+
+ * "uchar [40]" to "struct object_id" conversion continues.
+
+
+Also contains various documentation updates and code clean-ups.
+
+Fixes since v2.10
+-----------------
+
+Unless otherwise noted, all the fixes since v2.9 in the maintenance
+track are contained in this release (see the maintenance releases'
+notes for details).
+
+ * We often decide if a session is interactive by checking if the
+ standard I/O streams are connected to a TTY, but isatty() that
+ comes with Windows incorrectly returned true if it is used on NUL
+ (i.e. an equivalent to /dev/null). This has been fixed.
+
+ * "git svn" did not work well with path components that are "0", and
+ some configuration variable it uses were not documented.
+
+ * "git rev-parse --symbolic" failed with a more recent notation like
+ "HEAD^-1" and "HEAD^!".
+
+ * An empty directory in a working tree that can simply be nuked used
+ to interfere while merging or cherry-picking a change to create a
+ submodule directory there, which has been fixed..
+
+ * The code in "git push" to compute if any commit being pushed in the
+ superproject binds a commit in a submodule that hasn't been pushed
+ out was overly inefficient, making it unusable even for a small
+ project that does not have any submodule but have a reasonable
+ number of refs.
+
+ * "git push --dry-run --recurse-submodule=on-demand" wasn't
+ "--dry-run" in the submodules.
+
+ * The output from "git worktree list" was made in readdir() order,
+ and was unstable.
+
+ * mergetool.<tool>.trustExitCode configuration variable did not apply
+ to built-in tools, but now it does.
+
+ * "git p4" LFS support was broken when LFS stores an empty blob.
+
+ * A corner case in merge-recursive regression that crept in
+ during 2.10 development cycle has been fixed.
+
+ * Transport with dumb http can be fooled into following foreign URLs
+ that the end user does not intend to, especially with the server
+ side redirects and http-alternates mechanism, which can lead to
+ security issues. Tighten the redirection and make it more obvious
+ to the end user when it happens.
+
+ * Update the error messages from the dumb-http client when it fails
+ to obtain loose objects; we used to give sensible error message
+ only upon 404 but we now forbid unexpected redirects that needs to
+ be reported with something sensible.
+
+ * When diff.renames configuration is on (and with Git 2.9 and later,
+ it is enabled by default, which made it worse), "git stash"
+ misbehaved if a file is removed and another file with a very
+ similar content is added.
+
+ * "git diff --no-index" did not take "--no-abbrev" option.
+
+ * "git difftool --dir-diff" had a minor regression when started from
+ a subdirectory, which has been fixed.
+
+ * "git commit --allow-empty --only" (no pathspec) with dirty index
+ ought to be an acceptable way to create a new commit that does not
+ change any paths, but it was forbidden, perhaps because nobody
+ needed it so far.
+
+ * Git 2.11 had a minor regression in "merge --ff-only" that competed
+ with another process that simultanously attempted to update the
+ index. We used to explain what went wrong with an error message,
+ but the new code silently failed. The error message has been
+ resurrected.
+
+ * A pathname that begins with "//" or "\\" on Windows is special but
+ path normalization logic was unaware of it.
+
+ * "git pull --rebase", when there is no new commits on our side since
+ we forked from the upstream, should be able to fast-forward without
+ invoking "git rebase", but it didn't.
+
+ * The way to specify hotkeys to "xxdiff" that is used by "git
+ mergetool" has been modernized to match recent versions of xxdiff.
+
+ * Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
+ to where cherry-pick started while picking multiple changes, when
+ the cherry-pick stopped to ask for help from the user, and the user
+ did "git reset --hard" to a different commit in order to re-attempt
+ the operation.
+
+ * Code cleanup in shallow boundary computation.
+
+ * A recent update to receive-pack to make it easier to drop garbage
+ objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
+ have a pathname with a colon in it (no surprise!), and this in turn
+ made it impossible to push into a repository at such a path. This
+ has been fixed by introducing a quoting mechanism used when
+ appending such a path to the colon-separated list.
+
+ * The function usage_msg_opt() has been updated to say "fatal:"
+ before the custom message programs give, when they want to die
+ with a message about wrong command line options followed by the
+ standard usage string.
+
+ * "git index-pack --stdin" needs an access to an existing repository,
+ but "git index-pack file.pack" to generate an .idx file that
+ corresponds to a packfile does not.
+
+ * Fix for NDEBUG builds.
+
+ * A lazy "git push" without refspec did not internally use a fully
+ specified refspec to perform 'current', 'simple', or 'upstream'
+ push, causing unnecessary "ambiguous ref" errors.
+
+ * "git p4" misbehaved when swapping a directory and a symbolic link.
+
+ * Even though an fix was attempted in Git 2.9.3 days, but running
+ "git difftool --dir-diff" from a subdirectory never worked. This
+ has been fixed.
+
+ * "git p4" that tracks multile p4 paths imported a single changelist
+ that touches files in these multiple paths as one commit, followed
+ by many empty commits. This has been fixed.
+
+ * A potential but unlikely buffer overflow in Windows port has been
+ fixed.
+
+ * When the http server gives an incomplete response to a smart-http
+ rpc call, it could lead to client waiting for a full response that
+ will never come. Teach the client side to notice this condition
+ and abort the transfer.
+
+ * Compression setting for producing packfiles were spread across
+ three codepaths, one of which did not honor any configuration.
+ Unify these so that all of them honor core.compression and
+ pack.compression variables the same way.
+
+ * "git fast-import" sometimes mishandled while rebalancing notes
+ tree, which has been fixed.
+
+ * Recent update to the default abbreviation length that auto-scales
+ lacked documentation update, which has been corrected.
+
+ * Leakage of lockfiles in the config subsystem has been fixed.
+
+ * It is natural that "git gc --auto" may not attempt to pack
+ everything into a single pack, and there is no point in warning
+ when the user has configured the system to use the pack bitmap,
+ leading to disabling further "gc".
+
+ * "git archive" did not read the standard configuration files, and
+ failed to notice a file that is marked as binary via the userdiff
+ driver configuration.
+
+ * "git blame --porcelain" misidentified the "previous" <commit, path>
+ pair (aka "source") when contents came from two or more files.
+
+ * "git rebase -i" with a recent update started showing an incorrect
+ count when squashing more than 10 commits.
+
+ * "git <cmd> @{push}" on a detached HEAD used to segfault; it has
+ been corrected to error out with a message.
+
+ * Running "git add a/b" when "a" is a submodule correctly errored
+ out, but without a meaningful error message.
+ (merge 2d81c48fa7 sb/pathspec-errors later to maint).
+
+ * Typing ^C to pager, which usually does not kill it, killed Git and
+ took the pager down as a collateral damage in certain process-tree
+ structure. This has been fixed.
+
+ * "git mergetool" without any pathspec on the command line that is
+ run from a subdirectory became no-op in Git v2.11 by mistake, which
+ has been fixed.
+
+ * Retire long unused/unmaintained gitview from the contrib/ area.
+ (merge 3120925c25 sb/remove-gitview later to maint).
+
+ * Tighten a test to avoid mistaking an extended ERE regexp engine as
+ a PRE regexp engine.
+
+ * An error message with an ASCII control character like '\r' in it
+ can alter the message to hide its early part, which is problematic
+ when a remote side gives such an error message that the local side
+ will relay with a "remote: " prefix.
+ (merge f290089879 jk/vreport-sanitize later to maint).
+
+ * "git fsck" inspects loose objects more carefully now.
+ (merge cce044df7f jk/loose-object-fsck later to maint).
+
+ * A crashing bug introduced in v2.11 timeframe has been found (it is
+ triggerable only in fast-import) and fixed.
+ (merge abd5a00268 jk/clear-delta-base-cache-fix later to maint).
+
+ * With an anticipatory tweak for remotes defined in ~/.gitconfig
+ (e.g. "remote.origin.prune" set to true, even though there may or
+ may not actually be "origin" remote defined in a particular Git
+ repository), "git remote rename" and other commands misinterpreted
+ and behaved as if such a non-existing remote actually existed.
+ (merge e459b073fb js/remote-rename-with-half-configured-remote later to maint).
+
+ * A few codepaths had to rely on a global variable when sorting
+ elements of an array because sort(3) API does not allow extra data
+ to be passed to the comparison function. Use qsort_s() when
+ natively available, and a fallback implementation of it when not,
+ to eliminate the need, which is a prerequisite for making the
+ codepath reentrant.
+
+ * "git fsck --connectivity-check" was not working at all.
+ (merge a2b22854bd jk/fsck-connectivity-check-fix later to maint).
+
+ * After starting "git rebase -i", which first opens the user's editor
+ to edit the series of patches to apply, but before saving the
+ contents of that file, "git status" failed to show the current
+ state (i.e. you are in an interactive rebase session, but you have
+ applied no steps yet) correctly.
+ (merge df9ded4984 js/status-pre-rebase-i later to maint).
+
+ * Test tweak for FreeBSD where /usr/bin/unzip is unsuitable to run
+ our tests but /usr/local/bin/unzip is usable.
+ (merge d98b2c5fce js/unzip-in-usr-bin-workaround later to maint).
+
+ * "git p4" did not work well with multiple git-p4.mapUser entries on
+ Windows.
+ (merge c3c2b05776 gv/mingw-p4-mapuser later to maint).
+
+ * "git help" enumerates executable files in $PATH; the implementation
+ of "is this file executable?" on Windows has been optimized.
+ (merge c755015f79 hv/mingw-help-is-executable later to maint).
+
+ * Test tweaks for those who have default ACL in their git source tree
+ that interfere with the umask test.
+ (merge d549d21307 mm/reset-facl-before-umask-test later to maint).
+
+ * Names of the various hook scripts must be spelled exactly, but on
+ Windows, an .exe binary must be named with .exe suffix; notice
+ $GIT_DIR/hooks/<hookname>.exe as a valid <hookname> hook.
+ (merge 235be51fbe js/mingw-hooks-with-exe-suffix later to maint).
+
+ * Asciidoctor, an alternative reimplementation of AsciiDoc, still
+ needs some changes to work with documents meant to be formatted
+ with AsciiDoc. "make USE_ASCIIDOCTOR=YesPlease" to use it out of
+ the box to document our pages is getting closer to reality.
+
+ * Other minor doc, test and build updates and code cleanups.
+ (merge f2627d9b19 sb/submodule-config-cleanup later to maint).
+ (merge 384f1a167b sb/unpack-trees-cleanup later to maint).
+ (merge 874444b704 rh/diff-orderfile-doc later to maint).
+ (merge eafd5d9483 cw/doc-sign-off later to maint).
+ (merge 0aaad415bc rs/absolute-pathdup later to maint).
+ (merge 4432dd6b5b rs/receive-pack-cleanup later to maint).
+ (merge 540a398e9c sg/mailmap-self later to maint).
Exception: If your mailer is mangling patches then someone may ask
you to re-send them using MIME, that is OK.
-Do not PGP sign your patch, at least for now. Most likely, your
-maintainer or other people on the list would not have your PGP
-key and would not bother obtaining it anyway. Your patch is not
-judged by who you are; a good patch from an unknown origin has a
-far better chance of being accepted than a patch from a known,
-respected origin that is done poorly or does incorrect things.
+Do not PGP sign your patch. Most likely, your maintainer or other people on the
+list would not have your PGP key and would not bother obtaining it anyway.
+Your patch is not judged by who you are; a good patch from an unknown origin
+has a far better chance of being accepted than a patch from a known, respected
+origin that is done poorly or does incorrect things.
If you really really really really want to do a PGP signed
patch, format it as "multipart/signed", not a text/plain message
*2* The mailing list: git@vger.kernel.org
-(5) Sign your work
+(5) Certify your work by adding your "Signed-off-by: " line
To improve tracking of who did what, we've borrowed the
"sign-off" procedure from the Linux kernel project on patches
--- /dev/null
+require 'asciidoctor'
+require 'asciidoctor/extensions'
+
+module Git
+ module Documentation
+ class LinkGitProcessor < Asciidoctor::Extensions::InlineMacroProcessor
+ use_dsl
+
+ named :chrome
+
+ def process(parent, target, attrs)
+ if parent.document.basebackend? 'html'
+ prefix = parent.document.attr('git-relative-html-prefix')
+ %(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>\n)
+ elsif parent.document.basebackend? 'docbook'
+ "<citerefentry>\n" \
+ "<refentrytitle>#{target}</refentrytitle>" \
+ "<manvolnum>#{attrs[1]}</manvolnum>\n" \
+ "</citerefentry>\n"
+ end
+ end
+ end
+ end
+end
+
+Asciidoctor::Extensions.register do
+ inline_macro Git::Documentation::LinkGitProcessor, :linkgit
+end
#!/usr/bin/perl -w
+use strict;
+use warnings;
+
my @menu = ();
my $output = $ARGV[0];
-open TMP, '>', "$output.tmp";
+open my $tmp, '>', "$output.tmp";
while (<STDIN>) {
next if (/^\\input texinfo/../\@node Top/);
if (s/^\@top (.*)/\@node $1,,,Top/) {
push @menu, $1;
}
- s/\(\@pxref{\[(URLS|REMOTES)\]}\)//;
+ s/\(\@pxref\{\[(URLS|REMOTES)\]}\)//;
s/\@anchor\{[^{}]*\}//g;
- print TMP;
+ print $tmp $_;
}
-close TMP;
+close $tmp;
-printf '\input texinfo
+print '\input texinfo
@setfilename gitman.info
@documentencoding UTF-8
@dircategory Development
@top Git Manual Pages
@documentlanguage en
@menu
-', $menu[0];
+';
for (@menu) {
print "* ${_}::\n";
}
print "\@end menu\n";
-open TMP, '<', "$output.tmp";
-while (<TMP>) {
+open $tmp, '<', "$output.tmp";
+while (<$tmp>) {
print;
}
-close TMP;
+close $tmp;
print "\@bye\n";
unlink "$output.tmp";
be turned off by prefixing them with `no` or `no-` (e.g., `noreverse`,
`no-ul`, etc).
+
+An empty color string produces no color effect at all. This can be used
+to avoid coloring specific elements without disabling color entirely.
++
For git's pre-defined color slots, the attributes are meant to be reset
at the beginning of each item in the colored output. So setting
`color.decorate.branch` to `black` will paint that branch name in a
"`$GIT_DIR/logs/<ref>`", by appending the new and old
SHA-1, the date/time and the reason of the update, but
only when the file exists. If this configuration
- variable is set to true, missing "`$GIT_DIR/logs/<ref>`"
+ variable is set to `true`, missing "`$GIT_DIR/logs/<ref>`"
file is automatically created for branch heads (i.e. under
- refs/heads/), remote refs (i.e. under refs/remotes/),
- note refs (i.e. under refs/notes/), and the symbolic ref HEAD.
+ `refs/heads/`), remote refs (i.e. under `refs/remotes/`),
+ note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`.
+ If it is set to `always`, then a missing reflog is automatically
+ created for any ref under `refs/`.
+
This information can be used to determine what commit
was the tip of a branch "2 days ago".
linkgit:git-read-tree[1] for more information.
core.abbrev::
- Set the length object names are abbreviated to. If unspecified,
- many commands abbreviate to 7 hexdigits, which may not be enough
- for abbreviated object names to stay unique for sufficiently long
- time.
+ Set the length object names are abbreviated to. If
+ unspecified or set to "auto", an appropriate value is
+ computed based on the approximate number of packed objects
+ in your repository, which hopefully is enough for
+ abbreviated object names to stay unique for some time.
add.ignoreErrors::
add.ignore-errors (deprecated)::
Override the grace period with this config variable. The value
"now" may be used to disable this grace period and always prune
unreachable objects immediately, or "never" may be used to
- suppress pruning.
+ suppress pruning. This feature helps prevent corruption when
+ 'git gc' runs concurrently with another process writing to the
+ repository; see the "NOTES" section of linkgit:git-gc[1].
gc.worktreePruneExpire::
When 'git gc' is run, it calls
of common USER_AGENT strings (but not including those like git/1.7.1).
Can be overridden by the `GIT_HTTP_USER_AGENT` environment variable.
+http.followRedirects::
+ Whether git should follow HTTP redirects. If set to `true`, git
+ will transparently follow any redirect issued by a server it
+ encounters. If set to `false`, git will treat all redirects as
+ errors. If set to `initial`, git will follow redirects only for
+ the initial request to a remote, but not for subsequent
+ follow-up HTTP requests. Since git uses the redirected URL as
+ the base for the follow-up requests, this is generally
+ sufficient. The default is `initial`.
+
http.<url>.*::
Any of the http.* options above can be applied selectively to some URLs.
For a config key to match a URL, each element of the config key is
i.e. it cannot be used to follow multiple files and does not work well
on non-linear history.
+log.graphColors::
+ A list of colors, separated by commas, that can be used to draw
+ history lines in `git log --graph`.
+
log.showRoot::
If true, the initial commit will be shown as a big creation event.
This is equivalent to a diff against an empty tree.
Note that an alias with the same name as a built-in format
will be silently ignored.
+protocol.allow::
+ If set, provide a user defined default policy for all protocols which
+ don't explicitly have a policy (`protocol.<name>.allow`). By default,
+ if unset, known-safe protocols (http, https, git, ssh, file) have a
+ default policy of `always`, known-dangerous protocols (ext) have a
+ default policy of `never`, and all other protocols have a default
+ policy of `user`. Supported policies:
++
+--
+
+* `always` - protocol is always able to be used.
+
+* `never` - protocol is never able to be used.
+
+* `user` - protocol is only able to be used when `GIT_PROTOCOL_FROM_USER` is
+ either unset or has a value of 1. This policy should be used when you want a
+ protocol to be directly usable by the user but don't want it used by commands which
+ execute clone/fetch/push commands without user input, e.g. recursive
+ submodule initialization.
+
+--
+
+protocol.<name>.allow::
+ Set a policy to be used by protocol `<name>` with clone/fetch/push
+ commands. See `protocol.allow` above for the available policies.
++
+The protocol names currently used by git are:
++
+--
+ - `file`: any local file-based path (including `file://` URLs,
+ or local paths)
+
+ - `git`: the anonymous git protocol over a direct TCP
+ connection (or proxy, if configured)
+
+ - `ssh`: git over ssh (including `host:path` syntax,
+ `ssh://`, etc).
+
+ - `http`: git over http, both "smart http" and "dumb http".
+ Note that this does _not_ include `https`; if you want to configure
+ both, you must do so individually.
+
+ - any external helpers are named by their protocol (e.g., use
+ `hg` to allow the `git-remote-hg` helper)
+--
+
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
`refs/namespaces/bar/refs/heads/master` are still advertised as so-called
"have" lines. In order to match refs before stripping, add a `^` in front of
the ref name. If you combine `!` and `^`, `!` must be specified first.
++
+Even if you hide refs, a client may still be able to steal the target
+objects via the techniques described in the "SECURITY" section of the
+linkgit:gitnamespaces[7] man page; it's best to keep private data in a
+separate repository.
transfer.unpackLimit::
When `fetch.unpackLimit` or `receive.unpackLimit` are
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
+ discussion in the "SECURITY" section of
linkgit:git-upload-archive[1] for more details. Defaults to
`false`.
When `uploadpack.hideRefs` is in effect, allow `upload-pack`
to accept a fetch request that asks for an object at the tip
of a hidden ref (by default, such a request is rejected).
- see also `uploadpack.hideRefs`.
+ See also `uploadpack.hideRefs`. Even if this is false, a client
+ may be able to steal objects via the techniques described in the
+ "SECURITY" section of the linkgit:gitnamespaces[7] man page; it's
+ best to keep private data in a separate repository.
uploadpack.allowReachableSHA1InWant::
Allow `upload-pack` to accept a fetch request that asks for an
object that is reachable from any ref tip. However, note that
calculating object reachability is computationally expensive.
+ Defaults to `false`. Even if this is false, a client may be able
+ to steal objects via the techniques described in the "SECURITY"
+ section of the linkgit:gitnamespaces[7] man page; it's best to
+ keep private data in a separate repository.
+
+uploadpack.allowAnySHA1InWant::
+ Allow `upload-pack` to accept a fetch request that asks for any
+ object at all.
Defaults to `false`.
uploadpack.keepAlive::
This option is passed unchanged to gpg's --local-user parameter,
so you may specify a key using any method that gpg supports.
-versionsort.prereleaseSuffix::
- When version sort is used in linkgit:git-tag[1], prerelease
- tags (e.g. "1.0-rc1") may appear after the main release
- "1.0". By specifying the suffix "-rc" in this variable,
- "1.0-rc1" will appear before "1.0".
-+
-This variable can be specified multiple times, once per suffix. The
-order of suffixes in the config file determines the sorting order
-(e.g. if "-pre" appears before "-rc" in the config file then 1.0-preXX
-is sorted before 1.0-rcXX). The sorting order between different
-suffixes is undefined if they are in multiple config files.
+versionsort.prereleaseSuffix (deprecated)::
+ Deprecated alias for `versionsort.suffix`. Ignored if
+ `versionsort.suffix` is set.
+
+versionsort.suffix::
+ Even when version sort is used in linkgit:git-tag[1], tagnames
+ with the same base version but different suffixes are still sorted
+ lexicographically, resulting e.g. in prerelease tags appearing
+ after the main release (e.g. "1.0-rc1" after "1.0"). This
+ variable can be specified to determine the sorting order of tags
+ with different suffixes.
++
+By specifying a single suffix in this variable, any tagname containing
+that suffix will appear before the corresponding main release. E.g. if
+the variable is set to "-rc", then all "1.0-rcX" tags will appear before
+"1.0". If specified multiple times, once per suffix, then the order of
+suffixes in the configuration will determine the sorting order of tagnames
+with those suffixes. E.g. if "-pre" appears before "-rc" in the
+configuration, then all "1.0-preX" tags will be listed before any
+"1.0-rcX" tags. The placement of the main release tag relative to tags
+with various suffixes can be determined by specifying the empty suffix
+among those other suffixes. E.g. if the suffixes "-rc", "", "-ck" and
+"-bfs" appear in the configuration in this order, then all "v4.8-rcX" tags
+are listed first, followed by "v4.8", then "v4.8-ckX" and finally
+"v4.8-bfsX".
++
+If more than one suffixes match the same tagname, then that tagname will
+be sorted according to the suffix which starts at the earliest position in
+the tagname. If more than one different matching suffixes start at
+that earliest position, then that tagname will be sorted according to the
+longest of those suffixes.
+The sorting order between different suffixes is undefined if they are
+in multiple config files.
web.browser::
Specify a web browser that may be used by some commands.
It is `<unix timestamp> <time zone offset>`, where `<unix
timestamp>` is the number of seconds since the UNIX epoch.
`<time zone offset>` is a positive or negative offset from UTC.
- For example CET (which is 2 hours ahead UTC) is `+0200`.
+ For example CET (which is 1 hour ahead of UTC) is `+0100`.
RFC 2822::
The standard email format as described by RFC 2822, for example
Generate diffs with <n> lines of context instead of the default
of 3. This value is overridden by the -U option.
+diff.interHunkContext::
+ Show the context between diff hunks, up to the specified number
+ of lines, thereby fusing the hunks that are close to each other.
+ This value serves as the default for the `--inter-hunk-context`
+ command line option.
+
diff.external::
If this config variable is set, diff generation is not
performed using the internal diff machinery, but using the
If set, 'git diff' does not show any source or destination prefix.
diff.orderFile::
- File indicating how to order files within a diff, using
- one shell glob pattern per line.
- Can be overridden by the '-O' option to linkgit:git-diff[1].
+ File indicating how to order files within a diff.
+ See the '-O' option to linkgit:git-diff[1] for details.
+ If `diff.orderFile` is a relative pathname, it is treated as
+ relative to the top of the working tree.
diff.renameLimit::
The number of files to consider when performing the copy/rename
include::mergetools-diff.txt[]
diff.indentHeuristic::
-diff.compactionHeuristic::
- Set one of these options to `true` to enable one of two
- experimental heuristics that shift diff hunk boundaries to
- make patches easier to read.
+ Set this option to `true` to enable experimental heuristics
+ that shift diff hunk boundaries to make patches easier to read.
diff.algorithm::
Choose a diff algorithm. The variants are as follows:
--indent-heuristic::
--no-indent-heuristic::
---compaction-heuristic::
---no-compaction-heuristic::
These are to help debugging and tuning experimental heuristics
(which are off by default) that shift diff hunk boundaries to
make patches easier to read.
endif::git-format-patch[]
-O<orderfile>::
- Output the patch in the order specified in the
- <orderfile>, which has one shell glob pattern per line.
+ Control the order in which files appear in the output.
This overrides the `diff.orderFile` configuration variable
(see linkgit:git-config[1]). To cancel `diff.orderFile`,
use `-O/dev/null`.
++
+The output order is determined by the order of glob patterns in
+<orderfile>.
+All files with pathnames that match the first pattern are output
+first, all files with pathnames that match the second pattern (but not
+the first) are output next, and so on.
+All files with pathnames that do not match any pattern are output
+last, as if there was an implicit match-all pattern at the end of the
+file.
+If multiple pathnames have the same rank (they match the same pattern
+but no earlier patterns), their output order relative to each other is
+the normal order.
++
+<orderfile> is parsed as follows:
++
+--
+ - Blank lines are ignored, so they can be used as separators for
+ readability.
+
+ - Lines starting with a hash ("`#`") are ignored, so they can be used
+ for comments. Add a backslash ("`\`") to the beginning of the
+ pattern if it starts with a hash.
+
+ - Each other line contains a single pattern.
+--
++
+Patterns have the same syntax and semantics as patterns used for
+fnmantch(3) without the FNM_PATHNAME flag, except a pathname also
+matches a pattern if removing any number of the final pathname
+components matches the pattern. For example, the pattern "`foo*bar`"
+matches "`fooasdfbar`" and "`foo/bar/baz/asdf`" but not "`foobarx`".
ifndef::git-format-patch[]
-R::
--inter-hunk-context=<lines>::
Show the context between diff hunks, up to the specified number
of lines, thereby fusing hunks that are close to each other.
+ Defaults to `diff.interHunkContext` or 0 if the config option
+ is unset.
-W::
--function-context::
git bisect start [--term-{old,good}=<term> --term-{new,bad}=<term>]
[--no-checkout] [<bad> [<good>...]] [--] [<paths>...]
- git bisect (bad|new) [<rev>]
- git bisect (good|old) [<rev>...]
+ git bisect (bad|new|<term-new>) [<rev>]
+ git bisect (good|old|<term-old>) [<rev>...]
git bisect terms [--term-good | --term-bad]
git bisect skip [(<rev>|<range>)...]
git bisect reset [<commit>]
based sha1 expressions such as "<branchname>@\{yesterday}".
Note that in non-bare repositories, reflogs are usually
enabled by default by the `core.logallrefupdates` config option.
+ The negated form `--no-create-reflog` only overrides an earlier
+ `--create-reflog`, but currently does not negate the setting of
+ `core.logallrefupdates`.
-f::
--force::
default to color output.
Same as `--color=never`.
+-i::
+--ignore-case::
+ Sorting and filtering branches are case insensitive.
+
--column[=<options>]::
--no-column::
Display branch listing in columns. See configuration variable
If this option is specified together with `--amend`, then
no paths need to be specified, which can be used to amend
the last commit without committing changes that have
- already been staged.
+ already been staged. If used together with `--allow-empty`
+ paths are also not required, and an empty commit will be created.
-u[<mode>]::
--untracked-files[=<mode>]::
Additionally, `$BASE` is set in the environment.
-g::
---gui::
+--[no-]gui::
When 'git-difftool' is invoked with the `-g` or `--gui` option
the default diff tool will be read from the configured
- `diff.guitool` variable instead of `diff.tool`.
+ `diff.guitool` variable instead of `diff.tool`. The `--no-gui`
+ option can be used to override this setting.
--[no-]trust-exit-code::
'git-difftool' invokes a diff tool individually on each file.
$GIT_DIR (e.g. "HEAD", "refs/heads/master"). When
unspecified, update from all heads the remote side has.
+
-If the remote has enabled the options `uploadpack.allowTipSHA1InWant` or
-`uploadpack.allowReachableSHA1InWant`, they may alternatively be 40-hex
-sha1s present on the remote.
+If the remote has enabled the options `uploadpack.allowTipSHA1InWant`,
+`uploadpack.allowReachableSHA1InWant`, or `uploadpack.allowAnySHA1InWant`,
+they may alternatively be 40-hex sha1s present on the remote.
SEE ALSO
--------
objects will eventually be removed by git's built-in housekeeping (see
linkgit:git-gc[1]).
+include::transfer-data-leaks.txt[]
+
BUGS
----
Using --recurse-submodules can only fetch new commits in already checked
Only list refs which contain the specified commit (HEAD if not
specified).
+--ignore-case::
+ Sorting and filtering refs are case insensitive.
+
FIELD NAMES
-----------
line is 'contents:body', where body is all of the lines after the first
blank line. The optional GPG signature is `contents:signature`. The
first `N` lines of the message is obtained using `contents:lines=N`.
+Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
+are obtained as 'contents:trailers'.
For sorting purposes, fields with numeric values sort in numeric order
(`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
--prune=<date>::
Prune loose objects older than date (default is 2 weeks ago,
overridable by the config variable `gc.pruneExpire`).
- --prune=all prunes loose objects regardless of their age (do
- not use --prune=all unless you know exactly what you are doing.
- Unless the repository is quiescent, you will lose newly created
- objects that haven't been anchored with the refs and end up
- corrupting your repository). --prune is on by default.
+ --prune=all prunes loose objects regardless of their age and
+ increases the risk of corruption if another process is writing to
+ the repository concurrently; see "NOTES" below. --prune is on by
+ default.
--no-prune::
Do not prune any loose objects.
Notes
-----
-'git gc' tries very hard to be safe about the garbage it collects. In
+'git gc' tries very hard not to delete objects that are referenced
+anywhere in your repository. In
particular, it will keep not only objects referenced by your current set
of branches and tags, but also objects referenced by the index,
remote-tracking branches, refs saved by 'git filter-branch' in
refs/original/, or reflogs (which may reference commits in branches
that were later amended or rewound).
-
-If you are expecting some objects to be collected and they aren't, check
+If you are expecting some objects to be deleted and they aren't, check
all of those locations and decide whether it makes sense in your case to
remove those references.
+On the other hand, when 'git gc' runs concurrently with another process,
+there is a risk of it deleting an object that the other process is using
+but hasn't created a reference to. This may just cause the other process
+to fail or may corrupt the repository if the other process later adds a
+reference to the deleted object. Git has two features that significantly
+mitigate this problem:
+
+. Any object with modification time newer than the `--prune` date is kept,
+ along with everything reachable from it.
+
+. Most operations that add an object to the database update the
+ modification time of the object if it is already present so that #1
+ applies.
+
+However, these features fall short of a complete solution, so users who
+run commands concurrently have to live with some risk of corruption (which
+seems to be low in practice) unless they turn off automatic garbage
+collection with 'git config gc.auto 0'.
+
HOOKS
-----
[--threads <num>]
[-f <file>] [-e] <pattern>
[--and|--or|--not|(|)|-e <pattern>...]
+ [--recurse-submodules] [--parent-basename <basename>]
[ [--[no-]exclude-standard] [--cached | --no-index | --untracked] | <tree>...]
[--] [<pathspec>...]
mechanism. Only useful when searching files in the current directory
with `--no-index`.
+--recurse-submodules::
+ Recursively search in each submodule that has been initialized and
+ checked out in the repository. When used in combination with the
+ <tree> option the prefix of all submodule output will be the name of
+ the parent project's <tree> object.
+
+--parent-basename <basename>::
+ For internal use only. In order to produce uniform output with the
+ --recurse-submodules option, this option can be used to provide the
+ basename of a parent's <tree> object to a submodule so the submodule
+ can prefix its output with the parent's name rather than the SHA1 of
+ the submodule.
+
-a::
--text::
Process binary files as if they were text.
browser::
Start a tree browser showing all files in the specified
- commit (or `HEAD` by default). Files selected through the
+ commit. Files selected through the
browser are opened in the blame viewer.
citool::
[--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]
'git merge' <msg> HEAD <commit>...
'git merge' --abort
+'git merge' --continue
DESCRIPTION
-----------
discouraged: while possible, it may leave you in a state that is hard to
back out of in the case of a conflict.
+The fourth syntax ("`git merge --continue`") can only be run after the
+merge has resulted in conflicts.
OPTIONS
-------
'git merge --abort' is equivalent to 'git reset --merge' when
`MERGE_HEAD` is present.
+--continue::
+ After a 'git merge' stops due to conflicts you can conclude the
+ merge by running 'git merge --continue' (see "HOW TO RESOLVE
+ CONFLICTS" section below).
+
<commit>...::
Commits, usually other branch heads, to merge into our branch.
Specifying more than one commit will create a merge with
submit manually or revert. This option always stops after the
first (oldest) commit. Git tags are not exported to p4.
+--shelve::
+ Instead of submitting create a series of shelved changelists.
+ After creating each shelve, the relevant files are reverted/deleted.
+ If you have multiple commits pending multiple shelves will be created.
+
+--update-shelve CHANGELIST::
+ Update an existing shelved changelist with this commit. Implies
+ --shelve.
+
--conflict=(ask|skip|quit)::
Conflicts can occur when applying a commit to p4. When this
happens, the default behavior ("ask") is to prompt whether to
Client specified as an option to all p4 commands, with
'-c <client>', including the client spec.
+git-p4.retries::
+ Specifies the number of times to retry a p4 command (notably,
+ 'p4 sync') if the network times out. The default value is 3.
+ Set the value to 0 to disable retries or if your p4 version
+ does not support retries (pre 2012.2).
+
Clone and sync variables
~~~~~~~~~~~~~~~~~~~~~~~~
git-p4.syncFromOrigin::
would want to start over, you can recover with 'git reset'.
+include::transfer-data-leaks.txt[]
+
BUGS
----
Using --recurse-submodules can only fetch new commits in already checked
standard error stream is not directed to a terminal.
--no-recurse-submodules::
---recurse-submodules=check|on-demand|no::
+--recurse-submodules=check|on-demand|only|no::
May be used to make sure all submodule commits used by the
revisions to be pushed are available on a remote-tracking branch.
If 'check' is used Git will verify that all submodule commits that
remote of the submodule. If any commits are missing the push will
be aborted and exit with non-zero status. If 'on-demand' is used
all submodules that changed in the revisions to be pushed will be
- pushed. If on-demand was not able to push all necessary revisions
- it will also be aborted and exit with non-zero status. A value of
- 'no' or using `--no-recurse-submodules` can be used to override the
- push.recurseSubmodules configuration variable when no submodule
- recursion is required.
+ pushed. If on-demand was not able to push all necessary revisions it will
+ also be aborted and exit with non-zero status. If 'only' is used all
+ submodules will be recursively pushed while the superproject is left
+ unpushed. A value of 'no' or using `--no-recurse-submodules` can be used
+ to override the push.recurseSubmodules configuration variable when no
+ submodule recursion is required.
--[no-]verify::
Toggle the pre-push hook (see linkgit:githooks[5]). The
and so would be unreachable. As such, these commits would be removed by
a `git gc` command on the origin repository.
+include::transfer-data-leaks.txt[]
+
GIT
---
Part of the linkgit:git[1] suite
[<upstream> [<branch>]]
'git rebase' [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
--root [<branch>]
-'git rebase' --continue | --skip | --abort | --edit-todo
+'git rebase' --continue | --skip | --abort | --quit | --edit-todo
DESCRIPTION
-----------
will be reset to where it was when the rebase operation was
started.
+--quit::
+ Abort the rebase operation but HEAD is not reset back to the
+ original branch. The index and working tree are also left
+ unchanged as a result.
+
--keep-empty::
Keep the commits that do not change anything from its
parents in the result.
+++ /dev/null
-git-relink(1)
-=============
-
-NAME
-----
-git-relink - Hardlink common objects in local repositories
-
-SYNOPSIS
---------
-[verse]
-'git relink' [--safe] <dir>... <master_dir>
-
-DESCRIPTION
------------
-This will scan 1 or more object repositories and look for objects in common
-with a master repository. Objects not already hardlinked to the master
-repository will be replaced with a hardlink to the master repository.
-
-OPTIONS
--------
---safe::
- Stops if two objects with the same hash exist but have different sizes.
- Default is to warn and continue.
-
-<dir>::
- Directories containing a .git/objects/ subdirectory.
-
-GIT
----
-Part of the linkgit:git[1] suite
<3> But you can use "reset --keep" to remove the unwanted commit after
you switched to "branch2".
+Split a commit into two::
++
+Suppose that you have created a commit, but later decide that you want to break
+apart the changes into two logical chunks and commit each separately. You want
+to include part of the original commit into the first commit, while including
+the remainder in a second commit. You can use git reset to rewind the history
+without changing the index, and then use git add -p to interactively select
+which hunks to put into the first commit.
++
+------------
+$ git reset HEAD^ <1>
+$ git add -p <2>
+$ git diff --cached <3>
+$ git commit -c HEAD@{1} <4>
+...
+$ git add ... <5>
+$ git diff --cached <6>
+$ git commit ... <7>
+------------
++
+<1> First, reset the history back one commit so that we remove the original
+ commit, but leave the working tree with all the changes.
+<2> Now, interactively select hunks to add to a new commit using git add -p.
+ This will ask for each hunk separately and you can use simple commands like
+ "yes, include", "no don't include" or even "edit".
+<3> Once satisfied with the hunks, you should verify that it is what you
+ expected by using git diff --cached to show all changes in the index.
+<4> Next, commit the changes stored in the index. "-c" specifies to load the
+ editor with a commit message from a previous commit so that you can re-use the
+ original commit message. HEAD@{1} is special notation to reference what
+ HEAD used to be prior to the reset command. See linkgit:git-reflog[1] for
+ more details.
+<5> Now you've created the first commit, and can repeat steps 2-4 as often as
+ you like to break the work into any number of commits. Here we show a second
+ step which simply adds the remaining changes.
+<6> Then check again that the changes are what you expected to add.
+<7> And finally commit the remaining changes.
+
DISCUSSION
----------
----
prefix=$(git rev-parse --show-prefix)
cd "$(git rev-parse --show-toplevel)"
-eval "set -- $(git rev-parse --sq --prefix "$prefix" "$@")"
+# rev-parse provides the -- needed for 'set'
+eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
----
--verify::
Each pretty-printed commit will be rewrapped before it is shown.
+-c::
+--committer::
+ Collect and show committer identities instead of authors.
+
-w[<width>[,<indent1>[,<indent2>]]]::
Linewrap the output by wrapping each line at `width`. The first
line of each entry is indented by `indent1` spaces, and the second
[commit] [--] [<path>...]
'git submodule' [--quiet] foreach [--recursive] <command>
'git submodule' [--quiet] sync [--recursive] [--] [<path>...]
+'git submodule' [--quiet] absorbgitdirs [--] [<path>...]
DESCRIPTION
If `--recursive` is specified, this command will recurse into the
registered submodules, and sync any nested submodules within.
+absorbgitdirs::
+ If a git directory of a submodule is inside the submodule,
+ move the git directory of the submodule into its superprojects
+ `$GIT_DIR/modules` path and then connect the git directory and
+ its working directory by setting the `core.worktree` and adding
+ a .git file pointing to the git directory embedded in the
+ superprojects git directory.
++
+A repository that was cloned independently and later added as a submodule or
+old setups have the submodules git directory inside the submodule instead of
+embedded into the superprojects git directory.
++
+This command is recursive by default.
+
OPTIONS
-------
-q::
When retrieving svn commits into Git (as part of 'fetch', 'rebase', or
'dcommit' operations), look for the first `From:` or `Signed-off-by:` line
in the log message and use that as the author string.
++
+[verse]
+config key: svn.useLogAuthor
+
--add-author-from::
When committing to svn from Git (as part of 'commit-diff', 'set-tree' or 'dcommit'
operations), if the existing log message doesn't already have a
`From:` or `Signed-off-by:` line, append a `From:` line based on the
Git commit's author string. If you use this, then `--use-log-author`
will retrieve a valid author string for all commits.
-
++
+[verse]
+config key: svn.addAuthorFrom
ADVANCED OPTIONS
----------------
'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>]
[--column[=<options>] | --no-column] [--create-reflog] [--sort=<key>]
[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]
-'git tag' -v <tagname>...
+'git tag' -v [--format=<format>] <tagname>...
DESCRIPTION
-----------
multiple times, in which case the last key becomes the primary
key. Also supports "version:refname" or "v:refname" (tag
names are treated as versions). The "version:refname" sort
- order can also be affected by the
- "versionsort.prereleaseSuffix" configuration variable.
+ order can also be affected by the "versionsort.suffix"
+ configuration variable.
The keys supported are the same as those in `git for-each-ref`.
Sort order defaults to the value configured for the `tag.sort`
variable if it exists, or lexicographic order otherwise. See
linkgit:git-config[1].
+-i::
+--ignore-case::
+ Sorting and filtering tags are case insensitive.
+
--column[=<options>]::
--no-column::
Display tag listing in columns. See configuration variable
'strip' removes both whitespace and commentary.
--create-reflog::
- Create a reflog for the tag.
+ Create a reflog for the tag. To globally enable reflogs for tags, see
+ `core.logAllRefUpdates` in linkgit:git-config[1].
+ The negated form `--no-create-reflog` only overrides an earlier
+ `--create-reflog`, but currently does not negate the setting of
+ `core.logallrefupdates`.
<tagname>::
The name of the tag to create, delete, or describe.
SYNOPSIS
--------
[verse]
-'git verify-tag' <tag>...
+'git verify-tag' [--format=<format>] <tag>...
DESCRIPTION
-----------
branch of the `git.git` repository.
Documentation for older releases are available here:
+* link:v2.11.1/git.html[documentation for release 2.11.1]
+
+* release notes for
+ link:RelNotes/2.11.1.txt[2.11.1],
+ link:RelNotes/2.11.0.txt[2.11].
+
* link:v2.10.2/git.html[documentation for release 2.10.2]
* release notes for
specifies a ":" separated (on Windows ";" separated) list
of Git object directories which can be used to search for Git
objects. New objects will not be written to these directories.
++
+ Entries that begin with `"` (double-quote) will be interpreted
+ as C-style quoted paths, removing leading and trailing
+ double-quotes and respecting backslash escapes. E.g., the value
+ `"path-with-\"-and-:-in-it":vanilla-path` has two paths:
+ `path-with-"-and-:-in-it` and `vanilla-path`.
`GIT_DIR`::
If the `GIT_DIR` environment variable is set then it
cloning a repository to make a backup).
`GIT_ALLOW_PROTOCOL`::
- If set, provide a colon-separated list of protocols which are
- allowed to be used with fetch/push/clone. This is useful to
- restrict recursive submodule initialization from an untrusted
- repository. Any protocol not mentioned will be disallowed (i.e.,
- this is a whitelist, not a blacklist). If the variable is not
- set at all, all protocols are enabled. The protocol names
- currently used by git are:
-
- - `file`: any local file-based path (including `file://` URLs,
- or local paths)
-
- - `git`: the anonymous git protocol over a direct TCP
- connection (or proxy, if configured)
-
- - `ssh`: git over ssh (including `host:path` syntax,
- `ssh://`, etc).
-
- - `http`: git over http, both "smart http" and "dumb http".
- Note that this does _not_ include `https`; if you want both,
- you should specify both as `http:https`.
-
- - any external helpers are named by their protocol (e.g., use
- `hg` to allow the `git-remote-hg` helper)
-
+ If set to a colon-separated list of protocols, behave as if
+ `protocol.allow` is set to `never`, and each of the listed
+ protocols has `protocol.<name>.allow` set to `always`
+ (overriding any existing configuration). In other words, any
+ protocol not mentioned will be disallowed (i.e., this is a
+ whitelist, not a blacklist). See the description of
+ `protocol.allow` in linkgit:git-config[1] for more details.
+
+`GIT_PROTOCOL_FROM_USER`::
+ Set to 0 to prevent protocols used by fetch/push/clone which are
+ configured to the `user` state. This is useful to restrict recursive
+ submodule initialization from an untrusted repository or for programs
+ which feed potentially-untrusted URLS to git commands. See
+ linkgit:git-config[1] for more details.
Discussion[[Discussion]]
------------------------
Git sends the content split in zero or more pkt-line packets and a
flush packet to terminate content. Please note, that the filter
must not send any response before it received the content and the
-final flush packet.
+final flush packet. Also note that the "value" of a "key=value" pair
+can contain the "=" character whereas the key would never contain
+that character.
------------------------
packet: git> command=smudge
packet: git> pathname=path/testfile.dat
The core Git is often called "plumbing", with the prettier user
interfaces on top of it called "porcelain". You may not want to use the
plumbing directly very often, but it can be good to know what the
-plumbing does for when the porcelain isn't flushing.
+plumbing does when the porcelain isn't flushing.
Back when this document was originally written, many porcelain
commands were shell scripts. For simplicity, it still uses them as
will do it for you. If you followed the tutorial examples, you
would have accumulated about 17 objects in `.git/objects/??/`
directories by now. 'git repack' tells you how many objects it
-packed, and stores the packed file in `.git/objects/pack`
+packed, and stores the packed file in the `.git/objects/pack`
directory.
[NOTE]
A recommended work cycle for a "subsystem maintainer" who works
on that project and has an own "public repository" goes like this:
-1. Prepare your work repository, by 'git clone' the public
+1. Prepare your work repository, by running 'git clone' on the public
repository of the "project lead". The URL used for the
initial cloning is stored in the remote.origin.url
configuration variable.
Working with Others, Shared Repository Style
--------------------------------------------
-If you are coming from CVS background, the style of cooperation
+If you are coming from a CVS background, the style of cooperation
suggested in the previous section may be new to you. You do not
-have to worry. Git supports "shared public repository" style of
+have to worry. Git supports the "shared public repository" style of
cooperation you are probably more familiar with as well.
See linkgit:gitcvs-migration[7] for the details.
++* [master~2] Pretty-print messages.
------------
-Note that you should not do Octopus because you can. An octopus
+Note that you should not do Octopus just because you can. An octopus
is a valid thing to do and often makes it easier to view the
commit history if you are merging more than two independent
changes at the same time. However, if you have merge conflicts
<9> backport a critical fix.
<10> create a signed tag.
<11> make sure master was not accidentally rewound beyond that
-already pushed out. `ko` shorthand points at the Git maintainer's
+already pushed out.
+<12> In the output from `git show-branch`, `master` should have
+everything `ko/master` has, and `next` should have
+everything `ko/next` has, etc.
+<13> push out the bleeding edge, together with new tags that point
+into the pushed history.
+
+In this example, the `ko` shorthand points at the Git maintainer's
repository at kernel.org, and looks like this:
-+
+
------------
(in .git/config)
[remote "ko"]
push = +refs/heads/pu
push = refs/heads/maint
------------
-+
-<12> In the output from `git show-branch`, `master` should have
-everything `ko/master` has, and `next` should have
-everything `ko/next` has, etc.
-<13> push out the bleeding edge, together with new tags that point
-into the pushed history.
Repository Administration[[ADMINISTRATION]]
History
-------
Gitk was the first graphical repository browser. It's written in
-tcl/tk and started off in a separate repository but was later merged
-into the main Git repository.
+tcl/tk.
+'gitk' is actually maintained as an independent project, but stable
+versions are distributed as part of the Git suite for the convenience
+of end users.
+
+gitk-git/ comes from Paul Mackerras's gitk project:
+
+ git://ozlabs.org/~paulus/gitk
SEE ALSO
--------
'qgit(1)'::
A repository browser written in C++ using Qt.
-'gitview(1)'::
- A repository browser written in Python using Gtk. It's based on
- 'bzrk(1)' and distributed in the contrib area of the Git repository.
-
'tig(1)'::
A minimal repository browser and Git tool output highlighter written
in C using Ncurses.
git clone ext::'git --namespace=foo %s /tmp/prefixed.git'
----------
-SECURITY
---------
-
-Anyone with access to any namespace within a repository can potentially
-access objects from any other namespace stored in the same repository.
-You can't directly say "give me object ABCD" if you don't have a ref to
-it, but you can do some other sneaky things like:
-
-. Claiming to push ABCD, at which point the server will optimize out the
- need for you to actually send it. Now you have a ref to ABCD and can
- fetch it (claiming not to have it, of course).
-
-. Requesting other refs, claiming that you have ABCD, at which point the
- server may generate deltas against ABCD.
-
-None of this causes a problem if you only host public repositories, or
-if everyone who may read one namespace may also read everything in every
-other namespace (for instance, if everyone in an organization has read
-permission to every repository).
+include::transfer-data-leaks.txt[]
than given and there are spaces on its left, use those spaces
- '%><(<N>)', '%><|(<N>)': similar to '% <(<N>)', '%<|(<N>)'
respectively, but padding both sides (i.e. the text is centered)
+-%(trailers): display the trailers of the body as interpreted by
+ linkgit:git-interpret-trailers[1]
NOTE: Some placeholders may depend on other options given to the
revision traversal engine. For example, the `%g*` reflog options will
`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.
+ Used to iterate over all entries of a hashmap. Note that it is
+ not safe to add or remove entries to the hashmap while
+ iterating.
+
`hashmap_iter_init` initializes a `hashmap_iter` structure.
+
+++ /dev/null
-in-core index API
-=================
-
-Talk about <read-cache.c> and <cache-tree.c>, things like:
-
-* cache -> the_index macros
-* read_index()
-* write_index()
-* ie_match_stat() and ie_modified(); how they are different and when to
- use which.
-* index_name_pos()
-* remove_index_entry_at()
-* remove_file_from_index()
-* add_file_to_index()
-* add_index_entry()
-* refresh_index()
-* discard_index()
-* cache_tree_invalidate_path()
-* cache_tree_update()
-
-(JC, Linus)
- prefix and args come from cmd_* functions
-get_pathspec() is obsolete and should never be used in new code.
-
parse_pathspec() helps catch unsupported features and reject them
politely. At a lower level, different pathspec-related functions may
not support the same set of features. Such pathspec-sensitive
Can be passed to the config parsing infrastructure to parse
local (worktree) submodule configurations.
-`const struct submodule *submodule_from_path(const unsigned char *commit_sha1, const char *path)`::
+`const struct submodule *submodule_from_path(const unsigned char *treeish_name, const char *path)`::
- Lookup values for one submodule by its commit_sha1 and path.
+ Given a tree-ish in the superproject and a path, return the
+ submodule that is bound at the path in the named tree.
-`const struct submodule *submodule_from_name(const unsigned char *commit_sha1, const char *name)`::
+`const struct submodule *submodule_from_name(const unsigned char *treeish_name, const char *name)`::
The same as above but lookup by name.
-If given the null_sha1 as commit_sha1 the local configuration of a
-submodule will be returned (e.g. consolidated values from local git
+Whenever a submodule configuration is parsed in `parse_submodule_config_option`
+via e.g. `gitmodules_config()`, it will overwrite the null_sha1 entry.
+So in the normal case, when HEAD:.gitmodules is parsed first and then overlayed
+with the repository configuration, the null_sha1 entry contains the local
+configuration of a submodule (e.g. consolidated values from local git
configuration and the .gitmodules file in the worktree).
For an example usage see test-submodule-config.c.
--- /dev/null
+<!-- texi.xsl:
+ convert refsection elements into refsect elements that docbook2texi can
+ understand -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+<xsl:output method="xml"
+ encoding="UTF-8"
+ doctype-public="-//OASIS//DTD DocBook XML V4.5//EN"
+ doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" />
+
+<xsl:template match="//refsection">
+ <xsl:variable name="element">refsect<xsl:value-of select="count(ancestor-or-self::refsection)" /></xsl:variable>
+ <xsl:element name="{$element}">
+ <xsl:apply-templates select="@*|node()" />
+ </xsl:element>
+</xsl:template>
+
+<!-- Copy all other nodes through. -->
+<xsl:template match="node()|@*">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()" />
+ </xsl:copy>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+SECURITY
+--------
+The fetch and push protocols are not designed to prevent one side from
+stealing data from the other repository that was not intended to be
+shared. If you have private data that you need to protect from a malicious
+peer, your best option is to store it in another repository. This applies
+to both clients and servers. In particular, namespaces on a server are not
+effective for read access control; you should only grant read access to a
+namespace to clients that you would trust with read access to the entire
+repository.
+
+The known attack vectors are as follows:
+
+. The victim sends "have" lines advertising the IDs of objects it has that
+ are not explicitly intended to be shared but can be used to optimize the
+ transfer if the peer also has them. The attacker chooses an object ID X
+ to steal and sends a ref to X, but isn't required to send the content of
+ X because the victim already has it. Now the victim believes that the
+ attacker has X, and it sends the content of X back to the attacker
+ later. (This attack is most straightforward for a client to perform on a
+ server, by creating a ref to X in the namespace the client has access
+ to and then fetching it. The most likely way for a server to perform it
+ on a client is to "merge" X into a public branch and hope that the user
+ does additional work on this branch and pushes it back to the server
+ without noticing the merge.)
+
+. As in #1, the attacker chooses an object ID X to steal. The victim sends
+ an object Y that the attacker already has, and the attacker falsely
+ claims to have X and not Y, so the victim sends Y as a delta against X.
+ The delta reveals regions of X that are similar to Y to the attacker.
Git Glossary
============
+[[git-explained]]
+Git explained
+-------------
+
include::glossary-content.txt[]
[[git-quick-start]]
Appendix B: Notes and todo list for this manual
===============================================
+[[todo-list]]
+Todo list
+---------
+
This is a work in progress.
The basic requirements:
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.11.0-rc3
+DEF_VER=v2.12.0-rc0
LF='
'
then
VN=$(cat version) || VN="$DEF_VER"
elif test -d ${GIT_DIR:-.git} -o -f .git &&
- VN=$(git describe --match "v[0-9]*" --abbrev=7 HEAD 2>/dev/null) &&
+ VN=$(git describe --match "v[0-9]*" HEAD 2>/dev/null) &&
case "$VN" in
*$LF*) (exit 1) ;;
v[0-9]*)
# apostrophes to be ASCII so that cut&pasting examples to the shell
# will work.
#
+# Define USE_ASCIIDOCTOR to use Asciidoctor instead of AsciiDoc to build the
+# documentation.
+#
+# Define ASCIIDOCTOR_EXTENSIONS_LAB to point to the location of the Asciidoctor
+# Extensions Lab if you have it available.
+#
# Define PERL_PATH to the path of your Perl binary (usually /usr/bin/perl).
#
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
# is a simplified version of the merge sort used in glibc. This is
# recommended if Git triggers O(n^2) behavior in your platform's qsort().
#
+# Define HAVE_ISO_QSORT_S if your platform provides a qsort_s() that's
+# compatible with the one described in C11 Annex K.
+#
# Define UNRELIABLE_FSTAT if your system's fstat does not return the same
# information on a not yet closed file that lstat would return for the same
# file after it was closed.
#
# Define NATIVE_CRLF if your platform uses CRLF for line endings.
#
-# Define XDL_FAST_HASH to use an alternative line-hashing method in
-# the diff algorithm. It gives a nice speedup if your processor has
-# fast unaligned word loads. Does NOT work on big-endian systems!
-# Enabled by default on x86_64.
-#
# Define GIT_USER_AGENT if you want to change how git identifies itself during
# network interactions. The default is "git/$(GIT_VERSION)".
#
SCRIPT_PERL += git-cvsexportcommit.perl
SCRIPT_PERL += git-cvsimport.perl
SCRIPT_PERL += git-cvsserver.perl
-SCRIPT_PERL += git-relink.perl
SCRIPT_PERL += git-send-email.perl
SCRIPT_PERL += git-svn.perl
COMPAT_CFLAGS += -DINTERNAL_QSORT
COMPAT_OBJS += compat/qsort.o
endif
+ifdef HAVE_ISO_QSORT_S
+ COMPAT_CFLAGS += -DHAVE_ISO_QSORT_S
+else
+ COMPAT_OBJS += compat/qsort_s.o
+endif
ifdef RUNTIME_PREFIX
COMPAT_CFLAGS += -DRUNTIME_PREFIX
endif
MSGFMT += --check --statistics
endif
-ifneq (,$(XDL_FAST_HASH))
- BASIC_CFLAGS += -DXDL_FAST_HASH
-endif
-
ifdef GMTIME_UNRELIABLE_ERRORS
COMPAT_OBJS += compat/gmtime.o
BASIC_CFLAGS += -DGMTIME_UNRELIABLE_ERRORS
git.res: git.rc GIT-VERSION-FILE
$(QUIET_RC)$(RC) \
$(join -DMAJOR= -DMINOR=, $(wordlist 1,2,$(subst -, ,$(subst ., ,$(GIT_VERSION))))) \
- -DGIT_VERSION="\\\"$(GIT_VERSION)\\\"" $< -o $@
+ -DGIT_VERSION="\\\"$(GIT_VERSION)\\\"" -i $< -o $@
# This makes sure we depend on the NO_PERL setting itself.
$(SCRIPT_PERL_GEN): GIT-BUILD-OPTIONS
git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
- $(LIBS) $(IMAP_SEND_LDFLAGS)
+ $(IMAP_SEND_LDFLAGS) $(LIBS)
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,$^) \
--keyword=_ --keyword=N_ --keyword="Q_:1,2"
XGETTEXT_FLAGS_SH = $(XGETTEXT_FLAGS) --language=Shell \
--keyword=gettextln --keyword=eval_gettextln
-XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --keyword=__ --language=Perl
+XGETTEXT_FLAGS_PERL = $(XGETTEXT_FLAGS) --language=Perl \
+ --keyword=__ --keyword=N__ --keyword="__n:1,2"
LOCALIZED_C = $(C_OBJ:o=c) $(LIB_H) $(GENERATED_H)
LOCALIZED_SH = $(SCRIPT_SH)
LOCALIZED_SH += git-parse-remote.sh
po/build/locale/%/LC_MESSAGES/git.mo: po/%.po
$(QUIET_MSGFMT)mkdir -p $(dir $@) && $(MSGFMT) -o $@ $<
-FIND_SOURCE_FILES = ( git ls-files '*.[hcS]' 2>/dev/null || \
- $(FIND) . \( -name .git -type d -prune \) \
- -o \( -name '*.[hcS]' -type f -print \) )
+FIND_SOURCE_FILES = ( \
+ git ls-files \
+ '*.[hcS]' \
+ '*.sh' \
+ ':!*[tp][0-9][0-9][0-9][0-9]*' \
+ ':!contrib' \
+ 2>/dev/null || \
+ $(FIND) . \
+ \( -name .git -type d -prune \) \
+ -o \( -name '[tp][0-9][0-9][0-9][0-9]*' -prune \) \
+ -o \( -name contrib -type d -prune \) \
+ -o \( -name build -type d -prune \) \
+ -o \( -name 'trash*' -type d -prune \) \
+ -o \( -name '*.[hcS]' -type f -print \) \
+ -o \( -name '*.sh' -type f -print \) \
+ )
$(ETAGS_TARGET): FORCE
$(RM) $(ETAGS_TARGET)
[Documentation/SubmittingPatches][] for instructions on patch submission).
To subscribe to the list, send an email with just "subscribe git" in
the body to majordomo@vger.kernel.org. The mailing list archives are
-available at http://news.gmane.org/gmane.comp.version-control.git/,
+available at https://public-inbox.org/git,
http://marc.info/?l=git and other archival sites.
The maintainer frequently sends the "What's cooking" reports that
-Documentation/RelNotes/2.11.0.txt
\ No newline at end of file
+Documentation/RelNotes/2.12.0.txt
\ No newline at end of file
return (!stat(path, &st) && S_ISDIR(st.st_mode));
}
+/* removes the last path component from 'path' except if 'path' is root */
+static void strip_last_component(struct strbuf *path)
+{
+ size_t offset = offset_1st_component(path->buf);
+ size_t len = path->len;
+
+ /* Find start of the last component */
+ while (offset < len && !is_dir_sep(path->buf[len - 1]))
+ len--;
+ /* Skip sequences of multiple path-separators */
+ while (offset < len && is_dir_sep(path->buf[len - 1]))
+ len--;
+
+ strbuf_setlen(path, len);
+}
+
+/* get (and remove) the next component in 'remaining' and place it in 'next' */
+static void get_next_component(struct strbuf *next, struct strbuf *remaining)
+{
+ char *start = NULL;
+ char *end = NULL;
+
+ strbuf_reset(next);
+
+ /* look for the next component */
+ /* Skip sequences of multiple path-separators */
+ for (start = remaining->buf; is_dir_sep(*start); start++)
+ ; /* nothing */
+ /* Find end of the path component */
+ for (end = start; *end && !is_dir_sep(*end); end++)
+ ; /* nothing */
+
+ strbuf_add(next, start, end - start);
+ /* remove the component from 'remaining' */
+ strbuf_remove(remaining, 0, end - remaining->buf);
+}
+
+/* copies root part from remaining to resolved, canonicalizing it on the way */
+static void get_root_part(struct strbuf *resolved, struct strbuf *remaining)
+{
+ int offset = offset_1st_component(remaining->buf);
+
+ strbuf_reset(resolved);
+ strbuf_add(resolved, remaining->buf, offset);
+#ifdef GIT_WINDOWS_NATIVE
+ convert_slashes(resolved->buf);
+#endif
+ strbuf_remove(remaining, 0, offset);
+}
+
/* We allow "recursive" symbolic links. Only within reason, though. */
-#define MAXDEPTH 5
+#ifndef MAXSYMLINKS
+#define MAXSYMLINKS 32
+#endif
/*
* Return the real path (i.e., absolute path, with symlinks resolved
* and extra slashes removed) equivalent to the specified path. (If
* you want an absolute path but don't mind links, use
- * absolute_path().) The return value is a pointer to a static
- * buffer.
+ * absolute_path().) Places the resolved realpath in the provided strbuf.
*
- * The input and all intermediate paths must be shorter than MAX_PATH.
* The directory part of path (i.e., everything up to the last
* dir_sep) must denote a valid, existing directory, but the last
* component need not exist. If die_on_error is set, then die with an
* informative error message if there is a problem. Otherwise, return
* NULL on errors (without generating any output).
- *
- * If path is our buffer, then return path, as it's already what the
- * user wants.
*/
-static const char *real_path_internal(const char *path, int die_on_error)
+char *strbuf_realpath(struct strbuf *resolved, const char *path,
+ int die_on_error)
{
- static struct strbuf sb = STRBUF_INIT;
+ struct strbuf remaining = STRBUF_INIT;
+ struct strbuf next = STRBUF_INIT;
+ struct strbuf symlink = STRBUF_INIT;
char *retval = NULL;
-
- /*
- * If we have to temporarily chdir(), store the original CWD
- * here so that we can chdir() back to it at the end of the
- * function:
- */
- struct strbuf cwd = STRBUF_INIT;
-
- int depth = MAXDEPTH;
- char *last_elem = NULL;
+ int num_symlinks = 0;
struct stat st;
- /* We've already done it */
- if (path == sb.buf)
- return path;
-
if (!*path) {
if (die_on_error)
die("The empty string is not a valid path");
goto error_out;
}
- strbuf_reset(&sb);
- strbuf_addstr(&sb, path);
-
- while (depth--) {
- if (!is_directory(sb.buf)) {
- char *last_slash = find_last_dir_sep(sb.buf);
- if (last_slash) {
- last_elem = xstrdup(last_slash + 1);
- strbuf_setlen(&sb, last_slash - sb.buf + 1);
- } else {
- last_elem = xmemdupz(sb.buf, sb.len);
- strbuf_reset(&sb);
- }
+ strbuf_addstr(&remaining, path);
+ get_root_part(resolved, &remaining);
+
+ if (!resolved->len) {
+ /* relative path; can use CWD as the initial resolved path */
+ if (strbuf_getcwd(resolved)) {
+ if (die_on_error)
+ die_errno("unable to get current working directory");
+ else
+ goto error_out;
}
+ }
- if (sb.len) {
- if (!cwd.len && strbuf_getcwd(&cwd)) {
+ /* Iterate over the remaining path components */
+ while (remaining.len > 0) {
+ get_next_component(&next, &remaining);
+
+ if (next.len == 0) {
+ continue; /* empty component */
+ } else if (next.len == 1 && !strcmp(next.buf, ".")) {
+ continue; /* '.' component */
+ } else if (next.len == 2 && !strcmp(next.buf, "..")) {
+ /* '..' component; strip the last path component */
+ strip_last_component(resolved);
+ continue;
+ }
+
+ /* append the next component and resolve resultant path */
+ if (!is_dir_sep(resolved->buf[resolved->len - 1]))
+ strbuf_addch(resolved, '/');
+ strbuf_addbuf(resolved, &next);
+
+ if (lstat(resolved->buf, &st)) {
+ /* error out unless this was the last component */
+ if (errno != ENOENT || remaining.len) {
if (die_on_error)
- die_errno("Could not get current working directory");
+ die_errno("Invalid path '%s'",
+ resolved->buf);
else
goto error_out;
}
+ } else if (S_ISLNK(st.st_mode)) {
+ ssize_t len;
+ strbuf_reset(&symlink);
+
+ if (num_symlinks++ > MAXSYMLINKS) {
+ errno = ELOOP;
- if (chdir(sb.buf)) {
if (die_on_error)
- die_errno("Could not switch to '%s'",
- sb.buf);
+ die("More than %d nested symlinks "
+ "on path '%s'", MAXSYMLINKS, path);
else
goto error_out;
}
- }
- if (strbuf_getcwd(&sb)) {
- if (die_on_error)
- die_errno("Could not get current working directory");
- else
- goto error_out;
- }
- if (last_elem) {
- if (sb.len && !is_dir_sep(sb.buf[sb.len - 1]))
- strbuf_addch(&sb, '/');
- strbuf_addstr(&sb, last_elem);
- free(last_elem);
- last_elem = NULL;
- }
-
- if (!lstat(sb.buf, &st) && S_ISLNK(st.st_mode)) {
- struct strbuf next_sb = STRBUF_INIT;
- ssize_t len = strbuf_readlink(&next_sb, sb.buf, 0);
+ len = strbuf_readlink(&symlink, resolved->buf,
+ st.st_size);
if (len < 0) {
if (die_on_error)
die_errno("Invalid symlink '%s'",
- sb.buf);
+ resolved->buf);
else
goto error_out;
}
- strbuf_swap(&sb, &next_sb);
- strbuf_release(&next_sb);
- } else
- break;
+
+ if (is_absolute_path(symlink.buf)) {
+ /* absolute symlink; set resolved to root */
+ get_root_part(resolved, &symlink);
+ } else {
+ /*
+ * relative symlink
+ * strip off the last component since it will
+ * be replaced with the contents of the symlink
+ */
+ strip_last_component(resolved);
+ }
+
+ /*
+ * if there are still remaining components to resolve
+ * then append them to symlink
+ */
+ if (remaining.len) {
+ strbuf_addch(&symlink, '/');
+ strbuf_addbuf(&symlink, &remaining);
+ }
+
+ /*
+ * use the symlink as the remaining components that
+ * need to be resloved
+ */
+ strbuf_swap(&symlink, &remaining);
+ }
}
- retval = sb.buf;
+ retval = resolved->buf;
+
error_out:
- free(last_elem);
- if (cwd.len && chdir(cwd.buf))
- die_errno("Could not change back to '%s'", cwd.buf);
- strbuf_release(&cwd);
+ strbuf_release(&remaining);
+ strbuf_release(&next);
+ strbuf_release(&symlink);
+
+ if (!retval)
+ strbuf_reset(resolved);
return retval;
}
const char *real_path(const char *path)
{
- return real_path_internal(path, 1);
+ static struct strbuf realpath = STRBUF_INIT;
+ return strbuf_realpath(&realpath, path, 1);
}
const char *real_path_if_valid(const char *path)
{
- return real_path_internal(path, 0);
+ static struct strbuf realpath = STRBUF_INIT;
+ return strbuf_realpath(&realpath, path, 0);
+}
+
+char *real_pathdup(const char *path)
+{
+ struct strbuf realpath = STRBUF_INIT;
+ char *retval = NULL;
+
+ if (strbuf_realpath(&realpath, path, 0))
+ retval = strbuf_detach(&realpath, NULL);
+
+ strbuf_release(&realpath);
+
+ return retval;
}
/*
return sb.buf;
}
+char *absolute_pathdup(const char *path)
+{
+ struct strbuf sb = STRBUF_INIT;
+ strbuf_add_absolute_path(&sb, path);
+ return strbuf_detach(&sb, NULL);
+}
+
/*
* Unlike prefix_path, this should be used if the named file does
* not have to interact with index entry; i.e. name of a random file
state->index_file,
LOCK_DIE_ON_ERROR);
else
- state->newfd = hold_locked_index(state->lock_file, 1);
+ state->newfd = hold_locked_index(state->lock_file, LOCK_DIE_ON_ERROR);
}
if (state->check_index && read_apply_cache(state) < 0) {
*dos_time = t->tm_sec / 2 + t->tm_min * 32 + t->tm_hour * 2048;
}
+static int archive_zip_config(const char *var, const char *value, void *data)
+{
+ return userdiff_config(var, value);
+}
+
static int write_zip_archive(const struct archiver *ar,
struct archiver_args *args)
{
int err;
+ git_config(archive_zip_config, NULL);
+
dos_time(&args->time, &zip_date, &zip_time);
zip_dir = xmalloc(ZIP_DIRECTORY_MIN_SIZE);
exit(3);
}
- fprintf(stderr, _("Some %s revs are not ancestor of the %s rev.\n"
+ fprintf(stderr, _("Some %s revs are not ancestors of the %s rev.\n"
"git bisect cannot work properly in this case.\n"
"Maybe you mistook %s and %s revs?\n"),
term_good, term_bad, term_good, term_bad);
start_name);
if (reflog)
- log_all_ref_updates = 1;
+ log_all_ref_updates = LOG_REFS_NORMAL;
if (!dont_change_ref) {
struct ref_transaction *transaction;
int replace_each_worktree_head_symref(const char *oldref, const char *newref)
{
int ret = 0;
- struct worktree **worktrees = get_worktrees();
+ struct worktree **worktrees = get_worktrees(0);
int i;
for (i = 0; worktrees[i]; i++) {
add_new_files = !take_worktree_changes && !refresh_only;
require_pathspec = !(take_worktree_changes || (0 < addremove_explicit));
- hold_locked_index(&lock_file, 1);
+ hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
flags = ((verbose ? ADD_CACHE_VERBOSE : 0) |
(show_only ? ADD_CACHE_PRETEND : 0) |
{
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
- hold_locked_index(lock_file, 1);
+ hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
refresh_cache(REFRESH_QUIET);
if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
die(_("unable to write index file"));
return -1;
lock_file = xcalloc(1, sizeof(struct lock_file));
- hold_locked_index(lock_file, 1);
+ hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
refresh_cache(REFRESH_QUIET);
return -1;
lock_file = xcalloc(1, sizeof(struct lock_file));
- hold_locked_index(lock_file, 1);
+ hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
memset(&opts, 0, sizeof(opts));
opts.head_idx = 1;
if (read_state_file(&sb, state, "abort-safety", 1) > 0) {
if (get_oid_hex(sb.buf, &abort_safety))
- die(_("could not parse %s"), am_path(state, "abort_safety"));
+ die(_("could not parse %s"), am_path(state, "abort-safety"));
} else
oidclr(&abort_safety);
if (!oidcmp(&head, &abort_safety))
return 1;
- error(_("You seem to have moved HEAD since the last 'am' failure.\n"
+ warning(_("You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"));
return 0;
}
/*
+ * Write out any suspect information which depends on the path. This must be
+ * handled separately from emit_one_suspect_detail(), because a given commit
+ * may have changes in multiple paths. So this needs to appear each time
+ * we mention a new group.
+ *
* To allow LF and other nonportable characters in pathnames,
* they are c-style quoted as needed.
*/
-static void write_filename_info(const char *path)
+static void write_filename_info(struct origin *suspect)
{
+ if (suspect->previous) {
+ struct origin *prev = suspect->previous;
+ printf("previous %s ", oid_to_hex(&prev->commit->object.oid));
+ write_name_quoted(prev->path, stdout, '\n');
+ }
printf("filename ");
- write_name_quoted(path, stdout, '\n');
+ write_name_quoted(suspect->path, stdout, '\n');
}
/*
printf("summary %s\n", ci.summary.buf);
if (suspect->commit->object.flags & UNINTERESTING)
printf("boundary\n");
- if (suspect->previous) {
- struct origin *prev = suspect->previous;
- printf("previous %s ", oid_to_hex(&prev->commit->object.oid));
- write_name_quoted(prev->path, stdout, '\n');
- }
commit_info_destroy(&ci);
oid_to_hex(&suspect->commit->object.oid),
ent->s_lno + 1, ent->lno + 1, ent->num_lines);
emit_one_suspect_detail(suspect, 0);
- write_filename_info(suspect->path);
+ write_filename_info(suspect);
maybe_flush_or_die(stdout, "stdout");
}
pi->blamed_lines += ent->num_lines;
{
if (emit_one_suspect_detail(suspect, repeat) ||
(suspect->commit->object.flags & MORE_THAN_ONE_PATH))
- write_filename_info(suspect->path);
+ write_filename_info(suspect);
}
static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent,
struct origin *suspect = ent->suspect;
char hex[GIT_SHA1_HEXSZ + 1];
- sha1_to_hex_r(hex, suspect->commit->object.oid.hash);
+ oid_to_hex_r(hex, &suspect->commit->object.oid);
printf("%s %d %d %d\n",
hex,
ent->s_lno + 1,
int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP);
get_commit_info(suspect->commit, &ci, 1);
- sha1_to_hex_r(hex, suspect->commit->object.oid.hash);
+ oid_to_hex_r(hex, &suspect->commit->object.oid);
cp = nth_line(sb, ent->lno);
for (cnt = 0; cnt < ent->num_lines; cnt++) {
* and are only included here to get included in the "-h"
* output:
*/
- { OPTION_LOWLEVEL_CALLBACK, 0, "indent-heuristic", NULL, NULL, N_("Use an experimental indent-based heuristic to improve diffs"), PARSE_OPT_NOARG, parse_opt_unknown_cb },
- { OPTION_LOWLEVEL_CALLBACK, 0, "compaction-heuristic", NULL, NULL, N_("Use an experimental blank-line-based heuristic to improve diffs"), PARSE_OPT_NOARG, parse_opt_unknown_cb },
+ { OPTION_LOWLEVEL_CALLBACK, 0, "indent-heuristic", NULL, NULL, N_("Use an experimental heuristic to improve diffs"), PARSE_OPT_NOARG, parse_opt_unknown_cb },
OPT_BIT(0, "minimal", &xdl_opts, N_("Spend extra cycles to find better match"), XDF_NEED_MINIMAL),
OPT_STRING('S', NULL, &revs_file, N_("file"), N_("Use revisions from <file> instead of calling git-rev-list")),
}
parse_done:
no_whole_file_rename = !DIFF_OPT_TST(&revs.diffopt, FOLLOW_RENAMES);
- xdl_opts |= revs.diffopt.xdl_opts & (XDF_COMPACTION_HEURISTIC | XDF_INDENT_HEURISTIC);
+ xdl_opts |= revs.diffopt.xdl_opts & XDF_INDENT_HEURISTIC;
DIFF_OPT_CLR(&revs.diffopt, FOLLOW_RENAMES);
argc = parse_options_end(&ctx);
} else if (show_progress < 0)
show_progress = isatty(2);
- if (0 < abbrev)
+ if (0 < abbrev && abbrev < GIT_SHA1_HEXSZ)
/* one more abbrev length is needed for the boundary commit */
abbrev++;
+ else if (!abbrev)
+ abbrev = GIT_SHA1_HEXSZ;
if (revs_file && read_ancestry(revs_file))
die_errno("reading graft file '%s' failed", revs_file);
if (filter->verbose)
maxwidth = calc_maxwidth(&array, strlen(remote_prefix));
- /*
- * If no sorting parameter is given then we default to sorting
- * by 'refname'. This would give us an alphabetically sorted
- * array with the 'HEAD' ref at the beginning followed by
- * local branches 'refs/heads/...' and finally remote-tacking
- * branches 'refs/remotes/...'.
- */
- if (!sorting)
- sorting = ref_default_sorting();
ref_array_sort(sorting, &array);
for (i = 0; i < array.nr; i++)
static void reject_rebase_or_bisect_branch(const char *target)
{
- struct worktree **worktrees = get_worktrees();
+ struct worktree **worktrees = get_worktrees(0);
int i;
for (i = 0; worktrees[i]; i++) {
const char *new_upstream = NULL;
enum branch_track track;
struct ref_filter filter;
+ int icase = 0;
static struct ref_sorting *sorting = NULL, **sorting_tail = &sorting;
struct option options[] = {
OPTION_CALLBACK, 0, "points-at", &filter.points_at, N_("object"),
N_("print only branches of the object"), 0, parse_opt_object_name
},
+ OPT_BOOL('i', "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
OPT_END(),
};
if (filter.abbrev == -1)
filter.abbrev = DEFAULT_ABBREV;
+ filter.ignore_case = icase;
+
finalize_colopts(&colopts, -1);
if (filter.verbose) {
if (explicitly_enable_column(colopts))
if ((filter.kind & FILTER_REFS_BRANCHES) && filter.detached)
filter.kind |= FILTER_REFS_DETACHED_HEAD;
filter.name_patterns = argv;
+ /*
+ * If no sorting parameter is given then we default to sorting
+ * by 'refname'. This would give us an alphabetically sorted
+ * array with the 'HEAD' ref at the beginning followed by
+ * local branches 'refs/heads/...' and finally remote-tacking
+ * branches 'refs/remotes/...'.
+ */
+ if (!sorting)
+ sorting = ref_default_sorting();
+ sorting->ignore_case = icase;
print_ref_list(&filter, sorting);
print_columns(&output, colopts, NULL);
string_list_clear(&output, 0);
if (index_opt && !state.base_dir_len && !to_tempfile) {
state.refresh_cache = 1;
state.istate = &the_index;
- newfd = hold_locked_index(&lock_file, 1);
+ newfd = hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
}
/* Check out named files first */
int changed)
{
return run_hook_le(NULL, "post-checkout",
- sha1_to_hex(old ? old->object.oid.hash : null_sha1),
- sha1_to_hex(new ? new->object.oid.hash : null_sha1),
+ oid_to_hex(old ? &old->object.oid : &null_oid),
+ oid_to_hex(new ? &new->object.oid : &null_oid),
changed ? "1" : "0", NULL);
/* "new" can be NULL when checking out from the index before
a commit exists. */
lock_file = xcalloc(1, sizeof(struct lock_file));
- hold_locked_index(lock_file, 1);
+ hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
if (read_cache_preload(&opts->pathspec) < 0)
return error(_("index file corrupt"));
int ret;
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
- hold_locked_index(lock_file, 1);
+ hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
if (read_cache_preload(NULL) < 0)
return error(_("index file corrupt"));
const char *old_desc, *reflog_msg;
if (opts->new_branch) {
if (opts->new_orphan_branch) {
- if (opts->new_branch_log && !log_all_ref_updates) {
+ char *refname;
+
+ refname = mkpathdup("refs/heads/%s", opts->new_orphan_branch);
+ if (opts->new_branch_log &&
+ !should_autocreate_reflog(refname)) {
int ret;
- char *refname;
struct strbuf err = STRBUF_INIT;
- refname = mkpathdup("refs/heads/%s", opts->new_orphan_branch);
ret = safe_create_reflog(refname, 1, &err);
- free(refname);
if (ret) {
fprintf(stderr, _("Can not do reflog for '%s': %s\n"),
opts->new_orphan_branch, err.buf);
strbuf_release(&err);
+ free(refname);
return;
}
strbuf_release(&err);
}
+ free(refname);
}
else
create_branch(opts->new_branch, new->name,
static void prompt_help_cmd(int singleton)
{
clean_print_color(CLEAN_COLOR_HELP);
- printf_ln(singleton ?
+ printf(singleton ?
_("Prompt help:\n"
"1 - select a numbered item\n"
"foo - select item based on unique prefix\n"
- " - (empty) select nothing") :
+ " - (empty) select nothing\n") :
_("Prompt help:\n"
"1 - select a single item\n"
"3-5 - select a range of items\n"
"foo - select item based on unique prefix\n"
"-... - unselect specified items\n"
"* - choose all items\n"
- " - (empty) finish selecting"));
+ " - (empty) finish selecting\n"));
clean_print_color(CLEAN_COLOR_RESET);
}
if (top <= 0 || bottom <= 0 || top > menu_stuff->nr || bottom > top ||
(is_single && bottom != top)) {
clean_print_color(CLEAN_COLOR_ERROR);
- printf_ln(_("Huh (%s)?"), (*ptr)->buf);
+ printf(_("Huh (%s)?\n"), (*ptr)->buf);
clean_print_color(CLEAN_COLOR_RESET);
continue;
}
static int quit_cmd(void)
{
string_list_clear(&del_list, 0);
- printf_ln(_("Bye."));
+ printf(_("Bye.\n"));
return MENU_RETURN_NO_LOOP;
}
OPT_STRING(0, "shallow-since", &option_since, N_("time"),
N_("create a shallow clone since a specific time")),
OPT_STRING_LIST(0, "shallow-exclude", &option_not, N_("revision"),
- N_("deepen history of shallow clone by excluding rev")),
+ N_("deepen history of shallow clone, excluding rev")),
OPT_BOOL(0, "single-branch", &option_single_branch,
N_("clone only one branch, HEAD or --branch")),
OPT_BOOL(0, "shallow-submodules", &option_shallow_submodules,
strbuf_addstr(&path, repo);
raw = get_repo_path_1(&path, is_bundle);
- canon = raw ? xstrdup(absolute_path(raw)) : NULL;
+ canon = raw ? absolute_pathdup(raw) : NULL;
strbuf_release(&path);
return canon;
}
setup_work_tree();
lock_file = xcalloc(1, sizeof(struct lock_file));
- hold_locked_index(lock_file, 1);
+ hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
memset(&opts, 0, sizeof opts);
opts.update = 1;
path = get_repo_path(repo_name, &is_bundle);
if (path)
- repo = xstrdup(absolute_path(repo_name));
+ repo = absolute_pathdup(repo_name);
else if (!strchr(repo_name, ':'))
die(_("repository '%s' does not exist"), repo_name);
else
if (interactive) {
char *old_index_env = NULL;
- hold_locked_index(&index_lock, 1);
+ hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
refresh_cache_or_die(refresh_flags);
* (B) on failure, rollback the real index.
*/
if (all || (also && pathspec.nr)) {
- hold_locked_index(&index_lock, 1);
+ hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
refresh_cache_or_die(refresh_flags);
update_main_cache_tree(WRITE_TREE_SILENT);
* We still need to refresh the index here.
*/
if (!only && !pathspec.nr) {
- hold_locked_index(&index_lock, 1);
+ hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
refresh_cache_or_die(refresh_flags);
if (active_cache_changed
|| !cache_tree_fully_valid(active_cache_tree))
if (read_cache() < 0)
die(_("cannot read the index"));
- hold_locked_index(&index_lock, 1);
+ hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
add_remove_files(&partial);
refresh_cache(REFRESH_QUIET);
update_main_cache_tree(WRITE_TREE_SILENT);
strbuf_stripspace(&sb, 0);
if (signoff)
- append_signoff(&sb, ignore_non_trailer(&sb), 0);
+ append_signoff(&sb, ignore_non_trailer(sb.buf, sb.len), 0);
if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
die_errno(_("could not write commit template"));
return 0;
if (use_editor) {
- char index[PATH_MAX];
- const char *env[2] = { NULL };
- env[0] = index;
- snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
- if (launch_editor(git_path_commit_editmsg(), NULL, env)) {
+ struct argv_array env = ARGV_ARRAY_INIT;
+
+ argv_array_pushf(&env, "GIT_INDEX_FILE=%s", index_file);
+ if (launch_editor(git_path_commit_editmsg(), NULL, env.argv)) {
fprintf(stderr,
_("Please supply the message using either -m or -F option.\n"));
exit(1);
}
+ argv_array_clear(&env);
}
if (!no_verify &&
if (also + only + all + interactive > 1)
die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
- if (argc == 0 && (also || (only && !amend)))
+ if (argc == 0 && (also || (only && !amend && !allow_empty)))
die(_("No paths with --include/--only does not make sense."));
- if (argc == 0 && only && amend)
- only_include_assumed = _("Clever... amending the last one with dirty index.");
if (argc > 0 && !also && !only)
only_include_assumed = _("Explicit paths specified without -i or -o; assuming --only paths...");
if (!cleanup_arg || !strcmp(cleanup_arg, "default"))
static int run_rewrite_hook(const unsigned char *oldsha1,
const unsigned char *newsha1)
{
- /* oldsha1 SP newsha1 LF NUL */
- static char buf[2*40 + 3];
struct child_process proc = CHILD_PROCESS_INIT;
const char *argv[3];
int code;
- size_t n;
+ struct strbuf sb = STRBUF_INIT;
argv[0] = find_hook("post-rewrite");
if (!argv[0])
code = start_command(&proc);
if (code)
return code;
- n = snprintf(buf, sizeof(buf), "%s %s\n",
- sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
+ strbuf_addf(&sb, "%s %s\n", sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
sigchain_push(SIGPIPE, SIG_IGN);
- write_in_full(proc.in, buf, n);
+ write_in_full(proc.in, sb.buf, sb.len);
close(proc.in);
+ strbuf_release(&sb);
sigchain_pop(SIGPIPE);
return finish_command(&proc);
}
int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...)
{
- const char *hook_env[3] = { NULL };
- char index[PATH_MAX];
+ struct argv_array hook_env = ARGV_ARRAY_INIT;
va_list args;
int ret;
- snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
- hook_env[0] = index;
+ argv_array_pushf(&hook_env, "GIT_INDEX_FILE=%s", index_file);
/*
* Let the hook know that no editor will be launched.
*/
if (!editor_is_used)
- hook_env[1] = "GIT_EDITOR=:";
+ argv_array_push(&hook_env, "GIT_EDITOR=:");
va_start(args, name);
- ret = run_hook_ve(hook_env, name, args);
+ ret = run_hook_ve(hook_env.argv,name, args);
va_end(args);
+ argv_array_clear(&hook_env);
return ret;
}
OPT_STRING(0, "shallow-since", &deepen_since, N_("time"),
N_("deepen history of shallow repository based on time")),
OPT_STRING_LIST(0, "shallow-exclude", &deepen_not, N_("revision"),
- N_("deepen history of shallow clone by excluding rev")),
+ N_("deepen history of shallow clone, excluding rev")),
OPT_INTEGER(0, "deepen", &deepen_relative,
N_("deepen history of shallow clone")),
{ OPTION_SET_INT, 0, "unshallow", &unshallow, NULL,
for (i = 0; i < fetch_refspec_nr; i++)
get_fetch_map(ref_map, &fetch_refspec[i], &oref_tail, 1);
-
- if (tags == TAGS_SET)
- get_fetch_map(remote_refs, tag_refspec, &tail, 0);
} else if (refmap_array) {
die("--refmap option is only meaningful with command-line refspec(s).");
} else {
git_config(get_remote_group, &g);
if (list->nr == prev_nr) {
struct remote *remote = remote_get(name);
- if (!remote_is_configured(remote))
+ if (!remote_is_configured(remote, 0))
return 0;
string_list_append(list, remote->name);
}
int i;
const char *format = "%(objectname) %(objecttype)\t%(refname)";
struct ref_sorting *sorting = NULL, **sorting_tail = &sorting;
- int maxcount = 0, quote_style = 0;
+ int maxcount = 0, quote_style = 0, icase = 0;
struct ref_array array;
struct ref_filter filter;
OPT_MERGED(&filter, N_("print only refs that are merged")),
OPT_NO_MERGED(&filter, N_("print only refs that are not merged")),
OPT_CONTAINS(&filter.with_commit, N_("print only refs which contain the commit")),
+ OPT_BOOL(0, "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
OPT_END(),
};
if (!sorting)
sorting = ref_default_sorting();
+ sorting->ignore_case = icase;
+ filter.ignore_case = icase;
/* for warn_ambiguous_refs */
git_config(git_default_config, NULL);
return buf.buf;
}
+static const char *printable_type(struct object *obj)
+{
+ const char *ret;
+
+ if (obj->type == OBJ_NONE) {
+ enum object_type type = sha1_object_info(obj->oid.hash, NULL);
+ if (type > 0)
+ object_as_type(obj, type, 0);
+ }
+
+ ret = typename(obj->type);
+ if (!ret)
+ ret = "unknown";
+
+ return ret;
+}
+
static int fsck_config(const char *var, const char *value, void *cb)
{
if (strcmp(var, "fsck.skiplist") == 0) {
const char *err)
{
fprintf(stderr, "%s in %s %s: %s\n",
- msg_type, typename(obj->type), describe_object(obj), err);
+ msg_type, printable_type(obj), describe_object(obj), err);
}
static int objerror(struct object *obj, const char *err)
if (!obj) {
/* ... these references to parent->fld are safe here */
printf("broken link from %7s %s\n",
- typename(parent->type), describe_object(parent));
+ printable_type(parent), describe_object(parent));
printf("broken link from %7s %s\n",
(type == OBJ_ANY ? "unknown" : typename(type)), "unknown");
errors_found |= ERROR_REACHABLE;
if (!(obj->flags & HAS_OBJ)) {
if (parent && !has_object_file(&obj->oid)) {
printf("broken link from %7s %s\n",
- typename(parent->type), describe_object(parent));
+ printable_type(parent), describe_object(parent));
printf(" to %7s %s\n",
- typename(obj->type), describe_object(obj));
+ printable_type(obj), describe_object(obj));
errors_found |= ERROR_REACHABLE;
}
return 1;
if (!(obj->flags & HAS_OBJ)) {
if (has_sha1_pack(obj->oid.hash))
return; /* it is in pack - forget about it */
- if (connectivity_only && has_object_file(&obj->oid))
- return;
- printf("missing %s %s\n", typename(obj->type),
+ printf("missing %s %s\n", printable_type(obj),
describe_object(obj));
errors_found |= ERROR_REACHABLE;
return;
* to complain about it being unreachable (since it does
* not exist).
*/
- if (!obj->parsed)
+ if (!(obj->flags & HAS_OBJ))
return;
/*
* since this is something that is prunable.
*/
if (show_unreachable) {
- printf("unreachable %s %s\n", typename(obj->type),
+ printf("unreachable %s %s\n", printable_type(obj),
describe_object(obj));
return;
}
*/
if (!obj->used) {
if (show_dangling)
- printf("dangling %s %s\n", typename(obj->type),
+ printf("dangling %s %s\n", printable_type(obj),
describe_object(obj));
if (write_lost_and_found) {
char *filename = git_pathdup("lost-found/%s/%s",
if (verbose)
fprintf(stderr, "Checking %s %s\n",
- typename(obj->type), describe_object(obj));
+ printable_type(obj), describe_object(obj));
if (fsck_walk(obj, NULL, &fsck_obj_options))
objerror(obj, "broken links");
struct tag *tag = (struct tag *) obj;
if (show_tags && tag->tagged) {
- printf("tagged %s %s", typename(tag->tagged->type),
+ printf("tagged %s %s", printable_type(tag->tagged),
describe_object(tag->tagged));
printf(" (%s) in %s\n", tag->tag,
describe_object(&tag->object));
return 0;
}
-static int fsck_sha1(const unsigned char *sha1)
-{
- struct object *obj = parse_object(sha1);
- if (!obj) {
- errors_found |= ERROR_OBJECT;
- return error("%s: object corrupt or missing",
- sha1_to_hex(sha1));
- }
- obj->flags |= HAS_OBJ;
- return fsck_obj(obj);
-}
-
static int fsck_obj_buffer(const unsigned char *sha1, enum object_type type,
unsigned long size, void *buffer, int *eaten)
{
if (!is_null_sha1(sha1)) {
obj = lookup_object(sha1);
- if (obj) {
+ if (obj && (obj->flags & HAS_OBJ)) {
if (timestamp && name_objects)
add_decoration(fsck_walk_options.object_names,
obj,
}
}
+static struct object *parse_loose_object(const unsigned char *sha1,
+ const char *path)
+{
+ struct object *obj;
+ void *contents;
+ enum object_type type;
+ unsigned long size;
+ int eaten;
+
+ if (read_loose_object(path, sha1, &type, &size, &contents) < 0)
+ return NULL;
+
+ if (!contents && type != OBJ_BLOB)
+ die("BUG: read_loose_object streamed a non-blob");
+
+ obj = parse_object_buffer(sha1, type, size, contents, &eaten);
+
+ if (!eaten)
+ free(contents);
+ return obj;
+}
+
static int fsck_loose(const unsigned char *sha1, const char *path, void *data)
{
- if (fsck_sha1(sha1))
+ struct object *obj = parse_loose_object(sha1, path);
+
+ if (!obj) {
+ errors_found |= ERROR_OBJECT;
+ error("%s: object corrupt or missing: %s",
+ sha1_to_hex(sha1), path);
+ return 0; /* keep checking other objects */
+ }
+
+ obj->flags = HAS_OBJ;
+ if (fsck_obj(obj))
errors_found |= ERROR_OBJECT;
return 0;
}
return err;
}
+static void mark_object_for_connectivity(const unsigned char *sha1)
+{
+ struct object *obj = lookup_unknown_object(sha1);
+ obj->flags |= HAS_OBJ;
+}
+
+static int mark_loose_for_connectivity(const unsigned char *sha1,
+ const char *path,
+ void *data)
+{
+ mark_object_for_connectivity(sha1);
+ return 0;
+}
+
+static int mark_packed_for_connectivity(const unsigned char *sha1,
+ struct packed_git *pack,
+ uint32_t pos,
+ void *data)
+{
+ mark_object_for_connectivity(sha1);
+ return 0;
+}
+
static char const * const fsck_usage[] = {
N_("git fsck [<options>] [<object>...]"),
NULL
git_config(fsck_config, NULL);
fsck_head_link();
- if (!connectivity_only) {
+ if (connectivity_only) {
+ for_each_loose_object(mark_loose_for_connectivity, NULL, 0);
+ for_each_packed_object(mark_packed_for_connectivity, NULL, 0);
+ } else {
fsck_object_dir(get_object_directory());
prepare_alt_odb();
for (alt = alt_odb_list; alt; alt = alt->next)
fsck_object_dir(alt->path);
- }
- if (check_full) {
- struct packed_git *p;
- uint32_t total = 0, count = 0;
- struct progress *progress = NULL;
+ if (check_full) {
+ struct packed_git *p;
+ uint32_t total = 0, count = 0;
+ struct progress *progress = NULL;
- prepare_packed_git();
+ prepare_packed_git();
- if (show_progress) {
+ if (show_progress) {
+ for (p = packed_git; p; p = p->next) {
+ if (open_pack_index(p))
+ continue;
+ total += p->num_objects;
+ }
+
+ progress = start_progress(_("Checking objects"), total);
+ }
for (p = packed_git; p; p = p->next) {
- if (open_pack_index(p))
- continue;
- total += p->num_objects;
+ /* verify gives error messages itself */
+ if (verify_pack(p, fsck_obj_buffer,
+ progress, count))
+ errors_found |= ERROR_PACK;
+ count += p->num_objects;
}
-
- progress = start_progress(_("Checking objects"), total);
+ stop_progress(&progress);
}
- for (p = packed_git; p; p = p->next) {
- /* verify gives error messages itself */
- if (verify_pack(p, fsck_obj_buffer,
- progress, count))
- errors_found |= ERROR_PACK;
- count += p->num_objects;
- }
- stop_progress(&progress);
}
heads = 0;
if (!get_sha1(arg, sha1)) {
struct object *obj = lookup_object(sha1);
- /* Error is printed by lookup_object(). */
- if (!obj)
+ if (!obj || !(obj->flags & HAS_OBJ)) {
+ error("%s: object missing", sha1_to_hex(sha1));
+ errors_found |= ERROR_OBJECT;
continue;
+ }
obj->used = 1;
if (name_objects)
continue;
}
error("invalid parameter: expected sha1, got '%s'", arg);
+ errors_found |= ERROR_OBJECT;
}
/*
* default ones from .git/refs. We also consider the index file
* in this case (ie this implies --cache).
*/
- if (!heads) {
+ if (!argc) {
get_default_heads();
keep_cache_objects = 1;
}
}
}
+static void add_repack_incremental_option(void)
+{
+ argv_array_push(&repack, "--no-write-bitmap-index");
+}
+
static int need_to_gc(void)
{
/*
*/
if (too_many_packs())
add_repack_all_option();
- else if (!too_many_loose_objects())
+ else if (too_many_loose_objects())
+ add_repack_incremental_option();
+ else
return 0;
if (run_hook_le(NULL, "pre-auto-gc", NULL))
#include "quote.h"
#include "dir.h"
#include "pathspec.h"
+#include "submodule.h"
+#include "submodule-config.h"
static char const * const grep_usage[] = {
N_("git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"),
NULL
};
+static const char *super_prefix;
+static int recurse_submodules;
+static struct argv_array submodule_options = ARGV_ARRAY_INIT;
+static const char *parent_basename;
+
+static int grep_submodule_launch(struct grep_opt *opt,
+ const struct grep_source *gs);
+
#define GREP_NUM_THREADS_DEFAULT 8
static int num_threads;
break;
opt->output_priv = w;
- hit |= grep_source(opt, &w->source);
+ if (w->source.type == GREP_SOURCE_SUBMODULE)
+ hit |= grep_submodule_launch(opt, &w->source);
+ else
+ hit |= grep_source(opt, &w->source);
grep_source_clear_data(&w->source);
work_done(w);
}
if (opt->relative && opt->prefix_length) {
quote_path_relative(filename + tree_name_len, opt->prefix, &pathbuf);
strbuf_insert(&pathbuf, 0, filename, tree_name_len);
+ } else if (super_prefix) {
+ strbuf_add(&pathbuf, filename, tree_name_len);
+ strbuf_addstr(&pathbuf, super_prefix);
+ strbuf_addstr(&pathbuf, filename + tree_name_len);
} else {
strbuf_addstr(&pathbuf, filename);
}
{
struct strbuf buf = STRBUF_INIT;
- if (opt->relative && opt->prefix_length)
+ if (opt->relative && opt->prefix_length) {
quote_path_relative(filename, opt->prefix, &buf);
- else
+ } else {
+ if (super_prefix)
+ strbuf_addstr(&buf, super_prefix);
strbuf_addstr(&buf, filename);
+ }
#ifndef NO_PTHREADS
if (num_threads) {
exit(status);
}
-static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int cached)
+static void compile_submodule_options(const struct grep_opt *opt,
+ const struct pathspec *pathspec,
+ int cached, int untracked,
+ int opt_exclude, int use_index,
+ int pattern_type_arg)
+{
+ struct grep_pat *pattern;
+ int i;
+
+ if (recurse_submodules)
+ argv_array_push(&submodule_options, "--recurse-submodules");
+
+ if (cached)
+ argv_array_push(&submodule_options, "--cached");
+ if (!use_index)
+ argv_array_push(&submodule_options, "--no-index");
+ if (untracked)
+ argv_array_push(&submodule_options, "--untracked");
+ if (opt_exclude > 0)
+ argv_array_push(&submodule_options, "--exclude-standard");
+
+ if (opt->invert)
+ argv_array_push(&submodule_options, "-v");
+ if (opt->ignore_case)
+ argv_array_push(&submodule_options, "-i");
+ if (opt->word_regexp)
+ argv_array_push(&submodule_options, "-w");
+ switch (opt->binary) {
+ case GREP_BINARY_NOMATCH:
+ argv_array_push(&submodule_options, "-I");
+ break;
+ case GREP_BINARY_TEXT:
+ argv_array_push(&submodule_options, "-a");
+ break;
+ default:
+ break;
+ }
+ if (opt->allow_textconv)
+ argv_array_push(&submodule_options, "--textconv");
+ if (opt->max_depth != -1)
+ argv_array_pushf(&submodule_options, "--max-depth=%d",
+ opt->max_depth);
+ if (opt->linenum)
+ argv_array_push(&submodule_options, "-n");
+ if (!opt->pathname)
+ argv_array_push(&submodule_options, "-h");
+ if (!opt->relative)
+ argv_array_push(&submodule_options, "--full-name");
+ if (opt->name_only)
+ argv_array_push(&submodule_options, "-l");
+ if (opt->unmatch_name_only)
+ argv_array_push(&submodule_options, "-L");
+ if (opt->null_following_name)
+ argv_array_push(&submodule_options, "-z");
+ if (opt->count)
+ argv_array_push(&submodule_options, "-c");
+ if (opt->file_break)
+ argv_array_push(&submodule_options, "--break");
+ if (opt->heading)
+ argv_array_push(&submodule_options, "--heading");
+ if (opt->pre_context)
+ argv_array_pushf(&submodule_options, "--before-context=%d",
+ opt->pre_context);
+ if (opt->post_context)
+ argv_array_pushf(&submodule_options, "--after-context=%d",
+ opt->post_context);
+ if (opt->funcname)
+ argv_array_push(&submodule_options, "-p");
+ if (opt->funcbody)
+ argv_array_push(&submodule_options, "-W");
+ if (opt->all_match)
+ argv_array_push(&submodule_options, "--all-match");
+ if (opt->debug)
+ argv_array_push(&submodule_options, "--debug");
+ if (opt->status_only)
+ argv_array_push(&submodule_options, "-q");
+
+ switch (pattern_type_arg) {
+ case GREP_PATTERN_TYPE_BRE:
+ argv_array_push(&submodule_options, "-G");
+ break;
+ case GREP_PATTERN_TYPE_ERE:
+ argv_array_push(&submodule_options, "-E");
+ break;
+ case GREP_PATTERN_TYPE_FIXED:
+ argv_array_push(&submodule_options, "-F");
+ break;
+ case GREP_PATTERN_TYPE_PCRE:
+ argv_array_push(&submodule_options, "-P");
+ break;
+ case GREP_PATTERN_TYPE_UNSPECIFIED:
+ break;
+ }
+
+ for (pattern = opt->pattern_list; pattern != NULL;
+ pattern = pattern->next) {
+ switch (pattern->token) {
+ case GREP_PATTERN:
+ argv_array_pushf(&submodule_options, "-e%s",
+ pattern->pattern);
+ break;
+ case GREP_AND:
+ case GREP_OPEN_PAREN:
+ case GREP_CLOSE_PAREN:
+ case GREP_NOT:
+ case GREP_OR:
+ argv_array_push(&submodule_options, pattern->pattern);
+ break;
+ /* BODY and HEAD are not used by git-grep */
+ case GREP_PATTERN_BODY:
+ case GREP_PATTERN_HEAD:
+ break;
+ }
+ }
+
+ /*
+ * Limit number of threads for child process to use.
+ * This is to prevent potential fork-bomb behavior of git-grep as each
+ * submodule process has its own thread pool.
+ */
+ argv_array_pushf(&submodule_options, "--threads=%d",
+ (num_threads + 1) / 2);
+
+ /* Add Pathspecs */
+ argv_array_push(&submodule_options, "--");
+ for (i = 0; i < pathspec->nr; i++)
+ argv_array_push(&submodule_options,
+ pathspec->items[i].original);
+}
+
+/*
+ * Launch child process to grep contents of a submodule
+ */
+static int grep_submodule_launch(struct grep_opt *opt,
+ const struct grep_source *gs)
+{
+ struct child_process cp = CHILD_PROCESS_INIT;
+ int status, i;
+ const char *end_of_base;
+ const char *name;
+ struct work_item *w = opt->output_priv;
+
+ end_of_base = strchr(gs->name, ':');
+ if (gs->identifier && end_of_base)
+ name = end_of_base + 1;
+ else
+ name = gs->name;
+
+ prepare_submodule_repo_env(&cp.env_array);
+ argv_array_push(&cp.env_array, GIT_DIR_ENVIRONMENT);
+
+ /* Add super prefix */
+ argv_array_pushf(&cp.args, "--super-prefix=%s%s/",
+ super_prefix ? super_prefix : "",
+ name);
+ argv_array_push(&cp.args, "grep");
+
+ /*
+ * Add basename of parent project
+ * When performing grep on a tree object the filename is prefixed
+ * with the object's name: 'tree-name:filename'. In order to
+ * provide uniformity of output we want to pass the name of the
+ * parent project's object name to the submodule so the submodule can
+ * prefix its output with the parent's name and not its own SHA1.
+ */
+ if (gs->identifier && end_of_base)
+ argv_array_pushf(&cp.args, "--parent-basename=%.*s",
+ (int) (end_of_base - gs->name),
+ gs->name);
+
+ /* Add options */
+ for (i = 0; i < submodule_options.argc; i++) {
+ /*
+ * If there is a tree identifier for the submodule, add the
+ * rev after adding the submodule options but before the
+ * pathspecs. To do this we listen for the '--' and insert the
+ * sha1 before pushing the '--' onto the child process argv
+ * array.
+ */
+ if (gs->identifier &&
+ !strcmp("--", submodule_options.argv[i])) {
+ argv_array_push(&cp.args, sha1_to_hex(gs->identifier));
+ }
+
+ argv_array_push(&cp.args, submodule_options.argv[i]);
+ }
+
+ cp.git_cmd = 1;
+ cp.dir = gs->path;
+
+ /*
+ * Capture output to output buffer and check the return code from the
+ * child process. A '0' indicates a hit, a '1' indicates no hit and
+ * anything else is an error.
+ */
+ status = capture_command(&cp, &w->out, 0);
+ if (status && (status != 1)) {
+ /* flush the buffer */
+ write_or_die(1, w->out.buf, w->out.len);
+ die("process for submodule '%s' failed with exit code: %d",
+ gs->name, status);
+ }
+
+ /* invert the return code to make a hit equal to 1 */
+ return !status;
+}
+
+/*
+ * Prep grep structures for a submodule grep
+ * sha1: the sha1 of the submodule or NULL if using the working tree
+ * filename: name of the submodule including tree name of parent
+ * path: location of the submodule
+ */
+static int grep_submodule(struct grep_opt *opt, const unsigned char *sha1,
+ const char *filename, const char *path)
+{
+ if (!is_submodule_initialized(path))
+ return 0;
+ if (!is_submodule_populated(path)) {
+ /*
+ * If searching history, check for the presense of the
+ * submodule's gitdir before skipping the submodule.
+ */
+ if (sha1) {
+ const struct submodule *sub =
+ submodule_from_path(null_sha1, path);
+ if (sub)
+ path = git_path("modules/%s", sub->name);
+
+ if (!(is_directory(path) && is_git_directory(path)))
+ return 0;
+ } else {
+ return 0;
+ }
+ }
+
+#ifndef NO_PTHREADS
+ if (num_threads) {
+ add_work(opt, GREP_SOURCE_SUBMODULE, filename, path, sha1);
+ return 0;
+ } else
+#endif
+ {
+ struct work_item w;
+ int hit;
+
+ grep_source_init(&w.source, GREP_SOURCE_SUBMODULE,
+ filename, path, sha1);
+ strbuf_init(&w.out, 0);
+ opt->output_priv = &w;
+ hit = grep_submodule_launch(opt, &w.source);
+
+ write_or_die(1, w.out.buf, w.out.len);
+
+ grep_source_clear(&w.source);
+ strbuf_release(&w.out);
+ return hit;
+ }
+}
+
+static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec,
+ int cached)
{
int hit = 0;
int nr;
+ struct strbuf name = STRBUF_INIT;
+ int name_base_len = 0;
+ if (super_prefix) {
+ name_base_len = strlen(super_prefix);
+ strbuf_addstr(&name, super_prefix);
+ }
+
read_cache();
for (nr = 0; nr < active_nr; nr++) {
const struct cache_entry *ce = active_cache[nr];
- if (!S_ISREG(ce->ce_mode))
- continue;
- if (!ce_path_match(ce, pathspec, NULL))
+ strbuf_setlen(&name, name_base_len);
+ strbuf_addstr(&name, ce->name);
+
+ if (S_ISREG(ce->ce_mode) &&
+ match_pathspec(pathspec, name.buf, name.len, 0, NULL,
+ S_ISDIR(ce->ce_mode) ||
+ S_ISGITLINK(ce->ce_mode))) {
+ /*
+ * If CE_VALID is on, we assume worktree file and its
+ * cache entry are identical, even if worktree file has
+ * been modified, so use cache version instead
+ */
+ if (cached || (ce->ce_flags & CE_VALID) ||
+ ce_skip_worktree(ce)) {
+ if (ce_stage(ce) || ce_intent_to_add(ce))
+ continue;
+ hit |= grep_sha1(opt, ce->oid.hash, ce->name,
+ 0, ce->name);
+ } else {
+ hit |= grep_file(opt, ce->name);
+ }
+ } else if (recurse_submodules && S_ISGITLINK(ce->ce_mode) &&
+ submodule_path_match(pathspec, name.buf, NULL)) {
+ hit |= grep_submodule(opt, NULL, ce->name, ce->name);
+ } else {
continue;
- /*
- * If CE_VALID is on, we assume worktree file and its cache entry
- * are identical, even if worktree file has been modified, so use
- * cache version instead
- */
- if (cached || (ce->ce_flags & CE_VALID) || ce_skip_worktree(ce)) {
- if (ce_stage(ce) || ce_intent_to_add(ce))
- continue;
- hit |= grep_sha1(opt, ce->oid.hash, ce->name, 0,
- ce->name);
}
- else
- hit |= grep_file(opt, ce->name);
+
if (ce_stage(ce)) {
do {
nr++;
if (hit && opt->status_only)
break;
}
+
+ strbuf_release(&name);
return hit;
}
enum interesting match = entry_not_interesting;
struct name_entry entry;
int old_baselen = base->len;
+ struct strbuf name = STRBUF_INIT;
+ int name_base_len = 0;
+ if (super_prefix) {
+ strbuf_addstr(&name, super_prefix);
+ name_base_len = name.len;
+ }
while (tree_entry(tree, &entry)) {
int te_len = tree_entry_len(&entry);
if (match != all_entries_interesting) {
- match = tree_entry_interesting(&entry, base, tn_len, pathspec);
+ strbuf_addstr(&name, base->buf + tn_len);
+ match = tree_entry_interesting(&entry, &name,
+ 0, pathspec);
+ strbuf_setlen(&name, name_base_len);
+
if (match == all_entries_not_interesting)
break;
if (match == entry_not_interesting)
if (S_ISREG(entry.mode)) {
hit |= grep_sha1(opt, entry.oid->hash, base->buf, tn_len,
check_attr ? base->buf + tn_len : NULL);
- }
- else if (S_ISDIR(entry.mode)) {
+ } else if (S_ISDIR(entry.mode)) {
enum object_type type;
struct tree_desc sub;
void *data;
hit |= grep_tree(opt, pathspec, &sub, base, tn_len,
check_attr);
free(data);
+ } else if (recurse_submodules && S_ISGITLINK(entry.mode)) {
+ hit |= grep_submodule(opt, entry.oid->hash, base->buf,
+ base->buf + tn_len);
}
+
strbuf_setlen(base, old_baselen);
if (hit && opt->status_only)
break;
}
+
+ strbuf_release(&name);
return hit;
}
if (!data)
die(_("unable to read tree (%s)"), oid_to_hex(&obj->oid));
+ /* Use parent's name as base when recursing submodules */
+ if (recurse_submodules && parent_basename)
+ name = parent_basename;
+
len = name ? strlen(name) : 0;
strbuf_init(&base, PATH_MAX + len + 1);
if (len) {
for (i = 0; i < nr; i++) {
struct object *real_obj;
real_obj = deref_tag(list->objects[i].item, NULL, 0);
+
+ /* load the gitmodules file for this rev */
+ if (recurse_submodules) {
+ submodule_free();
+ gitmodules_config_sha1(real_obj->oid.hash);
+ }
if (grep_object(opt, pathspec, real_obj, list->objects[i].name, list->objects[i].path)) {
hit = 1;
if (opt->status_only)
N_("search in both tracked and untracked files")),
OPT_SET_INT(0, "exclude-standard", &opt_exclude,
N_("ignore files specified via '.gitignore'"), 1),
+ OPT_BOOL(0, "recurse-submodules", &recurse_submodules,
+ N_("recursivley search in each submodule")),
+ OPT_STRING(0, "parent-basename", &parent_basename,
+ N_("basename"),
+ N_("prepend parent project's basename to output")),
OPT_GROUP(""),
OPT_BOOL('v', "invert-match", &opt.invert,
N_("show non-matching lines")),
init_grep_defaults();
git_config(grep_cmd_config, NULL);
grep_init(&opt, prefix);
+ super_prefix = get_super_prefix();
/*
* If there is no -- then the paths must exist in the working
pathspec.max_depth = opt.max_depth;
pathspec.recursive = 1;
+ if (recurse_submodules) {
+ gitmodules_config();
+ compile_submodule_options(&opt, &pathspec, cached, untracked,
+ opt_exclude, use_index,
+ pattern_type_arg);
+ }
+
if (show_in_pager && (cached || list.nr))
die(_("--open-files-in-pager only works on the worktree"));
}
}
+ if (recurse_submodules && (!use_index || untracked))
+ die(_("option not supported with --recurse-submodules."));
+
if (!show_in_pager && !opt.status_only)
setup_pager();
const unsigned char *sha1)
{
void *new_data = NULL;
- int collision_test_needed;
+ int collision_test_needed = 0;
assert(data || obj_entry);
- read_lock();
- collision_test_needed = has_sha1_file_with_flags(sha1, HAS_SHA1_QUICK);
- read_unlock();
+ if (startup_info->have_repository) {
+ read_lock();
+ collision_test_needed = has_sha1_file_with_flags(sha1, HAS_SHA1_QUICK);
+ read_unlock();
+ }
if (collision_test_needed && !data) {
read_lock();
usage(index_pack_usage);
if (fix_thin_pack && !from_stdin)
die(_("--fix-thin cannot be used without --stdin"));
+ if (from_stdin && !startup_info->have_repository)
+ die(_("--stdin requires a git repository"));
if (!index_name && pack_name)
index_name = derive_filename(pack_name, ".idx", &index_name_buf);
if (keep_msg && !keep_name && pack_name)
const char *work_tree = get_git_work_tree();
git_config_set("core.bare", "false");
/* allow template config file to override the default */
- if (log_all_ref_updates == -1)
+ if (log_all_ref_updates == LOG_REFS_UNSET)
git_config_set("core.logallrefupdates", "true");
if (needs_work_tree_config(original_git_dir, work_tree))
git_config_set("core.worktree", work_tree);
{
int reinit;
int exist_ok = flags & INIT_DB_EXIST_OK;
- char *original_git_dir = xstrdup(real_path(git_dir));
+ char *original_git_dir = real_pathdup(git_dir);
if (real_git_dir) {
struct stat st;
argc = parse_options(argc, argv, prefix, init_db_options, init_db_usage, 0);
if (real_git_dir && !is_absolute_path(real_git_dir))
- real_git_dir = xstrdup(real_path(real_git_dir));
+ real_git_dir = real_pathdup(real_git_dir);
if (argc == 1) {
int mkdir_tried = 0;
const char *git_dir_parent = strrchr(git_dir, '/');
if (git_dir_parent) {
char *rel = xstrndup(git_dir, git_dir_parent - git_dir);
- git_work_tree_cfg = xstrdup(real_path(rel));
+ git_work_tree_cfg = real_pathdup(rel);
free(rel);
}
if (!git_work_tree_cfg)
static int show_recursive(const char *base, int baselen, const char *pathname)
{
- const char **s;
+ int i;
if (ls_options & LS_RECURSIVE)
return 1;
- s = pathspec._raw;
- if (!s)
+ if (!pathspec.nr)
return 0;
- for (;;) {
- const char *spec = *s++;
+ for (i = 0; i < pathspec.nr; i++) {
+ const char *spec = pathspec.items[i].match;
int len, speclen;
- if (!spec)
- return 0;
if (strncmp(base, spec, baselen))
continue;
len = strlen(pathname);
continue;
return 1;
}
+ return 0;
}
static int show_tree(const unsigned char *sha1, struct strbuf *base,
* cannot be lifted until it is converted to use
* match_pathspec() or tree_entry_interesting()
*/
- parse_pathspec(&pathspec, PATHSPEC_GLOB | PATHSPEC_ICASE |
- PATHSPEC_EXCLUDE,
+ parse_pathspec(&pathspec, PATHSPEC_ALL_MAGIC &
+ ~(PATHSPEC_FROMTOP | PATHSPEC_LITERAL),
PATHSPEC_PREFER_CWD,
prefix, argv + 1);
for (i = 0; i < pathspec.nr; i++)
if (strcmp(ce->name, path))
break;
found++;
- sha1_to_hex_r(hexbuf[stage], ce->oid.hash);
+ oid_to_hex_r(hexbuf[stage], &ce->oid);
xsnprintf(ownbuf[stage], sizeof(ownbuf[stage]), "%o", ce->ce_mode);
arguments[stage] = hexbuf[stage];
arguments[stage + 4] = ownbuf[stage];
N_("git merge [<options>] [<commit>...]"),
N_("git merge [<options>] <msg> HEAD <commit>"),
N_("git merge --abort"),
+ N_("git merge --continue"),
NULL
};
static int verbosity;
static int allow_rerere_auto;
static int abort_current_merge;
+static int continue_current_merge;
static int allow_unrelated_histories;
static int show_progress = -1;
static int default_to_upstream = 1;
OPT__VERBOSITY(&verbosity),
OPT_BOOL(0, "abort", &abort_current_merge,
N_("abort the current in-progress merge")),
+ OPT_BOOL(0, "continue", &continue_current_merge,
+ N_("continue the current in-progress merge")),
OPT_BOOL(0, "allow-unrelated-histories", &allow_unrelated_histories,
N_("allow merging unrelated histories")),
OPT_SET_INT(0, "progress", &show_progress, N_("force progress reporting"), 1),
{
static struct lock_file lock;
- hold_locked_index(&lock, 1);
+ hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
refresh_cache(REFRESH_QUIET);
if (active_cache_changed &&
write_locked_index(&the_index, &lock, COMMIT_LOCK))
for (j = common; j; j = j->next)
commit_list_insert(j->item, &reversed);
- hold_locked_index(&lock, 1);
+ hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
clean = merge_recursive(&o, head,
remoteheads->item, reversed, &result);
if (clean < 0)
struct commit_list *parents, **pptr = &parents;
static struct lock_file lock;
- hold_locked_index(&lock, 1);
+ hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
refresh_cache(REFRESH_QUIET);
if (active_cache_changed &&
write_locked_index(&the_index, &lock, COMMIT_LOCK))
const char *best_strategy = NULL, *wt_strategy = NULL;
struct commit_list *remoteheads, *p;
void *branch_to_free;
+ int orig_argc = argc;
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_merge_usage, builtin_merge_options);
int nargc = 2;
const char *nargv[] = {"reset", "--merge", NULL};
+ if (orig_argc != 2)
+ usage_msg_opt(_("--abort expects no arguments"),
+ builtin_merge_usage, builtin_merge_options);
+
if (!file_exists(git_path_merge_head()))
die(_("There is no merge to abort (MERGE_HEAD missing)."));
goto done;
}
+ if (continue_current_merge) {
+ int nargc = 1;
+ const char *nargv[] = {"commit", NULL};
+
+ if (orig_argc != 2)
+ usage_msg_opt(_("--continue expects no arguments"),
+ builtin_merge_usage, builtin_merge_options);
+
+ if (!file_exists(git_path_merge_head()))
+ die(_("There is no merge in progress (MERGE_HEAD missing)."));
+
+ /* Invoke 'git commit' */
+ ret = cmd_commit(nargc, nargv, prefix);
+ goto done;
+ }
+
if (read_cache_unmerged())
die_resolve_conflict("merge");
* Copyright (C) 2006 Johannes Schindelin
*/
#include "builtin.h"
+#include "pathspec.h"
#include "lockfile.h"
#include "dir.h"
#include "cache-tree.h"
#define DUP_BASENAME 1
#define KEEP_TRAILING_SLASH 2
-static const char **internal_copy_pathspec(const char *prefix,
- const char **pathspec,
- int count, unsigned flags)
+static const char **internal_prefix_pathspec(const char *prefix,
+ const char **pathspec,
+ int count, unsigned flags)
{
int i;
const char **result;
+ int prefixlen = prefix ? strlen(prefix) : 0;
ALLOC_ARRAY(result, count + 1);
- COPY_ARRAY(result, pathspec, count);
- result[count] = NULL;
+
+ /* Create an intermediate copy of the pathspec based on the flags */
for (i = 0; i < count; i++) {
- int length = strlen(result[i]);
+ int length = strlen(pathspec[i]);
int to_copy = length;
+ char *it;
while (!(flags & KEEP_TRAILING_SLASH) &&
- to_copy > 0 && is_dir_sep(result[i][to_copy - 1]))
+ to_copy > 0 && is_dir_sep(pathspec[i][to_copy - 1]))
to_copy--;
- if (to_copy != length || flags & DUP_BASENAME) {
- char *it = xmemdupz(result[i], to_copy);
- if (flags & DUP_BASENAME) {
- result[i] = xstrdup(basename(it));
- free(it);
- } else
- result[i] = it;
+
+ it = xmemdupz(pathspec[i], to_copy);
+ if (flags & DUP_BASENAME) {
+ result[i] = xstrdup(basename(it));
+ free(it);
+ } else {
+ result[i] = it;
}
}
- return get_pathspec(prefix, result);
+ result[count] = NULL;
+
+ /* Prefix the pathspec and free the old intermediate strings */
+ for (i = 0; i < count; i++) {
+ const char *match = prefix_path(prefix, prefixlen, result[i]);
+ free((char *) result[i]);
+ result[i] = match;
+ }
+
+ return result;
}
static const char *add_slash(const char *path)
if (--argc < 1)
usage_with_options(builtin_mv_usage, builtin_mv_options);
- hold_locked_index(&lock_file, 1);
+ hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
if (read_cache() < 0)
die(_("index file corrupt"));
- source = internal_copy_pathspec(prefix, argv, argc, 0);
+ source = internal_prefix_pathspec(prefix, argv, argc, 0);
modes = xcalloc(argc, sizeof(enum update_mode));
/*
* Keep trailing slash, needed to let
flags = KEEP_TRAILING_SLASH;
if (argc == 1 && is_directory(argv[0]) && !is_directory(argv[1]))
flags = 0;
- dest_path = internal_copy_pathspec(prefix, argv + argc, 1, flags);
+ dest_path = internal_prefix_pathspec(prefix, argv + argc, 1, flags);
submodule_gitfile = xcalloc(argc, sizeof(char *));
if (dest_path[0][0] == '\0')
/* special case: "." was normalized to "" */
- destination = internal_copy_pathspec(dest_path[0], argv, argc, DUP_BASENAME);
+ destination = internal_prefix_pathspec(dest_path[0], argv, argc, DUP_BASENAME);
else if (!lstat(dest_path[0], &st) &&
S_ISDIR(st.st_mode)) {
dest_path[0] = add_slash(dest_path[0]);
- destination = internal_copy_pathspec(dest_path[0], argv, argc, DUP_BASENAME);
+ destination = internal_prefix_pathspec(dest_path[0], argv, argc, DUP_BASENAME);
} else {
if (argc != 1)
die(_("destination '%s' is not a directory"), dest_path[0]);
static int pack_to_stdout;
static int num_preferred_base;
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;
depth = git_config_int(k, v);
return 0;
}
- if (!strcmp(k, "pack.compression")) {
- int level = git_config_int(k, v);
- if (level == -1)
- level = Z_DEFAULT_COMPRESSION;
- else if (level < 0 || level > Z_BEST_COMPRESSION)
- die("bad pack compression level %d", level);
- pack_compression_level = level;
- pack_compression_seen = 1;
- return 0;
- }
if (!strcmp(k, "pack.deltacachesize")) {
max_delta_cache_size = git_config_int(k, v);
return 0;
reset_pack_idx_option(&pack_idx_opts);
git_config(git_pack_config, NULL);
- if (!pack_compression_seen && core_compression_seen)
- pack_compression_level = core_compression_level;
progress = isatty(2);
argc = parse_options(argc, argv, prefix, pack_objects_options,
if (merge_heads.nr > 1)
die(_("Cannot merge multiple branches into empty head."));
return pull_into_void(*merge_heads.sha1, curr_head);
- } else if (opt_rebase) {
- if (merge_heads.nr > 1)
- die(_("Cannot rebase onto multiple branches."));
+ }
+ if (opt_rebase && merge_heads.nr > 1)
+ die(_("Cannot rebase onto multiple branches."));
+
+ if (opt_rebase) {
+ struct commit_list *list = NULL;
+ struct commit *merge_head, *head;
+
+ head = lookup_commit_reference(orig_head);
+ commit_list_insert(head, &list);
+ merge_head = lookup_commit_reference(merge_heads.sha1[0]);
+ if (is_descendant_of(merge_head, list)) {
+ /* we can fast-forward this without invoking rebase */
+ opt_ff = "--ff-only";
+ return run_merge();
+ }
return run_rebase(curr_head, *merge_heads.sha1, rebase_fork_point);
- } else
+ } else {
return run_merge();
+ }
}
die_push_simple(branch, remote);
}
- strbuf_addf(&refspec, "%s:%s", branch->name, branch->merge[0]->src);
+ strbuf_addf(&refspec, "%s:%s", branch->refname, branch->merge[0]->src);
add_refspec(refspec.buf);
}
static void setup_push_current(struct remote *remote, struct branch *branch)
{
+ struct strbuf refspec = STRBUF_INIT;
+
if (!branch)
die(_(message_detached_head_die), remote->name);
- add_refspec(branch->name);
+ strbuf_addf(&refspec, "%s:%s", branch->refname, branch->refname);
+ add_refspec(refspec.buf);
}
static int is_workflow_triangular(struct remote *remote)
flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK;
else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
+ else if (recurse_submodules == RECURSE_SUBMODULES_ONLY)
+ flags |= TRANSPORT_RECURSE_SUBMODULES_ONLY;
if (tags)
add_refspec("refs/tags/*");
{ OPTION_CALLBACK, 0, "index-output", NULL, N_("file"),
N_("write resulting index to <file>"),
PARSE_OPT_NONEG, index_output_cb },
- OPT_SET_INT(0, "empty", &read_empty,
- N_("only empty the index"), 1),
+ OPT_BOOL(0, "empty", &read_empty,
+ N_("only empty the index")),
OPT__VERBOSE(&opts.verbose_update, N_("be verbose")),
OPT_GROUP(N_("Merging")),
- OPT_SET_INT('m', NULL, &opts.merge,
- N_("perform a merge in addition to a read"), 1),
- OPT_SET_INT(0, "trivial", &opts.trivial_merges_only,
- N_("3-way merge if no file level merging required"), 1),
- OPT_SET_INT(0, "aggressive", &opts.aggressive,
- N_("3-way merge in presence of adds and removes"), 1),
- OPT_SET_INT(0, "reset", &opts.reset,
- N_("same as -m, but discard unmerged entries"), 1),
+ OPT_BOOL('m', NULL, &opts.merge,
+ N_("perform a merge in addition to a read")),
+ OPT_BOOL(0, "trivial", &opts.trivial_merges_only,
+ N_("3-way merge if no file level merging required")),
+ OPT_BOOL(0, "aggressive", &opts.aggressive,
+ N_("3-way merge in presence of adds and removes")),
+ OPT_BOOL(0, "reset", &opts.reset,
+ N_("same as -m, but discard unmerged entries")),
{ OPTION_STRING, 0, "prefix", &opts.prefix, N_("<subdirectory>/"),
N_("read the tree into the index under <subdirectory>/"),
PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP },
- OPT_SET_INT('u', NULL, &opts.update,
- N_("update working tree with merge result"), 1),
+ OPT_BOOL('u', NULL, &opts.update,
+ N_("update working tree with merge result")),
{ OPTION_CALLBACK, 0, "exclude-per-directory", &opts,
N_("gitignore"),
N_("allow explicitly ignored files to be overwritten"),
PARSE_OPT_NONEG, exclude_per_directory_cb },
- OPT_SET_INT('i', NULL, &opts.index_only,
- N_("don't check the working tree after merging"), 1),
+ OPT_BOOL('i', NULL, &opts.index_only,
+ N_("don't check the working tree after merging")),
OPT__DRY_RUN(&opts.dry_run, N_("don't update the index or the work tree")),
- OPT_SET_INT(0, "no-sparse-checkout", &opts.skip_sparse_checkout,
- N_("skip applying sparse checkout filter"), 1),
- OPT_SET_INT(0, "debug-unpack", &opts.debug_unpack,
- N_("debug unpack-trees"), 1),
+ OPT_BOOL(0, "no-sparse-checkout", &opts.skip_sparse_checkout,
+ N_("skip applying sparse checkout filter")),
+ OPT_BOOL(0, "debug-unpack", &opts.debug_unpack,
+ N_("debug unpack-trees")),
OPT_END()
};
argc = parse_options(argc, argv, unused_prefix, read_tree_options,
read_tree_usage, 0);
- hold_locked_index(&lock_file, 1);
+ hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
prefix_set = opts.prefix ? 1 : 0;
if (1 < opts.merge + opts.reset + prefix_set)
"with what you pushed, and will require 'git reset --hard' to match\n"
"the work tree to HEAD.\n"
"\n"
- "You can set 'receive.denyCurrentBranch' configuration variable to\n"
- "'ignore' or 'warn' in the remote repository to allow pushing into\n"
+ "You can set the 'receive.denyCurrentBranch' configuration variable\n"
+ "to 'ignore' or 'warn' in the remote repository to allow pushing into\n"
"its current branch; however, this is not recommended unless you\n"
"arranged to update its work tree to match what you pushed in some\n"
"other way.\n"
run_receive_hook(commands, "post-receive", 1,
&push_options);
run_update_post_hook(commands);
- if (push_options.nr)
- string_list_clear(&push_options, 0);
+ string_list_clear(&push_options, 0);
if (auto_gc) {
const char *argv_gc_auto[] = {
"gc", "--auto", "--quiet", NULL,
url = argv[1];
remote = remote_get(name);
- if (remote_is_configured(remote))
+ if (remote_is_configured(remote, 1))
die(_("remote %s already exists."), name);
strbuf_addf(&buf2, "refs/heads/test:refs/remotes/%s/test", name);
rename.remote_branches = &remote_branches;
oldremote = remote_get(rename.old);
- if (!remote_is_configured(oldremote))
+ if (!remote_is_configured(oldremote, 1))
die(_("No such remote: %s"), rename.old);
if (!strcmp(rename.old, rename.new) && oldremote->origin != REMOTE_CONFIG)
return migrate_file(oldremote);
newremote = remote_get(rename.new);
- if (remote_is_configured(newremote))
+ if (remote_is_configured(newremote, 1))
die(_("remote %s already exists."), rename.new);
strbuf_addf(&buf, "refs/heads/test:refs/remotes/%s/test", rename.new);
usage_with_options(builtin_remote_rm_usage, options);
remote = remote_get(argv[1]);
- if (!remote_is_configured(remote))
+ if (!remote_is_configured(remote, 1))
die(_("No such remote: %s"), argv[1]);
known_remotes.to_delete = remote;
strbuf_addf(&key, "remote.%s.fetch", remotename);
remote = remote_get(remotename);
- if (!remote_is_configured(remote))
+ if (!remote_is_configured(remote, 1))
die(_("No such remote '%s'"), remotename);
if (!add_mode && remove_all_fetch_refspecs(remotename, key.buf)) {
remotename = argv[0];
remote = remote_get(remotename);
- if (!remote_is_configured(remote))
+ if (!remote_is_configured(remote, 1))
die(_("No such remote '%s'"), remotename);
url_nr = 0;
oldurl = newurl;
remote = remote_get(remotename);
- if (!remote_is_configured(remote))
+ if (!remote_is_configured(remote, 1))
die(_("No such remote '%s'"), remotename);
if (push_mode) {
NULL
};
+static const char incremental_bitmap_conflict_error[] = N_(
+"Incremental repacks are incompatible with bitmap indexes. Use\n"
+"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
+);
+
+
static int repack_config(const char *var, const char *value, void *cb)
{
if (!strcmp(var, "repack.usedeltabaseoffset")) {
if (pack_kept_objects < 0)
pack_kept_objects = write_bitmaps;
+ if (write_bitmaps && !(pack_everything & ALL_INTO_ONE))
+ die(_(incremental_bitmap_conflict_error));
+
packdir = mkpathdup("%s/pack", get_object_directory());
packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid());
if (reset_type != SOFT) {
struct lock_file *lock = xcalloc(1, sizeof(*lock));
- hold_locked_index(lock, 1);
+ hold_locked_index(lock, LOCK_DIE_ON_ERROR);
if (reset_type == MIXED) {
int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN;
if (read_from_tree(&pathspec, &oid, intent_to_add))
cnt = reaches;
if (revs->commits)
- sha1_to_hex_r(hex, revs->commits->item->object.oid.hash);
+ oid_to_hex_r(hex, &revs->commits->item->object.oid);
if (flags & BISECT_SHOW_ALL) {
traverse_commit_list(revs, show_commit, show_object, info);
for (parents = commit->parents, parent_number = 1;
parents;
parents = parents->next, parent_number++) {
+ char *name = NULL;
+
if (exclude_parent && parent_number != exclude_parent)
continue;
+ if (symbolic)
+ name = xstrfmt("%s^%d", arg, parent_number);
show_rev(include_parents ? NORMAL : REVERSED,
- parents->item->object.oid.hash, arg);
+ parents->item->object.oid.hash, name);
+ free(name);
}
*dotdot = '^';
}
}
-static void error_removing_concrete_submodules(struct string_list *files, int *errs)
-{
- print_error_files(files,
- Q_("the following submodule (or one of its nested "
- "submodules)\n"
- "uses a .git directory:",
- "the following submodules (or one of their nested "
- "submodules)\n"
- "use a .git directory:", files->nr),
- _("\n(use 'rm -rf' if you really want to remove "
- "it including all of its history)"),
- errs);
- string_list_clear(files, 0);
-}
-
-static int check_submodules_use_gitfiles(void)
+static void submodules_absorb_gitdir_if_needed(const char *prefix)
{
int i;
- int errs = 0;
- struct string_list files = STRING_LIST_INIT_NODUP;
-
for (i = 0; i < list.nr; i++) {
const char *name = list.entry[i].name;
int pos;
continue;
if (!submodule_uses_gitfile(name))
- string_list_append(&files, name);
+ absorb_git_dir_into_superproject(prefix, name,
+ ABSORB_GITDIR_RECURSE_SUBMODULES);
}
-
- error_removing_concrete_submodules(&files, &errs);
-
- return errs;
}
static int check_local_mod(struct object_id *head, int index_only)
int errs = 0;
struct string_list files_staged = STRING_LIST_INIT_NODUP;
struct string_list files_cached = STRING_LIST_INIT_NODUP;
- struct string_list files_submodule = STRING_LIST_INIT_NODUP;
struct string_list files_local = STRING_LIST_INIT_NODUP;
no_head = is_null_oid(head);
*/
if (ce_match_stat(ce, &st, 0) ||
(S_ISGITLINK(ce->ce_mode) &&
- !ok_to_remove_submodule(ce->name)))
+ bad_to_remove_submodule(ce->name,
+ SUBMODULE_REMOVAL_DIE_ON_ERROR |
+ SUBMODULE_REMOVAL_IGNORE_IGNORED_UNTRACKED)))
local_changes = 1;
/*
else if (!index_only) {
if (staged_changes)
string_list_append(&files_cached, name);
- if (local_changes) {
- if (S_ISGITLINK(ce->ce_mode) &&
- !submodule_uses_gitfile(name))
- string_list_append(&files_submodule, name);
- else
- string_list_append(&files_local, name);
- }
+ if (local_changes)
+ string_list_append(&files_local, name);
}
}
print_error_files(&files_staged,
&errs);
string_list_clear(&files_cached, 0);
- error_removing_concrete_submodules(&files_submodule, &errs);
-
print_error_files(&files_local,
Q_("the following file has local modifications:",
"the following files have local modifications:",
if (!index_only)
setup_work_tree();
- hold_locked_index(&lock_file, 1);
+ hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
if (read_cache() < 0)
die(_("index file corrupt"));
exit(0);
}
+ if (!index_only)
+ submodules_absorb_gitdir_if_needed(prefix);
+
/*
* If not forced, the file, the index and the HEAD (if exists)
* must match; but the file can already been removed, since
oidclr(&oid);
if (check_local_mod(&oid, index_only))
exit(1);
- } else if (!index_only) {
- if (check_submodules_use_gitfiles())
- exit(1);
}
/*
*/
if (!index_only) {
int removed = 0, gitmodules_modified = 0;
- struct strbuf buf = STRBUF_INIT;
for (i = 0; i < list.nr; i++) {
const char *path = list.entry[i].name;
if (list.entry[i].is_submodule) {
- if (is_empty_dir(path)) {
- if (!rmdir(path)) {
- removed = 1;
- if (!remove_path_from_gitmodules(path))
- gitmodules_modified = 1;
- continue;
- }
- } else {
- strbuf_reset(&buf);
- strbuf_addstr(&buf, path);
- if (!remove_dir_recursively(&buf, 0)) {
- removed = 1;
- if (!remove_path_from_gitmodules(path))
- gitmodules_modified = 1;
- strbuf_release(&buf);
- continue;
- } else if (!file_exists(path))
- /* Submodule was removed by user */
- if (!remove_path_from_gitmodules(path))
- gitmodules_modified = 1;
- /* Fallthrough and let remove_path() fail. */
- }
+ struct strbuf buf = STRBUF_INIT;
+
+ strbuf_addstr(&buf, path);
+ if (remove_dir_recursively(&buf, 0))
+ die(_("could not remove '%s'"), path);
+ strbuf_release(&buf);
+
+ removed = 1;
+ if (!remove_path_from_gitmodules(path))
+ gitmodules_modified = 1;
+ continue;
}
if (!remove_path(path)) {
removed = 1;
if (!removed)
die_errno("git rm: '%s'", path);
}
- strbuf_release(&buf);
if (gitmodules_modified)
stage_updated_gitmodules();
}
{
struct strbuf author = STRBUF_INIT;
struct strbuf oneline = STRBUF_INIT;
+ static const char *author_match[2] = { "Author: ", "author " };
+ static const char *committer_match[2] = { "Commit: ", "committer " };
+ const char **match;
+ match = log->committer ? committer_match : author_match;
while (strbuf_getline_lf(&author, stdin) != EOF) {
const char *v;
- if (!skip_prefix(author.buf, "Author: ", &v) &&
- !skip_prefix(author.buf, "author ", &v))
+ if (!skip_prefix(author.buf, match[0], &v) &&
+ !skip_prefix(author.buf, match[1], &v))
continue;
while (strbuf_getline_lf(&oneline, stdin) != EOF &&
oneline.len)
struct strbuf author = STRBUF_INIT;
struct strbuf oneline = STRBUF_INIT;
struct pretty_print_context ctx = {0};
+ const char *fmt;
ctx.fmt = CMIT_FMT_USERFORMAT;
ctx.abbrev = log->abbrev;
ctx.date_mode.type = DATE_NORMAL;
ctx.output_encoding = get_log_output_encoding();
- format_commit_message(commit, "%an <%ae>", &author, &ctx);
+ fmt = log->committer ? "%cn <%ce>" : "%an <%ae>";
+
+ format_commit_message(commit, fmt, &author, &ctx);
if (!log->summary) {
if (log->user_format)
pretty_print_commit(&ctx, commit, &oneline);
int nongit = !startup_info->have_repository;
const struct option options[] = {
+ OPT_BOOL('c', "committer", &log.committer,
+ N_("Group by committer rather than author")),
OPT_BOOL('n', "numbered", &log.sort_by_number,
N_("sort output according to the number of commits per author")),
OPT_BOOL('s', "summary", &log.summary,
static void show_one(const char *refname, const struct object_id *oid)
{
- const char *hex = find_unique_abbrev(oid->hash, abbrev);
+ const char *hex;
+ struct object_id peeled;
+
+ if (!has_sha1_file(oid->hash))
+ die("git show-ref: bad ref %s (%s)", refname,
+ oid_to_hex(oid));
+
+ if (quiet)
+ return;
+
+ hex = find_unique_abbrev(oid->hash, abbrev);
if (hash_only)
printf("%s\n", hex);
else
printf("%s %s\n", hex, refname);
+
+ if (!deref_tags)
+ return;
+
+ if (!peel_ref(refname, peeled.hash)) {
+ hex = find_unique_abbrev(peeled.hash, abbrev);
+ printf("%s %s^{}\n", hex, refname);
+ }
}
static int show_ref(const char *refname, const struct object_id *oid,
int flag, void *cbdata)
{
- const char *hex;
- struct object_id peeled;
-
if (show_head && !strcmp(refname, "HEAD"))
goto match;
continue;
if (len == reflen)
goto match;
- /* "--verify" requires an exact match */
- if (verify)
- continue;
if (refname[reflen - len - 1] == '/')
goto match;
}
match:
found_match++;
- /* This changes the semantics slightly that even under quiet we
- * detect and return error if the repository is corrupt and
- * ref points at a nonexistent object.
- */
- if (!has_sha1_file(oid->hash))
- die("git show-ref: bad ref %s (%s)", refname,
- oid_to_hex(oid));
-
- if (quiet)
- return 0;
-
show_one(refname, oid);
- if (!deref_tags)
- return 0;
-
- if (!peel_ref(refname, peeled.hash)) {
- hex = find_unique_abbrev(peeled.hash, abbrev);
- printf("%s %s^{}\n", hex, refname);
- }
return 0;
}
while (*pattern) {
struct object_id oid;
- if (starts_with(*pattern, "refs/") &&
+ if ((starts_with(*pattern, "refs/") || !strcmp(*pattern, "HEAD")) &&
!read_ref(*pattern, oid.hash)) {
- if (!quiet)
- show_one(*pattern, &oid);
+ show_one(*pattern, &oid);
}
else if (!quiet)
die("'%s' - not a valid ref", *pattern);
/* Only loads from .gitmodules, no overlay with .git/config */
gitmodules_config();
- if (prefix) {
- strbuf_addf(&sb, "%s%s", prefix, path);
+ if (prefix && get_super_prefix())
+ die("BUG: cannot have prefix and superprefix");
+ else if (prefix)
+ displaypath = xstrdup(relative_path(path, prefix, &sb));
+ else if (get_super_prefix()) {
+ strbuf_addf(&sb, "%s%s", get_super_prefix(), path);
displaypath = strbuf_detach(&sb, NULL);
} else
displaypath = xstrdup(path);
int i;
struct option module_init_options[] = {
- OPT_STRING(0, "prefix", &prefix,
- N_("path"),
- N_("alternative anchor for relative paths")),
OPT__QUIET(&quiet, N_("Suppress output for initializing a submodule")),
OPT_END()
};
/*
* If the alternate object store is another repository, try the
- * standard layout with .git/modules/<name>/objects
+ * standard layout with .git/(modules/<name>)+/objects
*/
- if (ends_with(alt->path, ".git/objects")) {
+ if (ends_with(alt->path, "/objects")) {
char *sm_alternate;
struct strbuf sb = STRBUF_INIT;
struct strbuf err = STRBUF_INIT;
struct strbuf rel_path = STRBUF_INIT;
struct strbuf sb = STRBUF_INIT;
struct string_list reference = STRING_LIST_INIT_NODUP;
+ char *sm_alternate = NULL, *error_strategy = NULL;
struct option module_clone_options[] = {
OPT_STRING(0, "prefix", &prefix,
module_clone_options);
strbuf_addf(&sb, "%s/modules/%s", get_git_dir(), name);
- sm_gitdir = xstrdup(absolute_path(sb.buf));
+ sm_gitdir = absolute_pathdup(sb.buf);
strbuf_reset(&sb);
if (!is_absolute_path(path)) {
die(_("could not get submodule directory for '%s'"), path);
git_config_set_in_file(p, "core.worktree",
relative_path(path, sm_gitdir, &rel_path));
+
+ /* setup alternateLocation and alternateErrorStrategy in the cloned submodule if needed */
+ git_config_get_string("submodule.alternateLocation", &sm_alternate);
+ if (sm_alternate)
+ git_config_set_in_file(p, "submodule.alternateLocation",
+ sm_alternate);
+ git_config_get_string("submodule.alternateErrorStrategy", &error_strategy);
+ if (error_strategy)
+ git_config_set_in_file(p, "submodule.alternateErrorStrategy",
+ error_strategy);
+
+ free(sm_alternate);
+ free(error_strategy);
+
strbuf_release(&sb);
strbuf_release(&rel_path);
free(sm_gitdir);
return 0;
}
+static int absorb_git_dirs(int argc, const char **argv, const char *prefix)
+{
+ int i;
+ struct pathspec pathspec;
+ struct module_list list = MODULE_LIST_INIT;
+ unsigned flags = ABSORB_GITDIR_RECURSE_SUBMODULES;
+
+ struct option embed_gitdir_options[] = {
+ OPT_STRING(0, "prefix", &prefix,
+ N_("path"),
+ N_("path into the working tree")),
+ OPT_BIT(0, "--recursive", &flags, N_("recurse into submodules"),
+ ABSORB_GITDIR_RECURSE_SUBMODULES),
+ OPT_END()
+ };
+
+ const char *const git_submodule_helper_usage[] = {
+ N_("git submodule--helper embed-git-dir [<path>...]"),
+ NULL
+ };
+
+ argc = parse_options(argc, argv, prefix, embed_gitdir_options,
+ git_submodule_helper_usage, 0);
+
+ gitmodules_config();
+ git_config(submodule_config, NULL);
+
+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
+ return 1;
+
+ for (i = 0; i < list.nr; i++)
+ absorb_git_dir_into_superproject(prefix,
+ list.entries[i]->name, flags);
+
+ return 0;
+}
+
+#define SUPPORT_SUPER_PREFIX (1<<0)
+
struct cmd_struct {
const char *cmd;
int (*fn)(int, const char **, const char *);
+ unsigned option;
};
static struct cmd_struct commands[] = {
- {"list", module_list},
- {"name", module_name},
- {"clone", module_clone},
- {"update-clone", update_clone},
- {"relative-path", resolve_relative_path},
- {"resolve-relative-url", resolve_relative_url},
- {"resolve-relative-url-test", resolve_relative_url_test},
- {"init", module_init},
- {"remote-branch", resolve_remote_submodule_branch}
+ {"list", module_list, 0},
+ {"name", module_name, 0},
+ {"clone", module_clone, 0},
+ {"update-clone", update_clone, 0},
+ {"relative-path", resolve_relative_path, 0},
+ {"resolve-relative-url", resolve_relative_url, 0},
+ {"resolve-relative-url-test", resolve_relative_url_test, 0},
+ {"init", module_init, SUPPORT_SUPER_PREFIX},
+ {"remote-branch", resolve_remote_submodule_branch, 0},
+ {"absorb-git-dirs", absorb_git_dirs, SUPPORT_SUPER_PREFIX},
};
int cmd_submodule__helper(int argc, const char **argv, const char *prefix)
die(_("submodule--helper subcommand must be "
"called with a subcommand"));
- for (i = 0; i < ARRAY_SIZE(commands); i++)
- if (!strcmp(argv[1], commands[i].cmd))
+ for (i = 0; i < ARRAY_SIZE(commands); i++) {
+ if (!strcmp(argv[1], commands[i].cmd)) {
+ if (get_super_prefix() &&
+ !(commands[i].option & SUPPORT_SUPER_PREFIX))
+ die(_("%s doesn't support --super-prefix"),
+ commands[i].cmd);
return commands[i].fn(argc - 1, argv + 1, prefix);
+ }
+ }
die(_("'%s' is not a valid submodule--helper "
"subcommand"), argv[1]);
N_("git tag -d <tagname>..."),
N_("git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>]"
"\n\t\t[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]"),
- N_("git tag -v <tagname>..."),
+ N_("git tag -v [--format=<format>] <tagname>..."),
NULL
};
}
typedef int (*each_tag_name_fn)(const char *name, const char *ref,
- const unsigned char *sha1);
+ const unsigned char *sha1, const void *cb_data);
-static int for_each_tag_name(const char **argv, each_tag_name_fn fn)
+static int for_each_tag_name(const char **argv, each_tag_name_fn fn,
+ const void *cb_data)
{
const char **p;
char ref[PATH_MAX];
had_error = 1;
continue;
}
- if (fn(*p, ref, sha1))
+ if (fn(*p, ref, sha1, cb_data))
had_error = 1;
}
return had_error;
}
static int delete_tag(const char *name, const char *ref,
- const unsigned char *sha1)
+ const unsigned char *sha1, const void *cb_data)
{
if (delete_ref(ref, sha1, 0))
return 1;
}
static int verify_tag(const char *name, const char *ref,
- const unsigned char *sha1)
+ const unsigned char *sha1, const void *cb_data)
{
- return gpg_verify_tag(sha1, name, GPG_VERIFY_VERBOSE);
+ int flags;
+ const char *fmt_pretty = cb_data;
+ flags = GPG_VERIFY_VERBOSE;
+
+ if (fmt_pretty)
+ flags = GPG_VERIFY_OMIT_STATUS;
+
+ if (gpg_verify_tag(sha1, name, flags))
+ return -1;
+
+ if (fmt_pretty)
+ pretty_print_ref(name, sha1, fmt_pretty);
+
+ return 0;
}
static int do_sign(struct strbuf *buffer)
struct ref_filter filter;
static struct ref_sorting *sorting = NULL, **sorting_tail = &sorting;
const char *format = NULL;
+ int icase = 0;
struct option options[] = {
OPT_CMDMODE('l', "list", &cmdmode, N_("list tag names"), 'l'),
{ OPTION_INTEGER, 'n', NULL, &filter.lines, N_("n"),
N_("print only tags of the object"), 0, parse_opt_object_name
},
OPT_STRING( 0 , "format", &format, N_("format"), N_("format to use for the output")),
+ OPT_BOOL('i', "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
OPT_END()
};
}
if (!sorting)
sorting = ref_default_sorting();
+ sorting->ignore_case = icase;
+ filter.ignore_case = icase;
if (cmdmode == 'l') {
int ret;
if (column_active(colopts)) {
if (filter.merge_commit)
die(_("--merged and --no-merged option are only allowed with -l"));
if (cmdmode == 'd')
- return for_each_tag_name(argv, delete_tag);
- if (cmdmode == 'v')
- return for_each_tag_name(argv, verify_tag);
+ return for_each_tag_name(argv, delete_tag, NULL);
+ if (cmdmode == 'v') {
+ if (format)
+ verify_ref_format(format);
+ return for_each_tag_name(argv, verify_tag, format);
+ }
if (msg.given || msgfile) {
if (msg.given && msgfile)
/* We can't free this memory, it becomes part of a linked list parsed atexit() */
lock_file = xcalloc(1, sizeof(struct lock_file));
+ /* we will diagnose later if it turns out that we need to update it */
newfd = hold_locked_index(lock_file, 0);
if (newfd < 0)
lock_error = errno;
#include <signal.h>
#include "parse-options.h"
#include "gpg-interface.h"
+#include "ref-filter.h"
static const char * const verify_tag_usage[] = {
- N_("git verify-tag [-v | --verbose] <tag>..."),
+ N_("git verify-tag [-v | --verbose] [--format=<format>] <tag>..."),
NULL
};
{
int i = 1, verbose = 0, had_error = 0;
unsigned flags = 0;
+ char *fmt_pretty = NULL;
const struct option verify_tag_options[] = {
OPT__VERBOSE(&verbose, N_("print tag contents")),
OPT_BIT(0, "raw", &flags, N_("print raw gpg status output"), GPG_VERIFY_RAW),
+ OPT_STRING( 0 , "format", &fmt_pretty, N_("format"), N_("format to use for the output")),
OPT_END()
};
if (verbose)
flags |= GPG_VERIFY_VERBOSE;
+ if (fmt_pretty) {
+ verify_ref_format(fmt_pretty);
+ flags |= GPG_VERIFY_OMIT_STATUS;
+ }
+
while (i < argc) {
unsigned char sha1[20];
const char *name = argv[i++];
- if (get_sha1(name, sha1))
+ if (get_sha1(name, sha1)) {
had_error = !!error("tag '%s' not found.", name);
- else if (gpg_verify_tag(sha1, name, flags))
+ continue;
+ }
+
+ if (gpg_verify_tag(sha1, name, flags)) {
had_error = 1;
+ continue;
+ }
+
+ if (fmt_pretty)
+ pretty_print_ref(name, sha1, fmt_pretty);
}
return had_error;
}
{
struct option options[] = {
OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
- OPT__VERBOSE(&verbose, N_("report pruned objects")),
+ OPT__VERBOSE(&verbose, N_("report pruned working trees")),
OPT_EXPIRY_DATE(0, "expire", &expire,
- N_("expire objects older than <time>")),
+ N_("expire working trees older than <time>")),
OPT_END()
};
printf("HEAD %s\n", sha1_to_hex(wt->head_sha1));
if (wt->is_detached)
printf("detached\n");
- else
+ else if (wt->head_ref)
printf("branch %s\n", wt->head_ref);
}
printf("\n");
else {
strbuf_addf(&sb, "%-*s ", abbrev_len,
find_unique_abbrev(wt->head_sha1, DEFAULT_ABBREV));
- if (!wt->is_detached)
+ if (wt->is_detached)
+ strbuf_addstr(&sb, "(detached HEAD)");
+ else if (wt->head_ref)
strbuf_addf(&sb, "[%s]", shorten_unambiguous_ref(wt->head_ref, 0));
else
- strbuf_addstr(&sb, "(detached HEAD)");
+ strbuf_addstr(&sb, "(error)");
}
printf("%s\n", sb.buf);
if (ac)
usage_with_options(worktree_usage, options);
else {
- struct worktree **worktrees = get_worktrees();
+ struct worktree **worktrees = get_worktrees(GWT_SORT_LINKED);
int path_maxlen = 0, abbrev = DEFAULT_ABBREV, i;
if (!porcelain)
if (ac != 1)
usage_with_options(worktree_usage, options);
- worktrees = get_worktrees();
+ worktrees = get_worktrees(0);
wt = find_worktree(worktrees, prefix, av[0]);
if (!wt)
die(_("'%s' is not a working tree"), av[0]);
if (ac != 1)
usage_with_options(worktree_usage, options);
- worktrees = get_worktrees();
+ worktrees = get_worktrees(0);
wt = find_worktree(worktrees, prefix, av[0]);
if (!wt)
die(_("'%s' is not a working tree"), av[0]);
#include "pack.h"
#include "strbuf.h"
-static int pack_compression_level = Z_DEFAULT_COMPRESSION;
-
static struct bulk_checkin_state {
unsigned plugged:1;
#define READ_GITFILE_ERR_NO_PATH 6
#define READ_GITFILE_ERR_NOT_A_REPO 7
#define READ_GITFILE_ERR_TOO_LARGE 8
+extern void read_gitfile_error_die(int error_code, const char *path, const char *dir);
extern const char *read_gitfile_gently(const char *path, int *return_error_code);
#define read_gitfile(path) read_gitfile_gently((path), NULL)
-extern const char *resolve_gitdir(const char *suspect);
+extern const char *resolve_gitdir_gently(const char *suspect, int *return_error_code);
+#define resolve_gitdir(path) resolve_gitdir_gently((path), NULL)
+
extern void set_git_work_tree(const char *tree);
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
-extern const char **get_pathspec(const char *prefix, const char **pathspec);
extern void setup_work_tree(void);
extern const char *setup_git_directory_gently(int *);
extern const char *setup_git_directory(void);
extern int index_dir_exists(struct index_state *istate, const char *name, int namelen);
extern void adjust_dirname_case(struct index_state *istate, char *name);
extern struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
+
+/*
+ * Searches for an entry defined by name and namelen in the given index.
+ * If the return value is positive (including 0) it is the position of an
+ * exact match. If the return value is negative, the negated value minus 1
+ * is the position where the entry would be inserted.
+ * Example: The current index consists of these files and its stages:
+ *
+ * b#0, d#0, f#1, f#3
+ *
+ * index_name_pos(&index, "a", 1) -> -1
+ * index_name_pos(&index, "b", 1) -> 0
+ * index_name_pos(&index, "c", 1) -> -2
+ * index_name_pos(&index, "d", 1) -> 1
+ * index_name_pos(&index, "e", 1) -> -3
+ * index_name_pos(&index, "f", 1) -> -3
+ * index_name_pos(&index, "g", 1) -> -5
+ */
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 */
#define ADD_CACHE_SKIP_DFCHECK 4 /* Ok to skip DF conflict checks */
#define ADD_CACHE_KEEP_CACHE_TREE 32 /* Do not invalidate cache-tree */
extern int add_index_entry(struct index_state *, struct cache_entry *ce, int option);
extern void rename_index_entry_at(struct index_state *, int pos, const char *new_name);
+
+/* Remove entry, return true if there are more entries to go. */
extern int remove_index_entry_at(struct index_state *, int pos);
+
extern void remove_marked_cache_entries(struct index_state *istate);
extern int remove_file_from_index(struct index_state *, const char *path);
#define ADD_CACHE_VERBOSE 1
#define ADD_CACHE_IGNORE_ERRORS 4
#define ADD_CACHE_IGNORE_REMOVAL 8
#define ADD_CACHE_INTENT 16
+/*
+ * These two are used to add the contents of the file at path
+ * to the index, marking the working tree up-to-date by storing
+ * the cached stat info in the resulting cache entry. A caller
+ * that has already run lstat(2) on the path can call
+ * add_to_index(), and all others can call add_file_to_index();
+ * the latter will do necessary lstat(2) internally before
+ * calling the former.
+ */
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, unsigned int refresh_options);
extern int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip);
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 *);
+extern void *read_blob_data_from_index(const struct index_state *, const char *, unsigned long *);
/* do stat comparison even if CE_VALID is true */
#define CE_MATCH_IGNORE_VALID 01
extern int ignore_case;
extern int assume_unchanged;
extern int prefer_symlink_refs;
-extern int log_all_ref_updates;
extern int warn_ambiguous_refs;
extern int warn_on_object_refname_ambiguity;
extern const char *apply_default_whitespace;
extern const char *git_hooks_path;
extern int zlib_compression_level;
extern int core_compression_level;
-extern int core_compression_seen;
+extern int pack_compression_level;
extern size_t packed_git_window_size;
extern size_t packed_git_limit;
extern size_t delta_base_cache_limit;
};
extern enum hide_dotfiles_type hide_dotfiles;
+enum log_refs_config {
+ LOG_REFS_UNSET = -1,
+ LOG_REFS_NONE = 0,
+ LOG_REFS_NORMAL,
+ LOG_REFS_ALWAYS
+};
+extern enum log_refs_config log_all_ref_updates;
+
enum branch_track {
BRANCH_TRACK_UNSPECIFIED = -1,
BRANCH_TRACK_NEVER = 0,
return is_dir_sep(path[0]) || has_dos_drive_prefix(path);
}
int is_directory(const char *);
+char *strbuf_realpath(struct strbuf *resolved, const char *path,
+ int die_on_error);
const char *real_path(const char *path);
const char *real_path_if_valid(const char *path);
+char *real_pathdup(const char *path);
const char *absolute_path(const char *path);
+char *absolute_pathdup(const char *path);
const char *remove_leading_path(const char *in, const char *prefix);
const char *relative_path(const char *in, const char *prefix, struct strbuf *sb);
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len);
extern int hash_sha1_file_literally(const void *buf, unsigned long len, const char *type, unsigned char *sha1, unsigned flags);
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(const char *name);
+extern int git_open_cloexec(const char *name, int flags);
+#define git_open(name) git_open_cloexec(name, O_RDONLY)
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);
extern int has_sha1_pack(const unsigned char *sha1);
+/*
+ * Open the loose object at path, check its sha1, and return the contents,
+ * type, and size. If the object is a blob, then "contents" may return NULL,
+ * to allow streaming of large blobs.
+ *
+ * Returns 0 on success, negative on error (details may be written to stderr).
+ */
+int read_loose_object(const char *path,
+ const unsigned char *expected_sha1,
+ enum object_type *type,
+ unsigned long *size,
+ void **contents);
+
/*
* Return true iff we have an object named sha1, whether local or in
* an alternate object database, and whether packed or loose. This
extern int git_config_from_file(config_fn_t fn, const char *, void *);
extern int git_config_from_mem(config_fn_t fn, const enum config_origin_type,
const char *name, const char *buf, size_t len, void *data);
+extern int git_config_from_blob_sha1(config_fn_t fn, const char *name,
+ const unsigned char *sha1, void *data);
extern void git_config_push_parameter(const char *text);
extern int git_config_from_parameters(config_fn_t fn, void *data);
extern void git_config(config_fn_t fn, void *);
struct color fg = { COLOR_UNSPECIFIED };
struct color bg = { COLOR_UNSPECIFIED };
- if (!strncasecmp(value, "reset", len)) {
+ while (len > 0 && isspace(*ptr)) {
+ ptr++;
+ len--;
+ }
+
+ if (!len) {
+ dst[0] = '\0';
+ return 0;
+ }
+
+ if (!strncasecmp(ptr, "reset", len)) {
xsnprintf(dst, end - dst, GIT_COLOR_RESET);
return 0;
}
git-rebase mainporcelain history
git-receive-pack synchelpers
git-reflog ancillarymanipulators
-git-relink ancillarymanipulators
git-remote ancillarymanipulators
git-repack ancillarymanipulators
git-replace ancillarymanipulators
}
/*
- * Inspect sb and determine the true "end" of the log message, in
+ * Inspect the given string and determine the true "end" of the log message, in
* order to find where to put a new Signed-off-by: line. Ignored are
* trailing comment lines and blank lines, and also the traditional
* "Conflicts:" block that is not commented out, so that we can use
* Returns the number of bytes from the tail to ignore, to be fed as
* the second parameter to append_signoff().
*/
-int ignore_non_trailer(struct strbuf *sb)
+int ignore_non_trailer(const char *buf, size_t len)
{
int boc = 0;
int bol = 0;
int in_old_conflicts_block = 0;
- while (bol < sb->len) {
- char *next_line;
+ while (bol < len) {
+ const char *next_line = memchr(buf + bol, '\n', len - bol);
- if (!(next_line = memchr(sb->buf + bol, '\n', sb->len - bol)))
- next_line = sb->buf + sb->len;
+ if (!next_line)
+ next_line = buf + len;
else
next_line++;
- if (sb->buf[bol] == comment_line_char || sb->buf[bol] == '\n') {
+ if (buf[bol] == comment_line_char || buf[bol] == '\n') {
/* is this the first of the run of comments? */
if (!boc)
boc = bol;
/* otherwise, it is just continuing */
- } else if (starts_with(sb->buf + bol, "Conflicts:\n")) {
+ } else if (starts_with(buf + bol, "Conflicts:\n")) {
in_old_conflicts_block = 1;
if (!boc)
boc = bol;
- } else if (in_old_conflicts_block && sb->buf[bol] == '\t') {
+ } else if (in_old_conflicts_block && buf[bol] == '\t') {
; /* a pathname in the conflicts block */
} else if (boc) {
/* the previous was not trailing comment */
boc = 0;
in_old_conflicts_block = 0;
}
- bol = next_line - sb->buf;
+ bol = next_line - buf;
}
- return boc ? sb->len - boc : 0;
+ return boc ? len - boc : 0;
}
size_t *out_len);
/* Find the end of the log message, the right place for a new trailer. */
-extern int ignore_non_trailer(struct strbuf *sb);
+extern int ignore_non_trailer(const char *buf, size_t len);
typedef void (*each_mergetag_fn)(struct commit *commit, struct commit_extra_header *extra,
void *cb_data);
git_setup_gettext();
- argv[0] = git_extract_argv0_path(argv[0]);
+ git_extract_argv0_path(argv[0]);
restore_sigpipe_to_default();
* ANSI emulation wrappers
*/
+int winansi_isatty(int fd);
+#define isatty winansi_isatty
+
void winansi_init(void);
HANDLE winansi_get_osfhandle(int fd);
--- /dev/null
+#include "../git-compat-util.h"
+
+/*
+ * A merge sort implementation, simplified from the qsort implementation
+ * by Mike Haertel, which is a part of the GNU C Library.
+ * Added context pointer, safety checks and return value.
+ */
+
+static void msort_with_tmp(void *b, size_t n, size_t s,
+ int (*cmp)(const void *, const void *, void *),
+ char *t, void *ctx)
+{
+ char *tmp;
+ char *b1, *b2;
+ size_t n1, n2;
+
+ if (n <= 1)
+ return;
+
+ n1 = n / 2;
+ n2 = n - n1;
+ b1 = b;
+ b2 = (char *)b + (n1 * s);
+
+ msort_with_tmp(b1, n1, s, cmp, t, ctx);
+ msort_with_tmp(b2, n2, s, cmp, t, ctx);
+
+ tmp = t;
+
+ while (n1 > 0 && n2 > 0) {
+ if (cmp(b1, b2, ctx) <= 0) {
+ memcpy(tmp, b1, s);
+ tmp += s;
+ b1 += s;
+ --n1;
+ } else {
+ memcpy(tmp, b2, s);
+ tmp += s;
+ b2 += s;
+ --n2;
+ }
+ }
+ if (n1 > 0)
+ memcpy(tmp, b1, n1 * s);
+ memcpy(b, t, (n - n2) * s);
+}
+
+int git_qsort_s(void *b, size_t n, size_t s,
+ int (*cmp)(const void *, const void *, void *), void *ctx)
+{
+ const size_t size = st_mult(n, s);
+ char buf[1024];
+
+ if (!n)
+ return 0;
+ if (!b || !cmp)
+ return -1;
+
+ if (size < sizeof(buf)) {
+ /* The temporary array fits on the small on-stack buffer. */
+ msort_with_tmp(b, n, s, cmp, buf, ctx);
+ } else {
+ /* It's somewhat large, so malloc it. */
+ char *tmp = xmalloc(size);
+ msort_with_tmp(b, n, s, cmp, tmp, ctx);
+ free(tmp);
+ }
+ return 0;
+}
#include "../git-compat-util.h"
#include <wingdi.h>
#include <winreg.h>
+#include "win32.h"
+
+static int fd_is_interactive[3] = { 0, 0, 0 };
+#define FD_CONSOLE 0x1
+#define FD_SWAPPED 0x2
+#define FD_MSYS 0x4
/*
ANSI codes used by git: m, K
static int is_console(int fd)
{
CONSOLE_SCREEN_BUFFER_INFO sbi;
+ DWORD mode;
HANDLE hcon;
static int initialized = 0;
return 0;
/* check if its a handle to a console output screen buffer */
- if (!GetConsoleScreenBufferInfo(hcon, &sbi))
+ if (!fd) {
+ if (!GetConsoleMode(hcon, &mode))
+ return 0;
+ } else if (!GetConsoleScreenBufferInfo(hcon, &sbi))
return 0;
+ if (fd >= 0 && fd <= 2)
+ fd_is_interactive[fd] |= FD_CONSOLE;
+
/* initialize attributes */
if (!initialized) {
console = hcon;
return hresult;
}
-
-/*
- * Make MSVCRT's internal file descriptor control structure accessible
- * so that we can tweak OS handles and flags directly (we need MSVCRT
- * to treat our pipe handle as if it were a console).
- *
- * We assume that the ioinfo structure (exposed by MSVCRT.dll via
- * __pioinfo) starts with the OS handle and the flags. The exact size
- * varies between MSVCRT versions, so we try different sizes until
- * toggling the FDEV bit of _pioinfo(1)->osflags is reflected in
- * isatty(1).
- */
-typedef struct {
- HANDLE osfhnd;
- char osflags;
-} ioinfo;
-
-extern __declspec(dllimport) ioinfo *__pioinfo[];
-
-static size_t sizeof_ioinfo = 0;
-
-#define IOINFO_L2E 5
-#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
-
-#define FPIPE 0x08
-#define FDEV 0x40
-
-static inline ioinfo* _pioinfo(int fd)
-{
- return (ioinfo*)((char*)__pioinfo[fd >> IOINFO_L2E] +
- (fd & (IOINFO_ARRAY_ELTS - 1)) * sizeof_ioinfo);
-}
-
-static int init_sizeof_ioinfo(void)
-{
- int istty, wastty;
- /* don't init twice */
- if (sizeof_ioinfo)
- return sizeof_ioinfo >= 256;
-
- sizeof_ioinfo = sizeof(ioinfo);
- wastty = isatty(1);
- while (sizeof_ioinfo < 256) {
- /* toggle FDEV flag, check isatty, then toggle back */
- _pioinfo(1)->osflags ^= FDEV;
- istty = isatty(1);
- _pioinfo(1)->osflags ^= FDEV;
- /* return if we found the correct size */
- if (istty != wastty)
- return 0;
- sizeof_ioinfo += sizeof(void*);
- }
- error("Tweaking file descriptors doesn't work with this MSVCRT.dll");
- return 1;
-}
-
static HANDLE swap_osfhnd(int fd, HANDLE new_handle)
{
- ioinfo *pioinfo;
- HANDLE old_handle;
-
- /* init ioinfo size if we haven't done so */
- if (init_sizeof_ioinfo())
- return INVALID_HANDLE_VALUE;
-
- /* get ioinfo pointer and change the handles */
- pioinfo = _pioinfo(fd);
- old_handle = pioinfo->osfhnd;
- pioinfo->osfhnd = new_handle;
- return old_handle;
+ /*
+ * Create a copy of the original handle associated with fd
+ * because the original will get closed when we dup2().
+ */
+ HANDLE handle = (HANDLE)_get_osfhandle(fd);
+ HANDLE duplicate = duplicate_handle(handle);
+
+ /* Create a temp fd associated with the already open "new_handle". */
+ int new_fd = _open_osfhandle((intptr_t)new_handle, O_BINARY);
+
+ assert((fd == 1) || (fd == 2));
+
+ /*
+ * Use stock dup2() to re-bind fd to the new handle. Note that
+ * this will implicitly close(1) and close both fd=1 and the
+ * originally associated handle. It will open a new fd=1 and
+ * call DuplicateHandle() on the handle associated with new_fd.
+ * It is because of this implicit close() that we created the
+ * copy of the original.
+ *
+ * Note that we need to update the cached console handle to the
+ * duplicated one because the dup2() call will implicitly close
+ * the original one.
+ *
+ * Note that dup2() when given target := {0,1,2} will also
+ * call SetStdHandle(), so we don't need to worry about that.
+ */
+ if (console == handle)
+ console = duplicate;
+ dup2(new_fd, fd);
+
+ /* Close the temp fd. This explicitly closes "new_handle"
+ * (because it has been associated with it).
+ */
+ close(new_fd);
+
+ fd_is_interactive[fd] |= FD_SWAPPED;
+
+ return duplicate;
}
#ifdef DETECT_MSYS_TTY
buffer, sizeof(buffer) - 2, &result)))
return;
name = nameinfo->Name.Buffer;
- name[nameinfo->Name.Length] = 0;
-
- /* check if this could be a MSYS2 pty pipe ('msys-XXXX-ptyN-XX') */
- if (!wcsstr(name, L"msys-") || !wcsstr(name, L"-pty"))
- return;
-
- /* init ioinfo size if we haven't done so */
- if (init_sizeof_ioinfo())
+ name[nameinfo->Name.Length / sizeof(*name)] = 0;
+
+ /*
+ * Check if this could be a MSYS2 pty pipe ('msys-XXXX-ptyN-XX')
+ * or a cygwin pty pipe ('cygwin-XXXX-ptyN-XX')
+ */
+ if ((!wcsstr(name, L"msys-") && !wcsstr(name, L"cygwin-")) ||
+ !wcsstr(name, L"-pty"))
return;
- /* set FDEV flag, reset FPIPE flag */
- _pioinfo(fd)->osflags &= ~FPIPE;
- _pioinfo(fd)->osflags |= FDEV;
+ fd_is_interactive[fd] |= FD_MSYS;
}
#endif
+/*
+ * Wrapper for isatty(). Most calls in the main git code
+ * call isatty(1 or 2) to see if the instance is interactive
+ * and should: be colored, show progress, paginate output.
+ * We lie and give results for what the descriptor WAS at
+ * startup (and ignore any pipe redirection we internally
+ * do).
+ */
+#undef isatty
+int winansi_isatty(int fd)
+{
+ if (fd >= 0 && fd <= 2)
+ return fd_is_interactive[fd] != 0;
+ return isatty(fd);
+}
+
void winansi_init(void)
{
int con1, con2;
/* check if either stdout or stderr is a console output screen buffer */
con1 = is_console(1);
con2 = is_console(2);
+
+ /* Also compute console bit for fd 0 even though we don't need the result here. */
+ is_console(0);
+
if (!con1 && !con2) {
#ifdef DETECT_MSYS_TTY
/* check if stdin / stdout / stderr are MSYS2 pty pipes */
*/
HANDLE winansi_get_osfhandle(int fd)
{
- HANDLE hnd = (HANDLE) _get_osfhandle(fd);
- if (isatty(fd) && GetFileType(hnd) == FILE_TYPE_PIPE) {
- if (fd == 1 && hconsole1)
- return hconsole1;
- else if (fd == 2 && hconsole2)
- return hconsole2;
- }
- return hnd;
+ if (fd == 1 && (fd_is_interactive[1] & FD_SWAPPED))
+ return hconsole1;
+ if (fd == 2 && (fd_is_interactive[2] & FD_SWAPPED))
+ return hconsole2;
+
+ return (HANDLE)_get_osfhandle(fd);
}
*/
static enum config_scope current_parsing_scope;
+static int core_compression_seen;
+static int pack_compression_seen;
static int zlib_compression_seen;
/*
}
if (!strcmp(var, "core.logallrefupdates")) {
- log_all_ref_updates = git_config_bool(var, value);
+ if (value && !strcasecmp(value, "always"))
+ log_all_ref_updates = LOG_REFS_ALWAYS;
+ else if (git_config_bool(var, value))
+ log_all_ref_updates = LOG_REFS_NORMAL;
+ else
+ log_all_ref_updates = LOG_REFS_NONE;
return 0;
}
}
if (!strcmp(var, "core.abbrev")) {
- int abbrev = git_config_int(var, value);
- if (abbrev < minimum_abbrev || abbrev > 40)
- return -1;
- default_abbrev = abbrev;
+ if (!value)
+ return config_error_nonbool(var);
+ if (!strcasecmp(value, "auto"))
+ default_abbrev = -1;
+ else {
+ int abbrev = git_config_int(var, value);
+ if (abbrev < minimum_abbrev || abbrev > 40)
+ return error("abbrev length out of range: %d", abbrev);
+ default_abbrev = abbrev;
+ }
return 0;
}
core_compression_seen = 1;
if (!zlib_compression_seen)
zlib_compression_level = level;
+ if (!pack_compression_seen)
+ pack_compression_level = level;
return 0;
}
pack_size_limit_cfg = git_config_ulong(var, value);
return 0;
}
+
+ if (!strcmp(var, "pack.compression")) {
+ int level = git_config_int(var, value);
+ if (level == -1)
+ level = Z_DEFAULT_COMPRESSION;
+ else if (level < 0 || level > Z_BEST_COMPRESSION)
+ die(_("bad pack compression level %d"), level);
+ pack_compression_level = level;
+ pack_compression_seen = 1;
+ return 0;
+ }
+
/* Add other config variables here and to Documentation/config.txt. */
return 0;
}
return do_config_from(&top, fn, data);
}
-static int git_config_from_blob_sha1(config_fn_t fn,
- const char *name,
- const unsigned char *sha1,
- void *data)
+int git_config_from_blob_sha1(config_fn_t fn,
+ const char *name,
+ const unsigned char *sha1,
+ void *data)
{
enum object_type type;
char *buf;
goto out_free;
}
- fstat(in_fd, &st);
+ if (fstat(in_fd, &st) == -1) {
+ error_errno(_("fstat on %s failed"), config_filename);
+ ret = CONFIG_INVALID_FILE;
+ goto out_free;
+ }
+
contents_sz = xsize_t(st.st_size);
contents = xmmap_gently(NULL, contents_sz, PROT_READ,
MAP_PRIVATE, in_fd, 0);
if (new_name && !section_name_is_ok(new_name)) {
ret = error("invalid section name: %s", new_name);
- goto out;
+ goto out_no_rollback;
}
if (!config_filename)
if (!(config_file = fopen(config_filename, "rb"))) {
/* no config file means nothing to rename, no error */
- goto unlock_and_out;
+ goto commit_and_out;
}
- fstat(fileno(config_file), &st);
+ if (fstat(fileno(config_file), &st) == -1) {
+ ret = error_errno(_("fstat on %s failed"), config_filename);
+ goto out;
+ }
if (chmod(get_lock_file_path(lock), st.st_mode & 07777) < 0) {
ret = error_errno("chmod on %s failed",
}
}
fclose(config_file);
-unlock_and_out:
+commit_and_out:
if (commit_lock_file(lock) < 0)
ret = error_errno("could not write config file %s",
config_filename);
out:
+ rollback_lock_file(lock);
+out_no_rollback:
free(filename_buf);
return ret;
}
# because maintaining the nesting to match is a pain. If
# we had "elif" things would have been much nicer...
-ifeq ($(uname_M),x86_64)
- XDL_FAST_HASH = YesPlease
-endif
ifeq ($(uname_S),OSF1)
# Need this for u_short definitions et al
BASIC_CFLAGS += -D_OSF_SOURCE
- if (E)
- V = xstrdup(E);
+ V = xstrdup_or_null(E);
+
+@@
+expression E;
+@@
+- xstrdup(absolute_path(E))
++ absolute_pathdup(E)
__git_diff_algorithms="myers minimal patience histogram"
-__git_diff_submodule_formats="log short"
+__git_diff_submodule_formats="diff log short"
__git_diff_common_options="--stat --numstat --shortstat --summary
--patch-with-stat --name-only --name-status --color
case "$cur" in
--*)
__gitcomp "$__git_merge_options
- --rerere-autoupdate --no-rerere-autoupdate --abort"
+ --rerere-autoupdate --no-rerere-autoupdate --abort --continue"
return
esac
__gitcomp_nl "$(__git_refs)"
__git_complete_remote_or_refspec
}
-__git_push_recurse_submodules="check on-demand"
+__git_push_recurse_submodules="check on-demand only"
__git_complete_force_with_lease ()
{
{
local dir="$(__gitdir)"
if [ -f "$dir"/rebase-merge/interactive ]; then
- __gitcomp "--continue --skip --abort --edit-todo"
+ __gitcomp "--continue --skip --abort --quit --edit-todo"
return
elif [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
- __gitcomp "--continue --skip --abort"
+ __gitcomp "--continue --skip --abort --quit"
return
fi
__git_complete_strategy && return
--no-metadata --use-svm-props --use-svnsync-props
--log-window-size= --no-checkout --quiet
--repack-flags --use-log-author --localtime
+ --add-author-from
--ignore-paths= --include-paths= $remote_opts
"
local init_opts="
--template= --shared= --trunk= --tags=
--branches= --stdlayout --minimize-url
--no-metadata --use-svm-props --use-svnsync-props
- --rewrite-root= --prefix= --use-log-author
- --add-author-from $remote_opts
+ --rewrite-root= --prefix= $remote_opts
"
local cmt_opts="
--edit --rmdir --find-copies-harder --copy-similarity=
+++ /dev/null
-#include "cache.h"
-#include "blob.h"
-#include "commit.h"
-#include "tree.h"
-
-struct entry {
- unsigned char old_sha1[20];
- unsigned char new_sha1[20];
- int converted;
-};
-
-#define MAXOBJECTS (1000000)
-
-static struct entry *convert[MAXOBJECTS];
-static int nr_convert;
-
-static struct entry * convert_entry(unsigned char *sha1);
-
-static struct entry *insert_new(unsigned char *sha1, int pos)
-{
- struct entry *new = xcalloc(1, sizeof(struct entry));
- hashcpy(new->old_sha1, sha1);
- memmove(convert + pos + 1, convert + pos, (nr_convert - pos) * sizeof(struct entry *));
- convert[pos] = new;
- nr_convert++;
- if (nr_convert == MAXOBJECTS)
- die("you're kidding me - hit maximum object limit");
- return new;
-}
-
-static struct entry *lookup_entry(unsigned char *sha1)
-{
- int low = 0, high = nr_convert;
-
- while (low < high) {
- int next = (low + high) / 2;
- struct entry *n = convert[next];
- int cmp = hashcmp(sha1, n->old_sha1);
- if (!cmp)
- return n;
- if (cmp < 0) {
- high = next;
- continue;
- }
- low = next+1;
- }
- return insert_new(sha1, low);
-}
-
-static void convert_binary_sha1(void *buffer)
-{
- struct entry *entry = convert_entry(buffer);
- hashcpy(buffer, entry->new_sha1);
-}
-
-static void convert_ascii_sha1(void *buffer)
-{
- unsigned char sha1[20];
- struct entry *entry;
-
- if (get_sha1_hex(buffer, sha1))
- die("expected sha1, got '%s'", (char *) buffer);
- entry = convert_entry(sha1);
- memcpy(buffer, sha1_to_hex(entry->new_sha1), 40);
-}
-
-static unsigned int convert_mode(unsigned int mode)
-{
- unsigned int newmode;
-
- newmode = mode & S_IFMT;
- if (S_ISREG(mode))
- newmode |= (mode & 0100) ? 0755 : 0644;
- return newmode;
-}
-
-static int write_subdirectory(void *buffer, unsigned long size, const char *base, int baselen, unsigned char *result_sha1)
-{
- char *new = xmalloc(size);
- unsigned long newlen = 0;
- unsigned long used;
-
- used = 0;
- while (size) {
- int len = 21 + strlen(buffer);
- char *path = strchr(buffer, ' ');
- unsigned char *sha1;
- unsigned int mode;
- char *slash, *origpath;
-
- if (!path || strtoul_ui(buffer, 8, &mode))
- die("bad tree conversion");
- mode = convert_mode(mode);
- path++;
- if (memcmp(path, base, baselen))
- break;
- origpath = path;
- path += baselen;
- slash = strchr(path, '/');
- if (!slash) {
- newlen += sprintf(new + newlen, "%o %s", mode, path);
- new[newlen++] = '\0';
- hashcpy((unsigned char *)new + newlen, (unsigned char *) buffer + len - 20);
- newlen += 20;
-
- used += len;
- size -= len;
- buffer = (char *) buffer + len;
- continue;
- }
-
- newlen += sprintf(new + newlen, "%o %.*s", S_IFDIR, (int)(slash - path), path);
- new[newlen++] = 0;
- sha1 = (unsigned char *)(new + newlen);
- newlen += 20;
-
- len = write_subdirectory(buffer, size, origpath, slash-origpath+1, sha1);
-
- used += len;
- size -= len;
- buffer = (char *) buffer + len;
- }
-
- write_sha1_file(new, newlen, tree_type, result_sha1);
- free(new);
- return used;
-}
-
-static void convert_tree(void *buffer, unsigned long size, unsigned char *result_sha1)
-{
- void *orig_buffer = buffer;
- unsigned long orig_size = size;
-
- while (size) {
- size_t len = 1+strlen(buffer);
-
- convert_binary_sha1((char *) buffer + len);
-
- len += 20;
- if (len > size)
- die("corrupt tree object");
- size -= len;
- buffer = (char *) buffer + len;
- }
-
- write_subdirectory(orig_buffer, orig_size, "", 0, result_sha1);
-}
-
-static unsigned long parse_oldstyle_date(const char *buf)
-{
- char c, *p;
- char buffer[100];
- struct tm tm;
- const char *formats[] = {
- "%c",
- "%a %b %d %T",
- "%Z",
- "%Y",
- " %Y",
- NULL
- };
- /* We only ever did two timezones in the bad old format .. */
- const char *timezones[] = {
- "PDT", "PST", "CEST", NULL
- };
- const char **fmt = formats;
-
- p = buffer;
- while (isspace(c = *buf))
- buf++;
- while ((c = *buf++) != '\n')
- *p++ = c;
- *p++ = 0;
- buf = buffer;
- memset(&tm, 0, sizeof(tm));
- do {
- const char *next = strptime(buf, *fmt, &tm);
- if (next) {
- if (!*next)
- return mktime(&tm);
- buf = next;
- } else {
- const char **p = timezones;
- while (isspace(*buf))
- buf++;
- while (*p) {
- if (!memcmp(buf, *p, strlen(*p))) {
- buf += strlen(*p);
- break;
- }
- p++;
- }
- }
- fmt++;
- } while (*buf && *fmt);
- printf("left: %s\n", buf);
- return mktime(&tm);
-}
-
-static int convert_date_line(char *dst, void **buf, unsigned long *sp)
-{
- unsigned long size = *sp;
- char *line = *buf;
- char *next = strchr(line, '\n');
- char *date = strchr(line, '>');
- int len;
-
- if (!next || !date)
- die("missing or bad author/committer line %s", line);
- next++; date += 2;
-
- *buf = next;
- *sp = size - (next - line);
-
- len = date - line;
- memcpy(dst, line, len);
- dst += len;
-
- /* Is it already in new format? */
- if (isdigit(*date)) {
- int datelen = next - date;
- memcpy(dst, date, datelen);
- return len + datelen;
- }
-
- /*
- * Hacky hacky: one of the sparse old-style commits does not have
- * any date at all, but we can fake it by using the committer date.
- */
- if (*date == '\n' && strchr(next, '>'))
- date = strchr(next, '>')+2;
-
- return len + sprintf(dst, "%lu -0700\n", parse_oldstyle_date(date));
-}
-
-static void convert_date(void *buffer, unsigned long size, unsigned char *result_sha1)
-{
- char *new = xmalloc(size + 100);
- unsigned long newlen = 0;
-
- /* "tree <sha1>\n" */
- memcpy(new + newlen, buffer, 46);
- newlen += 46;
- buffer = (char *) buffer + 46;
- size -= 46;
-
- /* "parent <sha1>\n" */
- while (!memcmp(buffer, "parent ", 7)) {
- memcpy(new + newlen, buffer, 48);
- newlen += 48;
- buffer = (char *) buffer + 48;
- size -= 48;
- }
-
- /* "author xyz <xyz> date" */
- newlen += convert_date_line(new + newlen, &buffer, &size);
- /* "committer xyz <xyz> date" */
- newlen += convert_date_line(new + newlen, &buffer, &size);
-
- /* Rest */
- memcpy(new + newlen, buffer, size);
- newlen += size;
-
- write_sha1_file(new, newlen, commit_type, result_sha1);
- free(new);
-}
-
-static void convert_commit(void *buffer, unsigned long size, unsigned char *result_sha1)
-{
- void *orig_buffer = buffer;
- unsigned long orig_size = size;
-
- if (memcmp(buffer, "tree ", 5))
- die("Bad commit '%s'", (char *) buffer);
- convert_ascii_sha1((char *) buffer + 5);
- buffer = (char *) buffer + 46; /* "tree " + "hex sha1" + "\n" */
- while (!memcmp(buffer, "parent ", 7)) {
- convert_ascii_sha1((char *) buffer + 7);
- buffer = (char *) buffer + 48;
- }
- convert_date(orig_buffer, orig_size, result_sha1);
-}
-
-static struct entry * convert_entry(unsigned char *sha1)
-{
- struct entry *entry = lookup_entry(sha1);
- enum object_type type;
- void *buffer, *data;
- unsigned long size;
-
- if (entry->converted)
- return entry;
- data = read_sha1_file(sha1, &type, &size);
- if (!data)
- die("unable to read object %s", sha1_to_hex(sha1));
-
- buffer = xmalloc(size);
- memcpy(buffer, data, size);
-
- if (type == OBJ_BLOB) {
- write_sha1_file(buffer, size, blob_type, entry->new_sha1);
- } else if (type == OBJ_TREE)
- convert_tree(buffer, size, entry->new_sha1);
- else if (type == OBJ_COMMIT)
- convert_commit(buffer, size, entry->new_sha1);
- else
- die("unknown object type %d in %s", type, sha1_to_hex(sha1));
- entry->converted = 1;
- free(buffer);
- free(data);
- return entry;
-}
-
-int main(int argc, char **argv)
-{
- unsigned char sha1[20];
- struct entry *entry;
-
- setup_git_directory();
-
- if (argc != 2)
- usage("git-convert-objects <sha1>");
- if (get_sha1(argv[1], sha1))
- die("Not a valid object name %s", argv[1]);
-
- entry = convert_entry(sha1);
- printf("new sha1: %s\n", sha1_to_hex(entry->new_sha1));
- return 0;
-}
+++ /dev/null
-git-convert-objects(1)
-======================
-
-NAME
-----
-git-convert-objects - Converts old-style git repository
-
-
-SYNOPSIS
---------
-[verse]
-'git-convert-objects'
-
-DESCRIPTION
------------
-Converts old-style git repository to the latest format
-
-
-Author
-------
-Written by Linus Torvalds <torvalds@osdl.org>
-
-Documentation
---------------
-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
-
-GIT
----
-Part of the linkgit:git[7] suite
use File::Temp qw(tempdir);
use Getopt::Long qw(:config pass_through);
use Git;
+use Git::I18N;
sub usage
{
sub use_wt_file
{
- my ($workdir, $file, $sha1) = @_;
+ my ($file, $sha1) = @_;
my $null_sha1 = '0' x 40;
- if (-l "$workdir/$file" || ! -e _) {
+ if (-l $file || ! -e _) {
return (0, $null_sha1);
}
- my $wt_sha1 = Git::command_oneline('hash-object', "$workdir/$file");
+ my $wt_sha1 = Git::command_oneline('hash-object', $file);
my $use = ($sha1 eq $null_sha1) || ($sha1 eq $wt_sha1);
return ($use, $wt_sha1);
}
sub setup_dir_diff
{
- my ($workdir, $symlinks) = @_;
+ my ($worktree, $symlinks) = @_;
my @gitargs = ('diff', '--raw', '--no-abbrev', '-z', @ARGV);
my $diffrtn = Git::command_oneline(@gitargs);
exit(0) unless defined($diffrtn);
+ # Go to the root of the worktree now that we've captured the list of
+ # changed files. The paths returned by diff --raw are relative to the
+ # top-level of the repository, but we defer changing directories so
+ # that @ARGV can perform pathspec limiting in the current directory.
+ chdir($worktree);
+
# Build index info for left and right sides of the diff
my $submodule_mode = '160000';
my $symlink_mode = '120000';
my $wtindex = '';
my %submodule;
my %symlink;
- my @working_tree = ();
+ my @files = ();
my %working_tree_dups = ();
my @rawdiff = split('\0', $diffrtn);
my $i = 0;
while ($i < $#rawdiff) {
if ($rawdiff[$i] =~ /^::/) {
- warn << 'EOF';
+ warn __ <<'EOF';
Combined diff formats ('-c' and '--cc') are not supported in
directory diff mode ('-d' and '--dir-diff').
EOF
}
if ($rmode ne $null_mode) {
- # Avoid duplicate working_tree entries
+ # Avoid duplicate entries
if ($working_tree_dups{$dst_path}++) {
next;
}
my ($use, $wt_sha1) =
- use_wt_file($workdir, $dst_path, $rsha1);
+ use_wt_file($dst_path, $rsha1);
if ($use) {
- push @working_tree, $dst_path;
+ push @files, $dst_path;
$wtindex .= "$rmode $wt_sha1\t$dst_path\0";
} else {
$rindex .= "$rmode $rsha1\t$dst_path\0";
# Go to the root of the worktree so that the left index files
# are properly setup -- the index is toplevel-relative.
- chdir($workdir);
+ chdir($worktree);
# Setup temp directories
my $tmpdir = tempdir('git-difftool.XXXXX', CLEANUP => 0, TMPDIR => 1);
delete($ENV{GIT_INDEX_FILE});
# Changes in the working tree need special treatment since they are
- # not part of the index. Remove any trailing slash from $workdir
- # before starting to avoid double slashes in symlink targets.
- $workdir =~ s|/$||;
- for my $file (@working_tree) {
+ # not part of the index.
+ for my $file (@files) {
my $dir = dirname($file);
unless (-d "$rdir/$dir") {
mkpath("$rdir/$dir") or
exit_cleanup($tmpdir, 1);
}
if ($symlinks) {
- symlink("$workdir/$file", "$rdir/$file") or
+ symlink("$worktree/$file", "$rdir/$file") or
exit_cleanup($tmpdir, 1);
} else {
- copy("$workdir/$file", "$rdir/$file") or
+ copy($file, "$rdir/$file") or
exit_cleanup($tmpdir, 1);
- my $mode = stat("$workdir/$file")->mode;
+ my $mode = stat($file)->mode;
chmod($mode, "$rdir/$file") or
exit_cleanup($tmpdir, 1);
}
exit_cleanup($tmpdir, 1) if not $ok;
}
- return ($ldir, $rdir, $tmpdir, @working_tree);
+ return ($ldir, $rdir, $tmpdir, @files);
}
sub write_to_file
if (length($opts{difftool_cmd}) > 0) {
$ENV{GIT_DIFF_TOOL} = $opts{difftool_cmd};
} else {
- print "No <tool> given for --tool=<tool>\n";
+ print __("No <tool> given for --tool=<tool>\n");
usage(1);
}
}
if (length($opts{extcmd}) > 0) {
$ENV{GIT_DIFFTOOL_EXTCMD} = $opts{extcmd};
} else {
- print "No <cmd> given for --extcmd=<cmd>\n";
+ print __("No <cmd> given for --extcmd=<cmd>\n");
usage(1);
}
}
my $error = 0;
my $repo = Git->repository();
my $repo_path = $repo->repo_path();
- my $workdir = $repo->wc_path();
- my ($a, $b, $tmpdir, @worktree) = setup_dir_diff($workdir, $symlinks);
+ my $worktree = $repo->wc_path();
+ $worktree =~ s|/$||; # Avoid double slashes in symlink targets
+ my ($a, $b, $tmpdir, @files) = setup_dir_diff($worktree, $symlinks);
if (defined($extcmd)) {
$rc = system($extcmd, $a, $b);
my %tmp_modified;
my $indices_loaded = 0;
- for my $file (@worktree) {
+ for my $file (@files) {
next if $symlinks && -l "$b/$file";
next if ! -f "$b/$file";
if (!$indices_loaded) {
%wt_modified = changed_files(
- $repo_path, "$tmpdir/wtindex", $workdir);
+ $repo_path, "$tmpdir/wtindex", $worktree);
%tmp_modified = changed_files(
$repo_path, "$tmpdir/wtindex", $b);
$indices_loaded = 1;
}
if (exists $wt_modified{$file} and exists $tmp_modified{$file}) {
- my $errmsg = "warning: Both files modified: ";
- $errmsg .= "'$workdir/$file' and '$b/$file'.\n";
- $errmsg .= "warning: Working tree file has been left.\n";
- $errmsg .= "warning:\n";
- warn $errmsg;
+ warn sprintf(__(
+ "warning: Both files modified:\n" .
+ "'%s/%s' and '%s/%s'.\n" .
+ "warning: Working tree file has been left.\n" .
+ "warning:\n"), $worktree, $file, $b, $file);
$error = 1;
} elsif (exists $tmp_modified{$file}) {
my $mode = stat("$b/$file")->mode;
- copy("$b/$file", "$workdir/$file") or
+ copy("$b/$file", $file) or
exit_cleanup($tmpdir, 1);
- chmod($mode, "$workdir/$file") or
+ chmod($mode, $file) or
exit_cleanup($tmpdir, 1);
}
}
if ($error) {
- warn "warning: Temporary files exist in '$tmpdir'.\n";
- warn "warning: You may want to cleanup or recover these.\n";
+ warn sprintf(__(
+ "warning: Temporary files exist in '%s'.\n" .
+ "warning: You may want to cleanup or recover these.\n"), $tmpdir);
exit(1);
} else {
exit_cleanup($tmpdir, $rc);
+++ /dev/null
-#! /usr/bin/env python
-
-# 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.
-
-""" gitview
-GUI browser for git repository
-This program is based on bzrk by Scott James Remnant <scott@ubuntu.com>
-"""
-__copyright__ = "Copyright (C) 2006 Hewlett-Packard Development Company, L.P."
-__copyright__ = "Copyright (C) 2007 Aneesh Kumar K.V <aneesh.kumar@gmail.com"
-__author__ = "Aneesh Kumar K.V <aneesh.kumar@gmail.com>"
-
-
-import sys
-import os
-import gtk
-import pygtk
-import pango
-import re
-import time
-import gobject
-import cairo
-import math
-import string
-import fcntl
-
-have_gtksourceview2 = False
-have_gtksourceview = False
-try:
- import gtksourceview2
- have_gtksourceview2 = True
-except ImportError:
- try:
- import gtksourceview
- have_gtksourceview = True
- except ImportError:
- print "Running without gtksourceview2 or gtksourceview module"
-
-re_ident = re.compile('(author|committer) (?P<ident>.*) (?P<epoch>\d+) (?P<tz>[+-]\d{4})')
-
-def list_to_string(args, skip):
- count = len(args)
- i = skip
- str_arg=" "
- while (i < count ):
- str_arg = str_arg + args[i]
- str_arg = str_arg + " "
- i = i+1
-
- return str_arg
-
-def show_date(epoch, tz):
- secs = float(epoch)
- tzsecs = float(tz[1:3]) * 3600
- tzsecs += float(tz[3:5]) * 60
- if (tz[0] == "+"):
- secs += tzsecs
- else:
- secs -= tzsecs
-
- return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(secs))
-
-def get_source_buffer_and_view():
- if have_gtksourceview2:
- buffer = gtksourceview2.Buffer()
- slm = gtksourceview2.LanguageManager()
- gsl = slm.get_language("diff")
- buffer.set_highlight_syntax(True)
- buffer.set_language(gsl)
- view = gtksourceview2.View(buffer)
- elif have_gtksourceview:
- buffer = gtksourceview.SourceBuffer()
- slm = gtksourceview.SourceLanguagesManager()
- gsl = slm.get_language_from_mime_type("text/x-patch")
- buffer.set_highlight(True)
- buffer.set_language(gsl)
- view = gtksourceview.SourceView(buffer)
- else:
- buffer = gtk.TextBuffer()
- view = gtk.TextView(buffer)
- return (buffer, view)
-
-
-class CellRendererGraph(gtk.GenericCellRenderer):
- """Cell renderer for directed graph.
-
- This module contains the implementation of a custom GtkCellRenderer that
- draws part of the directed graph based on the lines suggested by the code
- in graph.py.
-
- Because we're shiny, we use Cairo to do this, and because we're naughty
- we cheat and draw over the bits of the TreeViewColumn that are supposed to
- just be for the background.
-
- Properties:
- node (column, colour, [ names ]) tuple to draw revision node,
- in_lines (start, end, colour) tuple list to draw inward lines,
- out_lines (start, end, colour) tuple list to draw outward lines.
- """
-
- __gproperties__ = {
- "node": ( gobject.TYPE_PYOBJECT, "node",
- "revision node instruction",
- gobject.PARAM_WRITABLE
- ),
- "in-lines": ( gobject.TYPE_PYOBJECT, "in-lines",
- "instructions to draw lines into the cell",
- gobject.PARAM_WRITABLE
- ),
- "out-lines": ( gobject.TYPE_PYOBJECT, "out-lines",
- "instructions to draw lines out of the cell",
- gobject.PARAM_WRITABLE
- ),
- }
-
- def do_set_property(self, property, value):
- """Set properties from GObject properties."""
- if property.name == "node":
- self.node = value
- elif property.name == "in-lines":
- self.in_lines = value
- elif property.name == "out-lines":
- self.out_lines = value
- else:
- raise AttributeError, "no such property: '%s'" % property.name
-
- def box_size(self, widget):
- """Calculate box size based on widget's font.
-
- Cache this as it's probably expensive to get. It ensures that we
- draw the graph at least as large as the text.
- """
- try:
- return self._box_size
- except AttributeError:
- pango_ctx = widget.get_pango_context()
- font_desc = widget.get_style().font_desc
- metrics = pango_ctx.get_metrics(font_desc)
-
- ascent = pango.PIXELS(metrics.get_ascent())
- descent = pango.PIXELS(metrics.get_descent())
-
- self._box_size = ascent + descent + 6
- return self._box_size
-
- def set_colour(self, ctx, colour, bg, fg):
- """Set the context source colour.
-
- Picks a distinct colour based on an internal wheel; the bg
- parameter provides the value that should be assigned to the 'zero'
- colours and the fg parameter provides the multiplier that should be
- applied to the foreground colours.
- """
- colours = [
- ( 1.0, 0.0, 0.0 ),
- ( 1.0, 1.0, 0.0 ),
- ( 0.0, 1.0, 0.0 ),
- ( 0.0, 1.0, 1.0 ),
- ( 0.0, 0.0, 1.0 ),
- ( 1.0, 0.0, 1.0 ),
- ]
-
- colour %= len(colours)
- red = (colours[colour][0] * fg) or bg
- green = (colours[colour][1] * fg) or bg
- blue = (colours[colour][2] * fg) or bg
-
- ctx.set_source_rgb(red, green, blue)
-
- def on_get_size(self, widget, cell_area):
- """Return the size we need for this cell.
-
- Each cell is drawn individually and is only as wide as it needs
- to be, we let the TreeViewColumn take care of making them all
- line up.
- """
- box_size = self.box_size(widget)
-
- cols = self.node[0]
- for start, end, colour in self.in_lines + self.out_lines:
- cols = int(max(cols, start, end))
-
- (column, colour, names) = self.node
- names_len = 0
- if (len(names) != 0):
- for item in names:
- names_len += len(item)
-
- width = box_size * (cols + 1 ) + names_len
- height = box_size
-
- # FIXME I have no idea how to use cell_area properly
- return (0, 0, width, height)
-
- def on_render(self, window, widget, bg_area, cell_area, exp_area, flags):
- """Render an individual cell.
-
- Draws the cell contents using cairo, taking care to clip what we
- do to within the background area so we don't draw over other cells.
- Note that we're a bit naughty there and should really be drawing
- in the cell_area (or even the exposed area), but we explicitly don't
- want any gutter.
-
- We try and be a little clever, if the line we need to draw is going
- to cross other columns we actually draw it as in the .---' style
- instead of a pure diagonal ... this reduces confusion by an
- incredible amount.
- """
- ctx = window.cairo_create()
- ctx.rectangle(bg_area.x, bg_area.y, bg_area.width, bg_area.height)
- ctx.clip()
-
- box_size = self.box_size(widget)
-
- ctx.set_line_width(box_size / 8)
- ctx.set_line_cap(cairo.LINE_CAP_SQUARE)
-
- # Draw lines into the cell
- for start, end, colour in self.in_lines:
- ctx.move_to(cell_area.x + box_size * start + box_size / 2,
- bg_area.y - bg_area.height / 2)
-
- if start - end > 1:
- ctx.line_to(cell_area.x + box_size * start, bg_area.y)
- ctx.line_to(cell_area.x + box_size * end + box_size, bg_area.y)
- elif start - end < -1:
- ctx.line_to(cell_area.x + box_size * start + box_size,
- bg_area.y)
- ctx.line_to(cell_area.x + box_size * end, bg_area.y)
-
- ctx.line_to(cell_area.x + box_size * end + box_size / 2,
- bg_area.y + bg_area.height / 2)
-
- self.set_colour(ctx, colour, 0.0, 0.65)
- ctx.stroke()
-
- # Draw lines out of the cell
- for start, end, colour in self.out_lines:
- ctx.move_to(cell_area.x + box_size * start + box_size / 2,
- bg_area.y + bg_area.height / 2)
-
- if start - end > 1:
- ctx.line_to(cell_area.x + box_size * start,
- bg_area.y + bg_area.height)
- ctx.line_to(cell_area.x + box_size * end + box_size,
- bg_area.y + bg_area.height)
- elif start - end < -1:
- ctx.line_to(cell_area.x + box_size * start + box_size,
- bg_area.y + bg_area.height)
- ctx.line_to(cell_area.x + box_size * end,
- bg_area.y + bg_area.height)
-
- ctx.line_to(cell_area.x + box_size * end + box_size / 2,
- bg_area.y + bg_area.height / 2 + bg_area.height)
-
- self.set_colour(ctx, colour, 0.0, 0.65)
- ctx.stroke()
-
- # Draw the revision node in the right column
- (column, colour, names) = self.node
- ctx.arc(cell_area.x + box_size * column + box_size / 2,
- cell_area.y + cell_area.height / 2,
- box_size / 4, 0, 2 * math.pi)
-
-
- self.set_colour(ctx, colour, 0.0, 0.5)
- ctx.stroke_preserve()
-
- self.set_colour(ctx, colour, 0.5, 1.0)
- ctx.fill_preserve()
-
- if (len(names) != 0):
- name = " "
- for item in names:
- name = name + item + " "
-
- ctx.set_font_size(13)
- if (flags & 1):
- self.set_colour(ctx, colour, 0.5, 1.0)
- else:
- self.set_colour(ctx, colour, 0.0, 0.5)
- ctx.show_text(name)
-
-class Commit(object):
- """ This represent a commit object obtained after parsing the git-rev-list
- output """
-
- __slots__ = ['children_sha1', 'message', 'author', 'date', 'committer',
- 'commit_date', 'commit_sha1', 'parent_sha1']
-
- children_sha1 = {}
-
- def __init__(self, commit_lines):
- self.message = ""
- self.author = ""
- self.date = ""
- self.committer = ""
- self.commit_date = ""
- self.commit_sha1 = ""
- self.parent_sha1 = [ ]
- self.parse_commit(commit_lines)
-
-
- def parse_commit(self, commit_lines):
-
- # First line is the sha1 lines
- line = string.strip(commit_lines[0])
- sha1 = re.split(" ", line)
- self.commit_sha1 = sha1[0]
- self.parent_sha1 = sha1[1:]
-
- #build the child list
- for parent_id in self.parent_sha1:
- try:
- Commit.children_sha1[parent_id].append(self.commit_sha1)
- except KeyError:
- Commit.children_sha1[parent_id] = [self.commit_sha1]
-
- # IF we don't have parent
- if (len(self.parent_sha1) == 0):
- self.parent_sha1 = [0]
-
- for line in commit_lines[1:]:
- m = re.match("^ ", line)
- if (m != None):
- # First line of the commit message used for short log
- if self.message == "":
- self.message = string.strip(line)
- continue
-
- m = re.match("tree", line)
- if (m != None):
- continue
-
- m = re.match("parent", line)
- if (m != None):
- continue
-
- m = re_ident.match(line)
- if (m != None):
- date = show_date(m.group('epoch'), m.group('tz'))
- if m.group(1) == "author":
- self.author = m.group('ident')
- self.date = date
- elif m.group(1) == "committer":
- self.committer = m.group('ident')
- self.commit_date = date
-
- continue
-
- def get_message(self, with_diff=0):
- if (with_diff == 1):
- message = self.diff_tree()
- else:
- fp = os.popen("git cat-file commit " + self.commit_sha1)
- message = fp.read()
- fp.close()
-
- return message
-
- def diff_tree(self):
- fp = os.popen("git diff-tree --pretty --cc -v -p --always " + self.commit_sha1)
- diff = fp.read()
- fp.close()
- return diff
-
-class AnnotateWindow(object):
- """Annotate window.
- This object represents and manages a single window containing the
- annotate information of the file
- """
-
- def __init__(self):
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.set_border_width(0)
- self.window.set_title("Git repository browser annotation window")
- self.prev_read = ""
-
- # Use two thirds of the screen by default
- screen = self.window.get_screen()
- monitor = screen.get_monitor_geometry(0)
- width = int(monitor.width * 0.66)
- height = int(monitor.height * 0.66)
- self.window.set_default_size(width, height)
-
- def add_file_data(self, filename, commit_sha1, line_num):
- fp = os.popen("git cat-file blob " + commit_sha1 +":"+filename)
- i = 1;
- for line in fp.readlines():
- line = string.rstrip(line)
- self.model.append(None, ["HEAD", filename, line, i])
- i = i+1
- fp.close()
-
- # now set the cursor position
- self.treeview.set_cursor(line_num-1)
- self.treeview.grab_focus()
-
- def _treeview_cursor_cb(self, *args):
- """Callback for when the treeview cursor changes."""
- (path, col) = self.treeview.get_cursor()
- commit_sha1 = self.model[path][0]
- commit_msg = ""
- fp = os.popen("git cat-file commit " + commit_sha1)
- for line in fp.readlines():
- commit_msg = commit_msg + line
- fp.close()
-
- self.commit_buffer.set_text(commit_msg)
-
- def _treeview_row_activated(self, *args):
- """Callback for when the treeview row gets selected."""
- (path, col) = self.treeview.get_cursor()
- commit_sha1 = self.model[path][0]
- filename = self.model[path][1]
- line_num = self.model[path][3]
-
- window = AnnotateWindow();
- fp = os.popen("git rev-parse "+ commit_sha1 + "~1")
- commit_sha1 = string.strip(fp.readline())
- fp.close()
- window.annotate(filename, commit_sha1, line_num)
-
- def data_ready(self, source, condition):
- while (1):
- try :
- # A simple readline doesn't work
- # a readline bug ??
- buffer = source.read(100)
-
- except:
- # resource temporary not available
- return True
-
- if (len(buffer) == 0):
- gobject.source_remove(self.io_watch_tag)
- source.close()
- return False
-
- if (self.prev_read != ""):
- buffer = self.prev_read + buffer
- self.prev_read = ""
-
- if (buffer[len(buffer) -1] != '\n'):
- try:
- newline_index = buffer.rindex("\n")
- except ValueError:
- newline_index = 0
-
- self.prev_read = buffer[newline_index:(len(buffer))]
- buffer = buffer[0:newline_index]
-
- for buff in buffer.split("\n"):
- annotate_line = re.compile('^([0-9a-f]{40}) (.+) (.+) (.+)$')
- m = annotate_line.match(buff)
- if not m:
- annotate_line = re.compile('^(filename) (.+)$')
- m = annotate_line.match(buff)
- if not m:
- continue
- filename = m.group(2)
- else:
- self.commit_sha1 = m.group(1)
- self.source_line = int(m.group(2))
- self.result_line = int(m.group(3))
- self.count = int(m.group(4))
- #set the details only when we have the file name
- continue
-
- while (self.count > 0):
- # set at result_line + count-1 the sha1 as commit_sha1
- self.count = self.count - 1
- iter = self.model.iter_nth_child(None, self.result_line + self.count-1)
- self.model.set(iter, 0, self.commit_sha1, 1, filename, 3, self.source_line)
-
-
- def annotate(self, filename, commit_sha1, line_num):
- # verify the commit_sha1 specified has this filename
-
- fp = os.popen("git ls-tree "+ commit_sha1 + " -- " + filename)
- line = string.strip(fp.readline())
- if line == '':
- # pop up the message the file is not there as a part of the commit
- fp.close()
- dialog = gtk.MessageDialog(parent=None, flags=0,
- type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_CLOSE,
- message_format=None)
- dialog.set_markup("The file %s is not present in the parent commit %s" % (filename, commit_sha1))
- dialog.run()
- dialog.destroy()
- return
-
- fp.close()
-
- vpan = gtk.VPaned();
- self.window.add(vpan);
- vpan.show()
-
- scrollwin = gtk.ScrolledWindow()
- scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- scrollwin.set_shadow_type(gtk.SHADOW_IN)
- vpan.pack1(scrollwin, True, True);
- scrollwin.show()
-
- self.model = gtk.TreeStore(str, str, str, int)
- self.treeview = gtk.TreeView(self.model)
- self.treeview.set_rules_hint(True)
- self.treeview.set_search_column(0)
- self.treeview.connect("cursor-changed", self._treeview_cursor_cb)
- self.treeview.connect("row-activated", self._treeview_row_activated)
- scrollwin.add(self.treeview)
- self.treeview.show()
-
- cell = gtk.CellRendererText()
- cell.set_property("width-chars", 10)
- cell.set_property("ellipsize", pango.ELLIPSIZE_END)
- column = gtk.TreeViewColumn("Commit")
- column.set_resizable(True)
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 0)
- self.treeview.append_column(column)
-
- cell = gtk.CellRendererText()
- cell.set_property("width-chars", 20)
- cell.set_property("ellipsize", pango.ELLIPSIZE_END)
- column = gtk.TreeViewColumn("File Name")
- column.set_resizable(True)
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 1)
- self.treeview.append_column(column)
-
- cell = gtk.CellRendererText()
- cell.set_property("width-chars", 20)
- cell.set_property("ellipsize", pango.ELLIPSIZE_END)
- column = gtk.TreeViewColumn("Data")
- column.set_resizable(True)
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 2)
- self.treeview.append_column(column)
-
- # The commit message window
- scrollwin = gtk.ScrolledWindow()
- scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- scrollwin.set_shadow_type(gtk.SHADOW_IN)
- vpan.pack2(scrollwin, True, True);
- scrollwin.show()
-
- commit_text = gtk.TextView()
- self.commit_buffer = gtk.TextBuffer()
- commit_text.set_buffer(self.commit_buffer)
- scrollwin.add(commit_text)
- commit_text.show()
-
- self.window.show()
-
- self.add_file_data(filename, commit_sha1, line_num)
-
- fp = os.popen("git blame --incremental -C -C -- " + filename + " " + commit_sha1)
- flags = fcntl.fcntl(fp.fileno(), fcntl.F_GETFL)
- fcntl.fcntl(fp.fileno(), fcntl.F_SETFL, flags | os.O_NONBLOCK)
- self.io_watch_tag = gobject.io_add_watch(fp, gobject.IO_IN, self.data_ready)
-
-
-class DiffWindow(object):
- """Diff window.
- This object represents and manages a single window containing the
- differences between two revisions on a branch.
- """
-
- def __init__(self):
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.set_border_width(0)
- self.window.set_title("Git repository browser diff window")
-
- # Use two thirds of the screen by default
- screen = self.window.get_screen()
- monitor = screen.get_monitor_geometry(0)
- width = int(monitor.width * 0.66)
- height = int(monitor.height * 0.66)
- self.window.set_default_size(width, height)
-
-
- self.construct()
-
- def construct(self):
- """Construct the window contents."""
- vbox = gtk.VBox()
- self.window.add(vbox)
- vbox.show()
-
- menu_bar = gtk.MenuBar()
- save_menu = gtk.ImageMenuItem(gtk.STOCK_SAVE)
- save_menu.connect("activate", self.save_menu_response, "save")
- save_menu.show()
- menu_bar.append(save_menu)
- vbox.pack_start(menu_bar, expand=False, fill=True)
- menu_bar.show()
-
- hpan = gtk.HPaned()
-
- scrollwin = gtk.ScrolledWindow()
- scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- scrollwin.set_shadow_type(gtk.SHADOW_IN)
- hpan.pack1(scrollwin, True, True)
- scrollwin.show()
-
- (self.buffer, sourceview) = get_source_buffer_and_view()
-
- sourceview.set_editable(False)
- sourceview.modify_font(pango.FontDescription("Monospace"))
- scrollwin.add(sourceview)
- sourceview.show()
-
- # The file hierarchy: a scrollable treeview
- scrollwin = gtk.ScrolledWindow()
- scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- scrollwin.set_shadow_type(gtk.SHADOW_IN)
- scrollwin.set_size_request(20, -1)
- hpan.pack2(scrollwin, True, True)
- scrollwin.show()
-
- self.model = gtk.TreeStore(str, str, str)
- self.treeview = gtk.TreeView(self.model)
- self.treeview.set_search_column(1)
- self.treeview.connect("cursor-changed", self._treeview_clicked)
- scrollwin.add(self.treeview)
- self.treeview.show()
-
- cell = gtk.CellRendererText()
- cell.set_property("width-chars", 20)
- column = gtk.TreeViewColumn("Select to annotate")
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 0)
- self.treeview.append_column(column)
-
- vbox.pack_start(hpan, expand=True, fill=True)
- hpan.show()
-
- def _treeview_clicked(self, *args):
- """Callback for when the treeview cursor changes."""
- (path, col) = self.treeview.get_cursor()
- specific_file = self.model[path][1]
- commit_sha1 = self.model[path][2]
- if specific_file == None :
- return
- elif specific_file == "" :
- specific_file = None
-
- window = AnnotateWindow();
- window.annotate(specific_file, commit_sha1, 1)
-
-
- def commit_files(self, commit_sha1, parent_sha1):
- self.model.clear()
- add = self.model.append(None, [ "Added", None, None])
- dele = self.model.append(None, [ "Deleted", None, None])
- mod = self.model.append(None, [ "Modified", None, None])
- diff_tree = re.compile('^(:.{6}) (.{6}) (.{40}) (.{40}) (A|D|M)\s(.+)$')
- fp = os.popen("git diff-tree -r --no-commit-id " + parent_sha1 + " " + commit_sha1)
- while 1:
- line = string.strip(fp.readline())
- if line == '':
- break
- m = diff_tree.match(line)
- if not m:
- continue
-
- attr = m.group(5)
- filename = m.group(6)
- if attr == "A":
- self.model.append(add, [filename, filename, commit_sha1])
- elif attr == "D":
- self.model.append(dele, [filename, filename, commit_sha1])
- elif attr == "M":
- self.model.append(mod, [filename, filename, commit_sha1])
- fp.close()
-
- self.treeview.expand_all()
-
- def set_diff(self, commit_sha1, parent_sha1, encoding):
- """Set the differences showed by this window.
- Compares the two trees and populates the window with the
- differences.
- """
- # Diff with the first commit or the last commit shows nothing
- if (commit_sha1 == 0 or parent_sha1 == 0 ):
- return
-
- fp = os.popen("git diff-tree -p " + parent_sha1 + " " + commit_sha1)
- self.buffer.set_text(unicode(fp.read(), encoding).encode('utf-8'))
- fp.close()
- self.commit_files(commit_sha1, parent_sha1)
- self.window.show()
-
- def save_menu_response(self, widget, string):
- dialog = gtk.FileChooserDialog("Save..", None, gtk.FILE_CHOOSER_ACTION_SAVE,
- (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_SAVE, gtk.RESPONSE_OK))
- dialog.set_default_response(gtk.RESPONSE_OK)
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- patch_buffer = self.buffer.get_text(self.buffer.get_start_iter(),
- self.buffer.get_end_iter())
- fp = open(dialog.get_filename(), "w")
- fp.write(patch_buffer)
- fp.close()
- dialog.destroy()
-
-class GitView(object):
- """ This is the main class
- """
- version = "0.9"
-
- def __init__(self, with_diff=0):
- self.with_diff = with_diff
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.set_border_width(0)
- self.window.set_title("Git repository browser")
-
- self.get_encoding()
- self.get_bt_sha1()
-
- # Use three-quarters of the screen by default
- screen = self.window.get_screen()
- monitor = screen.get_monitor_geometry(0)
- width = int(monitor.width * 0.75)
- height = int(monitor.height * 0.75)
- self.window.set_default_size(width, height)
-
- # FIXME AndyFitz!
- icon = self.window.render_icon(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON)
- self.window.set_icon(icon)
-
- self.accel_group = gtk.AccelGroup()
- self.window.add_accel_group(self.accel_group)
- self.accel_group.connect_group(0xffc2, 0, gtk.ACCEL_LOCKED, self.refresh);
- self.accel_group.connect_group(0xffc1, 0, gtk.ACCEL_LOCKED, self.maximize);
- self.accel_group.connect_group(0xffc8, 0, gtk.ACCEL_LOCKED, self.fullscreen);
- self.accel_group.connect_group(0xffc9, 0, gtk.ACCEL_LOCKED, self.unfullscreen);
-
- self.window.add(self.construct())
-
- def refresh(self, widget, event=None, *arguments, **keywords):
- self.get_encoding()
- self.get_bt_sha1()
- Commit.children_sha1 = {}
- self.set_branch(sys.argv[without_diff:])
- self.window.show()
- return True
-
- def maximize(self, widget, event=None, *arguments, **keywords):
- self.window.maximize()
- return True
-
- def fullscreen(self, widget, event=None, *arguments, **keywords):
- self.window.fullscreen()
- return True
-
- def unfullscreen(self, widget, event=None, *arguments, **keywords):
- self.window.unfullscreen()
- return True
-
- def get_bt_sha1(self):
- """ Update the bt_sha1 dictionary with the
- respective sha1 details """
-
- self.bt_sha1 = { }
- ls_remote = re.compile('^(.{40})\trefs/([^^]+)(?:\\^(..))?$');
- fp = os.popen('git ls-remote "${GIT_DIR-.git}"')
- while 1:
- line = string.strip(fp.readline())
- if line == '':
- break
- m = ls_remote.match(line)
- if not m:
- continue
- (sha1, name) = (m.group(1), m.group(2))
- if not self.bt_sha1.has_key(sha1):
- self.bt_sha1[sha1] = []
- self.bt_sha1[sha1].append(name)
- fp.close()
-
- def get_encoding(self):
- fp = os.popen("git config --get i18n.commitencoding")
- self.encoding=string.strip(fp.readline())
- fp.close()
- if (self.encoding == ""):
- self.encoding = "utf-8"
-
-
- def construct(self):
- """Construct the window contents."""
- vbox = gtk.VBox()
- paned = gtk.VPaned()
- paned.pack1(self.construct_top(), resize=False, shrink=True)
- paned.pack2(self.construct_bottom(), resize=False, shrink=True)
- menu_bar = gtk.MenuBar()
- menu_bar.set_pack_direction(gtk.PACK_DIRECTION_RTL)
- help_menu = gtk.MenuItem("Help")
- menu = gtk.Menu()
- about_menu = gtk.MenuItem("About")
- menu.append(about_menu)
- about_menu.connect("activate", self.about_menu_response, "about")
- about_menu.show()
- help_menu.set_submenu(menu)
- help_menu.show()
- menu_bar.append(help_menu)
- menu_bar.show()
- vbox.pack_start(menu_bar, expand=False, fill=True)
- vbox.pack_start(paned, expand=True, fill=True)
- paned.show()
- vbox.show()
- return vbox
-
-
- def construct_top(self):
- """Construct the top-half of the window."""
- vbox = gtk.VBox(spacing=6)
- vbox.set_border_width(12)
- vbox.show()
-
-
- scrollwin = gtk.ScrolledWindow()
- scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- scrollwin.set_shadow_type(gtk.SHADOW_IN)
- vbox.pack_start(scrollwin, expand=True, fill=True)
- scrollwin.show()
-
- self.treeview = gtk.TreeView()
- self.treeview.set_rules_hint(True)
- self.treeview.set_search_column(4)
- self.treeview.connect("cursor-changed", self._treeview_cursor_cb)
- scrollwin.add(self.treeview)
- self.treeview.show()
-
- cell = CellRendererGraph()
- column = gtk.TreeViewColumn()
- column.set_resizable(True)
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "node", 1)
- column.add_attribute(cell, "in-lines", 2)
- column.add_attribute(cell, "out-lines", 3)
- self.treeview.append_column(column)
-
- cell = gtk.CellRendererText()
- cell.set_property("width-chars", 65)
- cell.set_property("ellipsize", pango.ELLIPSIZE_END)
- column = gtk.TreeViewColumn("Message")
- column.set_resizable(True)
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 4)
- self.treeview.append_column(column)
-
- cell = gtk.CellRendererText()
- cell.set_property("width-chars", 40)
- cell.set_property("ellipsize", pango.ELLIPSIZE_END)
- column = gtk.TreeViewColumn("Author")
- column.set_resizable(True)
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 5)
- self.treeview.append_column(column)
-
- cell = gtk.CellRendererText()
- cell.set_property("ellipsize", pango.ELLIPSIZE_END)
- column = gtk.TreeViewColumn("Date")
- column.set_resizable(True)
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 6)
- self.treeview.append_column(column)
-
- return vbox
-
- def about_menu_response(self, widget, string):
- dialog = gtk.AboutDialog()
- dialog.set_name("Gitview")
- dialog.set_version(GitView.version)
- dialog.set_authors(["Aneesh Kumar K.V <aneesh.kumar@gmail.com>"])
- dialog.set_website("http://www.kernel.org/pub/software/scm/git/")
- dialog.set_copyright("Use and distribute under the terms of the GNU General Public License")
- dialog.set_wrap_license(True)
- dialog.run()
- dialog.destroy()
-
-
- def construct_bottom(self):
- """Construct the bottom half of the window."""
- vbox = gtk.VBox(False, spacing=6)
- vbox.set_border_width(12)
- (width, height) = self.window.get_size()
- vbox.set_size_request(width, int(height / 2.5))
- vbox.show()
-
- self.table = gtk.Table(rows=4, columns=4)
- self.table.set_row_spacings(6)
- self.table.set_col_spacings(6)
- vbox.pack_start(self.table, expand=False, fill=True)
- self.table.show()
-
- align = gtk.Alignment(0.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Revision:</b>")
- align.add(label)
- self.table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
- label.show()
- align.show()
-
- align = gtk.Alignment(0.0, 0.5)
- self.revid_label = gtk.Label()
- self.revid_label.set_selectable(True)
- align.add(self.revid_label)
- self.table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
- self.revid_label.show()
- align.show()
-
- align = gtk.Alignment(0.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Committer:</b>")
- align.add(label)
- self.table.attach(align, 0, 1, 1, 2, gtk.FILL, gtk.FILL)
- label.show()
- align.show()
-
- align = gtk.Alignment(0.0, 0.5)
- self.committer_label = gtk.Label()
- self.committer_label.set_selectable(True)
- align.add(self.committer_label)
- self.table.attach(align, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
- self.committer_label.show()
- align.show()
-
- align = gtk.Alignment(0.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Timestamp:</b>")
- align.add(label)
- self.table.attach(align, 0, 1, 2, 3, gtk.FILL, gtk.FILL)
- label.show()
- align.show()
-
- align = gtk.Alignment(0.0, 0.5)
- self.timestamp_label = gtk.Label()
- self.timestamp_label.set_selectable(True)
- align.add(self.timestamp_label)
- self.table.attach(align, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL)
- self.timestamp_label.show()
- align.show()
-
- align = gtk.Alignment(0.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Parents:</b>")
- align.add(label)
- self.table.attach(align, 0, 1, 3, 4, gtk.FILL, gtk.FILL)
- label.show()
- align.show()
- self.parents_widgets = []
-
- align = gtk.Alignment(0.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Children:</b>")
- align.add(label)
- self.table.attach(align, 2, 3, 3, 4, gtk.FILL, gtk.FILL)
- label.show()
- align.show()
- self.children_widgets = []
-
- scrollwin = gtk.ScrolledWindow()
- scrollwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- scrollwin.set_shadow_type(gtk.SHADOW_IN)
- vbox.pack_start(scrollwin, expand=True, fill=True)
- scrollwin.show()
-
- (self.message_buffer, sourceview) = get_source_buffer_and_view()
-
- sourceview.set_editable(False)
- sourceview.modify_font(pango.FontDescription("Monospace"))
- scrollwin.add(sourceview)
- sourceview.show()
-
- return vbox
-
- def _treeview_cursor_cb(self, *args):
- """Callback for when the treeview cursor changes."""
- (path, col) = self.treeview.get_cursor()
- commit = self.model[path][0]
-
- if commit.committer is not None:
- committer = commit.committer
- timestamp = commit.commit_date
- message = commit.get_message(self.with_diff)
- revid_label = commit.commit_sha1
- else:
- committer = ""
- timestamp = ""
- message = ""
- revid_label = ""
-
- self.revid_label.set_text(revid_label)
- self.committer_label.set_text(committer)
- self.timestamp_label.set_text(timestamp)
- self.message_buffer.set_text(unicode(message, self.encoding).encode('utf-8'))
-
- for widget in self.parents_widgets:
- self.table.remove(widget)
-
- self.parents_widgets = []
- self.table.resize(4 + len(commit.parent_sha1) - 1, 4)
- for idx, parent_id in enumerate(commit.parent_sha1):
- self.table.set_row_spacing(idx + 3, 0)
-
- align = gtk.Alignment(0.0, 0.0)
- self.parents_widgets.append(align)
- self.table.attach(align, 1, 2, idx + 3, idx + 4,
- gtk.EXPAND | gtk.FILL, gtk.FILL)
- align.show()
-
- hbox = gtk.HBox(False, 0)
- align.add(hbox)
- hbox.show()
-
- label = gtk.Label(parent_id)
- label.set_selectable(True)
- hbox.pack_start(label, expand=False, fill=True)
- label.show()
-
- image = gtk.Image()
- image.set_from_stock(gtk.STOCK_JUMP_TO, gtk.ICON_SIZE_MENU)
- image.show()
-
- button = gtk.Button()
- button.add(image)
- button.set_relief(gtk.RELIEF_NONE)
- button.connect("clicked", self._go_clicked_cb, parent_id)
- hbox.pack_start(button, expand=False, fill=True)
- button.show()
-
- image = gtk.Image()
- image.set_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_MENU)
- image.show()
-
- button = gtk.Button()
- button.add(image)
- button.set_relief(gtk.RELIEF_NONE)
- button.set_sensitive(True)
- button.connect("clicked", self._show_clicked_cb,
- commit.commit_sha1, parent_id, self.encoding)
- hbox.pack_start(button, expand=False, fill=True)
- button.show()
-
- # Populate with child details
- for widget in self.children_widgets:
- self.table.remove(widget)
-
- self.children_widgets = []
- try:
- child_sha1 = Commit.children_sha1[commit.commit_sha1]
- except KeyError:
- # We don't have child
- child_sha1 = [ 0 ]
-
- if ( len(child_sha1) > len(commit.parent_sha1)):
- self.table.resize(4 + len(child_sha1) - 1, 4)
-
- for idx, child_id in enumerate(child_sha1):
- self.table.set_row_spacing(idx + 3, 0)
-
- align = gtk.Alignment(0.0, 0.0)
- self.children_widgets.append(align)
- self.table.attach(align, 3, 4, idx + 3, idx + 4,
- gtk.EXPAND | gtk.FILL, gtk.FILL)
- align.show()
-
- hbox = gtk.HBox(False, 0)
- align.add(hbox)
- hbox.show()
-
- label = gtk.Label(child_id)
- label.set_selectable(True)
- hbox.pack_start(label, expand=False, fill=True)
- label.show()
-
- image = gtk.Image()
- image.set_from_stock(gtk.STOCK_JUMP_TO, gtk.ICON_SIZE_MENU)
- image.show()
-
- button = gtk.Button()
- button.add(image)
- button.set_relief(gtk.RELIEF_NONE)
- button.connect("clicked", self._go_clicked_cb, child_id)
- hbox.pack_start(button, expand=False, fill=True)
- button.show()
-
- image = gtk.Image()
- image.set_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_MENU)
- image.show()
-
- button = gtk.Button()
- button.add(image)
- button.set_relief(gtk.RELIEF_NONE)
- button.set_sensitive(True)
- button.connect("clicked", self._show_clicked_cb,
- child_id, commit.commit_sha1, self.encoding)
- hbox.pack_start(button, expand=False, fill=True)
- button.show()
-
- def _destroy_cb(self, widget):
- """Callback for when a window we manage is destroyed."""
- self.quit()
-
-
- def quit(self):
- """Stop the GTK+ main loop."""
- gtk.main_quit()
-
- def run(self, args):
- self.set_branch(args)
- self.window.connect("destroy", self._destroy_cb)
- self.window.show()
- gtk.main()
-
- def set_branch(self, args):
- """Fill in different windows with info from the reposiroty"""
- fp = os.popen("git rev-parse --sq --default HEAD " + list_to_string(args, 1))
- git_rev_list_cmd = fp.read()
- fp.close()
- fp = os.popen("git rev-list --header --topo-order --parents " + git_rev_list_cmd)
- self.update_window(fp)
-
- def update_window(self, fp):
- commit_lines = []
-
- self.model = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT,
- gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, str, str, str)
-
- # used for cursor positioning
- self.index = {}
-
- self.colours = {}
- self.nodepos = {}
- self.incomplete_line = {}
- self.commits = []
-
- index = 0
- last_colour = 0
- last_nodepos = -1
- out_line = []
- input_line = fp.readline()
- while (input_line != ""):
- # The commit header ends with '\0'
- # This NULL is immediately followed by the sha1 of the
- # next commit
- if (input_line[0] != '\0'):
- commit_lines.append(input_line)
- input_line = fp.readline()
- continue;
-
- commit = Commit(commit_lines)
- if (commit != None ):
- self.commits.append(commit)
-
- # Skip the '\0
- commit_lines = []
- commit_lines.append(input_line[1:])
- input_line = fp.readline()
-
- fp.close()
-
- for commit in self.commits:
- (out_line, last_colour, last_nodepos) = self.draw_graph(commit,
- index, out_line,
- last_colour,
- last_nodepos)
- self.index[commit.commit_sha1] = index
- index += 1
-
- self.treeview.set_model(self.model)
- self.treeview.show()
-
- def draw_graph(self, commit, index, out_line, last_colour, last_nodepos):
- in_line=[]
-
- # | -> outline
- # X
- # |\ <- inline
-
- # Reset nodepostion
- if (last_nodepos > 5):
- last_nodepos = -1
-
- # Add the incomplete lines of the last cell in this
- try:
- colour = self.colours[commit.commit_sha1]
- except KeyError:
- self.colours[commit.commit_sha1] = last_colour+1
- last_colour = self.colours[commit.commit_sha1]
- colour = self.colours[commit.commit_sha1]
-
- try:
- node_pos = self.nodepos[commit.commit_sha1]
- except KeyError:
- self.nodepos[commit.commit_sha1] = last_nodepos+1
- last_nodepos = self.nodepos[commit.commit_sha1]
- node_pos = self.nodepos[commit.commit_sha1]
-
- #The first parent always continue on the same line
- try:
- # check we already have the value
- tmp_node_pos = self.nodepos[commit.parent_sha1[0]]
- except KeyError:
- self.colours[commit.parent_sha1[0]] = colour
- self.nodepos[commit.parent_sha1[0]] = node_pos
-
- for sha1 in self.incomplete_line.keys():
- if (sha1 != commit.commit_sha1):
- self.draw_incomplete_line(sha1, node_pos,
- out_line, in_line, index)
- else:
- del self.incomplete_line[sha1]
-
-
- for parent_id in commit.parent_sha1:
- try:
- tmp_node_pos = self.nodepos[parent_id]
- except KeyError:
- self.colours[parent_id] = last_colour+1
- last_colour = self.colours[parent_id]
- self.nodepos[parent_id] = last_nodepos+1
- last_nodepos = self.nodepos[parent_id]
-
- in_line.append((node_pos, self.nodepos[parent_id],
- self.colours[parent_id]))
- self.add_incomplete_line(parent_id)
-
- try:
- branch_tag = self.bt_sha1[commit.commit_sha1]
- except KeyError:
- branch_tag = [ ]
-
-
- node = (node_pos, colour, branch_tag)
-
- self.model.append([commit, node, out_line, in_line,
- commit.message, commit.author, commit.date])
-
- return (in_line, last_colour, last_nodepos)
-
- def add_incomplete_line(self, sha1):
- try:
- self.incomplete_line[sha1].append(self.nodepos[sha1])
- except KeyError:
- self.incomplete_line[sha1] = [self.nodepos[sha1]]
-
- def draw_incomplete_line(self, sha1, node_pos, out_line, in_line, index):
- for idx, pos in enumerate(self.incomplete_line[sha1]):
- if(pos == node_pos):
- #remove the straight line and add a slash
- if ((pos, pos, self.colours[sha1]) in out_line):
- out_line.remove((pos, pos, self.colours[sha1]))
- out_line.append((pos, pos+0.5, self.colours[sha1]))
- self.incomplete_line[sha1][idx] = pos = pos+0.5
- try:
- next_commit = self.commits[index+1]
- if (next_commit.commit_sha1 == sha1 and pos != int(pos)):
- # join the line back to the node point
- # This need to be done only if we modified it
- in_line.append((pos, pos-0.5, self.colours[sha1]))
- continue;
- except IndexError:
- pass
- in_line.append((pos, pos, self.colours[sha1]))
-
-
- def _go_clicked_cb(self, widget, revid):
- """Callback for when the go button for a parent is clicked."""
- try:
- self.treeview.set_cursor(self.index[revid])
- except KeyError:
- dialog = gtk.MessageDialog(parent=None, flags=0,
- type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_CLOSE,
- message_format=None)
- dialog.set_markup("Revision <b>%s</b> not present in the list" % revid)
- # revid == 0 is the parent of the first commit
- if (revid != 0 ):
- dialog.format_secondary_text("Try running gitview without any options")
- dialog.run()
- dialog.destroy()
-
- self.treeview.grab_focus()
-
- def _show_clicked_cb(self, widget, commit_sha1, parent_sha1, encoding):
- """Callback for when the show button for a parent is clicked."""
- window = DiffWindow()
- window.set_diff(commit_sha1, parent_sha1, encoding)
- self.treeview.grab_focus()
-
-without_diff = 0
-if __name__ == "__main__":
-
- if (len(sys.argv) > 1 ):
- if (sys.argv[1] == "--without-diff"):
- without_diff = 1
-
- view = GitView( without_diff != 1)
- view.run(sys.argv[without_diff:])
+++ /dev/null
-gitview(1)
-==========
-
-NAME
-----
-gitview - A GTK based repository browser for git
-
-SYNOPSIS
---------
-[verse]
-'gitview' [options] [args]
-
-DESCRIPTION
----------
-
-Dependencies:
-
-* Python 2.4
-* PyGTK 2.8 or later
-* PyCairo 1.0 or later
-
-OPTIONS
--------
---without-diff::
-
- If the user doesn't want to list the commit diffs in the main window.
- This may speed up the repository browsing.
-
-<args>::
-
- All the valid option for linkgit:git-rev-list[1].
-
-Key Bindings
-------------
-F4::
- To maximize the window
-
-F5::
- To reread references.
-
-F11::
- Full screen
-
-F12::
- Leave full screen
-
-EXAMPLES
---------
-
-gitview v2.6.12.. include/scsi drivers/scsi::
-
- Show as the changes since version v2.6.12 that changed any file in the
- include/scsi or drivers/scsi subdirectories
-
-gitview --since=2.weeks.ago::
-
- Show the changes during the last two weeks
packet_flush();
while (1) {
- my ($command) = packet_txt_read() =~ /^command=([^=]+)$/;
- my ($pathname) = packet_txt_read() =~ /^pathname=([^=]+)$/;
+ my ($command) = packet_txt_read() =~ /^command=(.+)$/;
+ my ($pathname) = packet_txt_read() =~ /^pathname=(.+)$/;
+
+ if ( $pathname eq "" ) {
+ die "bad pathname '$pathname'";
+ }
packet_bin_read();
--- /dev/null
+uniset/
+UnicodeData.txt
+EastAsianWidth.txt
--- /dev/null
+TL;DR: Run update_unicode.sh after the publication of a new Unicode
+standard and commit the resulting unicode_widths.h file.
+
+The long version
+================
+
+The Git source code ships the file unicode_widths.h which contains
+tables of zero and double width Unicode code points, respectively.
+These tables are generated using update_unicode.sh in this directory.
+update_unicode.sh itself uses a third-party tool, uniset, to query two
+Unicode data files for the interesting code points.
+
+On first run, update_unicode.sh clones uniset from Github and builds it.
+This requires a current-ish version of autoconf (2.69 works per December
+2016).
+
+On each run, update_unicode.sh checks whether more recent Unicode data
+files are available from the Unicode consortium, and rebuilds the header
+unicode_widths.h with the new data. The new header can then be
+committed.
--- /dev/null
+#!/bin/sh
+#See http://www.unicode.org/reports/tr44/
+#
+#Me Enclosing_Mark an enclosing combining mark
+#Mn Nonspacing_Mark a nonspacing combining mark (zero advance width)
+#Cf Format a format control character
+#
+cd "$(dirname "$0")"
+UNICODEWIDTH_H=$(git rev-parse --show-toplevel)/unicode_width.h
+
+wget -N http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt \
+ http://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt &&
+if ! test -d uniset; then
+ git clone https://github.com/depp/uniset.git &&
+ ( cd uniset && git checkout 4b186196dd )
+fi &&
+(
+ cd uniset &&
+ if ! test -x uniset; then
+ autoreconf -i &&
+ ./configure --enable-warnings=-Werror CFLAGS='-O0 -ggdb'
+ fi &&
+ make
+) &&
+UNICODE_DIR=. && export UNICODE_DIR &&
+cat >$UNICODEWIDTH_H <<-EOF
+static const struct interval zero_width[] = {
+ $(uniset/uniset --32 cat:Me,Mn,Cf + U+1160..U+11FF - U+00AD)
+};
+static const struct interval double_width[] = {
+ $(uniset/uniset --32 eaw:F,W)
+};
+EOF
if (convert_is_binary(len, &stats))
return 0;
/*
- * If the file in the index has any CR in it, do not convert.
- * This is the new safer autocrlf handling.
+ * If the file in the index has any CR in it, do not
+ * convert. This is the new safer autocrlf handling,
+ * unless we want to renormalize in a merge or
+ * cherry-pick.
*/
- if (checksafe == SAFE_CRLF_RENORMALIZE)
- checksafe = SAFE_CRLF_FALSE;
- else if (has_cr_in_index(path))
+ if ((checksafe != SAFE_CRLF_RENORMALIZE) && has_cr_in_index(path))
convert_crlf_into_lf = 0;
}
- if (checksafe && len) {
+ if ((checksafe == SAFE_CRLF_WARN ||
+ (checksafe == SAFE_CRLF_FAIL)) && len) {
struct text_stat new_stats;
memcpy(&new_stats, &stats, sizeof(new_stats));
/* simulate "git add" */
static int diff_detect_rename_default;
static int diff_indent_heuristic; /* experimental */
-static int diff_compaction_heuristic; /* experimental */
static int diff_rename_limit_default = 400;
static int diff_suppress_blank_empty;
static int diff_use_color_default = -1;
static int diff_context_default = 3;
+static int diff_interhunk_context_default;
static const char *diff_word_regex_cfg;
static const char *external_diff_cmd_cfg;
static const char *diff_order_file_cfg;
int git_diff_heuristic_config(const char *var, const char *value, void *cb)
{
- if (!strcmp(var, "diff.indentheuristic")) {
+ if (!strcmp(var, "diff.indentheuristic"))
diff_indent_heuristic = git_config_bool(var, value);
- if (diff_indent_heuristic)
- diff_compaction_heuristic = 0;
- }
- if (!strcmp(var, "diff.compactionheuristic")) {
- diff_compaction_heuristic = git_config_bool(var, value);
- if (diff_compaction_heuristic)
- diff_indent_heuristic = 0;
- }
return 0;
}
return -1;
return 0;
}
+ if (!strcmp(var, "diff.interhunkcontext")) {
+ diff_interhunk_context_default = git_config_int(var, value);
+ if (diff_interhunk_context_default < 0)
+ return -1;
+ return 0;
+ }
if (!strcmp(var, "diff.renames")) {
diff_detect_rename_default = git_config_rename(var, value);
return 0;
if (!one->oid_valid)
sha1_to_hex_r(temp->hex, null_sha1);
else
- sha1_to_hex_r(temp->hex, one->oid.hash);
+ oid_to_hex_r(temp->hex, &one->oid);
/* Even though we may sometimes borrow the
* contents from the work tree, we always want
* one->mode. mode is trustworthy even when
abbrev = FALLBACK_DEFAULT_ABBREV;
if (abbrev > GIT_SHA1_HEXSZ)
die("BUG: oid abbreviation out of range: %d", abbrev);
- hex[abbrev] = '\0';
+ if (abbrev)
+ hex[abbrev] = '\0';
return hex;
}
}
options->file = stdout;
+ options->abbrev = DEFAULT_ABBREV;
options->line_termination = '\n';
options->break_opt = -1;
options->rename_limit = -1;
options->dirstat_permille = diff_dirstat_permille_default;
options->context = diff_context_default;
+ options->interhunkcontext = diff_interhunk_context_default;
options->ws_error_highlight = ws_error_highlight_default;
DIFF_OPT_SET(options, RENAME_EMPTY);
options->xdl_opts |= diff_algorithm;
if (diff_indent_heuristic)
DIFF_XDL_SET(options, INDENT_HEURISTIC);
- else if (diff_compaction_heuristic)
- DIFF_XDL_SET(options, COMPACTION_HEURISTIC);
options->orderfile = diff_order_file_cfg;
DIFF_XDL_SET(options, IGNORE_WHITESPACE_AT_EOL);
else if (!strcmp(arg, "--ignore-blank-lines"))
DIFF_XDL_SET(options, IGNORE_BLANK_LINES);
- else if (!strcmp(arg, "--indent-heuristic")) {
+ else if (!strcmp(arg, "--indent-heuristic"))
DIFF_XDL_SET(options, INDENT_HEURISTIC);
- DIFF_XDL_CLR(options, COMPACTION_HEURISTIC);
- } else if (!strcmp(arg, "--no-indent-heuristic"))
- DIFF_XDL_CLR(options, INDENT_HEURISTIC);
- else if (!strcmp(arg, "--compaction-heuristic")) {
- DIFF_XDL_SET(options, COMPACTION_HEURISTIC);
+ else if (!strcmp(arg, "--no-indent-heuristic"))
DIFF_XDL_CLR(options, INDENT_HEURISTIC);
- } else if (!strcmp(arg, "--no-compaction-heuristic"))
- DIFF_XDL_CLR(options, COMPACTION_HEURISTIC);
else if (!strcmp(arg, "--patience"))
options->xdl_opts = DIFF_WITH_ALG(options, PATIENCE_DIFF);
else if (!strcmp(arg, "--histogram"))
offending, optarg);
return argcount;
}
+ else if (!strcmp(arg, "--no-abbrev"))
+ options->abbrev = 0;
else if (!strcmp(arg, "--abbrev"))
options->abbrev = DEFAULT_ABBREV;
else if (skip_prefix(arg, "--abbrev=", &arg)) {
#include "varint.h"
#include "ewah/ewok.h"
-struct path_simplify {
- int len;
- const char *path;
-};
-
/*
* Tells read_directory_recursive how a file or directory should be treated.
* Values are ordered by significance, e.g. if a directory contains both
static enum path_treatment read_directory_recursive(struct dir_struct *dir,
const char *path, int len, struct untracked_cache_dir *untracked,
- int check_only, const struct path_simplify *simplify);
+ int check_only, const struct pathspec *pathspec);
static int get_dtype(struct dirent *de, const char *path, int len);
int fspathcmp(const char *a, const char *b)
int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec)
{
- size_t len;
+ char *prefix;
+ size_t prefix_len;
/*
* Calculate common prefix for the pathspec, and
* use that to optimize the directory walk
*/
- len = common_prefix_len(pathspec);
+ prefix = common_prefix(pathspec);
+ prefix_len = prefix ? strlen(prefix) : 0;
/* Read the directory and prune it */
- read_directory(dir, pathspec->nr ? pathspec->_raw[0] : "", len, pathspec);
- return len;
+ read_directory(dir, prefix, prefix_len, pathspec);
+
+ free(prefix);
+ return prefix_len;
}
int within_depth(const char *name, int namelen,
static enum path_treatment treat_directory(struct dir_struct *dir,
struct untracked_cache_dir *untracked,
const char *dirname, int len, int baselen, int exclude,
- const struct path_simplify *simplify)
+ const struct pathspec *pathspec)
{
/* The "len-1" is to strip the final '/' */
switch (directory_exists_in_index(dirname, len-1)) {
untracked = lookup_untracked(dir->untracked, untracked,
dirname + baselen, len - baselen);
return read_directory_recursive(dir, dirname, len,
- untracked, 1, simplify);
+ untracked, 1, pathspec);
}
/*
* reading - if the path cannot possibly be in the pathspec,
* return true, and we'll skip it early.
*/
-static int simplify_away(const char *path, int pathlen, const struct path_simplify *simplify)
+static int simplify_away(const char *path, int pathlen,
+ const struct pathspec *pathspec)
{
- if (simplify) {
- for (;;) {
- const char *match = simplify->path;
- int len = simplify->len;
+ int i;
- if (!match)
- break;
- if (len > pathlen)
- len = pathlen;
- if (!memcmp(path, match, len))
- return 0;
- simplify++;
- }
- return 1;
+ if (!pathspec || !pathspec->nr)
+ return 0;
+
+ GUARD_PATHSPEC(pathspec,
+ PATHSPEC_FROMTOP |
+ PATHSPEC_MAXDEPTH |
+ PATHSPEC_LITERAL |
+ PATHSPEC_GLOB |
+ PATHSPEC_ICASE |
+ PATHSPEC_EXCLUDE);
+
+ for (i = 0; i < pathspec->nr; i++) {
+ const struct pathspec_item *item = &pathspec->items[i];
+ int len = item->nowildcard_len;
+
+ if (len > pathlen)
+ len = pathlen;
+ if (!ps_strncmp(item, item->match, path, len))
+ return 0;
}
- return 0;
+
+ return 1;
}
/*
* 2. the path is a directory prefix of some element in the
* pathspec
*/
-static int exclude_matches_pathspec(const char *path, int len,
- const struct path_simplify *simplify)
-{
- if (simplify) {
- for (; simplify->path; simplify++) {
- if (len == simplify->len
- && !memcmp(path, simplify->path, len))
- return 1;
- if (len < simplify->len
- && simplify->path[len] == '/'
- && !memcmp(path, simplify->path, len))
- return 1;
- }
+static int exclude_matches_pathspec(const char *path, int pathlen,
+ const struct pathspec *pathspec)
+{
+ int i;
+
+ if (!pathspec || !pathspec->nr)
+ return 0;
+
+ GUARD_PATHSPEC(pathspec,
+ PATHSPEC_FROMTOP |
+ PATHSPEC_MAXDEPTH |
+ PATHSPEC_LITERAL |
+ PATHSPEC_GLOB |
+ PATHSPEC_ICASE |
+ PATHSPEC_EXCLUDE);
+
+ for (i = 0; i < pathspec->nr; i++) {
+ const struct pathspec_item *item = &pathspec->items[i];
+ int len = item->nowildcard_len;
+
+ if (len == pathlen &&
+ !ps_strncmp(item, item->match, path, pathlen))
+ return 1;
+ if (len > pathlen &&
+ item->match[pathlen] == '/' &&
+ !ps_strncmp(item, item->match, path, pathlen))
+ return 1;
}
return 0;
}
struct untracked_cache_dir *untracked,
struct strbuf *path,
int baselen,
- const struct path_simplify *simplify,
+ const struct pathspec *pathspec,
int dtype, struct dirent *de)
{
int exclude;
case DT_DIR:
strbuf_addch(path, '/');
return treat_directory(dir, untracked, path->buf, path->len,
- baselen, exclude, simplify);
+ baselen, exclude, pathspec);
case DT_REG:
case DT_LNK:
return exclude ? path_excluded : path_untracked;
struct cached_dir *cdir,
struct strbuf *path,
int baselen,
- const struct path_simplify *simplify)
+ const struct pathspec *pathspec)
{
strbuf_setlen(path, baselen);
if (!cdir->ucd) {
* with check_only set.
*/
return read_directory_recursive(dir, path->buf, path->len,
- cdir->ucd, 1, simplify);
+ cdir->ucd, 1, pathspec);
/*
* We get path_recurse in the first run when
* directory_exists_in_index() returns index_nonexistent. We
struct cached_dir *cdir,
struct strbuf *path,
int baselen,
- const struct path_simplify *simplify)
+ const struct pathspec *pathspec)
{
int dtype;
struct dirent *de = cdir->de;
if (!de)
return treat_path_fast(dir, untracked, cdir, path,
- baselen, simplify);
+ baselen, pathspec);
if (is_dot_or_dotdot(de->d_name) || !strcmp(de->d_name, ".git"))
return path_none;
strbuf_setlen(path, baselen);
strbuf_addstr(path, de->d_name);
- if (simplify_away(path->buf, path->len, simplify))
+ if (simplify_away(path->buf, path->len, pathspec))
return path_none;
dtype = DTYPE(de);
- return treat_one_path(dir, untracked, path, baselen, simplify, dtype, de);
+ return treat_one_path(dir, untracked, path, baselen, pathspec, dtype, de);
}
static void add_untracked(struct untracked_cache_dir *dir, const char *name)
static enum path_treatment read_directory_recursive(struct dir_struct *dir,
const char *base, int baselen,
struct untracked_cache_dir *untracked, int check_only,
- const struct path_simplify *simplify)
+ const struct pathspec *pathspec)
{
struct cached_dir cdir;
enum path_treatment state, subdir_state, dir_state = path_none;
while (!read_cached_dir(&cdir)) {
/* check how the file or directory should be treated */
- state = treat_path(dir, untracked, &cdir, &path, baselen, simplify);
+ state = treat_path(dir, untracked, &cdir, &path,
+ baselen, pathspec);
if (state > dir_state)
dir_state = state;
path.buf + baselen,
path.len - baselen);
subdir_state =
- read_directory_recursive(dir, path.buf, path.len,
- ud, check_only, simplify);
+ read_directory_recursive(dir, path.buf,
+ path.len, ud,
+ check_only, pathspec);
if (subdir_state > dir_state)
dir_state = subdir_state;
}
else if ((dir->flags & DIR_SHOW_IGNORED_TOO) ||
((dir->flags & DIR_COLLECT_IGNORED) &&
exclude_matches_pathspec(path.buf, path.len,
- simplify)))
+ pathspec)))
dir_add_ignored(dir, path.buf, path.len);
break;
return name_compare(e1->name, e1->len, e2->name, e2->len);
}
-static struct path_simplify *create_simplify(const char **pathspec)
-{
- int nr, alloc = 0;
- struct path_simplify *simplify = NULL;
-
- if (!pathspec)
- return NULL;
-
- for (nr = 0 ; ; nr++) {
- const char *match;
- ALLOC_GROW(simplify, nr + 1, alloc);
- match = *pathspec++;
- if (!match)
- break;
- simplify[nr].path = match;
- simplify[nr].len = simple_length(match);
- }
- simplify[nr].path = NULL;
- simplify[nr].len = 0;
- return simplify;
-}
-
-static void free_simplify(struct path_simplify *simplify)
-{
- free(simplify);
-}
-
static int treat_leading_path(struct dir_struct *dir,
const char *path, int len,
- const struct path_simplify *simplify)
+ const struct pathspec *pathspec)
{
struct strbuf sb = STRBUF_INIT;
int baselen, rc = 0;
strbuf_add(&sb, path, baselen);
if (!is_directory(sb.buf))
break;
- if (simplify_away(sb.buf, sb.len, simplify))
+ if (simplify_away(sb.buf, sb.len, pathspec))
break;
- if (treat_one_path(dir, NULL, &sb, baselen, simplify,
+ if (treat_one_path(dir, NULL, &sb, baselen, pathspec,
DT_DIR, NULL) == path_none)
break; /* do not recurse into it */
if (len <= baselen) {
return root;
}
-int read_directory(struct dir_struct *dir, const char *path, int len, const struct pathspec *pathspec)
+int read_directory(struct dir_struct *dir, const char *path,
+ int len, const struct pathspec *pathspec)
{
- struct path_simplify *simplify;
struct untracked_cache_dir *untracked;
- /*
- * Check out create_simplify()
- */
- if (pathspec)
- GUARD_PATHSPEC(pathspec,
- PATHSPEC_FROMTOP |
- PATHSPEC_MAXDEPTH |
- PATHSPEC_LITERAL |
- PATHSPEC_GLOB |
- PATHSPEC_ICASE |
- PATHSPEC_EXCLUDE);
-
if (has_symlink_leading_path(path, len))
return dir->nr;
- /*
- * exclude patterns are treated like positive ones in
- * create_simplify. Usually exclude patterns should be a
- * subset of positive ones, which has no impacts on
- * create_simplify().
- */
- simplify = create_simplify(pathspec ? pathspec->_raw : NULL);
untracked = validate_untracked_cache(dir, len, pathspec);
if (!untracked)
/*
* e.g. prep_exclude()
*/
dir->untracked = NULL;
- if (!len || treat_leading_path(dir, path, len, simplify))
- read_directory_recursive(dir, path, len, untracked, 0, simplify);
- free_simplify(simplify);
+ if (!len || treat_leading_path(dir, path, len, pathspec))
+ read_directory_recursive(dir, path, len, untracked, 0, pathspec);
QSORT(dir->entries, dir->nr, cmp_name);
QSORT(dir->ignored, dir->ignored_nr, cmp_name);
if (dir->untracked) {
{
untracked_cache_invalidate_path(istate, path);
}
+
+/* Update gitfile and core.worktree setting to connect work tree and git dir */
+void connect_work_tree_and_git_dir(const char *work_tree_, const char *git_dir_)
+{
+ struct strbuf file_name = STRBUF_INIT;
+ struct strbuf rel_path = STRBUF_INIT;
+ char *git_dir = real_pathdup(git_dir_);
+ char *work_tree = real_pathdup(work_tree_);
+
+ /* Update gitfile */
+ strbuf_addf(&file_name, "%s/.git", work_tree);
+ write_file(file_name.buf, "gitdir: %s",
+ relative_path(git_dir, work_tree, &rel_path));
+
+ /* Update core.worktree setting */
+ strbuf_reset(&file_name);
+ strbuf_addf(&file_name, "%s/config", git_dir);
+ git_config_set_in_file(file_name.buf, "core.worktree",
+ relative_path(work_tree, git_dir, &rel_path));
+
+ strbuf_release(&file_name);
+ strbuf_release(&rel_path);
+ free(work_tree);
+ free(git_dir);
+}
+
+/*
+ * Migrate the git directory of the given path from old_git_dir to new_git_dir.
+ */
+void relocate_gitdir(const char *path, const char *old_git_dir, const char *new_git_dir)
+{
+ if (rename(old_git_dir, new_git_dir) < 0)
+ die_errno(_("could not migrate git directory from '%s' to '%s'"),
+ old_git_dir, new_git_dir);
+
+ connect_work_tree_and_git_dir(path, new_git_dir);
+}
void write_untracked_extension(struct strbuf *out, struct untracked_cache *untracked);
void add_untracked_cache(struct index_state *istate);
void remove_untracked_cache(struct index_state *istate);
+extern void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir);
+extern void relocate_gitdir(const char *path,
+ const char *old_git_dir,
+ const char *new_git_dir);
#endif
int assume_unchanged;
int prefer_symlink_refs;
int is_bare_repository_cfg = -1; /* unspecified */
-int log_all_ref_updates = -1; /* unspecified */
int warn_ambiguous_refs = 1;
int warn_on_object_refname_ambiguity = 1;
int ref_paranoia = -1;
const char *git_hooks_path;
int zlib_compression_level = Z_BEST_SPEED;
int core_compression_level;
-int core_compression_seen;
+int pack_compression_level = Z_DEFAULT_COMPRESSION;
int fsync_object_files;
size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
unsigned long pack_size_limit_cfg;
enum hide_dotfiles_type hide_dotfiles = HIDE_DOTFILES_DOTGITONLY;
+enum log_refs_config log_all_ref_updates = LOG_REFS_UNSET;
#ifndef PROTECT_HFS_DEFAULT
#define PROTECT_HFS_DEFAULT 0
return;
}
git_work_tree_initialized = 1;
- work_tree = xstrdup(real_path(new_work_tree));
+ work_tree = real_pathdup(new_work_tree);
}
const char *get_git_work_tree(void)
return strbuf_detach(&d, NULL);
}
-const char *git_extract_argv0_path(const char *argv0)
+void git_extract_argv0_path(const char *argv0)
{
const char *slash;
if (!argv0 || !*argv0)
- return NULL;
+ return;
slash = find_last_dir_sep(argv0);
- if (slash) {
+ if (slash)
argv0_path = xstrndup(argv0, slash - argv0);
- return slash + 1;
- }
-
- return argv0;
}
void git_set_argv_exec_path(const char *exec_path)
/* Returns the highest-priority, location to look for git programs. */
const char *git_exec_path(void)
{
- const char *env;
+ static char *cached_exec_path;
if (argv_exec_path)
return argv_exec_path;
- env = getenv(EXEC_PATH_ENVIRONMENT);
- if (env && *env) {
- return env;
+ if (!cached_exec_path) {
+ const char *env = getenv(EXEC_PATH_ENVIRONMENT);
+ if (env && *env)
+ cached_exec_path = xstrdup(env);
+ else
+ cached_exec_path = system_path(GIT_EXEC_PATH);
}
-
- return system_path(GIT_EXEC_PATH);
+ return cached_exec_path;
}
static void add_path(struct strbuf *out, const char *path)
struct argv_array;
extern void git_set_argv_exec_path(const char *exec_path);
-extern const char *git_extract_argv0_path(const char *path);
+extern void git_extract_argv0_path(const char *path);
extern const char *git_exec_path(void);
extern void setup_path(void);
extern const char **prepare_git_cmd(struct argv_array *out, const char **argv);
static off_t max_packsize;
static int unpack_limit = 100;
static int force_update;
-static int pack_compression_level = Z_DEFAULT_COMPRESSION;
-static int pack_compression_seen;
/* Stats and misc. counters */
static uintmax_t alloc_count;
char *fullpath, unsigned int fullpath_len,
unsigned char fanout)
{
- struct tree_content *t = root->tree;
+ struct tree_content *t;
struct tree_entry *e, leaf;
unsigned int i, tmp_hex_sha1_len, tmp_fullpath_len;
uintmax_t num_notes = 0;
unsigned char sha1[20];
char realpath[60];
+ if (!root->tree)
+ load_tree(root);
+ t = root->tree;
+
for (i = 0; t && i < t->entry_count; i++) {
e = t->entries[i];
tmp_hex_sha1_len = hex_sha1_len + e->name->str_len;
leaf.tree);
} else if (S_ISDIR(e->versions[1].mode)) {
/* This is a subdir that may contain note entries */
- if (!e->tree)
- load_tree(e);
num_notes += do_change_note_fanout(orig_root, e,
hex_sha1, tmp_hex_sha1_len,
fullpath, tmp_fullpath_len, fanout);
if (max_depth > MAX_DEPTH)
max_depth = MAX_DEPTH;
}
- if (!git_config_get_int("pack.compression", &pack_compression_level)) {
- if (pack_compression_level == -1)
- pack_compression_level = Z_DEFAULT_COMPRESSION;
- else if (pack_compression_level < 0 ||
- pack_compression_level > Z_BEST_COMPRESSION)
- git_die_config("pack.compression",
- "bad pack compression level %d", pack_compression_level);
- pack_compression_seen = 1;
- }
if (!git_config_get_int("pack.indexversion", &indexversion_value)) {
pack_idx_opts.version = indexversion_value;
if (pack_idx_opts.version > 2)
setup_git_directory();
reset_pack_idx_option(&pack_idx_opts);
git_pack_config();
- if (!pack_compression_seen && core_compression_seen)
- pack_compression_level = core_compression_level;
alloc_objects(object_entry_alloc);
strbuf_init(&command_buf, 0);
{
if (!obj)
return -1;
+
+ if (obj->type == OBJ_NONE)
+ parse_object(obj->oid.hash);
+
switch (obj->type) {
case OBJ_BLOB:
return 0;
use strict;
use warnings;
use Git;
+use Git::I18N;
binmode(STDOUT, ":raw");
my $diff_algorithm = $repo->config('diff.algorithm');
my $diff_indent_heuristic = $repo->config_bool('diff.indentheuristic');
-my $diff_compaction_heuristic = $repo->config_bool('diff.compactionheuristic');
my $diff_filter = $repo->config('interactive.difffilter');
my $use_readkey = 0;
}
# command line options
+my $cmd;
my $patch_mode;
my $patch_mode_revision;
DIFF => 'diff-files -p',
APPLY => sub { apply_patch 'apply --cached', @_; },
APPLY_CHECK => 'apply --cached',
- VERB => 'Stage',
- TARGET => '',
- PARTICIPLE => 'staging',
FILTER => 'file-only',
IS_REVERSE => 0,
},
DIFF => 'diff-index -p HEAD',
APPLY => sub { apply_patch 'apply --cached', @_; },
APPLY_CHECK => 'apply --cached',
- VERB => 'Stash',
- TARGET => '',
- PARTICIPLE => 'stashing',
FILTER => undef,
IS_REVERSE => 0,
},
DIFF => 'diff-index -p --cached',
APPLY => sub { apply_patch 'apply -R --cached', @_; },
APPLY_CHECK => 'apply -R --cached',
- VERB => 'Unstage',
- TARGET => '',
- PARTICIPLE => 'unstaging',
FILTER => 'index-only',
IS_REVERSE => 1,
},
DIFF => 'diff-index -R -p --cached',
APPLY => sub { apply_patch 'apply --cached', @_; },
APPLY_CHECK => 'apply --cached',
- VERB => 'Apply',
- TARGET => ' to index',
- PARTICIPLE => 'applying',
FILTER => 'index-only',
IS_REVERSE => 0,
},
DIFF => 'diff-files -p',
APPLY => sub { apply_patch 'apply -R', @_; },
APPLY_CHECK => 'apply -R',
- VERB => 'Discard',
- TARGET => ' from worktree',
- PARTICIPLE => 'discarding',
FILTER => 'file-only',
IS_REVERSE => 1,
},
DIFF => 'diff-index -p',
APPLY => sub { apply_patch_for_checkout_commit '-R', @_ },
APPLY_CHECK => 'apply -R',
- VERB => 'Discard',
- TARGET => ' from index and worktree',
- PARTICIPLE => 'discarding',
FILTER => undef,
IS_REVERSE => 1,
},
DIFF => 'diff-index -R -p',
APPLY => sub { apply_patch_for_checkout_commit '', @_ },
APPLY_CHECK => 'apply',
- VERB => 'Apply',
- TARGET => ' to index and worktree',
- PARTICIPLE => 'applying',
FILTER => undef,
IS_REVERSE => 0,
},
);
-my %patch_mode_flavour = %{$patch_modes{stage}};
+$patch_mode = 'stage';
+my %patch_mode_flavour = %{$patch_modes{$patch_mode}};
sub run_cmd_pipe {
if ($^O eq 'MSWin32') {
run_cmd_pipe(qw(git ls-files --others --exclude-standard --), @ARGV);
}
-my $status_fmt = '%12s %12s %s';
-my $status_head = sprintf($status_fmt, 'staged', 'unstaged', 'path');
+# TRANSLATORS: you can adjust this to align "git add -i" status menu
+my $status_fmt = __('%12s %12s %s');
+my $status_head = sprintf($status_fmt, __('staged'), __('unstaged'), __('path'));
{
my $initial;
my ($change, $bin);
$file = unquote_path($file);
if ($add eq '-' && $del eq '-') {
- $change = 'binary';
+ $change = __('binary');
$bin = 1;
}
else {
$data{$file} = {
INDEX => $change,
BINARY => $bin,
- FILE => 'nothing',
+ FILE => __('nothing'),
}
}
elsif (($adddel, $file) =
$file = unquote_path($file);
my ($change, $bin);
if ($add eq '-' && $del eq '-') {
- $change = 'binary';
+ $change = __('binary');
$bin = 1;
}
else {
$file = unquote_path($2);
if (!exists $data{$file}) {
$data{$file} = +{
- INDEX => 'unchanged',
+ INDEX => __('unchanged'),
BINARY => 0,
};
}
if ($only) {
if ($only eq 'index-only') {
- next if ($it->{INDEX} eq 'unchanged');
+ next if ($it->{INDEX} eq __('unchanged'));
}
if ($only eq 'file-only') {
- next if ($it->{FILE} eq 'nothing');
+ next if ($it->{FILE} eq __('nothing'));
}
}
push @return, +{
else {
$bottom = $top = find_unique($choice, @stuff);
if (!defined $bottom) {
- error_msg "Huh ($choice)?\n";
+ error_msg sprintf(__("Huh (%s)?\n"), $choice);
next TOPLOOP;
}
}
if ($opts->{SINGLETON} && $bottom != $top) {
- error_msg "Huh ($choice)?\n";
+ error_msg sprintf(__("Huh (%s)?\n"), $choice);
next TOPLOOP;
}
for ($i = $bottom-1; $i <= $top-1; $i++) {
}
sub singleton_prompt_help_cmd {
- print colored $help_color, <<\EOF ;
+ print colored $help_color, __ <<'EOF' ;
Prompt help:
1 - select a numbered item
foo - select item based on unique prefix
}
sub prompt_help_cmd {
- print colored $help_color, <<\EOF ;
+ print colored $help_color, __ <<'EOF' ;
Prompt help:
1 - select a single item
3-5 - select a range of items
sub say_n_paths {
my $did = shift @_;
my $cnt = scalar @_;
- print "$did ";
- if (1 < $cnt) {
- print "$cnt paths\n";
- }
- else {
- print "one path\n";
+ if ($did eq 'added') {
+ printf(__n("added %d path\n", "added %d paths\n",
+ $cnt), $cnt);
+ } elsif ($did eq 'updated') {
+ printf(__n("updated %d path\n", "updated %d paths\n",
+ $cnt), $cnt);
+ } elsif ($did eq 'reverted') {
+ printf(__n("reverted %d path\n", "reverted %d paths\n",
+ $cnt), $cnt);
+ } else {
+ printf(__n("touched %d path\n", "touched %d paths\n",
+ $cnt), $cnt);
}
}
my @mods = list_modified('file-only');
return if (!@mods);
- my @update = list_and_choose({ PROMPT => 'Update',
+ my @update = list_and_choose({ PROMPT => __('Update'),
HEADER => $status_head, },
@mods);
if (@update) {
}
sub revert_cmd {
- my @update = list_and_choose({ PROMPT => 'Revert',
+ my @update = list_and_choose({ PROMPT => __('Revert'),
HEADER => $status_head, },
list_modified());
if (@update) {
$_->{INDEX_ADDDEL} eq 'create') {
system(qw(git update-index --force-remove --),
$_->{VALUE});
- print "note: $_->{VALUE} is untracked now.\n";
+ printf(__("note: %s is untracked now.\n"), $_->{VALUE});
}
}
}
}
sub add_untracked_cmd {
- my @add = list_and_choose({ PROMPT => 'Add untracked' },
+ my @add = list_and_choose({ PROMPT => __('Add untracked') },
list_untracked());
if (@add) {
system(qw(git update-index --add --), @add);
say_n_paths('added', @add);
} else {
- print "No untracked files.\n";
+ print __("No untracked files.\n");
}
print "\n";
}
}
if ($diff_indent_heuristic) {
splice @diff_cmd, 1, 0, "--indent-heuristic";
- } elsif ($diff_compaction_heuristic) {
- splice @diff_cmd, 1, 0, "--compaction-heuristic";
}
if (defined $patch_mode_revision) {
push @diff_cmd, get_diff_reference($patch_mode_revision);
} @_;
}
+my %edit_hunk_manually_modes = (
+ stage => N__(
+"If the patch applies cleanly, the edited hunk will immediately be
+marked for staging."),
+ stash => N__(
+"If the patch applies cleanly, the edited hunk will immediately be
+marked for stashing."),
+ reset_head => N__(
+"If the patch applies cleanly, the edited hunk will immediately be
+marked for unstaging."),
+ reset_nothead => N__(
+"If the patch applies cleanly, the edited hunk will immediately be
+marked for applying."),
+ checkout_index => N__(
+"If the patch applies cleanly, the edited hunk will immediately be
+marked for discarding"),
+ checkout_head => N__(
+"If the patch applies cleanly, the edited hunk will immediately be
+marked for discarding."),
+ checkout_nothead => N__(
+"If the patch applies cleanly, the edited hunk will immediately be
+marked for applying."),
+);
+
sub edit_hunk_manually {
my ($oldtext) = @_;
my $hunkfile = $repo->repo_path . "/addp-hunk-edit.diff";
my $fh;
open $fh, '>', $hunkfile
- or die "failed to open hunk edit file for writing: " . $!;
- print $fh "# Manual hunk edit mode -- see bottom for a quick guide\n";
+ or die sprintf(__("failed to open hunk edit file for writing: %s"), $!);
+ print $fh Git::comment_lines __("Manual hunk edit mode -- see bottom for a quick guide.\n");
print $fh @$oldtext;
- my $participle = $patch_mode_flavour{PARTICIPLE};
my $is_reverse = $patch_mode_flavour{IS_REVERSE};
my ($remove_plus, $remove_minus) = $is_reverse ? ('-', '+') : ('+', '-');
- print $fh <<EOF;
-# ---
-# To remove '$remove_minus' lines, make them ' ' lines (context).
-# To remove '$remove_plus' lines, delete them.
-# Lines starting with # will be removed.
-#
-# If the patch applies cleanly, the edited hunk will immediately be
-# marked for $participle. If it does not apply cleanly, you will be given
-# an opportunity to edit again. If all lines of the hunk are removed,
-# then the edit is aborted and the hunk is left unchanged.
+ my $comment_line_char = Git::get_comment_line_char;
+ print $fh Git::comment_lines sprintf(__ <<EOF, $remove_minus, $remove_plus, $comment_line_char),
+---
+To remove '%s' lines, make them ' ' lines (context).
+To remove '%s' lines, delete them.
+Lines starting with %s will be removed.
EOF
+__($edit_hunk_manually_modes{$patch_mode}),
+# TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
+__ <<EOF2 ;
+If it does not apply cleanly, you will be given an opportunity to
+edit again. If all lines of the hunk are removed, then the edit is
+aborted and the hunk is left unchanged.
+EOF2
close $fh;
chomp(my $editor = run_cmd_pipe(qw(git var GIT_EDITOR)));
}
open $fh, '<', $hunkfile
- or die "failed to open hunk edit file for reading: " . $!;
- my @newtext = grep { !/^#/ } <$fh>;
+ or die sprintf(__("failed to open hunk edit file for reading: %s"), $!);
+ my @newtext = grep { !/^$comment_line_char/ } <$fh>;
close $fh;
unlink $hunkfile;
}
else {
prompt_yesno(
- 'Your edited hunk does not apply. Edit again '
- . '(saying "no" discards!) [y/n]? '
+ # TRANSLATORS: do not translate [y/n]
+ # The program will only accept that input
+ # at this point.
+ # Consider translating (saying "no" discards!) as
+ # (saying "n" for "no" discards!) if the translation
+ # of the word "no" does not start with n.
+ __('Your edited hunk does not apply. Edit again '
+ . '(saying "no" discards!) [y/n]? ')
) or return undef;
}
}
}
+my %help_patch_modes = (
+ stage => N__(
+"y - stage this hunk
+n - do not stage this hunk
+q - quit; do not stage this hunk or any of the remaining ones
+a - stage this hunk and all later hunks in the file
+d - do not stage this hunk or any of the later hunks in the file"),
+ stash => N__(
+"y - stash this hunk
+n - do not stash this hunk
+q - quit; do not stash this hunk or any of the remaining ones
+a - stash this hunk and all later hunks in the file
+d - do not stash this hunk or any of the later hunks in the file"),
+ reset_head => N__(
+"y - unstage this hunk
+n - do not unstage this hunk
+q - quit; do not unstage this hunk or any of the remaining ones
+a - unstage this hunk and all later hunks in the file
+d - do not unstage this hunk or any of the later hunks in the file"),
+ reset_nothead => N__(
+"y - apply this hunk to index
+n - do not apply this hunk to index
+q - quit; do not apply this hunk or any of the remaining ones
+a - apply this hunk and all later hunks in the file
+d - do not apply this hunk or any of the later hunks in the file"),
+ checkout_index => N__(
+"y - discard this hunk from worktree
+n - do not discard this hunk from worktree
+q - quit; do not discard this hunk or any of the remaining ones
+a - discard this hunk and all later hunks in the file
+d - do not discard this hunk or any of the later hunks in the file"),
+ checkout_head => N__(
+"y - discard this hunk from index and worktree
+n - do not discard this hunk from index and worktree
+q - quit; do not discard this hunk or any of the remaining ones
+a - discard this hunk and all later hunks in the file
+d - do not discard this hunk or any of the later hunks in the file"),
+ checkout_nothead => N__(
+"y - apply this hunk to index and worktree
+n - do not apply this hunk to index and worktree
+q - quit; do not apply this hunk or any of the remaining ones
+a - apply this hunk and all later hunks in the file
+d - do not apply this hunk or any of the later hunks in the file"),
+);
+
sub help_patch_cmd {
- my $verb = lc $patch_mode_flavour{VERB};
- my $target = $patch_mode_flavour{TARGET};
- print colored $help_color, <<EOF ;
-y - $verb this hunk$target
-n - do not $verb this hunk$target
-q - quit; do not $verb this hunk or any of the remaining ones
-a - $verb this hunk and all later hunks in the file
-d - do not $verb this hunk or any of the later hunks in the file
+ print colored $help_color, __($help_patch_modes{$patch_mode}), "\n", __ <<EOF ;
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
run_git_apply 'apply '.$reverse, @_;
return 1;
} elsif (!$applies_index) {
- print colored $error_color, "The selected hunks do not apply to the index!\n";
- if (prompt_yesno "Apply them to the worktree anyway? ") {
+ print colored $error_color, __("The selected hunks do not apply to the index!\n");
+ if (prompt_yesno __("Apply them to the worktree anyway? ")) {
return run_git_apply 'apply '.$reverse, @_;
} else {
- print colored $error_color, "Nothing was applied.\n";
+ print colored $error_color, __("Nothing was applied.\n");
return 0;
}
} else {
sub patch_update_cmd {
my @all_mods = list_modified($patch_mode_flavour{FILTER});
- error_msg "ignoring unmerged: $_->{VALUE}\n"
+ error_msg sprintf(__("ignoring unmerged: %s\n"), $_->{VALUE})
for grep { $_->{UNMERGED} } @all_mods;
@all_mods = grep { !$_->{UNMERGED} } @all_mods;
if (!@mods) {
if (@all_mods) {
- print STDERR "Only binary files changed.\n";
+ print STDERR __("Only binary files changed.\n");
} else {
- print STDERR "No changes.\n";
+ print STDERR __("No changes.\n");
}
return 0;
}
@them = @mods;
}
else {
- @them = list_and_choose({ PROMPT => 'Patch update',
+ @them = list_and_choose({ PROMPT => __('Patch update'),
HEADER => $status_head, },
@mods);
}
return $i;
}
+my %patch_update_prompt_modes = (
+ stage => {
+ mode => N__("Stage mode change [y,n,q,a,d,/%s,?]? "),
+ deletion => N__("Stage deletion [y,n,q,a,d,/%s,?]? "),
+ hunk => N__("Stage this hunk [y,n,q,a,d,/%s,?]? "),
+ },
+ stash => {
+ mode => N__("Stash mode change [y,n,q,a,d,/%s,?]? "),
+ deletion => N__("Stash deletion [y,n,q,a,d,/%s,?]? "),
+ hunk => N__("Stash this hunk [y,n,q,a,d,/%s,?]? "),
+ },
+ reset_head => {
+ mode => N__("Unstage mode change [y,n,q,a,d,/%s,?]? "),
+ deletion => N__("Unstage deletion [y,n,q,a,d,/%s,?]? "),
+ hunk => N__("Unstage this hunk [y,n,q,a,d,/%s,?]? "),
+ },
+ reset_nothead => {
+ mode => N__("Apply mode change to index [y,n,q,a,d,/%s,?]? "),
+ deletion => N__("Apply deletion to index [y,n,q,a,d,/%s,?]? "),
+ hunk => N__("Apply this hunk to index [y,n,q,a,d,/%s,?]? "),
+ },
+ checkout_index => {
+ mode => N__("Discard mode change from worktree [y,n,q,a,d,/%s,?]? "),
+ deletion => N__("Discard deletion from worktree [y,n,q,a,d,/%s,?]? "),
+ hunk => N__("Discard this hunk from worktree [y,n,q,a,d,/%s,?]? "),
+ },
+ checkout_head => {
+ mode => N__("Discard mode change from index and worktree [y,n,q,a,d,/%s,?]? "),
+ deletion => N__("Discard deletion from index and worktree [y,n,q,a,d,/%s,?]? "),
+ hunk => N__("Discard this hunk from index and worktree [y,n,q,a,d,/%s,?]? "),
+ },
+ checkout_nothead => {
+ mode => N__("Apply mode change to index and worktree [y,n,q,a,d,/%s,?]? "),
+ deletion => N__("Apply deletion to index and worktree [y,n,q,a,d,/%s,?]? "),
+ hunk => N__("Apply this hunk to index and worktree [y,n,q,a,d,/%s,?]? "),
+ },
+);
+
sub patch_update_file {
my $quit = 0;
my ($ix, $num);
for (@{$hunk[$ix]{DISPLAY}}) {
print;
}
- print colored $prompt_color, $patch_mode_flavour{VERB},
- ($hunk[$ix]{TYPE} eq 'mode' ? ' mode change' :
- $hunk[$ix]{TYPE} eq 'deletion' ? ' deletion' :
- ' this hunk'),
- $patch_mode_flavour{TARGET},
- " [y,n,q,a,d,/$other,?]? ";
+ print colored $prompt_color,
+ sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
+
my $line = prompt_single_character;
last unless defined $line;
if ($line) {
my $response = $1;
my $no = $ix > 10 ? $ix - 10 : 0;
while ($response eq '') {
- my $extra = "";
$no = display_hunks(\@hunk, $no);
if ($no < $num) {
- $extra = " (<ret> to see more)";
+ print __("go to which hunk (<ret> to see more)? ");
+ } else {
+ print __("go to which hunk? ");
}
- print "go to which hunk$extra? ";
$response = <STDIN>;
if (!defined $response) {
$response = '';
chomp $response;
}
if ($response !~ /^\s*\d+\s*$/) {
- error_msg "Invalid number: '$response'\n";
+ error_msg sprintf(__("Invalid number: '%s'\n"),
+ $response);
} elsif (0 < $response && $response <= $num) {
$ix = $response - 1;
} else {
- error_msg "Sorry, only $num hunks available.\n";
+ error_msg sprintf(__n("Sorry, only %d hunk available.\n",
+ "Sorry, only %d hunks available.\n", $num), $num);
}
next;
}
elsif ($line =~ m|^/(.*)|) {
my $regex = $1;
if ($1 eq "") {
- print colored $prompt_color, "search for regex? ";
+ print colored $prompt_color, __("search for regex? ");
$regex = <STDIN>;
if (defined $regex) {
chomp $regex;
if ($@) {
my ($err,$exp) = ($@, $1);
$err =~ s/ at .*git-add--interactive line \d+, <STDIN> line \d+.*$//;
- error_msg "Malformed search regexp $exp: $err\n";
+ error_msg sprintf(__("Malformed search regexp %s: %s\n"), $exp, $err);
next;
}
my $iy = $ix;
$iy++;
$iy = 0 if ($iy >= $num);
if ($ix == $iy) {
- error_msg "No hunk matches the given pattern\n";
+ error_msg __("No hunk matches the given pattern\n");
last;
}
}
$ix--;
}
else {
- error_msg "No previous hunk\n";
+ error_msg __("No previous hunk\n");
}
next;
}
$ix++;
}
else {
- error_msg "No next hunk\n";
+ error_msg __("No next hunk\n");
}
next;
}
}
}
else {
- error_msg "No previous hunk\n";
+ error_msg __("No previous hunk\n");
}
next;
}
elsif ($line =~ /^j/) {
if ($other !~ /j/) {
- error_msg "No next hunk\n";
+ error_msg __("No next hunk\n");
next;
}
}
elsif ($other =~ /s/ && $line =~ /^s/) {
my @split = split_hunk($hunk[$ix]{TEXT}, $hunk[$ix]{DISPLAY});
if (1 < @split) {
- print colored $header_color, "Split into ",
- scalar(@split), " hunks.\n";
+ print colored $header_color, sprintf(
+ __n("Split into %d hunk.\n",
+ "Split into %d hunks.\n",
+ scalar(@split)), scalar(@split));
}
splice (@hunk, $ix, 1, @split);
$num = scalar @hunk;
my @mods = list_modified('index-only');
@mods = grep { !($_->{BINARY}) } @mods;
return if (!@mods);
- my (@them) = list_and_choose({ PROMPT => 'Review diff',
+ my (@them) = list_and_choose({ PROMPT => __('Review diff'),
IMMEDIATE => 1,
HEADER => $status_head, },
@mods);
return if (!@them);
- my $reference = is_initial_commit() ? get_empty_tree() : 'HEAD';
+ my $reference = (is_initial_commit()) ? get_empty_tree() : 'HEAD';
system(qw(git diff -p --cached), $reference, '--',
map { $_->{VALUE} } @them);
}
sub quit_cmd {
- print "Bye.\n";
+ print __("Bye.\n");
exit(0);
}
sub help_cmd {
- print colored $help_color, <<\EOF ;
+# TRANSLATORS: please do not translate the command names
+# 'status', 'update', 'revert', etc.
+ print colored $help_color, __ <<'EOF' ;
status - show paths with changes
update - add working tree state to the staged set of changes
revert - revert staged set of changes back to the HEAD version
if ($1 eq 'reset') {
$patch_mode = 'reset_head';
$patch_mode_revision = 'HEAD';
- $arg = shift @ARGV or die "missing --";
+ $arg = shift @ARGV or die __("missing --");
if ($arg ne '--') {
$patch_mode_revision = $arg;
$patch_mode = ($arg eq 'HEAD' ?
'reset_head' : 'reset_nothead');
- $arg = shift @ARGV or die "missing --";
+ $arg = shift @ARGV or die __("missing --");
}
} elsif ($1 eq 'checkout') {
- $arg = shift @ARGV or die "missing --";
+ $arg = shift @ARGV or die __("missing --");
if ($arg eq '--') {
$patch_mode = 'checkout_index';
} else {
$patch_mode_revision = $arg;
$patch_mode = ($arg eq 'HEAD' ?
'checkout_head' : 'checkout_nothead');
- $arg = shift @ARGV or die "missing --";
+ $arg = shift @ARGV or die __("missing --");
}
} elsif ($1 eq 'stage' or $1 eq 'stash') {
$patch_mode = $1;
- $arg = shift @ARGV or die "missing --";
+ $arg = shift @ARGV or die __("missing --");
} else {
- die "unknown --patch mode: $1";
+ die sprintf(__("unknown --patch mode: %s"), $1);
}
} else {
$patch_mode = 'stage';
- $arg = shift @ARGV or die "missing --";
+ $arg = shift @ARGV or die __("missing --");
}
- die "invalid argument $arg, expecting --"
- unless $arg eq "--";
+ die sprintf(__("invalid argument %s, expecting --"),
+ $arg) unless $arg eq "--";
%patch_mode_flavour = %{$patch_modes{$patch_mode}};
+ $cmd = 1;
}
elsif ($arg ne "--") {
- die "invalid argument $arg, expecting --";
+ die sprintf(__("invalid argument %s, expecting --"), $arg);
}
}
[ 'help', \&help_cmd, ],
);
while (1) {
- my ($it) = list_and_choose({ PROMPT => 'What now',
+ my ($it) = list_and_choose({ PROMPT => __('What now'),
SINGLETON => 1,
LIST_FLAT => 4,
- HEADER => '*** Commands ***',
+ HEADER => __('*** Commands ***'),
ON_EOF => \&quit_cmd,
IMMEDIATE => 1 }, @cmd);
if ($it) {
process_args();
refresh();
-if ($patch_mode) {
+if ($cmd) {
patch_update_cmd();
}
else {
qsort(base, nmemb, size, compar);
}
+#ifndef HAVE_ISO_QSORT_S
+int git_qsort_s(void *base, size_t nmemb, size_t size,
+ int (*compar)(const void *, const void *, void *), void *ctx);
+#define qsort_s git_qsort_s
+#endif
+
+#define QSORT_S(base, n, compar, ctx) do { \
+ if (qsort_s((base), (n), sizeof(*(base)), compar, ctx)) \
+ die("BUG: qsort_s() failed"); \
+} while (0)
+
#ifndef REG_STARTEND
#error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd"
#endif
}
merge_cmd () {
- trust_exit_code=$(git config --bool \
- "mergetool.$1.trustExitCode" || echo false)
- if test "$trust_exit_code" = "false"
- then
- touch "$BACKUP"
- ( eval $merge_tool_cmd )
- check_unchanged
- else
- ( eval $merge_tool_cmd )
- fi
+ ( eval $merge_tool_cmd )
}
}
echo "$1"
}
+ # Most tools' exit codes cannot be trusted, so By default we ignore
+ # their exit code and check the merged file's modification time in
+ # check_unchanged() to determine whether or not the merge was
+ # successful. The return value from run_merge_cmd, by default, is
+ # determined by check_unchanged().
+ #
+ # When a tool's exit code can be trusted then the return value from
+ # run_merge_cmd is simply the tool's exit code, and check_unchanged()
+ # is not called.
+ #
+ # The return value of exit_code_trustable() tells us whether or not we
+ # can trust the tool's exit code.
+ #
+ # User-defined and built-in tools default to false.
+ # Built-in tools advertise that their exit code is trustable by
+ # redefining exit_code_trustable() to true.
+
+ exit_code_trustable () {
+ false
+ }
+
+
if ! test -f "$MERGE_TOOLS_DIR/$tool"
then
setup_user_tool
fi
}
+trust_exit_code () {
+ if git config --bool "mergetool.$1.trustExitCode"
+ then
+ :; # OK
+ elif exit_code_trustable
+ then
+ echo true
+ else
+ echo false
+ fi
+}
+
+
# Entry point for running tools
run_merge_tool () {
# If GIT_PREFIX is empty then we cannot use it in tools
# Run a either a configured or built-in merge tool
run_merge_cmd () {
- merge_cmd "$1"
+ mergetool_trust_exit_code=$(trust_exit_code "$1")
+ if test "$mergetool_trust_exit_code" = "true"
+ then
+ merge_cmd "$1"
+ else
+ touch "$BACKUP"
+ merge_cmd "$1"
+ check_unchanged
+ fi
}
list_merge_tool_candidates () {
prompt=true
;;
-O*)
- orderfile="$1"
+ orderfile="${1#-O}"
;;
--)
shift
merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)"
merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)"
+ prefix=$(git rev-parse --show-prefix) || exit 1
+ cd_to_toplevel
+
+ if test -n "$orderfile"
+ then
+ orderfile=$(
+ git rev-parse --prefix "$prefix" -- "$orderfile" |
+ sed -e 1d
+ )
+ fi
+
if test $# -eq 0 && test -e "$GIT_DIR/MERGE_RR"
then
set -- $(git rerere remaining)
then
print_noop_and_exit
fi
+ elif test $# -ge 0
+ then
+ # rev-parse provides the -- needed for 'set'
+ eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
fi
files=$(git -c core.quotePath=false \
diff --name-only --diff-filter=U \
- ${orderfile:+"$orderfile"} -- "$@")
-
- cd_to_toplevel
+ ${orderfile:+"-O$orderfile"} -- "$@")
if test -z "$files"
then
import zipfile
import zlib
import ctypes
+import errno
try:
from subprocess import CalledProcessError
if len(client) > 0:
real_cmd += ["-c", client]
+ retries = gitConfigInt("git-p4.retries")
+ if retries is None:
+ # Perform 3 retries by default
+ retries = 3
+ if retries > 0:
+ # Provide a way to not pass this option by setting git-p4.retries to 0
+ real_cmd += ["-r", str(retries)]
if isinstance(cmd,basestring):
real_cmd = ' '.join(real_cmd) + ' ' + cmd
real_cmd += cmd
return real_cmd
+def git_dir(path):
+ """ Return TRUE if the given path is a git directory (/path/to/dir/.git).
+ This won't automatically add ".git" to a directory.
+ """
+ d = read_pipe(["git", "--git-dir", path, "rev-parse", "--git-dir"], True).strip()
+ if not d or len(d) == 0:
+ return None
+ else:
+ return d
+
def chdir(path, is_client_path=False):
"""Do chdir to the given path, and set the PWD environment
variable for use by P4. It does not look at getcwd() output.
def p4_reopen(type, f):
p4_system(["reopen", "-t", type, wildcard_encode(f)])
+def p4_reopen_in_change(changelist, files):
+ cmd = ["reopen", "-c", str(changelist)] + files
+ p4_system(cmd)
+
def p4_move(src, dest):
p4_system(["move", "-k", wildcard_encode(src), wildcard_encode(dest)])
return read_pipe(["git", "name-rev", "HEAD"]).split(" ")[1].strip()
def isValidGitDir(path):
- if (os.path.exists(path + "/HEAD")
- and os.path.exists(path + "/refs") and os.path.exists(path + "/objects")):
- return True;
- return False
+ return git_dir(path) != None
def parseRevision(ref):
return read_pipe("git rev-parse %s" % ref).strip()
def gitConfigList(key):
if not _gitConfig.has_key(key):
s = read_pipe(["git", "config", "--get-all", key], ignore_error=True)
- _gitConfig[key] = s.strip().split(os.linesep)
+ _gitConfig[key] = s.strip().splitlines()
if _gitConfig[key] == ['']:
_gitConfig[key] = []
return _gitConfig[key]
die("cannot use --changes-block-size with non-numeric revisions")
block_size = None
- changes = []
+ changes = set()
# Retrieve changes a block at a time, to prevent running
# into a MaxResults/MaxScanRows error from the server.
# Insert changes in chronological order
for line in reversed(p4_read_pipe_lines(cmd)):
- changes.append(int(line.split(" ")[1]))
+ changes.add(int(line.split(" ")[1]))
if not block_size:
break
steps."""
if self.exceedsLargeFileThreshold(relPath, contents) or self.hasLargeFileExtension(relPath):
contentTempFile = self.generateTempFile(contents)
- (git_mode, contents, localLargeFile) = self.generatePointer(contentTempFile)
-
- # Move temp file to final location in large file system
- largeFileDir = os.path.dirname(localLargeFile)
- if not os.path.isdir(largeFileDir):
- os.makedirs(largeFileDir)
- shutil.move(contentTempFile, localLargeFile)
- self.addLargeFile(relPath)
- if gitConfigBool('git-p4.largeFilePush'):
- self.pushFile(localLargeFile)
- if verbose:
- sys.stderr.write("%s moved to large file system (%s)\n" % (relPath, localLargeFile))
+ (pointer_git_mode, contents, localLargeFile) = self.generatePointer(contentTempFile)
+ if pointer_git_mode:
+ git_mode = pointer_git_mode
+ if localLargeFile:
+ # Move temp file to final location in large file system
+ largeFileDir = os.path.dirname(localLargeFile)
+ if not os.path.isdir(largeFileDir):
+ os.makedirs(largeFileDir)
+ shutil.move(contentTempFile, localLargeFile)
+ self.addLargeFile(relPath)
+ if gitConfigBool('git-p4.largeFilePush'):
+ self.pushFile(localLargeFile)
+ if verbose:
+ sys.stderr.write("%s moved to large file system (%s)\n" % (relPath, localLargeFile))
return (git_mode, contents)
class MockLFS(LargeFileSystem):
the actual content. Return also the new location of the actual
content.
"""
+ if os.path.getsize(contentFile) == 0:
+ return (None, '', None)
+
pointerProcess = subprocess.Popen(
['git', 'lfs', 'pointer', '--file=' + contentFile],
stdout=subprocess.PIPE
'# Git LFS (see https://git-lfs.github.com/)\n',
'#\n',
] +
- ['*.' + f.replace(' ', '[[:space:]]') + ' filter=lfs -text\n'
+ ['*.' + f.replace(' ', '[[:space:]]') + ' filter=lfs diff=lfs merge=lfs -text\n'
for f in sorted(gitConfigList('git-p4.largeFileExtensions'))
] +
- ['/' + f.replace(' ', '[[:space:]]') + ' filter=lfs -text\n'
+ ['/' + f.replace(' ', '[[:space:]]') + ' filter=lfs diff=lfs merge=lfs -text\n'
for f in sorted(self.largeFiles) if not self.hasLargeFileExtension(f)
]
)
optparse.make_option("--conflict", dest="conflict_behavior",
choices=self.conflict_behavior_choices),
optparse.make_option("--branch", dest="branch"),
+ optparse.make_option("--shelve", dest="shelve", action="store_true",
+ help="Shelve instead of submit. Shelved files are reverted, "
+ "restoring the workspace to the state before the shelve"),
+ optparse.make_option("--update-shelve", dest="update_shelve", action="store", type="int",
+ metavar="CHANGELIST",
+ help="update an existing shelved changelist, implies --shelve")
]
self.description = "Submit changes from git to the perforce depot."
self.usage += " [name of git branch to submit into perforce depot]"
self.detectRenames = False
self.preserveUser = gitConfigBool("git-p4.preserveUser")
self.dry_run = False
+ self.shelve = False
+ self.update_shelve = None
self.prepare_p4_only = False
self.conflict_behavior = None
self.isWindows = (platform.system() == "Windows")
return 1
return 0
- def prepareSubmitTemplate(self):
+ def prepareSubmitTemplate(self, changelist=None):
"""Run "p4 change -o" to grab a change specification template.
This does not use "p4 -G", as it is nice to keep the submission
template in original order, since a human might edit it.
template = ""
inFilesSection = False
- for line in p4_read_pipe_lines(['change', '-o']):
+ args = ['change', '-o']
+ if changelist:
+ args.append(str(changelist))
+
+ for line in p4_read_pipe_lines(args):
if line.endswith("\r\n"):
line = line[:-2] + "\n"
if inFilesSection:
if response == 'n':
return False
- def get_diff_description(self, editedFiles, filesToAdd):
+ def get_diff_description(self, editedFiles, filesToAdd, symlinks):
# diff
if os.environ.has_key("P4DIFF"):
del(os.environ["P4DIFF"])
newdiff += "==== new file ====\n"
newdiff += "--- /dev/null\n"
newdiff += "+++ %s\n" % newFile
- f = open(newFile, "r")
- for line in f.readlines():
- newdiff += "+" + line
- f.close()
+
+ is_link = os.path.islink(newFile)
+ expect_link = newFile in symlinks
+
+ if is_link and expect_link:
+ newdiff += "+%s\n" % os.readlink(newFile)
+ else:
+ f = open(newFile, "r")
+ for line in f.readlines():
+ newdiff += "+" + line
+ f.close()
return (diff + newdiff).replace('\r\n', '\n')
filesToDelete = set()
editedFiles = set()
pureRenameCopy = set()
+ symlinks = set()
filesToChangeExecBit = {}
+ all_files = list()
for line in diff:
diff = parseDiffTreeEntry(line)
modifier = diff['status']
path = diff['src']
+ all_files.append(path)
+
if modifier == "M":
p4_edit(path)
if isModeExecChanged(diff['src_mode'], diff['dst_mode']):
filesToChangeExecBit[path] = diff['dst_mode']
if path in filesToDelete:
filesToDelete.remove(path)
+
+ dst_mode = int(diff['dst_mode'], 8)
+ if dst_mode == 0120000:
+ symlinks.add(path)
+
elif modifier == "D":
filesToDelete.add(path)
if path in filesToAdd:
mode = filesToChangeExecBit[f]
setP4ExecBit(f, mode)
+ if self.update_shelve:
+ print("all_files = %s" % str(all_files))
+ p4_reopen_in_change(self.update_shelve, all_files)
+
#
# Build p4 change description, starting with the contents
# of the git commit message.
logMessage = logMessage.strip()
(logMessage, jobs) = self.separate_jobs_from_description(logMessage)
- template = self.prepareSubmitTemplate()
+ template = self.prepareSubmitTemplate(self.update_shelve)
submitTemplate = self.prepareLogMessage(template, logMessage, jobs)
if self.preserveUser:
separatorLine = "######## everything below this line is just the diff #######\n"
if not self.prepare_p4_only:
submitTemplate += separatorLine
- submitTemplate += self.get_diff_description(editedFiles, filesToAdd)
+ submitTemplate += self.get_diff_description(editedFiles, filesToAdd, symlinks)
(handle, fileName) = tempfile.mkstemp()
tmpFile = os.fdopen(handle, "w+b")
if self.isWindows:
message = message.replace("\r\n", "\n")
submitTemplate = message[:message.index(separatorLine)]
- p4_write_pipe(['submit', '-i'], submitTemplate)
+
+ if self.update_shelve:
+ p4_write_pipe(['shelve', '-r', '-i'], submitTemplate)
+ elif self.shelve:
+ p4_write_pipe(['shelve', '-i'], submitTemplate)
+ else:
+ p4_write_pipe(['submit', '-i'], submitTemplate)
+ # The rename/copy happened by applying a patch that created a
+ # new file. This leaves it writable, which confuses p4.
+ for f in pureRenameCopy:
+ p4_sync(f, "-f")
if self.preserveUser:
if p4User:
changelist = self.lastP4Changelist()
self.modifyChangelistUser(changelist, p4User)
- # The rename/copy happened by applying a patch that created a
- # new file. This leaves it writable, which confuses p4.
- for f in pureRenameCopy:
- p4_sync(f, "-f")
submitted = True
finally:
# skip this patch
- if not submitted:
- print "Submission cancelled, undoing p4 changes."
- for f in editedFiles:
+ if not submitted or self.shelve:
+ if self.shelve:
+ print ("Reverting shelved files.")
+ else:
+ print ("Submission cancelled, undoing p4 changes.")
+ for f in editedFiles | filesToDelete:
p4_revert(f)
for f in filesToAdd:
p4_revert(f)
os.remove(f)
- for f in filesToDelete:
- p4_revert(f)
os.remove(fileName)
return submitted
if len(self.origin) == 0:
self.origin = upstream
+ if self.update_shelve:
+ self.shelve = True
+
if self.preserveUser:
if not self.canChangeChangelists():
die("Cannot preserve user names without p4 super-user or admin permissions")
break
chdir(self.oldWorkingDirectory)
-
+ shelved_applied = "shelved" if self.shelve else "applied"
if self.dry_run:
pass
elif self.prepare_p4_only:
pass
elif len(commits) == len(applied):
- print "All commits applied!"
+ print ("All commits {0}!".format(shelved_applied))
sync = P4Sync()
if self.branch:
else:
if len(applied) == 0:
- print "No commits applied."
+ print ("No commits {0}.".format(shelved_applied))
else:
- print "Applied only the commits marked with '*':"
+ print ("{0} only the commits marked with '*':".format(shelved_applied.capitalize()))
for c in commits:
if c in applied:
star = "*"
if cmd.gitdir == None:
cmd.gitdir = os.path.abspath(".git")
if not isValidGitDir(cmd.gitdir):
+ # "rev-parse --git-dir" without arguments will try $PWD/.git
cmd.gitdir = read_pipe("git rev-parse --git-dir").strip()
if os.path.exists(cmd.gitdir):
cdup = read_pipe("git rev-parse --show-cdup").strip()
else:
die("fatal: cannot locate git repository at %s" % cmd.gitdir)
+ # so git commands invoked from the P4 workspace will succeed
os.environ["GIT_DIR"] = cmd.gitdir
if not cmd.run(args):
if test -f "$squash_msg"; then
mv "$squash_msg" "$squash_msg".bak || exit
count=$(($(sed -n \
- -e "1s/^$comment_char.*\([0-9][0-9]*\).*/\1/p" \
+ -e "1s/^$comment_char[^0-9]*\([0-9][0-9]*\).*/\1/p" \
-e "q" < "$squash_msg".bak)+1))
{
printf '%s\n' "$comment_char $(eval_ngettext \
}' <"$squash_msg".bak
} >"$squash_msg"
else
- commit_message HEAD > "$fixup_msg" || die "$(gettext "Cannot write \$fixup_msg")"
+ commit_message HEAD >"$fixup_msg" ||
+ die "$(eval_gettext "Cannot write \$fixup_msg")"
count=2
{
printf '%s\n' "$comment_char $(gettext "This is a combination of 2 commits.")"
abort! abort and check out the original branch
skip! skip current patch and continue
edit-todo! edit the todo list during an interactive rebase
+quit! abort but keep HEAD where it is
"
. git-sh-setup
set_reflog_action rebase
--verify)
ok_to_skip_pre_rebase=
;;
- --continue|--skip|--abort|--edit-todo)
+ --continue|--skip|--abort|--quit|--edit-todo)
test $total_argc -eq 2 || usage
action=${1##--}
;;
finish_rebase
exit
;;
+quit)
+ exec rm -rf "$state_dir"
+ ;;
edit-todo)
run_specific_rebase
;;
+++ /dev/null
-#!/usr/bin/perl
-# Copyright 2005, Ryan Anderson <ryan@michonline.com>
-# Distribution permitted under the GPL v2, as distributed
-# by the Free Software Foundation.
-# Later versions of the GPL at the discretion of Linus Torvalds
-#
-# Scan two git object-trees, and hardlink any common objects between them.
-
-use 5.008;
-use strict;
-use warnings;
-use Getopt::Long;
-
-sub get_canonical_form($);
-sub do_scan_directory($$$);
-sub compare_two_files($$);
-sub usage();
-sub link_two_files($$);
-
-# stats
-my $total_linked = 0;
-my $total_already = 0;
-my ($linked,$already);
-
-my $fail_on_different_sizes = 0;
-my $help = 0;
-GetOptions("safe" => \$fail_on_different_sizes,
- "help" => \$help);
-
-usage() if $help;
-
-my (@dirs) = @ARGV;
-
-usage() if (!defined $dirs[0] || !defined $dirs[1]);
-
-$_ = get_canonical_form($_) foreach (@dirs);
-
-my $master_dir = pop @dirs;
-
-opendir(D,$master_dir . "objects/")
- or die "Failed to open $master_dir/objects/ : $!";
-
-my @hashdirs = grep { ($_ eq 'pack') || /^[0-9a-f]{2}$/ } readdir(D);
-
-foreach my $repo (@dirs) {
- $linked = 0;
- $already = 0;
- printf("Searching '%s' and '%s' for common objects and hardlinking them...\n",
- $master_dir,$repo);
-
- foreach my $hashdir (@hashdirs) {
- do_scan_directory($master_dir, $hashdir, $repo);
- }
-
- printf("Linked %d files, %d were already linked.\n",$linked, $already);
-
- $total_linked += $linked;
- $total_already += $already;
-}
-
-printf("Totals: Linked %d files, %d were already linked.\n",
- $total_linked, $total_already);
-
-
-sub do_scan_directory($$$) {
- my ($srcdir, $subdir, $dstdir) = @_;
-
- my $sfulldir = sprintf("%sobjects/%s/",$srcdir,$subdir);
- my $dfulldir = sprintf("%sobjects/%s/",$dstdir,$subdir);
-
- opendir(S,$sfulldir)
- or die "Failed to opendir $sfulldir: $!";
-
- foreach my $file (grep(!/\.{1,2}$/, readdir(S))) {
- my $sfilename = $sfulldir . $file;
- my $dfilename = $dfulldir . $file;
-
- compare_two_files($sfilename,$dfilename);
-
- }
- closedir(S);
-}
-
-sub compare_two_files($$) {
- my ($sfilename, $dfilename) = @_;
-
- # Perl's stat returns relevant information as follows:
- # 0 = dev number
- # 1 = inode number
- # 7 = size
- my @sstatinfo = stat($sfilename);
- my @dstatinfo = stat($dfilename);
-
- if (@sstatinfo == 0 && @dstatinfo == 0) {
- die sprintf("Stat of both %s and %s failed: %s\n",$sfilename, $dfilename, $!);
-
- } elsif (@dstatinfo == 0) {
- return;
- }
-
- if ( ($sstatinfo[0] == $dstatinfo[0]) &&
- ($sstatinfo[1] != $dstatinfo[1])) {
- if ($sstatinfo[7] == $dstatinfo[7]) {
- link_two_files($sfilename, $dfilename);
-
- } else {
- my $err = sprintf("ERROR: File sizes are not the same, cannot relink %s to %s.\n",
- $sfilename, $dfilename);
- if ($fail_on_different_sizes) {
- die $err;
- } else {
- warn $err;
- }
- }
-
- } elsif ( ($sstatinfo[0] == $dstatinfo[0]) &&
- ($sstatinfo[1] == $dstatinfo[1])) {
- $already++;
- }
-}
-
-sub get_canonical_form($) {
- my $dir = shift;
- my $original = $dir;
-
- die "$dir is not a directory." unless -d $dir;
-
- $dir .= "/" unless $dir =~ m#/$#;
- $dir .= ".git/" unless $dir =~ m#\.git/$#;
-
- die "$original does not have a .git/ subdirectory.\n" unless -d $dir;
-
- return $dir;
-}
-
-sub link_two_files($$) {
- my ($sfilename, $dfilename) = @_;
- my $tmpdname = sprintf("%s.old",$dfilename);
- rename($dfilename,$tmpdname)
- or die sprintf("Failure renaming %s to %s: %s",
- $dfilename, $tmpdname, $!);
-
- if (! link($sfilename,$dfilename)) {
- my $failtxt = "";
- unless (rename($tmpdname,$dfilename)) {
- $failtxt = sprintf(
- "Git Repository containing %s is probably corrupted, " .
- "please copy '%s' to '%s' to fix.\n",
- $tmpdname, $dfilename);
- }
-
- die sprintf("Failed to link %s to %s: %s\n%s" .
- $sfilename, $dfilename,
- $!, $dfilename, $failtxt);
- }
-
- unlink($tmpdname)
- or die sprintf("Unlink of %s failed: %s\n",
- $dfilename, $!);
-
- $linked++;
-}
-
-
-sub usage() {
- print("usage: git relink [--safe] <dir>... <master_dir> \n");
- print("All directories should contain a .git/objects/ subdirectory.\n");
- print("Options\n");
- print("\t--safe\t" .
- "Stops if two objects with the same hash exist but " .
- "have different sizes. Default is to warn and continue.\n");
- exit(1);
-}
# This file is licensed under the GPL v2, or a later version
# at the discretion of Linus Torvalds.
-USAGE='<start> <url> [<end>]'
-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=
use File::Spec::Functions qw(catfile);
use Error qw(:try);
use Git;
+use Git::I18N;
Getopt::Long::Configure qw/ pass_through /;
my $localmin = $localtm[1] + $localtm[2] * 60;
my $gmtmin = $gmttm[1] + $gmttm[2] * 60;
if ($localtm[0] != $gmttm[0]) {
- die "local zone differs from GMT by a non-minute interval\n";
+ die __("local zone differs from GMT by a non-minute interval\n");
}
if ((($gmttm[6] + 1) % 7) == $localtm[6]) {
$localmin += 1440;
} elsif ((($gmttm[6] - 1) % 7) == $localtm[6]) {
$localmin -= 1440;
} elsif ($gmttm[6] != $localtm[6]) {
- die "local time offset greater than or equal to 24 hours\n";
+ die __("local time offset greater than or equal to 24 hours\n");
}
my $offset = $localmin - $gmtmin;
my $offhour = $offset / 60;
my $offmin = abs($offset % 60);
if (abs($offhour) >= 24) {
- die ("local time offset greater than or equal to 24 hours\n");
+ die __("local time offset greater than or equal to 24 hours\n");
}
return sprintf("%s, %2d %s %d %02d:%02d:%02d %s%02d%02d",
map {
system('sh', '-c', $editor.' "$@"', $editor, $_);
if (($? & 127) || ($? >> 8)) {
- die("the editor exited uncleanly, aborting everything");
+ die(__("the editor exited uncleanly, aborting everything"));
}
} @_;
} else {
system('sh', '-c', $editor.' "$@"', $editor, @_);
if (($? & 127) || ($? >> 8)) {
- die("the editor exited uncleanly, aborting everything");
+ die(__("the editor exited uncleanly, aborting everything"));
}
}
}
# tmp files from --compose
if (defined $compose_filename) {
if (-e $compose_filename) {
- print "'$compose_filename' contains an intermediate version of the email you were composing.\n";
+ printf __("'%s' contains an intermediate version ".
+ "of the email you were composing.\n"),
+ $compose_filename;
}
if (-e ($compose_filename . ".final")) {
- print "'$compose_filename.final' contains the composed email.\n"
+ printf __("'%s.final' contains the composed email.\n"),
+ $compose_filename;
}
}
my $rc = GetOptions("h" => \$help,
"dump-aliases" => \$dump_aliases);
usage() unless $rc;
-die "--dump-aliases incompatible with other options\n"
+die __("--dump-aliases incompatible with other options\n")
if !$help and $dump_aliases and @ARGV;
$rc = GetOptions(
"sender|from=s" => \$sender,
usage();
}
-die "Cannot run git format-patch from outside a repository\n"
+die __("Cannot run git format-patch from outside a repository\n")
if $format_patch and not $repo;
# Now, let's fill any that aren't set in with defaults:
my(%suppress_cc);
if (@suppress_cc) {
foreach my $entry (@suppress_cc) {
- die "Unknown --suppress-cc field: '$entry'\n"
+ die sprintf(__("Unknown --suppress-cc field: '%s'\n"), $entry)
unless $entry =~ /^(?:all|cccmd|cc|author|self|sob|body|bodycc)$/;
$suppress_cc{$entry} = 1;
}
if ($confirm_unconfigured) {
$confirm = scalar %suppress_cc ? 'compose' : 'auto';
};
-die "Unknown --confirm setting: '$confirm'\n"
+die sprintf(__("Unknown --confirm setting: '%s'\n"), $confirm)
unless $confirm =~ /^(?:auto|cc|compose|always|never)/;
# Debugging, print out the suppressions.
sub parse_sendmail_alias {
local $_ = shift;
if (/"/) {
- print STDERR "warning: sendmail alias with quotes is not supported: $_\n";
+ printf STDERR __("warning: sendmail alias with quotes is not supported: %s\n"), $_;
} elsif (/:include:/) {
- print STDERR "warning: `:include:` not supported: $_\n";
+ printf STDERR __("warning: `:include:` not supported: %s\n"), $_;
} elsif (/[\/|]/) {
- print STDERR "warning: `/file` or `|pipe` redirection not supported: $_\n";
+ printf STDERR __("warning: `/file` or `|pipe` redirection not supported: %s\n"), $_;
} elsif (/^(\S+?)\s*:\s*(.+)$/) {
my ($alias, $addr) = ($1, $2);
$aliases{$alias} = [ split_addrs($addr) ];
} else {
- print STDERR "warning: sendmail line is not recognized: $_\n";
+ printf STDERR __("warning: sendmail line is not recognized: %s\n"), $_;
}
}
if (defined($format_patch)) {
return $format_patch;
}
- die(<<EOF);
-File '$f' exists but it could also be the range of commits
+ die sprintf(__ <<EOF, $f, $f);
+File '%s' exists but it could also be the range of commits
to produce patches for. Please disambiguate by...
- * Saying "./$f" if you mean a file; or
+ * Saying "./%s" if you mean a file; or
* Giving --format-patch option if you mean a range.
EOF
} catch Git::Error::Command with {
@ARGV = ();
} elsif (-d $f and !is_format_patch_arg($f)) {
opendir my $dh, $f
- or die "Failed to opendir $f: $!";
+ or die sprintf(__("Failed to opendir %s: %s"), $f, $!);
push @files, grep { -f $_ } map { catfile($f, $_) }
sort readdir $dh;
}
if (@rev_list_opts) {
- die "Cannot run git format-patch from outside a repository\n"
+ die __("Cannot run git format-patch from outside a repository\n")
unless $repo;
push @files, $repo->command('format-patch', '-o', tempdir(CLEANUP => 1), @rev_list_opts);
}
foreach my $f (@files) {
unless (-p $f) {
my $error = validate_patch($f);
- $error and die "fatal: $f: $error\nwarning: no patches were sent\n";
+ $error and die sprintf(__("fatal: %s: %s\nwarning: no patches were sent\n"),
+ $f, $error);
}
}
}
print $_,"\n" for (@files);
}
} else {
- print STDERR "\nNo patch files specified!\n\n";
+ print STDERR __("\nNo patch files specified!\n\n");
usage();
}
return "GIT: $1\n";
}
close $fh;
- die "No subject line in $fn ?";
+ die sprintf(__("No subject line in %s?"), $fn);
}
if ($compose) {
tempfile(".gitsendemail.msg.XXXXXX", DIR => $repo->repo_path()) :
tempfile(".gitsendemail.msg.XXXXXX", DIR => "."))[1];
open my $c, ">", $compose_filename
- or die "Failed to open for writing $compose_filename: $!";
+ or die sprintf(__("Failed to open for writing %s: %s"), $compose_filename, $!);
my $tpl_sender = $sender || $repoauthor || $repocommitter || '';
my $tpl_subject = $initial_subject || '';
my $tpl_reply_to = $initial_reply_to || '';
- print $c <<EOT;
+ print $c <<EOT1, Git::prefix_lines("GIT: ", __ <<EOT2), <<EOT3;
From $tpl_sender # This line is ignored.
-GIT: Lines beginning in "GIT:" will be removed.
-GIT: Consider including an overall diffstat or table of contents
-GIT: for the patch you are writing.
-GIT:
-GIT: Clear the body content if you don't wish to send a summary.
+EOT1
+Lines beginning in "GIT:" will be removed.
+Consider including an overall diffstat or table of contents
+for the patch you are writing.
+
+Clear the body content if you don't wish to send a summary.
+EOT2
From: $tpl_sender
Subject: $tpl_subject
In-Reply-To: $tpl_reply_to
-EOT
+EOT3
for my $f (@files) {
print $c get_patch_subject($f);
}
}
open my $c2, ">", $compose_filename . ".final"
- or die "Failed to open $compose_filename.final : " . $!;
+ or die sprintf(__("Failed to open %s.final: %s"), $compose_filename, $!);
open $c, "<", $compose_filename
- or die "Failed to open $compose_filename : " . $!;
+ or die sprintf(__("Failed to open %s: %s"), $compose_filename, $!);
my $need_8bit_cte = file_has_nonascii($compose_filename);
my $in_body = 0;
$sender = $1;
next;
} elsif (/^(?:To|Cc|Bcc):/i) {
- print "To/Cc/Bcc fields are not interpreted yet, they have been ignored\n";
+ print __("To/Cc/Bcc fields are not interpreted yet, they have been ignored\n");
next;
}
print $c2 $_;
close $c2;
if ($summary_empty) {
- print "Summary email is empty, skipping it\n";
+ print __("Summary email is empty, skipping it\n");
$compose = -1;
}
} elsif ($annotate) {
return $resp;
}
if ($confirm_only) {
- my $yesno = $term->readline("Are you sure you want to use <$resp> [y/N]? ");
+ my $yesno = $term->readline(
+ # TRANSLATORS: please keep [y/N] as is.
+ sprintf(__("Are you sure you want to use <%s> [y/N]? "), $resp));
if (defined $yesno && $yesno =~ /y/i) {
return $resp;
}
}
if (!defined $auto_8bit_encoding && scalar %broken_encoding) {
- print "The following files are 8bit, but do not declare " .
- "a Content-Transfer-Encoding.\n";
+ print __("The following files are 8bit, but do not declare " .
+ "a Content-Transfer-Encoding.\n");
foreach my $f (sort keys %broken_encoding) {
print " $f\n";
}
- $auto_8bit_encoding = ask("Which 8bit encoding should I declare [UTF-8]? ",
+ $auto_8bit_encoding = ask(__("Which 8bit encoding should I declare [UTF-8]? "),
valid_re => qr/.{4}/, confirm_only => 1,
default => "UTF-8");
}
if (!$force) {
for my $f (@files) {
if (get_patch_subject($f) =~ /\Q*** SUBJECT HERE ***\E/) {
- die "Refusing to send because the patch\n\t$f\n"
+ die sprintf(__("Refusing to send because the patch\n\t%s\n"
. "has the template subject '*** SUBJECT HERE ***'. "
- . "Pass --force if you really want to send.\n";
+ . "Pass --force if you really want to send.\n"), $f);
}
}
}
# But it's a no-op to run sanitize_address on an already sanitized address.
$sender = sanitize_address($sender);
-my $to_whom = "To whom should the emails be sent (if anyone)?";
+my $to_whom = __("To whom should the emails be sent (if anyone)?");
my $prompting = 0;
if (!@initial_to && !defined $to_cmd) {
my $to = ask("$to_whom ",
sub expand_one_alias {
my $alias = shift;
if ($EXPANDED_ALIASES{$alias}) {
- die "fatal: alias '$alias' expands to itself\n";
+ die sprintf(__("fatal: alias '%s' expands to itself\n"), $alias);
}
local $EXPANDED_ALIASES{$alias} = 1;
return $aliases{$alias} ? expand_aliases(@{$aliases{$alias}}) : $alias;
if ($thread && !defined $initial_reply_to && $prompting) {
$initial_reply_to = ask(
- "Message-ID to be used as In-Reply-To for the first email (if any)? ",
+ __("Message-ID to be used as In-Reply-To for the first email (if any)? "),
default => "",
valid_re => qr/\@.*\./, confirm_only => 1);
}
sub extract_valid_address_or_die {
my $address = shift;
$address = extract_valid_address($address);
- die "error: unable to extract a valid address from: $address\n"
+ die sprintf(__("error: unable to extract a valid address from: %s\n"), $address)
if !$address;
return $address;
}
sub validate_address {
my $address = shift;
while (!extract_valid_address($address)) {
- print STDERR "error: unable to extract a valid address from: $address\n";
- $_ = ask("What to do with this address? ([q]uit|[d]rop|[e]dit): ",
+ printf STDERR __("error: unable to extract a valid address from: %s\n"), $address;
+ # TRANSLATORS: Make sure to include [q] [d] [e] in your
+ # translation. The program will only accept English input
+ # at this point.
+ $_ = ask(__("What to do with this address? ([q]uit|[d]rop|[e]dit): "),
valid_re => qr/^(?:quit|q|drop|d|edit|e)/i,
default => 'q');
if (/^d/i) {
return (SSL_verify_mode => SSL_VERIFY_PEER(),
SSL_ca_file => $smtp_ssl_cert_path);
} else {
- die "CA path \"$smtp_ssl_cert_path\" does not exist";
+ die sprintf(__("CA path \"%s\" does not exist"), $smtp_ssl_cert_path);
}
}
if ($needs_confirm eq "inform") {
$confirm_unconfigured = 0; # squelch this message for the rest of this run
$ask_default = "y"; # assume yes on EOF since user hasn't explicitly asked for confirmation
- print " The Cc list above has been expanded by additional\n";
- print " addresses found in the patch commit message. By default\n";
- print " send-email prompts before sending whenever this occurs.\n";
- print " This behavior is controlled by the sendemail.confirm\n";
- print " configuration setting.\n";
- print "\n";
- print " For additional information, run 'git send-email --help'.\n";
- print " To retain the current behavior, but squelch this message,\n";
- print " run 'git config --global sendemail.confirm auto'.\n\n";
+ print __ <<EOF ;
+ The Cc list above has been expanded by additional
+ addresses found in the patch commit message. By default
+ send-email prompts before sending whenever this occurs.
+ This behavior is controlled by the sendemail.confirm
+ configuration setting.
+
+ For additional information, run 'git send-email --help'.
+ To retain the current behavior, but squelch this message,
+ run 'git config --global sendemail.confirm auto'.
+
+EOF
}
- $_ = ask("Send this email? ([y]es|[n]o|[q]uit|[a]ll): ",
+ # TRANSLATORS: Make sure to include [y] [n] [q] [a] in your
+ # translation. The program will only accept English input
+ # at this point.
+ $_ = ask(__("Send this email? ([y]es|[n]o|[q]uit|[a]ll): "),
valid_re => qr/^(?:yes|y|no|n|quit|q|all|a)/i,
default => $ask_default);
- die "Send this email reply required" unless defined $_;
+ die __("Send this email reply required") unless defined $_;
if (/^n/i) {
return 0;
} elsif (/^q/i) {
} else {
if (!defined $smtp_server) {
- die "The required SMTP server is not properly defined."
+ die __("The required SMTP server is not properly defined.")
}
if ($smtp_encryption eq 'ssl') {
# supported commands
$smtp->hello($smtp_domain);
} else {
- die "Server does not support STARTTLS! ".$smtp->message;
+ die sprintf(__("Server does not support STARTTLS! %s"), $smtp->message);
}
}
}
if (!$smtp) {
- die "Unable to initialize SMTP properly. Check config and use --smtp-debug. ",
- "VALUES: server=$smtp_server ",
+ die __("Unable to initialize SMTP properly. Check config and use --smtp-debug."),
+ " VALUES: server=$smtp_server ",
"encryption=$smtp_encryption ",
"hello=$smtp_domain",
defined $smtp_server_port ? " port=$smtp_server_port" : "";
$smtp->datasend("$line") or die $smtp->message;
}
$smtp->dataend() or die $smtp->message;
- $smtp->code =~ /250|200/ or die "Failed to send $subject\n".$smtp->message;
+ $smtp->code =~ /250|200/ or die sprintf(__("Failed to send %s\n"), $subject).$smtp->message;
}
if ($quiet) {
- printf (($dry_run ? "Dry-" : "")."Sent %s\n", $subject);
+ printf($dry_run ? __("Dry-Sent %s\n") : __("Sent %s\n"), $subject);
} else {
- print (($dry_run ? "Dry-" : "")."OK. Log says:\n");
+ print($dry_run ? __("Dry-OK. Log says:\n") : __("OK. Log says:\n"));
if (!file_name_is_absolute($smtp_server)) {
print "Server: $smtp_server\n";
print "MAIL FROM:<$raw_from>\n";
}
print $header, "\n";
if ($smtp) {
- print "Result: ", $smtp->code, ' ',
+ print __("Result: "), $smtp->code, ' ',
($smtp->message =~ /\n([^\n]+\n)$/s), "\n";
} else {
- print "Result: OK\n";
+ print __("Result: OK\n");
}
}
$message_num = 0;
foreach my $t (@files) {
- open my $fh, "<", $t or die "can't open file $t";
+ open my $fh, "<", $t or die sprintf(__("can't open file %s"), $t);
my $author = undef;
my $sauthor = undef;
$sauthor = sanitize_address($author);
next if $suppress_cc{'author'};
next if $suppress_cc{'self'} and $sauthor eq $sender;
- printf("(mbox) Adding cc: %s from line '%s'\n",
+ printf(__("(mbox) Adding cc: %s from line '%s'\n"),
$1, $_) unless $quiet;
push @cc, $1;
}
elsif (/^To:\s+(.*)$/i) {
foreach my $addr (parse_address_line($1)) {
- printf("(mbox) Adding to: %s from line '%s'\n",
+ printf(__("(mbox) Adding to: %s from line '%s'\n"),
$addr, $_) unless $quiet;
push @to, $addr;
}
} else {
next if ($suppress_cc{'cc'});
}
- printf("(mbox) Adding cc: %s from line '%s'\n",
+ printf(__("(mbox) Adding cc: %s from line '%s'\n"),
$addr, $_) unless $quiet;
push @cc, $addr;
}
# So let's support that, too.
$input_format = 'lots';
if (@cc == 0 && !$suppress_cc{'cc'}) {
- printf("(non-mbox) Adding cc: %s from line '%s'\n",
+ printf(__("(non-mbox) Adding cc: %s from line '%s'\n"),
$_, $_) unless $quiet;
push @cc, $_;
} elsif (!defined $subject) {
next if $suppress_cc{'bodycc'} and $what =~ /Cc/i;
}
push @cc, $c;
- printf("(body) Adding cc: %s from line '%s'\n",
+ printf(__("(body) Adding cc: %s from line '%s'\n"),
$c, $_) unless $quiet;
}
}
my @addresses = ();
open my $fh, "-|", "$cmd \Q$file\E"
- or die "($prefix) Could not execute '$cmd'";
+ or die sprintf(__("(%s) Could not execute '%s'"), $prefix, $cmd);
while (my $address = <$fh>) {
$address =~ s/^\s*//g;
$address =~ s/\s*$//g;
$address = sanitize_address($address);
next if ($address eq $sender and $suppress_cc{'self'});
push @addresses, $address;
- printf("($prefix) Adding %s: %s from: '%s'\n",
- $what, $address, $cmd) unless $quiet;
+ printf(__("(%s) Adding %s: %s from: '%s'\n"),
+ $prefix, $what, $address, $cmd) unless $quiet;
}
close $fh
- or die "($prefix) failed to close pipe to '$cmd'";
+ or die sprintf(__("(%s) failed to close pipe to '%s'"), $prefix, $cmd);
return @addresses;
}
$message = MIME::Base64::decode($message)
if ($from eq 'base64');
- die "cannot send message as 7bit"
+ die __("cannot send message as 7bit")
if ($to eq '7bit' and $message =~ /[^[:ascii:]]/);
return $message
if ($to eq '7bit' or $to eq '8bit');
if ($to eq 'quoted-printable');
return MIME::Base64::encode($message, "\n")
if ($to eq 'base64');
- die "invalid transfer encoding";
+ die __("invalid transfer encoding");
}
sub unique_email_list {
sub validate_patch {
my $fn = shift;
open(my $fh, '<', $fn)
- or die "unable to open $fn: $!\n";
+ or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
while (my $line = <$fh>) {
if (length($line) > 998) {
- return "$.: patch contains a line longer than 998 characters";
+ return sprintf(__("%s: patch contains a line longer than 998 characters"), $.);
}
}
return;
(substr($file, 0, $lastlen) eq $last) &&
($suffix = substr($file, $lastlen)) !~ /^[a-z0-9]/i) {
if (defined $known_suffix && $suffix eq $known_suffix) {
- print "Skipping $file with backup suffix '$known_suffix'.\n";
+ printf(__("Skipping %s with backup suffix '%s'.\n"), $file, $known_suffix);
$skip = 1;
} else {
- my $answer = ask("Do you really want to send $file? (y|N): ",
+ # TRANSLATORS: please keep "[y|N]" as is.
+ my $answer = ask(sprintf(__("Do you really want to send %s? [y|N]: "), $file),
valid_re => qr/^(?:y|n)/i,
default => 'n');
$skip = ($answer ne 'y');
sub file_has_nonascii {
my $fn = shift;
open(my $fh, '<', $fn)
- or die "unable to open $fn: $!\n";
+ or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
while (my $line = <$fh>) {
return 1 if $line =~ /[^[:ascii:]]/;
}
sub body_or_subject_has_nonascii {
my $fn = shift;
open(my $fh, '<', $fn)
- or die "unable to open $fn: $!\n";
+ or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
while (my $line = <$fh>) {
last if $line =~ /^$/;
return 1 if $line =~ /^Subject.*[^[:ascii:]]/;
if test "z$(git rev-parse --is-bare-repository)" != zfalse
then
program_name=$0
- die "$(gettext "fatal: \$program_name cannot be used without a working tree.")"
+ die "$(eval_gettext "fatal: \$program_name cannot be used without a working tree.")"
fi
}
require_work_tree () {
test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = true || {
program_name=$0
- die "$(gettext "fatal: \$program_name cannot be used without a working tree.")"
+ die "$(eval_gettext "fatal: \$program_name cannot be used without a working tree.")"
}
}
git read-tree --index-output="$TMPindex" -m $i_tree &&
GIT_INDEX_FILE="$TMPindex" &&
export GIT_INDEX_FILE &&
- git diff --name-only -z HEAD -- >"$TMP-stagenames" &&
+ git diff-index --name-only -z HEAD -- >"$TMP-stagenames" &&
git update-index -z --add --remove --stdin <"$TMP-stagenames" &&
git write-tree &&
rm -f "$TMPindex"
or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--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>...]"
+ or: $dashless [--quiet] sync [--recursive] [--] [<path>...]
+ or: $dashless [--quiet] absorbgitdirs [--] [<path>...]"
OPTIONS_SPEC=
SUBDIRECTORY_OK=Yes
. git-sh-setup
wt_prefix=$(git rev-parse --show-prefix)
cd_to_toplevel
-# Restrict ourselves to a vanilla subset of protocols; the URLs
-# we get are under control of a remote repository, and we do not
-# want them kicking off arbitrary git-remote-* programs.
-#
-# If the user has already specified a set of allowed protocols,
-# we assume they know what they're doing and use that instead.
-: ${GIT_ALLOW_PROTOCOL=file:git:http:https:ssh}
-export GIT_ALLOW_PROTOCOL
+# Tell the rest of git that any URLs we get don't come
+# directly from the user, so it can apply policy as appropriate.
+GIT_PROTOCOL_FROM_USER=0
+export GIT_PROTOCOL_FROM_USER
command=
branch=
tstart
s|/*$||
')
- git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 &&
- die "$(eval_gettext "'\$sm_path' already exists in the index")"
+ if test -z "$force"
+ then
+ git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 &&
+ die "$(eval_gettext "'\$sm_path' already exists in the index")"
+ else
+ git ls-files -s "$sm_path" | sane_grep -v "^160000" > /dev/null 2>&1 &&
+ die "$(eval_gettext "'\$sm_path' already exists in the index and is not a submodule")"
+ fi
if test -z "$force" && ! git add --dry-run --ignore-missing "$sm_path" > /dev/null 2>&1
then
shift
done
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper init ${GIT_QUIET:+--quiet} ${prefix:+--prefix "$prefix"} "$@"
+ git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper init ${GIT_QUIET:+--quiet} "$@"
}
#
if test $just_cloned -eq 1
then
subsha1=
- update_module=checkout
+ case "$update_module" in
+ merge | rebase | none)
+ update_module=checkout ;;
+ esac
else
subsha1=$(sanitize_submodule_env; cd "$sm_path" &&
git rev-parse --verify HEAD) ||
done
}
+cmd_absorbgitdirs()
+{
+ git submodule--helper absorb-git-dirs --prefix "$wt_prefix" "$@"
+}
+
# This loop parses the command line arguments to find the
# subcommand name to dispatch. Parsing of the subcommand specific
# options are primarily done by the subcommand implementations.
while test $# != 0 && test -z "$command"
do
case "$1" in
- add | foreach | init | deinit | update | status | summary | sync)
+ add | foreach | init | deinit | update | status | summary | sync | absorbgitdirs)
command=$1
;;
-q|--quiet)
{ "fsck-objects", cmd_fsck, RUN_SETUP },
{ "gc", cmd_gc, RUN_SETUP },
{ "get-tar-commit-id", cmd_get_tar_commit_id },
- { "grep", cmd_grep, RUN_SETUP_GENTLY },
+ { "grep", cmd_grep, RUN_SETUP_GENTLY | SUPPORT_SUPER_PREFIX },
{ "hash-object", cmd_hash_object },
{ "help", cmd_help },
{ "index-pack", cmd_index_pack, RUN_SETUP_GENTLY },
{ "prune-packed", cmd_prune_packed, RUN_SETUP },
{ "pull", cmd_pull, RUN_SETUP | NEED_WORK_TREE },
{ "push", cmd_push, RUN_SETUP },
- { "read-tree", cmd_read_tree, RUN_SETUP },
+ { "read-tree", cmd_read_tree, RUN_SETUP | SUPPORT_SUPER_PREFIX},
{ "receive-pack", cmd_receive_pack },
{ "reflog", cmd_reflog, RUN_SETUP },
{ "remote", cmd_remote, RUN_SETUP },
{ "stage", cmd_add, RUN_SETUP | NEED_WORK_TREE },
{ "status", cmd_status, RUN_SETUP | NEED_WORK_TREE },
{ "stripspace", cmd_stripspace },
- { "submodule--helper", cmd_submodule__helper, RUN_SETUP },
+ { "submodule--helper", cmd_submodule__helper, RUN_SETUP | SUPPORT_SUPER_PREFIX},
{ "symbolic-ref", cmd_symbolic_ref, RUN_SETUP },
{ "tag", cmd_tag, RUN_SETUP },
{ "unpack-file", cmd_unpack_file, RUN_SETUP },
static void execv_dashed_external(const char **argv)
{
- struct strbuf cmd = STRBUF_INIT;
- const char *tmp;
+ struct child_process cmd = CHILD_PROCESS_INIT;
int status;
if (get_super_prefix())
use_pager = check_pager_config(argv[0]);
commit_pager_choice();
- strbuf_addf(&cmd, "git-%s", argv[0]);
+ argv_array_pushf(&cmd.args, "git-%s", argv[0]);
+ argv_array_pushv(&cmd.args, argv + 1);
+ cmd.clean_on_exit = 1;
+ cmd.wait_after_clean = 1;
+ cmd.silent_exec_failure = 1;
- /*
- * argv[0] must be the git command, but the argv array
- * belongs to the caller, and may be reused in
- * subsequent loop iterations. Save argv[0] and
- * restore it on error.
- */
- tmp = argv[0];
- argv[0] = cmd.buf;
-
- trace_argv_printf(argv, "trace: exec:");
+ trace_argv_printf(cmd.args.argv, "trace: exec:");
/*
- * if we fail because the command is not found, it is
- * OK to return. Otherwise, we just pass along the status code.
+ * If we fail because the command is not found, it is
+ * OK to return. Otherwise, we just pass along the status code,
+ * or our usual generic code if we were not even able to exec
+ * the program.
*/
- status = run_command_v_opt(argv, RUN_SILENT_EXEC_FAILURE | RUN_CLEAN_ON_EXIT);
- if (status >= 0 || errno != ENOENT)
+ status = run_command(&cmd);
+ if (status >= 0)
exit(status);
-
- argv[0] = tmp;
-
- strbuf_release(&cmd);
+ else if (errno != ENOENT)
+ exit(128);
}
static int run_argv(int *argcp, const char ***argv)
cmd = argv[0];
if (!cmd)
cmd = "git-help";
+ else {
+ const char *slash = find_last_dir_sep(cmd);
+ if (slash)
+ cmd = slash + 1;
+ }
trace_command_performance(argv);
all:: gitk-wish $(ALL_MSGFILES)
install:: all
+ $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
$(INSTALL) -m 755 gitk-wish '$(DESTDIR_SQ)$(bindir_SQ)'/gitk
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(msgsdir_SQ)'
$(foreach p,$(ALL_MSGFILES), $(INSTALL) -m 644 $p '$(DESTDIR_SQ)$(msgsdir_SQ)' &&) true
# Tcl ignores the next line -*- tcl -*- \
exec wish "$0" -- "$@"
-# Copyright © 2005-2014 Paul Mackerras. All rights reserved.
+# Copyright © 2005-2016 Paul Mackerras. All rights reserved.
# This program is free software; it may be used, copied, modified
# and distributed under the terms of the GNU General Public Licence,
# either version 2, or (at your option) any later version.
proc reloadcommits {} {
global curview viewcomplete selectedline currentid thickerline
global showneartags treediffs commitinterest cached_commitrow
- global targetid
+ global targetid commitinfo
set selid {}
if {$selectedline ne {}} {
getallcommits
}
clear_display
+ unset -nocomplain commitinfo
unset -nocomplain commitinterest
unset -nocomplain cached_commitrow
unset -nocomplain targetid
proc closevarcs {v} {
global varctok varccommits varcid parents children
- global cmitlisted commitidx vtokmod
+ global cmitlisted commitidx vtokmod curview numcommits
set missing_parents 0
set scripts {}
}
lappend varccommits($v,$b) $p
incr commitidx($v)
+ if {$v == $curview} {
+ set numcommits $commitidx($v)
+ }
set scripts [check_interest $p $scripts]
}
}
set h [expr {[font metrics uifont -linespace] + 2}]
set progresscanv .tf.bar.progress
canvas $progresscanv -relief sunken -height $h -borderwidth 2
- set progressitem [$progresscanv create rect -1 0 0 $h -fill lime]
+ set progressitem [$progresscanv create rect -1 0 0 $h -fill "#00ff00"]
set fprogitem [$progresscanv create rect -1 0 0 $h -fill yellow]
set rprogitem [$progresscanv create rect -1 0 0 $h -fill red]
}
set ctext .bleft.bottom.ctext
text $ctext -background $bgcolor -foreground $fgcolor \
- -state disabled -font textfont \
+ -state disabled -undo 0 -font textfont \
-yscrollcommand scrolltext -wrap none \
-xscrollcommand ".bleft.bottom.sbhorizontal set"
if {$have_tk85} {
set headctxmenu .headctxmenu
makemenu $headctxmenu {
{mc "Check out this branch" command cobranch}
+ {mc "Rename this branch" command mvbranch}
{mc "Remove this branch" command rmbranch}
{mc "Copy branch name" command {clipboard clear; clipboard append $headmenuhead}}
}
message $w.m -text [mc "
Gitk - a commit viewer for git
-Copyright \u00a9 2005-2014 Paul Mackerras
+Copyright \u00a9 2005-2016 Paul Mackerras
Use and redistribute under the terms of the GNU General Public License"] \
-justify center -aspect 400 -border 2 -bg $bgcolor -relief groove
0x00, 0x00, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f,
0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0x00, 0x00};
}
-image create bitmap reficon-H -background black -foreground lime \
+image create bitmap reficon-H -background black -foreground "#00ff00" \
-data $rectdata -maskdata $rectmask
image create bitmap reficon-o -background black -foreground "#ddddff" \
-data $rectdata -maskdata $rectmask
$ctext conf -state normal
while {[incr nr] <= 1000 && [gets $bdf line] >= 0} {
if {$ids != $diffids || $bdf != $blobdifffd($ids)} {
+ # Older diff read. Abort it.
catch {close $bdf}
+ if {$ids != $diffids} {
+ array unset blobdifffd $ids
+ }
return 0
}
parseblobdiffline $ids $line
blobdiffmaybeseehere [eof $bdf]
if {[eof $bdf]} {
catch {close $bdf}
+ array unset blobdifffd $ids
return 0
}
return [expr {$nr >= 1000? 2: 1}]
}
proc mkbranch {} {
- global rowmenuid mkbrtop NS
+ global NS rowmenuid
+
+ set top .branchdialog
+
+ set val(name) ""
+ set val(id) $rowmenuid
+ set val(command) [list mkbrgo $top]
+
+ set ui(title) [mc "Create branch"]
+ set ui(accept) [mc "Create"]
+
+ branchdia $top val ui
+}
+
+proc mvbranch {} {
+ global NS
+ global headmenuid headmenuhead
+
+ set top .branchdialog
+
+ set val(name) $headmenuhead
+ set val(id) $headmenuid
+ set val(command) [list mvbrgo $top $headmenuhead]
+
+ set ui(title) [mc "Rename branch %s" $headmenuhead]
+ set ui(accept) [mc "Rename"]
+
+ branchdia $top val ui
+}
+
+proc branchdia {top valvar uivar} {
+ global NS commitinfo
+ upvar $valvar val $uivar ui
- set top .makebranch
catch {destroy $top}
ttk_toplevel $top
make_transient $top .
- ${NS}::label $top.title -text [mc "Create new branch"]
+ ${NS}::label $top.title -text $ui(title)
grid $top.title - -pady 10
${NS}::label $top.id -text [mc "ID:"]
${NS}::entry $top.sha1 -width 40
- $top.sha1 insert 0 $rowmenuid
+ $top.sha1 insert 0 $val(id)
$top.sha1 conf -state readonly
grid $top.id $top.sha1 -sticky w
+ ${NS}::entry $top.head -width 60
+ $top.head insert 0 [lindex $commitinfo($val(id)) 0]
+ $top.head conf -state readonly
+ grid x $top.head -sticky ew
+ grid columnconfigure $top 1 -weight 1
${NS}::label $top.nlab -text [mc "Name:"]
${NS}::entry $top.name -width 40
+ $top.name insert 0 $val(name)
grid $top.nlab $top.name -sticky w
${NS}::frame $top.buts
- ${NS}::button $top.buts.go -text [mc "Create"] -command [list mkbrgo $top]
+ ${NS}::button $top.buts.go -text $ui(accept) -command $val(command)
${NS}::button $top.buts.can -text [mc "Cancel"] -command "catch {destroy $top}"
- bind $top <Key-Return> [list mkbrgo $top]
+ bind $top <Key-Return> $val(command)
bind $top <Key-Escape> "catch {destroy $top}"
grid $top.buts.go $top.buts.can
grid columnconfigure $top.buts 0 -weight 1 -uniform a
}
}
+proc mvbrgo {top prevname} {
+ global headids idheads mainhead mainheadid
+
+ set name [$top.name get]
+ set id [$top.sha1 get]
+ set cmdargs {}
+ if {$name eq $prevname} {
+ catch {destroy $top}
+ return
+ }
+ if {$name eq {}} {
+ error_popup [mc "Please specify a new name for the branch"] $top
+ return
+ }
+ catch {destroy $top}
+ lappend cmdargs -m $prevname $name
+ nowbusy renamebranch
+ update
+ if {[catch {
+ eval exec git branch $cmdargs
+ } err]} {
+ notbusy renamebranch
+ error_popup $err
+ } else {
+ notbusy renamebranch
+ removehead $id $prevname
+ removedhead $id $prevname
+ set headids($name) $id
+ lappend idheads($id) $name
+ addedhead $id $name
+ if {$prevname eq $mainhead} {
+ set mainhead $name
+ set mainheadid $id
+ }
+ redrawtags $id
+ dispneartags 0
+ run refill_reflist
+ }
+}
+
proc exec_citool {tool_args {baseid {}}} {
global commitinfo env
# context menu for a head
proc headmenu {x y id head} {
- global headmenuid headmenuhead headctxmenu mainhead
+ global headmenuid headmenuhead headctxmenu mainhead headids
stopfinding
set headmenuid $id
set headmenuhead $head
- set state normal
+ array set state {0 normal 1 normal 2 normal}
if {[string match "remotes/*" $head]} {
- set state disabled
+ set localhead [string range $head [expr [string last / $head] + 1] end]
+ if {[info exists headids($localhead)]} {
+ set state(0) disabled
+ }
+ array set state {1 disabled 2 disabled}
}
if {$head eq $mainhead} {
- set state disabled
+ array set state {0 disabled 2 disabled}
+ }
+ foreach i {0 1 2} {
+ $headctxmenu entryconfigure $i -state $state($i)
}
- $headctxmenu entryconfigure 0 -state $state
- $headctxmenu entryconfigure 1 -state $state
tk_popup $headctxmenu $x $y
}
global showlocalchanges
# check the tree is clean first??
+ set newhead $headmenuhead
+ set command [list | git checkout]
+ if {[string match "remotes/*" $newhead]} {
+ set remote $newhead
+ set newhead [string range $newhead [expr [string last / $newhead] + 1] end]
+ # The following check is redundant - the menu option should
+ # be disabled to begin with...
+ if {[info exists headids($newhead)]} {
+ error_popup [mc "A local branch named %s exists already" $newhead]
+ return
+ }
+ lappend command -b $newhead --track $remote
+ } else {
+ lappend command $newhead
+ }
+ lappend command 2>@1
nowbusy checkout [mc "Checking out"]
update
dohidelocalchanges
if {[catch {
- set fd [open [list | git checkout $headmenuhead 2>@1] r]
+ set fd [open $command r]
} err]} {
notbusy checkout
error_popup $err
dodiffindex
}
} else {
- filerun $fd [list readcheckoutstat $fd $headmenuhead $headmenuid]
+ filerun $fd [list readcheckoutstat $fd $newhead $headmenuid]
}
}
proc readcheckoutstat {fd newhead newheadid} {
- global mainhead mainheadid headids showlocalchanges progresscoords
+ global mainhead mainheadid headids idheads showlocalchanges progresscoords
global viewmainheadid curview
if {[gets $fd line] >= 0} {
notbusy checkout
if {[catch {close $fd} err]} {
error_popup $err
+ return
}
set oldmainid $mainheadid
+ if {! [info exists headids($newhead)]} {
+ set headids($newhead) $newheadid
+ lappend idheads($newheadid) $newhead
+ addedhead $newheadid $newhead
+ }
set mainhead $newhead
set mainheadid $newheadid
set viewmainheadid($curview) $newheadid
set extdifftool "meld"
}
-set colors {lime red blue magenta darkgrey brown orange}
+set colors {"#00ff00" red blue magenta darkgrey brown orange}
if {[tk windowingsystem] eq "win32"} {
set uicolor SystemButtonFace
set uifgcolor SystemButtonText
}
set diffcolors {red "#00a000" blue}
set diffcontext 3
-set mergecolors {red blue lime purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"}
+set mergecolors {red blue "#00ff00" purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"}
set ignorespace 0
set worddiff ""
set markbgcolor "#e0e0ff"
-set headbgcolor lime
+set headbgcolor "#00ff00"
set headfgcolor black
set headoutlinecolor black
set remotebgcolor #ffddaa
set linehoveroutlinecolor black
set mainheadcirclecolor yellow
set workingfilescirclecolor red
-set indexcirclecolor lime
+set indexcirclecolor "#00ff00"
set circlecolors {white blue gray blue blue}
set linkfgcolor blue
set circleoutlinecolor $fgcolor
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk — визуализация на подаванията в Git\n"
"\n"
-"Авторски права: © 2005-2014 Paul Mackerras\n"
+"Авторски права: © 2005-2016 Paul Mackerras\n"
"\n"
"Използвайте и разпространявайте при условията на ОПЛ на ГНУ"
# Translation of gitk
-# Copyright (C) 2005-2014 Paul Mackerras
+# Copyright (C) 2005-2016 Paul Mackerras
# This file is distributed under the same license as the gitk package.
# Alex Henrie <alexhenrie24@gmail.com>, 2015.
#
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - visualitzador de comissions per al git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Useu-lo i redistribuïu-lo sota els termes de la Llicència Pública General GNU"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - eine Visualisierung der Git-Historie\n"
"\n"
-"Copyright \\u00a9 2005-2014 Paul Mackerras\n"
+"Copyright \\u00a9 2005-2016 Paul Mackerras\n"
"\n"
"Benutzung und Weiterverbreitung gemäß den Bedingungen der GNU General Public "
"License"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - un visualizador de revisiones para git\n"
"\n"
-"Copyright \\u00a9 2005-2010 Paul Mackerras\n"
+"Copyright \\u00a9 2005-2016 Paul Mackerras\n"
"\n"
"Uso y redistribución permitidos según los términos de la Licencia Pública "
"General de GNU (GNU GPL)"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - visualisateur de commit pour git\n"
"\n"
-"Copyright \\u00a9 2005-2014 Paul Mackerras\n"
+"Copyright \\u00a9 2005-2016 Paul Mackerras\n"
"\n"
"Utilisation et redistribution soumises aux termes de la GNU General Public License"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - commit nézegető a githez\n"
"\n"
-"Szerzői jog \\u00a9 2005-2010 Paul Mackerras\n"
+"Szerzői jog \\u00a9 2005-2016 Paul Mackerras\n"
"\n"
"Használd és terjeszd a GNU General Public License feltételei mellett"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - un visualizzatore di revisioni per git\n"
"\n"
-"Copyright \\u00a9 2005-2010 Paul Mackerras\n"
+"Copyright \\u00a9 2005-2016 Paul Mackerras\n"
"\n"
"Utilizzo e redistribuzione permessi sotto i termini della GNU General Public "
"License"
# Copyright (C) 2005-2015 Paul Mackerras
# This file is distributed under the same license as the gitk package.
#
-# YOKOTA Hiroshi <yokota@netlab.cs.tsukuba.ac.jp>, 2015.
# Mizar <mizar.jp@gmail.com>, 2009.
# Junio C Hamano <gitster@pobox.com>, 2009.
+# YOKOTA Hiroshi <yokota@netlab.cs.tsukuba.ac.jp>, 2015.
+# Satoshi Yasushima <s.yasushima@gmail.com>, 2016.
msgid ""
msgstr ""
"Project-Id-Version: gitk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-05-17 14:32+1000\n"
"PO-Revision-Date: 2015-11-12 13:00+0900\n"
-"Last-Translator: YOKOTA Hiroshi <yokota@netlab.cs.tsukuba.ac.jp>\n"
+"Last-Translator: Satoshi Yasushima <s.yasushima@gmail.com>\n"
"Language-Team: Japanese\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
#: gitk:2630 gitk:2641
msgid "Diff this -> marked commit"
-msgstr "これと選択したコミットのdiffを見る"
+msgstr "これとマークを付けたコミットのdiffを見る"
#: gitk:2631 gitk:2642
msgid "Diff marked commit -> this"
-msgstr "選択したコミットとこれのdiffを見る"
+msgstr "マークを付けたコミットとこれのdiffを見る"
#: gitk:2632
msgid "Revert this commit"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - gitコミットビューア\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"使用および再配布は GNU General Public License に従ってください"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - um visualizador de revisões para o git \n"
"\n"
-"Copyright ©9 2005-2010 Paul Mackerras\n"
+"Copyright ©9 2005-2016 Paul Mackerras\n"
"\n"
"Uso e distribuição segundo os termos da Licença Pública Geral GNU"
--- /dev/null
+# Portuguese translations for gitk package.
+# Copyright (C) 2016 Paul Mackerras
+# This file is distributed under the same license as the gitk package.
+# Vasco Almeida <vascomalmeida@sapo.pt>, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: gitk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-04-15 16:52+0000\n"
+"PO-Revision-Date: 2016-05-06 15:35+0000\n"
+"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
+"Language-Team: Portuguese\n"
+"Language: pt\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"
+"X-Generator: Virtaal 0.7.1\n"
+
+#: gitk:140
+msgid "Couldn't get list of unmerged files:"
+msgstr "Não foi possível obter lista de ficheiros não integrados:"
+
+#: gitk:212 gitk:2399
+msgid "Color words"
+msgstr "Colorir palavras"
+
+#: gitk:217 gitk:2399 gitk:8239 gitk:8272
+msgid "Markup words"
+msgstr "Marcar palavras"
+
+#: gitk:324
+msgid "Error parsing revisions:"
+msgstr "Erro ao analisar revisões:"
+
+#: gitk:380
+msgid "Error executing --argscmd command:"
+msgstr "Erro ao executar o comando de --argscmd:"
+
+#: gitk:393
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr ""
+"Nenhum ficheiro selecionado: --merge especificado mas não há ficheiros por "
+"integrar."
+
+#: gitk:396
+msgid ""
+"No files selected: --merge specified but no unmerged files are within file "
+"limit."
+msgstr ""
+"Nenhum ficheiro selecionado: --merge especificado mas não há ficheiros por "
+"integrar ao nível de ficheiro."
+
+#: gitk:418 gitk:566
+msgid "Error executing git log:"
+msgstr "Erro ao executar git log:"
+
+#: gitk:436 gitk:582
+msgid "Reading"
+msgstr "A ler"
+
+#: gitk:496 gitk:4544
+msgid "Reading commits..."
+msgstr "A ler commits..."
+
+#: gitk:499 gitk:1637 gitk:4547
+msgid "No commits selected"
+msgstr "Nenhum commit selecionado"
+
+#: gitk:1445 gitk:4064 gitk:12469
+msgid "Command line"
+msgstr "Linha de comandos"
+
+#: gitk:1511
+msgid "Can't parse git log output:"
+msgstr "Não é possível analisar a saída de git log:"
+
+#: gitk:1740
+msgid "No commit information available"
+msgstr "Não há informação disponível sobre o commit"
+
+#: gitk:1903 gitk:1932 gitk:4334 gitk:9702 gitk:11274 gitk:11554
+msgid "OK"
+msgstr "OK"
+
+#: gitk:1934 gitk:4336 gitk:9215 gitk:9294 gitk:9424 gitk:9473 gitk:9704
+#: gitk:11275 gitk:11555
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: gitk:2083
+msgid "&Update"
+msgstr "At&ualizar"
+
+#: gitk:2084
+msgid "&Reload"
+msgstr "&Recarregar"
+
+#: gitk:2085
+msgid "Reread re&ferences"
+msgstr "Reler re&ferências"
+
+#: gitk:2086
+msgid "&List references"
+msgstr "&Listar referências"
+
+#: gitk:2088
+msgid "Start git &gui"
+msgstr "Iniciar git &gui"
+
+#: gitk:2090
+msgid "&Quit"
+msgstr "&Sair"
+
+#: gitk:2082
+msgid "&File"
+msgstr "&Ficheiro"
+
+#: gitk:2094
+msgid "&Preferences"
+msgstr "&Preferências"
+
+#: gitk:2093
+msgid "&Edit"
+msgstr "&Editar"
+
+#: gitk:2098
+msgid "&New view..."
+msgstr "&Nova vista..."
+
+#: gitk:2099
+msgid "&Edit view..."
+msgstr "&Editar vista..."
+
+#: gitk:2100
+msgid "&Delete view"
+msgstr "Elimina&r vista"
+
+#: gitk:2102
+msgid "&All files"
+msgstr "&Todos os ficheiros"
+
+#: gitk:2097
+msgid "&View"
+msgstr "&Ver"
+
+#: gitk:2107 gitk:2117
+msgid "&About gitk"
+msgstr "&Sobre gitk"
+
+#: gitk:2108 gitk:2122
+msgid "&Key bindings"
+msgstr "&Atalhos"
+
+#: gitk:2106 gitk:2121
+msgid "&Help"
+msgstr "&Ajuda"
+
+#: gitk:2199 gitk:8671
+msgid "SHA1 ID:"
+msgstr "ID SHA1:"
+
+#: gitk:2243
+msgid "Row"
+msgstr "Linha"
+
+#: gitk:2281
+msgid "Find"
+msgstr "Procurar"
+
+#: gitk:2309
+msgid "commit"
+msgstr "commit"
+
+#: gitk:2313 gitk:2315 gitk:4706 gitk:4729 gitk:4753 gitk:6774 gitk:6846
+#: gitk:6931
+msgid "containing:"
+msgstr "contendo:"
+
+#: gitk:2316 gitk:3545 gitk:3550 gitk:4782
+msgid "touching paths:"
+msgstr "altera os caminhos:"
+
+#: gitk:2317 gitk:4796
+msgid "adding/removing string:"
+msgstr "adiciona/remove a cadeia:"
+
+#: gitk:2318 gitk:4798
+msgid "changing lines matching:"
+msgstr "altera linhas com:"
+
+#: gitk:2327 gitk:2329 gitk:4785
+msgid "Exact"
+msgstr "Exato"
+
+#: gitk:2329 gitk:4873 gitk:6742
+msgid "IgnCase"
+msgstr "IgnMaiúsculas"
+
+#: gitk:2329 gitk:4755 gitk:4871 gitk:6738
+msgid "Regexp"
+msgstr "Expr. regular"
+
+#: gitk:2331 gitk:2332 gitk:4893 gitk:4923 gitk:4930 gitk:6867 gitk:6935
+msgid "All fields"
+msgstr "Todos os campos"
+
+#: gitk:2332 gitk:4890 gitk:4923 gitk:6805
+msgid "Headline"
+msgstr "Cabeçalho"
+
+#: gitk:2333 gitk:4890 gitk:6805 gitk:6935 gitk:7408
+msgid "Comments"
+msgstr "Comentários"
+
+#: gitk:2333 gitk:4890 gitk:4895 gitk:4930 gitk:6805 gitk:7343 gitk:8849
+#: gitk:8864
+msgid "Author"
+msgstr "Autor"
+
+#: gitk:2333 gitk:4890 gitk:6805 gitk:7345
+msgid "Committer"
+msgstr "Committer"
+
+#: gitk:2367
+msgid "Search"
+msgstr "Pesquisar"
+
+#: gitk:2375
+msgid "Diff"
+msgstr "Diff"
+
+#: gitk:2377
+msgid "Old version"
+msgstr "Versão antiga"
+
+#: gitk:2379
+msgid "New version"
+msgstr "Versão nova"
+
+#: gitk:2382
+msgid "Lines of context"
+msgstr "Linhas de contexto"
+
+#: gitk:2392
+msgid "Ignore space change"
+msgstr "Ignorar espaços"
+
+#: gitk:2396 gitk:2398 gitk:7978 gitk:8225
+msgid "Line diff"
+msgstr "Diff de linha"
+
+#: gitk:2463
+msgid "Patch"
+msgstr "Patch"
+
+#: gitk:2465
+msgid "Tree"
+msgstr "Árvore"
+
+#: gitk:2635 gitk:2656
+msgid "Diff this -> selected"
+msgstr "Diff este -> seleção"
+
+#: gitk:2636 gitk:2657
+msgid "Diff selected -> this"
+msgstr "Diff seleção -> este"
+
+#: gitk:2637 gitk:2658
+msgid "Make patch"
+msgstr "Gerar patch"
+
+#: gitk:2638 gitk:9273
+msgid "Create tag"
+msgstr "Criar tag"
+
+#: gitk:2639
+msgid "Copy commit summary"
+msgstr "Copiar sumário do commit"
+
+#: gitk:2640 gitk:9404
+msgid "Write commit to file"
+msgstr "Escrever commit num ficheiro"
+
+#: gitk:2641 gitk:9461
+msgid "Create new branch"
+msgstr "Criar novo ramo"
+
+#: gitk:2642
+msgid "Cherry-pick this commit"
+msgstr "Efetuar cherry-pick deste commit"
+
+#: gitk:2643
+msgid "Reset HEAD branch to here"
+msgstr "Repor ramo HEAD para aqui"
+
+#: gitk:2644
+msgid "Mark this commit"
+msgstr "Marcar este commit"
+
+#: gitk:2645
+msgid "Return to mark"
+msgstr "Voltar à marca"
+
+#: gitk:2646
+msgid "Find descendant of this and mark"
+msgstr "Encontrar descendeste deste e da marca"
+
+#: gitk:2647
+msgid "Compare with marked commit"
+msgstr "Comparar com o commit marcado"
+
+#: gitk:2648 gitk:2659
+msgid "Diff this -> marked commit"
+msgstr "Diff este -> commit marcado"
+
+#: gitk:2649 gitk:2660
+msgid "Diff marked commit -> this"
+msgstr "Diff commit marcado -> este"
+
+#: gitk:2650
+msgid "Revert this commit"
+msgstr "Reverter este commit"
+
+#: gitk:2666
+msgid "Check out this branch"
+msgstr "Extrair este ramo"
+
+#: gitk:2667
+msgid "Remove this branch"
+msgstr "Remover este ramo"
+
+#: gitk:2668
+msgid "Copy branch name"
+msgstr "Copiar nome do ramo"
+
+#: gitk:2675
+msgid "Highlight this too"
+msgstr "Realçar este também"
+
+#: gitk:2676
+msgid "Highlight this only"
+msgstr "Realçar apenas este"
+
+#: gitk:2677
+msgid "External diff"
+msgstr "Diff externo"
+
+#: gitk:2678
+msgid "Blame parent commit"
+msgstr "Culpar commit pai"
+
+#: gitk:2679
+msgid "Copy path"
+msgstr "Copiar caminho"
+
+#: gitk:2686
+msgid "Show origin of this line"
+msgstr "Mostrar origem deste ficheiro"
+
+#: gitk:2687
+msgid "Run git gui blame on this line"
+msgstr "Executar git gui blame sobre esta linha"
+
+#: gitk:3031
+msgid "About gitk"
+msgstr "Sobre gitk"
+
+#: gitk:3033
+msgid ""
+"\n"
+"Gitk - a commit viewer for git\n"
+"\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
+"\n"
+"Use and redistribute under the terms of the GNU General Public License"
+msgstr ""
+"\n"
+"Gitk - um visualizador de commits do git\n"
+"\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
+"\n"
+"Use e redistribua sob os termos da GNU General Public License"
+
+#: gitk:3041 gitk:3108 gitk:9890
+msgid "Close"
+msgstr "Fechar"
+
+#: gitk:3062
+msgid "Gitk key bindings"
+msgstr "Atalhos do gitk"
+
+#: gitk:3065
+msgid "Gitk key bindings:"
+msgstr "Atalhos do gitk:"
+
+#: gitk:3067
+#, tcl-format
+msgid "<%s-Q>\t\tQuit"
+msgstr "<%s-Q>\t\tSair"
+
+#: gitk:3068
+#, tcl-format
+msgid "<%s-W>\t\tClose window"
+msgstr "<%s-W>\t\tFechar janela"
+
+#: gitk:3069
+msgid "<Home>\t\tMove to first commit"
+msgstr "<Home>\t\tMover para o primeiro commit"
+
+#: gitk:3070
+msgid "<End>\t\tMove to last commit"
+msgstr "<End>\t\tMover para o último commit"
+
+#: gitk:3071
+msgid "<Up>, p, k\tMove up one commit"
+msgstr "<Cima>, p, k\tMover para o commit acima"
+
+#: gitk:3072
+msgid "<Down>, n, j\tMove down one commit"
+msgstr "<Baixo>, n, j\tMover para o commit abaixo"
+
+#: gitk:3073
+msgid "<Left>, z, h\tGo back in history list"
+msgstr "<Esquerda>, z, h\tRecuar no histórico"
+
+#: gitk:3074
+msgid "<Right>, x, l\tGo forward in history list"
+msgstr "<Direita>, x, l\tAvançar no histórico"
+
+#: gitk:3075
+#, tcl-format
+msgid "<%s-n>\tGo to n-th parent of current commit in history list"
+msgstr "<%s-n>\tIr para o n-ésimo pai do commit atual no histórico"
+
+#: gitk:3076
+msgid "<PageUp>\tMove up one page in commit list"
+msgstr "<PageUp>\tMover a lista de commits uma página para cima"
+
+#: gitk:3077
+msgid "<PageDown>\tMove down one page in commit list"
+msgstr "<PageDown>\tMover a lista de commits uma página para baixo"
+
+#: gitk:3078
+#, tcl-format
+msgid "<%s-Home>\tScroll to top of commit list"
+msgstr "<%s-Home>\tDeslocar para o topo da lista"
+
+#: gitk:3079
+#, tcl-format
+msgid "<%s-End>\tScroll to bottom of commit list"
+msgstr "<%s-End>\tDeslocar para o fim da lista"
+
+#: gitk:3080
+#, tcl-format
+msgid "<%s-Up>\tScroll commit list up one line"
+msgstr "<%s-Cima>\tDeslocar a lista de commits uma linha para cima"
+
+#: gitk:3081
+#, tcl-format
+msgid "<%s-Down>\tScroll commit list down one line"
+msgstr "<%s-Baixo>\tDeslocar a lista de commits uma linha para baixo"
+
+#: gitk:3082
+#, tcl-format
+msgid "<%s-PageUp>\tScroll commit list up one page"
+msgstr "<%s-PageUp>\tDeslocar a lista de commits uma página para cima"
+
+#: gitk:3083
+#, tcl-format
+msgid "<%s-PageDown>\tScroll commit list down one page"
+msgstr "<%s-PageDown>\tDeslocar a lista de commits uma página para baixo"
+
+#: gitk:3084
+msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
+msgstr "<Shift-Cima>\tProcurar para trás (para cima, commits posteriores)"
+
+#: gitk:3085
+msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
+msgstr "<Shift-Baixo>\tProcurar para a frente (para baixo, commits anteriores)"
+
+#: gitk:3086
+msgid "<Delete>, b\tScroll diff view up one page"
+msgstr "<Delete>, b\tDeslocar vista diff uma página para cima"
+
+#: gitk:3087
+msgid "<Backspace>\tScroll diff view up one page"
+msgstr "<Retrocesso>\tDeslocar vista diff uma página para cima"
+
+#: gitk:3088
+msgid "<Space>\t\tScroll diff view down one page"
+msgstr "<Espaço>\tDeslocar vista diff uma página para baixo"
+
+#: gitk:3089
+msgid "u\t\tScroll diff view up 18 lines"
+msgstr "u\t\tDeslocar vista diff 18 linhas para cima"
+
+#: gitk:3090
+msgid "d\t\tScroll diff view down 18 lines"
+msgstr "d\t\tDeslocar vista diff 18 linhas para baixo"
+
+#: gitk:3091
+#, tcl-format
+msgid "<%s-F>\t\tFind"
+msgstr "<%s-F>\t\tProcurar"
+
+#: gitk:3092
+#, tcl-format
+msgid "<%s-G>\t\tMove to next find hit"
+msgstr "<%s-G>\t\tMover para a ocorrência seguinte"
+
+#: gitk:3093
+msgid "<Return>\tMove to next find hit"
+msgstr "<Return>\tMover para a ocorrência seguinte"
+
+#: gitk:3094
+msgid "g\t\tGo to commit"
+msgstr "g\t\tIr para o commit"
+
+#: gitk:3095
+msgid "/\t\tFocus the search box"
+msgstr "/\t\tFocar a caixa de pesquisa"
+
+#: gitk:3096
+msgid "?\t\tMove to previous find hit"
+msgstr "?\t\tMover para a ocorrência anterior"
+
+#: gitk:3097
+msgid "f\t\tScroll diff view to next file"
+msgstr "f\t\tDeslocar vista diff para o ficheiro seguinte"
+
+#: gitk:3098
+#, tcl-format
+msgid "<%s-S>\t\tSearch for next hit in diff view"
+msgstr "<%s-S>\t\tProcurar pela ocorrência seguinte na vista diff"
+
+#: gitk:3099
+#, tcl-format
+msgid "<%s-R>\t\tSearch for previous hit in diff view"
+msgstr "<%s-R>\t\tProcurar pela ocorrência anterior na vista diff"
+
+#: gitk:3100
+#, tcl-format
+msgid "<%s-KP+>\tIncrease font size"
+msgstr "<%s-KP+>\tAumentar o tamanho da letra"
+
+#: gitk:3101
+#, tcl-format
+msgid "<%s-plus>\tIncrease font size"
+msgstr "<%s-mais>\tAumentar o tamanho da letra"
+
+#: gitk:3102
+#, tcl-format
+msgid "<%s-KP->\tDecrease font size"
+msgstr "<%s-KP->\tDiminuir o tamanho da letra"
+
+#: gitk:3103
+#, tcl-format
+msgid "<%s-minus>\tDecrease font size"
+msgstr "<%s-menos>\tDiminuir o tamanho da letra"
+
+#: gitk:3104
+msgid "<F5>\t\tUpdate"
+msgstr "<F5>\t\tAtualizar"
+
+#: gitk:3569 gitk:3578
+#, tcl-format
+msgid "Error creating temporary directory %s:"
+msgstr "Erro ao criar ficheiro temporário %s:"
+
+#: gitk:3591
+#, tcl-format
+msgid "Error getting \"%s\" from %s:"
+msgstr "Erro ao obter \"%s\" de %s:"
+
+#: gitk:3654
+msgid "command failed:"
+msgstr "o comando falhou:"
+
+#: gitk:3803
+msgid "No such commit"
+msgstr "Commit inexistente"
+
+#: gitk:3817
+msgid "git gui blame: command failed:"
+msgstr "git gui blame: o comando falhou:"
+
+#: gitk:3848
+#, tcl-format
+msgid "Couldn't read merge head: %s"
+msgstr "Não foi possível ler a cabeça de integração: %s"
+
+#: gitk:3856
+#, tcl-format
+msgid "Error reading index: %s"
+msgstr "Erro ao ler o índice: %s"
+
+#: gitk:3881
+#, tcl-format
+msgid "Couldn't start git blame: %s"
+msgstr "Não foi possível iniciar git blame: %s"
+
+#: gitk:3884 gitk:6773
+msgid "Searching"
+msgstr "A procurar"
+
+#: gitk:3916
+#, tcl-format
+msgid "Error running git blame: %s"
+msgstr "Erro ao executar git blame: %s"
+
+#: gitk:3944
+#, tcl-format
+msgid "That line comes from commit %s, which is not in this view"
+msgstr "Essa linha provém do commit %s, que não está nesta vista"
+
+#: gitk:3958
+msgid "External diff viewer failed:"
+msgstr "Visualizador diff externo falhou:"
+
+#: gitk:4062
+msgid "All files"
+msgstr "Todos os ficheiros"
+
+#: gitk:4086
+msgid "View"
+msgstr "Vista"
+
+#: gitk:4089
+msgid "Gitk view definition"
+msgstr "Definição de vistas do gitk"
+
+#: gitk:4093
+msgid "Remember this view"
+msgstr "Recordar esta vista"
+
+#: gitk:4094
+msgid "References (space separated list):"
+msgstr "Referências (lista separada por espaço):"
+
+#: gitk:4095
+msgid "Branches & tags:"
+msgstr "Ramos e tags:"
+
+#: gitk:4096
+msgid "All refs"
+msgstr "Todas as referências"
+
+#: gitk:4097
+msgid "All (local) branches"
+msgstr "Todos os ramos (locais)"
+
+#: gitk:4098
+msgid "All tags"
+msgstr "Todas as tags"
+
+#: gitk:4099
+msgid "All remote-tracking branches"
+msgstr "Todos os ramos remotos de monitorização"
+
+#: gitk:4100
+msgid "Commit Info (regular expressions):"
+msgstr "Informação Sobre o Commit (expressões regulares):"
+
+#: gitk:4101
+msgid "Author:"
+msgstr "Autor:"
+
+#: gitk:4102
+msgid "Committer:"
+msgstr "Committer:"
+
+#: gitk:4103
+msgid "Commit Message:"
+msgstr "Mensagem de Commit:"
+
+#: gitk:4104
+msgid "Matches all Commit Info criteria"
+msgstr "Corresponde a todos os critérios da Informação Sobre o Commit"
+
+#: gitk:4105
+msgid "Matches no Commit Info criteria"
+msgstr "Não corresponde a nenhum critério da Informação Sobre o Commit"
+
+#: gitk:4106
+msgid "Changes to Files:"
+msgstr "Alterações nos Ficheiros:"
+
+#: gitk:4107
+msgid "Fixed String"
+msgstr "Cadeia Fixa"
+
+#: gitk:4108
+msgid "Regular Expression"
+msgstr "Expressão Regular"
+
+#: gitk:4109
+msgid "Search string:"
+msgstr "Procurar pela cadeia:"
+
+#: gitk:4110
+msgid ""
+"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+msgstr ""
+"Datas de Commit (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
+"15:27:38\"):"
+
+#: gitk:4111
+msgid "Since:"
+msgstr "Desde:"
+
+#: gitk:4112
+msgid "Until:"
+msgstr "Até:"
+
+#: gitk:4113
+msgid "Limit and/or skip a number of revisions (positive integer):"
+msgstr "Limitar e/ou ignorar um número de revisões (inteiro positivo):"
+
+#: gitk:4114
+msgid "Number to show:"
+msgstr "Número a mostrar:"
+
+#: gitk:4115
+msgid "Number to skip:"
+msgstr "Número a ignorar:"
+
+#: gitk:4116
+msgid "Miscellaneous options:"
+msgstr "Opções diversas:"
+
+#: gitk:4117
+msgid "Strictly sort by date"
+msgstr "Ordenar estritamente pela data"
+
+#: gitk:4118
+msgid "Mark branch sides"
+msgstr "Marcar lado dos ramos"
+
+#: gitk:4119
+msgid "Limit to first parent"
+msgstr "Restringir ao primeiro pai"
+
+#: gitk:4120
+msgid "Simple history"
+msgstr "Histórico simples"
+
+#: gitk:4121
+msgid "Additional arguments to git log:"
+msgstr "Argumentos adicionais ao git log:"
+
+#: gitk:4122
+msgid "Enter files and directories to include, one per line:"
+msgstr "Introduza ficheiros e diretórios para incluir, um por linha:"
+
+#: gitk:4123
+msgid "Command to generate more commits to include:"
+msgstr "Comando para gerar mais commits para incluir:"
+
+#: gitk:4247
+msgid "Gitk: edit view"
+msgstr "Gitk: editar vista"
+
+#: gitk:4255
+msgid "-- criteria for selecting revisions"
+msgstr "-- critério para selecionar revisões"
+
+#: gitk:4260
+msgid "View Name"
+msgstr "Nome da Vista"
+
+#: gitk:4335
+msgid "Apply (F5)"
+msgstr "Aplicar (F5)"
+
+#: gitk:4373
+msgid "Error in commit selection arguments:"
+msgstr "Erro nos argumentos de seleção de commits:"
+
+#: gitk:4428 gitk:4481 gitk:4943 gitk:4957 gitk:6227 gitk:12410 gitk:12411
+msgid "None"
+msgstr "Nenhum"
+
+#: gitk:5040 gitk:5045
+msgid "Descendant"
+msgstr "Descendente"
+
+#: gitk:5041
+msgid "Not descendant"
+msgstr "Não descendente"
+
+#: gitk:5048 gitk:5053
+msgid "Ancestor"
+msgstr "Antecessor"
+
+#: gitk:5049
+msgid "Not ancestor"
+msgstr "Não antecessor"
+
+#: gitk:5343
+msgid "Local changes checked in to index but not committed"
+msgstr "Alterações locais preparadas no índice mas não submetidas"
+
+#: gitk:5379
+msgid "Local uncommitted changes, not checked in to index"
+msgstr "Alterações locais não submetidas, não preparadas no índice"
+
+#: gitk:7153
+msgid "and many more"
+msgstr "e muitos mais"
+
+#: gitk:7156
+msgid "many"
+msgstr "muitos"
+
+#: gitk:7347
+msgid "Tags:"
+msgstr "Tags:"
+
+#: gitk:7364 gitk:7370 gitk:8844
+msgid "Parent"
+msgstr "Pai"
+
+#: gitk:7375
+msgid "Child"
+msgstr "Filho"
+
+#: gitk:7384
+msgid "Branch"
+msgstr "Ramo"
+
+#: gitk:7387
+msgid "Follows"
+msgstr "Sucede"
+
+#: gitk:7390
+msgid "Precedes"
+msgstr "Precede"
+
+#: gitk:7985
+#, tcl-format
+msgid "Error getting diffs: %s"
+msgstr "Erro ao obter diferenças: %s"
+
+#: gitk:8669
+msgid "Goto:"
+msgstr "Ir para:"
+
+#: gitk:8690
+#, tcl-format
+msgid "Short SHA1 id %s is ambiguous"
+msgstr "O id SHA1 abreviado %s é ambíguo"
+
+#: gitk:8697
+#, tcl-format
+msgid "Revision %s is not known"
+msgstr "A revisão %s não é conhecida"
+
+#: gitk:8707
+#, tcl-format
+msgid "SHA1 id %s is not known"
+msgstr "O id SHA1 %s não é conhecido"
+
+#: gitk:8709
+#, tcl-format
+msgid "Revision %s is not in the current view"
+msgstr "A revisão %s não se encontra na vista atual"
+
+#: gitk:8851 gitk:8866
+msgid "Date"
+msgstr "Data"
+
+#: gitk:8854
+msgid "Children"
+msgstr "Filhos"
+
+#: gitk:8917
+#, tcl-format
+msgid "Reset %s branch to here"
+msgstr "Repor o ramo %s para aqui"
+
+#: gitk:8919
+msgid "Detached head: can't reset"
+msgstr "Cabeça destacada: não é possível repor"
+
+#: gitk:9024 gitk:9030
+msgid "Skipping merge commit "
+msgstr "A ignorar commit de integração "
+
+#: gitk:9039 gitk:9044
+msgid "Error getting patch ID for "
+msgstr "Erro ao obter ID de patch de "
+
+#: gitk:9040 gitk:9045
+msgid " - stopping\n"
+msgstr " - a interromper\n"
+
+#: gitk:9050 gitk:9053 gitk:9061 gitk:9075 gitk:9084
+msgid "Commit "
+msgstr "Commit "
+
+#: gitk:9054
+msgid ""
+" is the same patch as\n"
+" "
+msgstr ""
+" é o mesmo patch que\n"
+" "
+
+#: gitk:9062
+msgid ""
+" differs from\n"
+" "
+msgstr ""
+" difere de\n"
+" "
+
+#: gitk:9064
+msgid ""
+"Diff of commits:\n"
+"\n"
+msgstr ""
+"Diferença dos commits:\n"
+"\n"
+
+#: gitk:9076 gitk:9085
+#, tcl-format
+msgid " has %s children - stopping\n"
+msgstr " tem %s filhos - a interromper\n"
+
+#: gitk:9104
+#, tcl-format
+msgid "Error writing commit to file: %s"
+msgstr "Erro ao escrever commit no ficheiro: %s"
+
+#: gitk:9110
+#, tcl-format
+msgid "Error diffing commits: %s"
+msgstr "Erro ao calcular as diferenças dos commits: %s"
+
+#: gitk:9156
+msgid "Top"
+msgstr "Topo"
+
+#: gitk:9157
+msgid "From"
+msgstr "De"
+
+#: gitk:9162
+msgid "To"
+msgstr "Para"
+
+#: gitk:9186
+msgid "Generate patch"
+msgstr "Gerar patch"
+
+#: gitk:9188
+msgid "From:"
+msgstr "De:"
+
+#: gitk:9197
+msgid "To:"
+msgstr "Para:"
+
+#: gitk:9206
+msgid "Reverse"
+msgstr "Reverter"
+
+#: gitk:9208 gitk:9418
+msgid "Output file:"
+msgstr "Ficheiro de saída:"
+
+#: gitk:9214
+msgid "Generate"
+msgstr "Gerar"
+
+#: gitk:9252
+msgid "Error creating patch:"
+msgstr "Erro ao criar patch:"
+
+#: gitk:9275 gitk:9406 gitk:9463
+msgid "ID:"
+msgstr "ID:"
+
+#: gitk:9284
+msgid "Tag name:"
+msgstr "Nome da tag:"
+
+#: gitk:9287
+msgid "Tag message is optional"
+msgstr "A mensagem da tag é opcional"
+
+#: gitk:9289
+msgid "Tag message:"
+msgstr "Mensagem da tag:"
+
+#: gitk:9293 gitk:9472
+msgid "Create"
+msgstr "Criar"
+
+#: gitk:9311
+msgid "No tag name specified"
+msgstr "Nenhum nome de tag especificado"
+
+#: gitk:9315
+#, tcl-format
+msgid "Tag \"%s\" already exists"
+msgstr "A tag \"%s\" já existe"
+
+#: gitk:9325
+msgid "Error creating tag:"
+msgstr "Erro ao criar tag:"
+
+#: gitk:9415
+msgid "Command:"
+msgstr "Comando:"
+
+#: gitk:9423
+msgid "Write"
+msgstr "Escrever"
+
+#: gitk:9441
+msgid "Error writing commit:"
+msgstr "Erro ao escrever commit:"
+
+#: gitk:9468
+msgid "Name:"
+msgstr "Nome:"
+
+#: gitk:9491
+msgid "Please specify a name for the new branch"
+msgstr "Especifique um nome para o novo ramo"
+
+#: gitk:9496
+#, tcl-format
+msgid "Branch '%s' already exists. Overwrite?"
+msgstr "O ramo '%s' já existe. Substituí-lo?"
+
+#: gitk:9563
+#, tcl-format
+msgid "Commit %s is already included in branch %s -- really re-apply it?"
+msgstr "O commit %s já está incluído no ramo %s -- reaplicá-lo mesmo assim?"
+
+#: gitk:9568
+msgid "Cherry-picking"
+msgstr "A efetuar cherry-pick"
+
+#: gitk:9577
+#, tcl-format
+msgid ""
+"Cherry-pick failed because of local changes to file '%s'.\n"
+"Please commit, reset or stash your changes and try again."
+msgstr ""
+"Falha ao efetuar cherry-pick devido a alterações locais no ficheiro '%s'.\n"
+"Submeta, empilhe ou reponha as alterações e tente de novo."
+
+#: gitk:9583
+msgid ""
+"Cherry-pick failed because of merge conflict.\n"
+"Do you wish to run git citool to resolve it?"
+msgstr ""
+"Falha ao efetuar cherry-pick devido a conflito de integração.\n"
+"Deseja executar git citool para resolvê-lo?"
+
+#: gitk:9599 gitk:9657
+msgid "No changes committed"
+msgstr "Não foi submetida nenhum alteração"
+
+#: gitk:9626
+#, tcl-format
+msgid "Commit %s is not included in branch %s -- really revert it?"
+msgstr "O commit %s não está incluído no ramo %s -- revertê-lo mesmo assim?"
+
+#: gitk:9631
+msgid "Reverting"
+msgstr "A reverter"
+
+#: gitk:9639
+#, tcl-format
+msgid ""
+"Revert failed because of local changes to the following files:%s Please "
+"commit, reset or stash your changes and try again."
+msgstr ""
+"Falha ao reverter devido a alterações locais nos seguintes ficheiros:%s "
+"Submeta, empilhe ou reponha as alterações e tente de novo."
+
+#: gitk:9643
+msgid ""
+"Revert failed because of merge conflict.\n"
+" Do you wish to run git citool to resolve it?"
+msgstr ""
+"Falha ao reverter devido a conflito de integração.\n"
+"Deseja executar git citool para resolvê-lo?"
+
+#: gitk:9686
+msgid "Confirm reset"
+msgstr "Confirmar reposição"
+
+#: gitk:9688
+#, tcl-format
+msgid "Reset branch %s to %s?"
+msgstr "Repor o ramo %s para %s?"
+
+#: gitk:9690
+msgid "Reset type:"
+msgstr "Tipo de reposição:"
+
+#: gitk:9693
+msgid "Soft: Leave working tree and index untouched"
+msgstr "Suave: Deixar a árvore de trabalho e o índice intactos"
+
+#: gitk:9696
+msgid "Mixed: Leave working tree untouched, reset index"
+msgstr "Misto: Deixar a árvore de trabalho intacta, repor índice"
+
+#: gitk:9699
+msgid ""
+"Hard: Reset working tree and index\n"
+"(discard ALL local changes)"
+msgstr ""
+"Forte: Repor árvore de trabalho e índice\n"
+"(descartar TODAS as alterações locais)"
+
+#: gitk:9716
+msgid "Resetting"
+msgstr "A repor"
+
+#: gitk:9776
+msgid "Checking out"
+msgstr "A extrair"
+
+#: gitk:9829
+msgid "Cannot delete the currently checked-out branch"
+msgstr "Não é possível eliminar o ramo atual extraído"
+
+#: gitk:9835
+#, tcl-format
+msgid ""
+"The commits on branch %s aren't on any other branch.\n"
+"Really delete branch %s?"
+msgstr ""
+"Os commits no ramo %s não estão presentes em mais nenhum ramo.\n"
+"Eliminar o ramo %s mesmo assim?"
+
+#: gitk:9866
+#, tcl-format
+msgid "Tags and heads: %s"
+msgstr "Tags e cabeças: %s"
+
+#: gitk:9883
+msgid "Filter"
+msgstr "Filtrar"
+
+#: gitk:10179
+msgid ""
+"Error reading commit topology information; branch and preceding/following "
+"tag information will be incomplete."
+msgstr ""
+"Erro ao ler informação de topologia do commit; a informação do ramo e da tag "
+"precedente/seguinte ficará incompleta."
+
+#: gitk:11156
+msgid "Tag"
+msgstr "Tag"
+
+#: gitk:11160
+msgid "Id"
+msgstr "Id"
+
+#: gitk:11243
+msgid "Gitk font chooser"
+msgstr "Escolha de tipo de letra do gitk"
+
+#: gitk:11260
+msgid "B"
+msgstr "B"
+
+#: gitk:11263
+msgid "I"
+msgstr "I"
+
+#: gitk:11381
+msgid "Commit list display options"
+msgstr "Opções de visualização da lista de commits"
+
+#: gitk:11384
+msgid "Maximum graph width (lines)"
+msgstr "Largura máxima do gráfico (linhas)"
+
+#: gitk:11388
+#, no-tcl-format
+msgid "Maximum graph width (% of pane)"
+msgstr "Largura máxima do gráfico (% do painel)"
+
+#: gitk:11391
+msgid "Show local changes"
+msgstr "Mostrar alterações locais"
+
+#: gitk:11394
+msgid "Auto-select SHA1 (length)"
+msgstr "Selecionar automaticamente SHA1 (largura)"
+
+#: gitk:11398
+msgid "Hide remote refs"
+msgstr "Ocultar referências remotas"
+
+#: gitk:11402
+msgid "Diff display options"
+msgstr "Opções de visualização de diferenças"
+
+#: gitk:11404
+msgid "Tab spacing"
+msgstr "Espaçamento da tabulação"
+
+#: gitk:11407
+msgid "Display nearby tags/heads"
+msgstr "Mostrar tags/cabeças próximas"
+
+#: gitk:11410
+msgid "Maximum # tags/heads to show"
+msgstr "Nº máximo de tags/cabeças a mostrar"
+
+#: gitk:11413
+msgid "Limit diffs to listed paths"
+msgstr "Limitar diferenças aos caminhos listados"
+
+#: gitk:11416
+msgid "Support per-file encodings"
+msgstr "Suportar codificação por cada ficheiro"
+
+#: gitk:11422 gitk:11569
+msgid "External diff tool"
+msgstr "Ferramenta diff externa"
+
+#: gitk:11423
+msgid "Choose..."
+msgstr "Escolher..."
+
+#: gitk:11428
+msgid "General options"
+msgstr "Opções gerais"
+
+#: gitk:11431
+msgid "Use themed widgets"
+msgstr "Usar widgets com estilo"
+
+#: gitk:11433
+msgid "(change requires restart)"
+msgstr "(alteração exige reiniciar)"
+
+#: gitk:11435
+msgid "(currently unavailable)"
+msgstr "(não disponível de momento)"
+
+#: gitk:11446
+msgid "Colors: press to choose"
+msgstr "Cores: pressione para escolher"
+
+#: gitk:11449
+msgid "Interface"
+msgstr "Interface"
+
+#: gitk:11450
+msgid "interface"
+msgstr "interface"
+
+#: gitk:11453
+msgid "Background"
+msgstr "Fundo"
+
+#: gitk:11454 gitk:11484
+msgid "background"
+msgstr "fundo"
+
+#: gitk:11457
+msgid "Foreground"
+msgstr "Primeiro plano"
+
+#: gitk:11458
+msgid "foreground"
+msgstr "primeiro plano"
+
+#: gitk:11461
+msgid "Diff: old lines"
+msgstr "Diff: linhas antigas"
+
+#: gitk:11462
+msgid "diff old lines"
+msgstr "diff linhas antigas"
+
+#: gitk:11466
+msgid "Diff: new lines"
+msgstr "Diff: linhas novas"
+
+#: gitk:11467
+msgid "diff new lines"
+msgstr "diff linhas novas"
+
+#: gitk:11471
+msgid "Diff: hunk header"
+msgstr "Diff: cabeçalho do excerto"
+
+#: gitk:11473
+msgid "diff hunk header"
+msgstr "diff cabeçalho do excerto"
+
+#: gitk:11477
+msgid "Marked line bg"
+msgstr "Fundo da linha marcada"
+
+#: gitk:11479
+msgid "marked line background"
+msgstr "fundo da linha marcada"
+
+#: gitk:11483
+msgid "Select bg"
+msgstr "Selecionar fundo"
+
+#: gitk:11492
+msgid "Fonts: press to choose"
+msgstr "Tipo de letra: pressione para escolher"
+
+#: gitk:11494
+msgid "Main font"
+msgstr "Tipo de letra principal"
+
+#: gitk:11495
+msgid "Diff display font"
+msgstr "Tipo de letra ao mostrar diferenças"
+
+#: gitk:11496
+msgid "User interface font"
+msgstr "Tipo de letra da interface de utilizador"
+
+#: gitk:11518
+msgid "Gitk preferences"
+msgstr "Preferências do gitk"
+
+#: gitk:11527
+msgid "General"
+msgstr "Geral"
+
+#: gitk:11528
+msgid "Colors"
+msgstr "Cores"
+
+#: gitk:11529
+msgid "Fonts"
+msgstr "Tipos de letra"
+
+#: gitk:11579
+#, tcl-format
+msgid "Gitk: choose color for %s"
+msgstr "Gitk: escolher cor de %s"
+
+#: gitk:12092
+msgid ""
+"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
+" Gitk requires at least Tcl/Tk 8.4."
+msgstr ""
+"Não é possível executar o gitk com esta versão do Tcl/Tk.\n"
+"O gitk requer pelo menos Tcl/Tk 8.4."
+
+#: gitk:12302
+msgid "Cannot find a git repository here."
+msgstr "Não foi encontrado nenhum repositório git aqui."
+
+#: gitk:12349
+#, tcl-format
+msgid "Ambiguous argument '%s': both revision and filename"
+msgstr "Argumento '%s' ambíguo: pode ser uma revisão ou um ficheiro"
+
+#: gitk:12361
+msgid "Bad arguments to gitk:"
+msgstr "Argumentos do gitk incorretos:"
# Translators:
# 0xAX <kuleshovmail@gmail.com>, 2014
# Alex Riesen <raa.lkml@gmail.com>, 2015
-# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2015
+# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2015-2016
# Dmitry Potapov <dpotapov@gmail.com>, 2009
# Skip <bsvskip@rambler.ru>, 2011
msgid ""
msgstr ""
"Project-Id-Version: Git Russian Localization Project\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-17 14:32+1000\n"
-"PO-Revision-Date: 2015-10-12 10:14+0000\n"
+"POT-Creation-Date: 2016-12-15 00:18+0200\n"
+"PO-Revision-Date: 2016-12-14 22:23+0000\n"
"Last-Translator: Dimitriy Ryazantcev <DJm00n@mail.ru>\n"
"Language-Team: Russian (http://www.transifex.com/djm00n/git-po-ru/language/ru/)\n"
"MIME-Version: 1.0\n"
msgid "Couldn't get list of unmerged files:"
msgstr "Невозможно получить список файлов незавершённой операции слияния:"
-#: gitk:212 gitk:2381
+#: gitk:212 gitk:2403
msgid "Color words"
msgstr "Цветные слова"
-#: gitk:217 gitk:2381 gitk:8220 gitk:8253
+#: gitk:217 gitk:2403 gitk:8249 gitk:8282
msgid "Markup words"
msgstr "Помеченые слова"
msgid "Reading"
msgstr "Чтение"
-#: gitk:496 gitk:4525
+#: gitk:496 gitk:4549
msgid "Reading commits..."
msgstr "Чтение коммитов..."
-#: gitk:499 gitk:1637 gitk:4528
+#: gitk:499 gitk:1641 gitk:4552
msgid "No commits selected"
msgstr "Ничего не выбрано"
-#: gitk:1445 gitk:4045 gitk:12432
+#: gitk:1449 gitk:4069 gitk:12583
msgid "Command line"
msgstr "Командная строка"
-#: gitk:1511
+#: gitk:1515
msgid "Can't parse git log output:"
msgstr "Ошибка обработки вывода команды git log:"
-#: gitk:1740
+#: gitk:1744
msgid "No commit information available"
msgstr "Нет информации о коммите"
-#: gitk:1903 gitk:1932 gitk:4315 gitk:9669 gitk:11241 gitk:11521
+#: gitk:1907 gitk:1936 gitk:4339 gitk:9789 gitk:11388 gitk:11668
msgid "OK"
msgstr "Ok"
-#: gitk:1934 gitk:4317 gitk:9196 gitk:9275 gitk:9391 gitk:9440 gitk:9671
-#: gitk:11242 gitk:11522
+#: gitk:1938 gitk:4341 gitk:9225 gitk:9304 gitk:9434 gitk:9520 gitk:9791
+#: gitk:11389 gitk:11669
msgid "Cancel"
msgstr "Отмена"
-#: gitk:2069
+#: gitk:2087
msgid "&Update"
msgstr "Обновить"
-#: gitk:2070
+#: gitk:2088
msgid "&Reload"
msgstr "Перечитать"
-#: gitk:2071
+#: gitk:2089
msgid "Reread re&ferences"
msgstr "Обновить список ссылок"
-#: gitk:2072
+#: gitk:2090
msgid "&List references"
msgstr "Список ссылок"
-#: gitk:2074
+#: gitk:2092
msgid "Start git &gui"
msgstr "Запустить git gui"
-#: gitk:2076
+#: gitk:2094
msgid "&Quit"
msgstr "Завершить"
-#: gitk:2068
+#: gitk:2086
msgid "&File"
msgstr "Файл"
-#: gitk:2080
+#: gitk:2098
msgid "&Preferences"
msgstr "Настройки"
-#: gitk:2079
+#: gitk:2097
msgid "&Edit"
msgstr "Редактировать"
-#: gitk:2084
+#: gitk:2102
msgid "&New view..."
msgstr "Новое представление..."
-#: gitk:2085
+#: gitk:2103
msgid "&Edit view..."
msgstr "Редактировать представление..."
-#: gitk:2086
+#: gitk:2104
msgid "&Delete view"
msgstr "Удалить представление"
-#: gitk:2088 gitk:4043
+#: gitk:2106
msgid "&All files"
msgstr "Все файлы"
-#: gitk:2083 gitk:4067
+#: gitk:2101
msgid "&View"
msgstr "Представление"
-#: gitk:2093 gitk:2103 gitk:3012
+#: gitk:2111 gitk:2121
msgid "&About gitk"
msgstr "О gitk"
-#: gitk:2094 gitk:2108
+#: gitk:2112 gitk:2126
msgid "&Key bindings"
msgstr "Назначения клавиатуры"
-#: gitk:2092 gitk:2107
+#: gitk:2110 gitk:2125
msgid "&Help"
msgstr "Подсказка"
-#: gitk:2185 gitk:8652
+#: gitk:2203 gitk:8681
msgid "SHA1 ID:"
msgstr "SHA1 ID:"
-#: gitk:2229
+#: gitk:2247
msgid "Row"
msgstr "Строка"
-#: gitk:2267
+#: gitk:2285
msgid "Find"
msgstr "Поиск"
-#: gitk:2295
+#: gitk:2313
msgid "commit"
msgstr "коммит"
-#: gitk:2299 gitk:2301 gitk:4687 gitk:4710 gitk:4734 gitk:6755 gitk:6827
-#: gitk:6912
+#: gitk:2317 gitk:2319 gitk:4711 gitk:4734 gitk:4758 gitk:6779 gitk:6851
+#: gitk:6936
msgid "containing:"
msgstr "содержащее:"
-#: gitk:2302 gitk:3526 gitk:3531 gitk:4763
+#: gitk:2320 gitk:3550 gitk:3555 gitk:4787
msgid "touching paths:"
msgstr "касательно файлов:"
-#: gitk:2303 gitk:4777
+#: gitk:2321 gitk:4801
msgid "adding/removing string:"
msgstr "добавив/удалив строку:"
-#: gitk:2304 gitk:4779
+#: gitk:2322 gitk:4803
msgid "changing lines matching:"
msgstr "изменяя совпадающие строки:"
-#: gitk:2313 gitk:2315 gitk:4766
+#: gitk:2331 gitk:2333 gitk:4790
msgid "Exact"
msgstr "Точно"
-#: gitk:2315 gitk:4854 gitk:6723
+#: gitk:2333 gitk:4878 gitk:6747
msgid "IgnCase"
msgstr "Игнорировать большие/маленькие"
-#: gitk:2315 gitk:4736 gitk:4852 gitk:6719
+#: gitk:2333 gitk:4760 gitk:4876 gitk:6743
msgid "Regexp"
msgstr "Регулярные выражения"
-#: gitk:2317 gitk:2318 gitk:4874 gitk:4904 gitk:4911 gitk:6848 gitk:6916
+#: gitk:2335 gitk:2336 gitk:4898 gitk:4928 gitk:4935 gitk:6872 gitk:6940
msgid "All fields"
msgstr "Во всех полях"
-#: gitk:2318 gitk:4871 gitk:4904 gitk:6786
+#: gitk:2336 gitk:4895 gitk:4928 gitk:6810
msgid "Headline"
msgstr "Заголовок"
-#: gitk:2319 gitk:4871 gitk:6786 gitk:6916 gitk:7389
+#: gitk:2337 gitk:4895 gitk:6810 gitk:6940 gitk:7413
msgid "Comments"
msgstr "Комментарии"
-#: gitk:2319 gitk:4871 gitk:4876 gitk:4911 gitk:6786 gitk:7324 gitk:8830
-#: gitk:8845
+#: gitk:2337 gitk:4895 gitk:4900 gitk:4935 gitk:6810 gitk:7348 gitk:8859
+#: gitk:8874
msgid "Author"
msgstr "Автор"
-#: gitk:2319 gitk:4871 gitk:6786 gitk:7326
+#: gitk:2337 gitk:4895 gitk:6810 gitk:7350
msgid "Committer"
msgstr "Коммитер"
-#: gitk:2350
+#: gitk:2371
msgid "Search"
msgstr "Найти"
-#: gitk:2358
+#: gitk:2379
msgid "Diff"
msgstr "Сравнить"
-#: gitk:2360
+#: gitk:2381
msgid "Old version"
msgstr "Старая версия"
-#: gitk:2362
+#: gitk:2383
msgid "New version"
msgstr "Новая версия"
-#: gitk:2364
+#: gitk:2386
msgid "Lines of context"
msgstr "Строк контекста"
-#: gitk:2374
+#: gitk:2396
msgid "Ignore space change"
msgstr "Игнорировать пробелы"
-#: gitk:2378 gitk:2380 gitk:7959 gitk:8206
+#: gitk:2400 gitk:2402 gitk:7983 gitk:8235
msgid "Line diff"
msgstr "Изменения строк"
-#: gitk:2445
+#: gitk:2467
msgid "Patch"
msgstr "Патч"
-#: gitk:2447
+#: gitk:2469
msgid "Tree"
msgstr "Файлы"
-#: gitk:2617 gitk:2637
+#: gitk:2639 gitk:2660
msgid "Diff this -> selected"
msgstr "Сравнить этот коммит с выделенным"
-#: gitk:2618 gitk:2638
+#: gitk:2640 gitk:2661
msgid "Diff selected -> this"
msgstr "Сравнить выделенный с этим коммитом"
-#: gitk:2619 gitk:2639
+#: gitk:2641 gitk:2662
msgid "Make patch"
msgstr "Создать патч"
-#: gitk:2620 gitk:9254
+#: gitk:2642 gitk:9283
msgid "Create tag"
msgstr "Создать метку"
-#: gitk:2621 gitk:9371
+#: gitk:2643
+msgid "Copy commit summary"
+msgstr "Копировать информацию о коммите"
+
+#: gitk:2644 gitk:9414
msgid "Write commit to file"
msgstr "Сохранить коммит в файл"
-#: gitk:2622 gitk:9428
+#: gitk:2645
msgid "Create new branch"
msgstr "Создать ветку"
-#: gitk:2623
+#: gitk:2646
msgid "Cherry-pick this commit"
-msgstr "Ð\9eÑ\82боÑ\80 лÑ\83Ñ\87Ñ\88его длÑ\8f Ñ\8dÑ\82ого коммиÑ\82а"
+msgstr "Ð\9aопиÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82оÑ\82 коммиÑ\82 в Ñ\82екÑ\83Ñ\89Ñ\83Ñ\8e веÑ\82кÑ\83"
-#: gitk:2624
+#: gitk:2647
msgid "Reset HEAD branch to here"
msgstr "Установить HEAD на этот коммит"
-#: gitk:2625
+#: gitk:2648
msgid "Mark this commit"
msgstr "Пометить этот коммит"
-#: gitk:2626
+#: gitk:2649
msgid "Return to mark"
msgstr "Вернуться на пометку"
-#: gitk:2627
+#: gitk:2650
msgid "Find descendant of this and mark"
msgstr "Найти и пометить потомка этого коммита"
-#: gitk:2628
+#: gitk:2651
msgid "Compare with marked commit"
msgstr "Сравнить с помеченным коммитом"
-#: gitk:2629 gitk:2640
+#: gitk:2652 gitk:2663
msgid "Diff this -> marked commit"
msgstr "Сравнить выделенное с помеченным коммитом"
-#: gitk:2630 gitk:2641
+#: gitk:2653 gitk:2664
msgid "Diff marked commit -> this"
msgstr "Сравнить помеченный с этим коммитом"
-#: gitk:2631
+#: gitk:2654
msgid "Revert this commit"
-msgstr "Ð\92озвÑ\80аÑ\82 этого коммита"
+msgstr "Ð\9eбÑ\80аÑ\82иÑ\82Ñ\8c изменениÑ\8f этого коммита"
-#: gitk:2647
+#: gitk:2670
msgid "Check out this branch"
msgstr "Перейти на эту ветку"
-#: gitk:2648
+#: gitk:2671
+msgid "Rename this branch"
+msgstr "Переименовать эту ветку"
+
+#: gitk:2672
msgid "Remove this branch"
msgstr "Удалить эту ветку"
-#: gitk:2649
+#: gitk:2673
msgid "Copy branch name"
msgstr "Копировать имя ветки"
-#: gitk:2656
+#: gitk:2680
msgid "Highlight this too"
msgstr "Подсветить этот тоже"
-#: gitk:2657
+#: gitk:2681
msgid "Highlight this only"
msgstr "Подсветить только этот"
-#: gitk:2658
+#: gitk:2682
msgid "External diff"
msgstr "Программа сравнения"
-#: gitk:2659
+#: gitk:2683
msgid "Blame parent commit"
msgstr "Авторы изменений родительского коммита"
-#: gitk:2660
+#: gitk:2684
msgid "Copy path"
msgstr "Копировать путь"
-#: gitk:2667
+#: gitk:2691
msgid "Show origin of this line"
msgstr "Показать источник этой строки"
-#: gitk:2668
+#: gitk:2692
msgid "Run git gui blame on this line"
msgstr "Запустить git gui blame для этой строки"
-#: gitk:3014
+#: gitk:3036
+msgid "About gitk"
+msgstr "О gitk"
+
+#: gitk:3038
msgid ""
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
-msgstr "\nGitk - программа просмотра истории репозиториев git\n\n© 2005-2014 Paul Mackerras\n\nИспользование и распространение согласно условиям GNU General Public License"
+msgstr "\nGitk — программа просмотра истории репозиториев git\n\n© 2005-2016 Paul Mackerras\n\nИспользование и распространение согласно условиям GNU General Public License"
-#: gitk:3022 gitk:3089 gitk:9857
+#: gitk:3046 gitk:3113 gitk:10004
msgid "Close"
msgstr "Закрыть"
-#: gitk:3043
+#: gitk:3067
msgid "Gitk key bindings"
msgstr "Назначения клавиатуры в Gitk"
-#: gitk:3046
+#: gitk:3070
msgid "Gitk key bindings:"
msgstr "Назначения клавиатуры в Gitk:"
-#: gitk:3048
+#: gitk:3072
#, tcl-format
msgid "<%s-Q>\t\tQuit"
msgstr "<%s-Q>\t\tЗавершить"
-#: gitk:3049
+#: gitk:3073
#, tcl-format
msgid "<%s-W>\t\tClose window"
msgstr "<%s-W>\t\tЗакрыть окно"
-#: gitk:3050
+#: gitk:3074
msgid "<Home>\t\tMove to first commit"
msgstr "<Home>\t\tПерейти к первому коммиту"
-#: gitk:3051
+#: gitk:3075
msgid "<End>\t\tMove to last commit"
msgstr "<End>\t\tПерейти к последнему коммиту"
-#: gitk:3052
+#: gitk:3076
msgid "<Up>, p, k\tMove up one commit"
msgstr "<Up>, p, k\tПерейти на один коммит вверх"
-#: gitk:3053
+#: gitk:3077
msgid "<Down>, n, j\tMove down one commit"
msgstr "<Down>, n, j\tПерейти на один коммит вниз"
-#: gitk:3054
+#: gitk:3078
msgid "<Left>, z, h\tGo back in history list"
msgstr "<Left>, z, h\tПоказать ранее посещённое состояние"
-#: gitk:3055
+#: gitk:3079
msgid "<Right>, x, l\tGo forward in history list"
msgstr "<Right>, x, l\tПоказать следующий посещённый коммит"
-#: gitk:3056
+#: gitk:3080
#, tcl-format
msgid "<%s-n>\tGo to n-th parent of current commit in history list"
msgstr "<%s-n>\tПерейти на n родителя от текущего коммита"
-#: gitk:3057
+#: gitk:3081
msgid "<PageUp>\tMove up one page in commit list"
msgstr "<PageUp>\tПерейти на страницу выше в списке коммитов"
-#: gitk:3058
+#: gitk:3082
msgid "<PageDown>\tMove down one page in commit list"
msgstr "<PageDown>\tПерейти на страницу ниже в списке коммитов"
-#: gitk:3059
+#: gitk:3083
#, tcl-format
msgid "<%s-Home>\tScroll to top of commit list"
msgstr "<%s-Home>\tПерейти на начало списка коммитов"
-#: gitk:3060
+#: gitk:3084
#, tcl-format
msgid "<%s-End>\tScroll to bottom of commit list"
msgstr "<%s-End>\tПерейти на конец списка коммитов"
-#: gitk:3061
+#: gitk:3085
#, tcl-format
msgid "<%s-Up>\tScroll commit list up one line"
msgstr "<%s-Up>\tПровернуть список коммитов вверх"
-#: gitk:3062
+#: gitk:3086
#, tcl-format
msgid "<%s-Down>\tScroll commit list down one line"
msgstr "<%s-Down>\tПровернуть список коммитов вниз"
-#: gitk:3063
+#: gitk:3087
#, tcl-format
msgid "<%s-PageUp>\tScroll commit list up one page"
msgstr "<%s-PageUp>\tПровернуть список коммитов на страницу вверх"
-#: gitk:3064
+#: gitk:3088
#, tcl-format
msgid "<%s-PageDown>\tScroll commit list down one page"
msgstr "<%s-PageDown>\tПровернуть список коммитов на страницу вниз"
-#: gitk:3065
+#: gitk:3089
msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
msgstr "<Shift-Up>\tПоиск в обратном порядке (вверх, среди новых коммитов)"
-#: gitk:3066
+#: gitk:3090
msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
msgstr "<Shift-Down>\tПоиск (вниз, среди старых коммитов)"
-#: gitk:3067
+#: gitk:3091
msgid "<Delete>, b\tScroll diff view up one page"
msgstr "<Delete>, b\tПрокрутить список изменений на страницу выше"
-#: gitk:3068
+#: gitk:3092
msgid "<Backspace>\tScroll diff view up one page"
msgstr "<Backspace>\tПрокрутить список изменений на страницу выше"
-#: gitk:3069
+#: gitk:3093
msgid "<Space>\t\tScroll diff view down one page"
msgstr "<Leertaste>\t\tПрокрутить список изменений на страницу ниже"
-#: gitk:3070
+#: gitk:3094
msgid "u\t\tScroll diff view up 18 lines"
msgstr "u\t\tПрокрутить список изменений на 18 строк вверх"
-#: gitk:3071
+#: gitk:3095
msgid "d\t\tScroll diff view down 18 lines"
msgstr "d\t\tПрокрутить список изменений на 18 строк вниз"
-#: gitk:3072
+#: gitk:3096
#, tcl-format
msgid "<%s-F>\t\tFind"
msgstr "<%s-F>\t\tПоиск"
-#: gitk:3073
+#: gitk:3097
#, tcl-format
msgid "<%s-G>\t\tMove to next find hit"
msgstr "<%s-G>\t\tПерейти к следующему найденному коммиту"
-#: gitk:3074
+#: gitk:3098
msgid "<Return>\tMove to next find hit"
msgstr "<Return>\tПерейти к следующему найденному коммиту"
-#: gitk:3075
+#: gitk:3099
msgid "g\t\tGo to commit"
msgstr "g\t\tПерейти на коммит"
-#: gitk:3076
+#: gitk:3100
msgid "/\t\tFocus the search box"
msgstr "/\t\tПерейти к полю поиска"
-#: gitk:3077
+#: gitk:3101
msgid "?\t\tMove to previous find hit"
msgstr "?\t\tПерейти к предыдущему найденному коммиту"
-#: gitk:3078
+#: gitk:3102
msgid "f\t\tScroll diff view to next file"
msgstr "f\t\tПрокрутить список изменений к следующему файлу"
-#: gitk:3079
+#: gitk:3103
#, tcl-format
msgid "<%s-S>\t\tSearch for next hit in diff view"
msgstr "<%s-S>\t\tПродолжить поиск в списке изменений"
-#: gitk:3080
+#: gitk:3104
#, tcl-format
msgid "<%s-R>\t\tSearch for previous hit in diff view"
msgstr "<%s-R>\t\tПерейти к предыдущему найденному тексту в списке изменений"
-#: gitk:3081
+#: gitk:3105
#, tcl-format
msgid "<%s-KP+>\tIncrease font size"
msgstr "<%s-KP+>\tУвеличить размер шрифта"
-#: gitk:3082
+#: gitk:3106
#, tcl-format
msgid "<%s-plus>\tIncrease font size"
msgstr "<%s-plus>\tУвеличить размер шрифта"
-#: gitk:3083
+#: gitk:3107
#, tcl-format
msgid "<%s-KP->\tDecrease font size"
msgstr "<%s-KP->\tУменьшить размер шрифта"
-#: gitk:3084
+#: gitk:3108
#, tcl-format
msgid "<%s-minus>\tDecrease font size"
msgstr "<%s-minus>\tУменьшить размер шрифта"
-#: gitk:3085
+#: gitk:3109
msgid "<F5>\t\tUpdate"
msgstr "<F5>\t\tОбновить"
-#: gitk:3550 gitk:3559
+#: gitk:3574 gitk:3583
#, tcl-format
msgid "Error creating temporary directory %s:"
msgstr "Ошибка создания временного каталога %s:"
-#: gitk:3572
+#: gitk:3596
#, tcl-format
msgid "Error getting \"%s\" from %s:"
msgstr "Ошибка получения «%s» из %s:"
-#: gitk:3635
+#: gitk:3659
msgid "command failed:"
msgstr "ошибка выполнения команды:"
-#: gitk:3784
+#: gitk:3808
msgid "No such commit"
msgstr "Коммит не найден"
-#: gitk:3798
+#: gitk:3822
msgid "git gui blame: command failed:"
msgstr "git gui blame: ошибка выполнения команды:"
-#: gitk:3829
+#: gitk:3853
#, tcl-format
msgid "Couldn't read merge head: %s"
msgstr "Ошибка чтения MERGE_HEAD: %s"
-#: gitk:3837
+#: gitk:3861
#, tcl-format
msgid "Error reading index: %s"
msgstr "Ошибка чтения индекса: %s"
-#: gitk:3862
+#: gitk:3886
#, tcl-format
msgid "Couldn't start git blame: %s"
msgstr "Ошибка запуска git blame: %s"
-#: gitk:3865 gitk:6754
+#: gitk:3889 gitk:6778
msgid "Searching"
msgstr "Поиск"
-#: gitk:3897
+#: gitk:3921
#, tcl-format
msgid "Error running git blame: %s"
msgstr "Ошибка выполнения git blame: %s"
-#: gitk:3925
+#: gitk:3949
#, tcl-format
msgid "That line comes from commit %s, which is not in this view"
msgstr "Эта строка принадлежит коммиту %s, который не показан в этом представлении"
-#: gitk:3939
+#: gitk:3963
msgid "External diff viewer failed:"
msgstr "Ошибка выполнения программы сравнения:"
-#: gitk:4070
+#: gitk:4067
+msgid "All files"
+msgstr "Все файлы"
+
+#: gitk:4091
+msgid "View"
+msgstr "Представление"
+
+#: gitk:4094
msgid "Gitk view definition"
msgstr "Gitk определение представлений"
-#: gitk:4074
+#: gitk:4098
msgid "Remember this view"
msgstr "Запомнить представление"
-#: gitk:4075
+#: gitk:4099
msgid "References (space separated list):"
msgstr "Ссылки (разделённые пробелом):"
-#: gitk:4076
+#: gitk:4100
msgid "Branches & tags:"
msgstr "Ветки и метки"
-#: gitk:4077
+#: gitk:4101
msgid "All refs"
msgstr "Все ссылки"
-#: gitk:4078
+#: gitk:4102
msgid "All (local) branches"
msgstr "Все (локальные) ветки"
-#: gitk:4079
+#: gitk:4103
msgid "All tags"
msgstr "Все метки"
-#: gitk:4080
+#: gitk:4104
msgid "All remote-tracking branches"
msgstr "Все внешние отслеживаемые ветки"
-#: gitk:4081
+#: gitk:4105
msgid "Commit Info (regular expressions):"
msgstr "Информация о коммите (регулярные выражения):"
-#: gitk:4082
+#: gitk:4106
msgid "Author:"
msgstr "Автор:"
-#: gitk:4083
+#: gitk:4107
msgid "Committer:"
msgstr "Коммитер:"
-#: gitk:4084
+#: gitk:4108
msgid "Commit Message:"
msgstr "Сообщение коммита:"
-#: gitk:4085
+#: gitk:4109
msgid "Matches all Commit Info criteria"
msgstr "Совпадает со всеми условиями информации о коммите"
-#: gitk:4086
+#: gitk:4110
msgid "Matches no Commit Info criteria"
msgstr "Не совпадает с условиями информации о коммите"
-#: gitk:4087
+#: gitk:4111
msgid "Changes to Files:"
msgstr "Изменения файлов:"
-#: gitk:4088
+#: gitk:4112
msgid "Fixed String"
msgstr "Обычная строка"
-#: gitk:4089
+#: gitk:4113
msgid "Regular Expression"
msgstr "Регулярное выражение:"
-#: gitk:4090
+#: gitk:4114
msgid "Search string:"
msgstr "Строка для поиска:"
-#: gitk:4091
+#: gitk:4115
msgid ""
"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
"15:27:38\"):"
msgstr "Даты коммита («2 недели назад», «2009-03-17 15:27:38», «17 марта 2009 15:27:38»):"
-#: gitk:4092
+#: gitk:4116
msgid "Since:"
msgstr "С даты:"
-#: gitk:4093
+#: gitk:4117
msgid "Until:"
msgstr "По дату:"
-#: gitk:4094
+#: gitk:4118
msgid "Limit and/or skip a number of revisions (positive integer):"
msgstr "Ограничить и/или пропустить количество редакций (положительное число):"
-#: gitk:4095
+#: gitk:4119
msgid "Number to show:"
msgstr "Показать количество:"
-#: gitk:4096
+#: gitk:4120
msgid "Number to skip:"
msgstr "Пропустить количество:"
-#: gitk:4097
+#: gitk:4121
msgid "Miscellaneous options:"
msgstr "Различные опции:"
-#: gitk:4098
+#: gitk:4122
msgid "Strictly sort by date"
msgstr "Строгая сортировка по дате"
-#: gitk:4099
+#: gitk:4123
msgid "Mark branch sides"
msgstr "Отметить стороны веток"
-#: gitk:4100
+#: gitk:4124
msgid "Limit to first parent"
msgstr "Ограничить первым предком"
-#: gitk:4101
+#: gitk:4125
msgid "Simple history"
msgstr "Упрощенная история"
-#: gitk:4102
+#: gitk:4126
msgid "Additional arguments to git log:"
msgstr "Дополнительные аргументы для git log:"
-#: gitk:4103
+#: gitk:4127
msgid "Enter files and directories to include, one per line:"
msgstr "Файлы и каталоги для ограничения истории, по одному на строку:"
-#: gitk:4104
+#: gitk:4128
msgid "Command to generate more commits to include:"
msgstr "Дополнительная команда для списка коммитов:"
-#: gitk:4228
+#: gitk:4252
msgid "Gitk: edit view"
msgstr "Gitk: изменить представление"
-#: gitk:4236
+#: gitk:4260
msgid "-- criteria for selecting revisions"
msgstr "— критерий поиска редакций"
-#: gitk:4241
+#: gitk:4265
msgid "View Name"
msgstr "Имя представления"
-#: gitk:4316
+#: gitk:4340
msgid "Apply (F5)"
msgstr "Применить (F5)"
-#: gitk:4354
+#: gitk:4378
msgid "Error in commit selection arguments:"
msgstr "Ошибка в параметрах выбора коммитов:"
-#: gitk:4409 gitk:4462 gitk:4924 gitk:4938 gitk:6208 gitk:12373 gitk:12374
+#: gitk:4433 gitk:4486 gitk:4948 gitk:4962 gitk:6232 gitk:12524 gitk:12525
msgid "None"
msgstr "Ни одного"
-#: gitk:5021 gitk:5026
+#: gitk:5045 gitk:5050
msgid "Descendant"
msgstr "Порождённое"
-#: gitk:5022
+#: gitk:5046
msgid "Not descendant"
msgstr "Не порождённое"
-#: gitk:5029 gitk:5034
+#: gitk:5053 gitk:5058
msgid "Ancestor"
msgstr "Предок"
-#: gitk:5030
+#: gitk:5054
msgid "Not ancestor"
msgstr "Не предок"
-#: gitk:5324
+#: gitk:5348
msgid "Local changes checked in to index but not committed"
msgstr "Проиндексированные изменения"
-#: gitk:5360
+#: gitk:5384
msgid "Local uncommitted changes, not checked in to index"
msgstr "Непроиндексированные изменения"
-#: gitk:7134
+#: gitk:7158
msgid "and many more"
msgstr "и многое другое"
-#: gitk:7137
+#: gitk:7161
msgid "many"
msgstr "много"
-#: gitk:7328
+#: gitk:7352
msgid "Tags:"
msgstr "Метки:"
-#: gitk:7345 gitk:7351 gitk:8825
+#: gitk:7369 gitk:7375 gitk:8854
msgid "Parent"
msgstr "Предок"
-#: gitk:7356
+#: gitk:7380
msgid "Child"
msgstr "Потомок"
-#: gitk:7365
+#: gitk:7389
msgid "Branch"
msgstr "Ветка"
-#: gitk:7368
+#: gitk:7392
msgid "Follows"
msgstr "Следует за"
-#: gitk:7371
+#: gitk:7395
msgid "Precedes"
msgstr "Предшествует"
-#: gitk:7966
+#: gitk:7990
#, tcl-format
msgid "Error getting diffs: %s"
msgstr "Ошибка получения изменений: %s"
-#: gitk:8650
+#: gitk:8679
msgid "Goto:"
msgstr "Перейти к:"
-#: gitk:8671
+#: gitk:8700
#, tcl-format
msgid "Short SHA1 id %s is ambiguous"
msgstr "Сокращённый SHA1 идентификатор %s неоднозначен"
-#: gitk:8678
+#: gitk:8707
#, tcl-format
msgid "Revision %s is not known"
msgstr "Редакция %s не найдена"
-#: gitk:8688
+#: gitk:8717
#, tcl-format
msgid "SHA1 id %s is not known"
msgstr "SHA1 идентификатор %s не найден"
-#: gitk:8690
+#: gitk:8719
#, tcl-format
msgid "Revision %s is not in the current view"
msgstr "Редакция %s не найдена в текущем представлении"
-#: gitk:8832 gitk:8847
+#: gitk:8861 gitk:8876
msgid "Date"
msgstr "Дата"
-#: gitk:8835
+#: gitk:8864
msgid "Children"
msgstr "Потомки"
-#: gitk:8898
+#: gitk:8927
#, tcl-format
msgid "Reset %s branch to here"
msgstr "Сбросить ветку %s на этот коммит"
-#: gitk:8900
+#: gitk:8929
msgid "Detached head: can't reset"
msgstr "Коммит не принадлежит ни одной ветке, сбросить невозможно"
-#: gitk:9005 gitk:9011
+#: gitk:9034 gitk:9040
msgid "Skipping merge commit "
msgstr "Пропускаю коммит-слияние"
-#: gitk:9020 gitk:9025
+#: gitk:9049 gitk:9054
msgid "Error getting patch ID for "
msgstr "Не удалось получить идентификатор патча для "
-#: gitk:9021 gitk:9026
+#: gitk:9050 gitk:9055
msgid " - stopping\n"
msgstr " — останов\n"
-#: gitk:9031 gitk:9034 gitk:9042 gitk:9056 gitk:9065
+#: gitk:9060 gitk:9063 gitk:9071 gitk:9085 gitk:9094
msgid "Commit "
msgstr "Коммит"
-#: gitk:9035
+#: gitk:9064
msgid ""
" is the same patch as\n"
" "
msgstr " такой же патч, как и\n "
-#: gitk:9043
+#: gitk:9072
msgid ""
" differs from\n"
" "
msgstr " отличается от\n "
-#: gitk:9045
+#: gitk:9074
msgid ""
"Diff of commits:\n"
"\n"
msgstr "Различия коммитов:\n\n"
-#: gitk:9057 gitk:9066
+#: gitk:9086 gitk:9095
#, tcl-format
msgid " has %s children - stopping\n"
msgstr " является %s потомком — останов\n"
-#: gitk:9085
+#: gitk:9114
#, tcl-format
msgid "Error writing commit to file: %s"
msgstr "Произошла ошибка при записи коммита в файл: %s"
-#: gitk:9091
+#: gitk:9120
#, tcl-format
msgid "Error diffing commits: %s"
msgstr "Произошла ошибка при выводе различий коммитов: %s"
-#: gitk:9137
+#: gitk:9166
msgid "Top"
msgstr "Верх"
-#: gitk:9138
+#: gitk:9167
msgid "From"
msgstr "От"
-#: gitk:9143
+#: gitk:9172
msgid "To"
msgstr "До"
-#: gitk:9167
+#: gitk:9196
msgid "Generate patch"
msgstr "Создать патч"
-#: gitk:9169
+#: gitk:9198
msgid "From:"
msgstr "От:"
-#: gitk:9178
+#: gitk:9207
msgid "To:"
msgstr "До:"
-#: gitk:9187
+#: gitk:9216
msgid "Reverse"
msgstr "В обратном порядке"
-#: gitk:9189 gitk:9385
+#: gitk:9218 gitk:9428
msgid "Output file:"
msgstr "Файл для сохранения:"
-#: gitk:9195
+#: gitk:9224
msgid "Generate"
msgstr "Создать"
-#: gitk:9233
+#: gitk:9262
msgid "Error creating patch:"
msgstr "Ошибка создания патча:"
-#: gitk:9256 gitk:9373 gitk:9430
+#: gitk:9285 gitk:9416 gitk:9504
msgid "ID:"
msgstr "ID:"
-#: gitk:9265
+#: gitk:9294
msgid "Tag name:"
msgstr "Имя метки:"
-#: gitk:9268
+#: gitk:9297
msgid "Tag message is optional"
msgstr "Описание метки указывать не обязательно"
-#: gitk:9270
+#: gitk:9299
msgid "Tag message:"
msgstr "Описание метки:"
-#: gitk:9274 gitk:9439
+#: gitk:9303 gitk:9474
msgid "Create"
msgstr "Создать"
-#: gitk:9292
+#: gitk:9321
msgid "No tag name specified"
msgstr "Не задано имя метки"
-#: gitk:9296
+#: gitk:9325
#, tcl-format
msgid "Tag \"%s\" already exists"
msgstr "Метка «%s» уже существует"
-#: gitk:9306
+#: gitk:9335
msgid "Error creating tag:"
msgstr "Ошибка создания метки:"
-#: gitk:9382
+#: gitk:9425
msgid "Command:"
msgstr "Команда:"
-#: gitk:9390
+#: gitk:9433
msgid "Write"
msgstr "Запись"
-#: gitk:9408
+#: gitk:9451
msgid "Error writing commit:"
msgstr "Произошла ошибка при записи коммита:"
-#: gitk:9435
+#: gitk:9473
+msgid "Create branch"
+msgstr "Создать ветку"
+
+#: gitk:9489
+#, tcl-format
+msgid "Rename branch %s"
+msgstr "Переименовать ветку %s"
+
+#: gitk:9490
+msgid "Rename"
+msgstr "Переименовать"
+
+#: gitk:9514
msgid "Name:"
msgstr "Имя:"
-#: gitk:9458
+#: gitk:9538
msgid "Please specify a name for the new branch"
msgstr "Укажите имя для новой ветки"
-#: gitk:9463
+#: gitk:9543
#, tcl-format
msgid "Branch '%s' already exists. Overwrite?"
msgstr "Ветка «%s» уже существует. Переписать?"
-#: gitk:9530
+#: gitk:9587
+msgid "Please specify a new name for the branch"
+msgstr "Укажите имя для новой ветки"
+
+#: gitk:9650
#, tcl-format
msgid "Commit %s is already included in branch %s -- really re-apply it?"
msgstr "Коммит %s уже включён в ветку %s. Продолжить операцию?"
-#: gitk:9535
+#: gitk:9655
msgid "Cherry-picking"
-msgstr "Ð\9aопиÑ\80ование изменений"
+msgstr "Ð\9aопиÑ\80ование коммиÑ\82а"
-#: gitk:9544
+#: gitk:9664
#, tcl-format
msgid ""
"Cherry-pick failed because of local changes to file '%s'.\n"
"Please commit, reset or stash your changes and try again."
-msgstr "Ð\9eÑ\82боÑ\80 лÑ\83Ñ\87Ñ\88его невозможен из-за изменений в Ñ\84айле «%s».\nÐ\97акомитьте, сбросьте или спрячьте изменения и повторите операцию."
+msgstr "Ð\9aопиÑ\80ование коммиÑ\82а невозможно из-за изменений в Ñ\84айле «%s».\nÐ\97акоммитьте, сбросьте или спрячьте изменения и повторите операцию."
-#: gitk:9550
+#: gitk:9670
msgid ""
"Cherry-pick failed because of merge conflict.\n"
"Do you wish to run git citool to resolve it?"
msgstr "Копирование изменений невозможно из-за незавершённой операции слияния.\nЗапустить git citool для завершения этой операции?"
-#: gitk:9566 gitk:9624
+#: gitk:9686 gitk:9744
msgid "No changes committed"
msgstr "Изменения не закоммичены"
-#: gitk:9593
+#: gitk:9713
#, tcl-format
msgid "Commit %s is not included in branch %s -- really revert it?"
msgstr "Коммит %s не включён в ветку %s. Продолжить операцию?"
-#: gitk:9598
+#: gitk:9718
msgid "Reverting"
-msgstr "Ð\92озвÑ\80аÑ\82 изменений"
+msgstr "Ð\9eбÑ\80аÑ\89ение изменений"
-#: gitk:9606
+#: gitk:9726
#, tcl-format
msgid ""
"Revert failed because of local changes to the following files:%s Please "
"commit, reset or stash your changes and try again."
-msgstr "Возврат изменений коммита не удался из-за локальных изменений в указанных файлах: %s\nЗакомитьте, сбросьте или спрячьте изменения и повторите операцию."
+msgstr "Ð\92озвÑ\80аÑ\82 изменений коммиÑ\82а не Ñ\83далÑ\81Ñ\8f из-за локалÑ\8cнÑ\8bÑ\85 изменений в Ñ\83казаннÑ\8bÑ\85 Ñ\84айлаÑ\85: %s\nÐ\97акоммиÑ\82Ñ\8cÑ\82е, Ñ\81бÑ\80оÑ\81Ñ\8cÑ\82е или Ñ\81пÑ\80Ñ\8fÑ\87Ñ\8cÑ\82е изменениÑ\8f и повÑ\82оÑ\80иÑ\82е опеÑ\80аÑ\86иÑ\8e."
-#: gitk:9610
+#: gitk:9730
msgid ""
"Revert failed because of merge conflict.\n"
" Do you wish to run git citool to resolve it?"
msgstr "Возврат изменений невозможен из-за незавершённой операции слияния.\nЗапустить git citool для завершения этой операции?"
-#: gitk:9653
+#: gitk:9773
msgid "Confirm reset"
msgstr "Подтвердите операцию перехода"
-#: gitk:9655
+#: gitk:9775
#, tcl-format
msgid "Reset branch %s to %s?"
msgstr "Сбросить ветку %s на коммит %s?"
-#: gitk:9657
+#: gitk:9777
msgid "Reset type:"
msgstr "Тип операции перехода:"
-#: gitk:9660
+#: gitk:9780
msgid "Soft: Leave working tree and index untouched"
msgstr "Лёгкий: оставить рабочий каталог и индекс неизменными"
-#: gitk:9663
+#: gitk:9783
msgid "Mixed: Leave working tree untouched, reset index"
msgstr "Смешанный: оставить рабочий каталог неизменным, установить индекс"
-#: gitk:9666
+#: gitk:9786
msgid ""
"Hard: Reset working tree and index\n"
"(discard ALL local changes)"
msgstr "Жесткий: переписать индекс и рабочий каталог\n(все изменения в рабочем каталоге будут потеряны)"
-#: gitk:9683
+#: gitk:9803
msgid "Resetting"
msgstr "Сброс"
-#: gitk:9743
+#: gitk:9876
+#, tcl-format
+msgid "A local branch named %s exists already"
+msgstr "Локальная ветка с именем %s уже существует"
+
+#: gitk:9884
msgid "Checking out"
msgstr "Переход"
-#: gitk:9796
+#: gitk:9943
msgid "Cannot delete the currently checked-out branch"
msgstr "Активная ветка не может быть удалена"
-#: gitk:9802
+#: gitk:9949
#, tcl-format
msgid ""
"The commits on branch %s aren't on any other branch.\n"
"Really delete branch %s?"
msgstr "Коммиты из ветки %s не принадлежат больше никакой другой ветке.\nДействительно удалить ветку %s?"
-#: gitk:9833
+#: gitk:9980
#, tcl-format
msgid "Tags and heads: %s"
msgstr "Метки и ветки: %s"
-#: gitk:9850
+#: gitk:9997
msgid "Filter"
msgstr "Фильтровать"
-#: gitk:10146
+#: gitk:10293
msgid ""
"Error reading commit topology information; branch and preceding/following "
"tag information will be incomplete."
msgstr "Ошибка чтения истории проекта; информация о ветках и коммитах вокруг меток (до/после) может быть неполной."
-#: gitk:11123
+#: gitk:11270
msgid "Tag"
msgstr "Метка"
-#: gitk:11127
+#: gitk:11274
msgid "Id"
msgstr "Id"
-#: gitk:11210
+#: gitk:11357
msgid "Gitk font chooser"
msgstr "Шрифт Gitk"
-#: gitk:11227
+#: gitk:11374
msgid "B"
msgstr "Ж"
-#: gitk:11230
+#: gitk:11377
msgid "I"
msgstr "К"
-#: gitk:11348
+#: gitk:11495
msgid "Commit list display options"
msgstr "Параметры показа списка коммитов"
-#: gitk:11351
+#: gitk:11498
msgid "Maximum graph width (lines)"
msgstr "Макс. ширина графа (строк)"
-#: gitk:11355
+#: gitk:11502
#, no-tcl-format
msgid "Maximum graph width (% of pane)"
msgstr "Макс. ширина графа (% ширины панели)"
-#: gitk:11358
+#: gitk:11505
msgid "Show local changes"
msgstr "Показывать изменения в рабочем каталоге"
-#: gitk:11361
+#: gitk:11508
msgid "Auto-select SHA1 (length)"
msgstr "Автоматически выделить SHA1 (длинна)"
-#: gitk:11365
+#: gitk:11512
msgid "Hide remote refs"
msgstr "Скрыть внешние ссылки"
-#: gitk:11369
+#: gitk:11516
msgid "Diff display options"
msgstr "Параметры показа изменений"
-#: gitk:11371
+#: gitk:11518
msgid "Tab spacing"
msgstr "Ширина табуляции"
-#: gitk:11374
+#: gitk:11521
msgid "Display nearby tags/heads"
msgstr "Показывать близкие метки/ветки"
-#: gitk:11377
+#: gitk:11524
msgid "Maximum # tags/heads to show"
msgstr "Показывать максимальное количество меток/веток"
-#: gitk:11380
+#: gitk:11527
msgid "Limit diffs to listed paths"
msgstr "Ограничить показ изменений выбранными файлами"
-#: gitk:11383
+#: gitk:11530
msgid "Support per-file encodings"
msgstr "Поддержка кодировок в отдельных файлах"
-#: gitk:11389 gitk:11536
+#: gitk:11536 gitk:11683
msgid "External diff tool"
msgstr "Программа для показа изменений"
-#: gitk:11390
+#: gitk:11537
msgid "Choose..."
msgstr "Выберите..."
-#: gitk:11395
+#: gitk:11542
msgid "General options"
msgstr "Общие опции"
-#: gitk:11398
+#: gitk:11545
msgid "Use themed widgets"
msgstr "Использовать стили виджетов"
-#: gitk:11400
+#: gitk:11547
msgid "(change requires restart)"
msgstr "(изменение потребует перезапуск)"
-#: gitk:11402
+#: gitk:11549
msgid "(currently unavailable)"
msgstr "(недоступно в данный момент)"
-#: gitk:11413
+#: gitk:11560
msgid "Colors: press to choose"
msgstr "Цвета: нажмите для выбора"
-#: gitk:11416
+#: gitk:11563
msgid "Interface"
msgstr "Интерфейс"
-#: gitk:11417
+#: gitk:11564
msgid "interface"
msgstr "интерфейс"
-#: gitk:11420
+#: gitk:11567
msgid "Background"
msgstr "Фон"
-#: gitk:11421 gitk:11451
+#: gitk:11568 gitk:11598
msgid "background"
msgstr "фон"
-#: gitk:11424
+#: gitk:11571
msgid "Foreground"
msgstr "Передний план"
-#: gitk:11425
+#: gitk:11572
msgid "foreground"
msgstr "передний план"
-#: gitk:11428
+#: gitk:11575
msgid "Diff: old lines"
msgstr "Изменения: старый текст"
-#: gitk:11429
+#: gitk:11576
msgid "diff old lines"
msgstr "старый текст изменения"
-#: gitk:11433
+#: gitk:11580
msgid "Diff: new lines"
msgstr "Изменения: новый текст"
-#: gitk:11434
+#: gitk:11581
msgid "diff new lines"
msgstr "новый текст изменения"
-#: gitk:11438
+#: gitk:11585
msgid "Diff: hunk header"
msgstr "Изменения: заголовок блока"
-#: gitk:11440
+#: gitk:11587
msgid "diff hunk header"
msgstr "заголовок блока изменений"
-#: gitk:11444
+#: gitk:11591
msgid "Marked line bg"
msgstr "Фон выбранной строки"
-#: gitk:11446
+#: gitk:11593
msgid "marked line background"
msgstr "фон выбранной строки"
-#: gitk:11450
+#: gitk:11597
msgid "Select bg"
msgstr "Выберите фон"
-#: gitk:11459
+#: gitk:11606
msgid "Fonts: press to choose"
msgstr "Шрифт: нажмите для выбора"
-#: gitk:11461
+#: gitk:11608
msgid "Main font"
msgstr "Основной шрифт"
-#: gitk:11462
+#: gitk:11609
msgid "Diff display font"
msgstr "Шрифт показа изменений"
-#: gitk:11463
+#: gitk:11610
msgid "User interface font"
msgstr "Шрифт интерфейса"
-#: gitk:11485
+#: gitk:11632
msgid "Gitk preferences"
msgstr "Настройки Gitk"
-#: gitk:11494
+#: gitk:11641
msgid "General"
msgstr "Общие"
-#: gitk:11495
+#: gitk:11642
msgid "Colors"
msgstr "Цвета"
-#: gitk:11496
+#: gitk:11643
msgid "Fonts"
msgstr "Шрифты"
-#: gitk:11546
+#: gitk:11693
#, tcl-format
msgid "Gitk: choose color for %s"
msgstr "Gitk: выберите цвет для %s"
-#: gitk:12059
+#: gitk:12206
msgid ""
"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
" Gitk requires at least Tcl/Tk 8.4."
msgstr "К сожалению gitk не может работать с этой версий Tcl/Tk.\nТребуется как минимум Tcl/Tk 8.4."
-#: gitk:12269
+#: gitk:12416
msgid "Cannot find a git repository here."
msgstr "Git-репозитарий не найден в текущем каталоге."
-#: gitk:12316
+#: gitk:12463
#, tcl-format
msgid "Ambiguous argument '%s': both revision and filename"
msgstr "Неоднозначный аргумент «%s»: существует как редакция и как имя файла"
-#: gitk:12328
+#: gitk:12475
msgid "Bad arguments to gitk:"
msgstr "Неправильные аргументы для gitk:"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - en incheckningsvisare för git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Använd och vidareförmedla enligt villkoren i GNU General Public License"
#~ msgid "mc"
#~ msgstr "mc"
-#~ msgid ""
-#~ "\n"
-#~ "Gitk - a commit viewer for git\n"
-#~ "\n"
-#~ "Copyright © 2005-2015 Paul Mackerras\n"
-#~ "\n"
-#~ "Use and redistribute under the terms of the GNU General Public License"
-#~ msgstr ""
-#~ "\n"
-#~ "Gitk - en incheckningsvisare för git\n"
-#~ "\n"
-#~ "Copyright © 2005-2015 Paul Mackerras\n"
-#~ "\n"
-#~ "Använd och vidareförmedla enligt villkoren i GNU General Public License"
-
#~ msgid "next"
#~ msgstr "nästa"
"\n"
"Gitk - a commit viewer for git\n"
"\n"
-"Copyright © 2005-2014 Paul Mackerras\n"
+"Copyright © 2005-2016 Paul Mackerras\n"
"\n"
"Use and redistribute under the terms of the GNU General Public License"
msgstr ""
"\n"
"Gitk - ứng dụng để xem các lần chuyển giao dành cho git\n"
"\n"
-"Bản quyền © 2005-2014 Paul Mackerras\n"
+"Bản quyền © 2005-2016 Paul Mackerras\n"
"\n"
"Dùng và phân phối lại phần mềm này theo các điều khoản của Giấy Phép Công GNU"
#ifndef GPG_INTERFACE_H
#define GPG_INTERFACE_H
-#define GPG_VERIFY_VERBOSE 1
-#define GPG_VERIFY_RAW 2
+#define GPG_VERIFY_VERBOSE 1
+#define GPG_VERIFY_RAW 2
+#define GPG_VERIFY_OMIT_STATUS 4
struct signature_check {
char *payload;
#include "color.h"
#include "graph.h"
#include "revision.h"
+#include "argv-array.h"
/* Internal API */
static const char **column_colors;
static unsigned short column_colors_max;
+static void parse_graph_colors_config(struct argv_array *colors, const char *string)
+{
+ const char *end, *start;
+
+ start = string;
+ end = string + strlen(string);
+ while (start < end) {
+ const char *comma = strchrnul(start, ',');
+ char color[COLOR_MAXLEN];
+
+ if (!color_parse_mem(start, comma - start, color))
+ argv_array_push(colors, color);
+ else
+ warning(_("ignore invalid color '%.*s' in log.graphColors"),
+ (int)(comma - start), start);
+ start = comma + 1;
+ }
+ argv_array_push(colors, GIT_COLOR_RESET);
+}
+
void graph_set_column_colors(const char **colors, unsigned short colors_max)
{
column_colors = colors;
{
struct git_graph *graph = xmalloc(sizeof(struct git_graph));
- if (!column_colors)
- graph_set_column_colors(column_colors_ansi,
- column_colors_ansi_max);
+ if (!column_colors) {
+ char *string;
+ if (git_config_get_string("log.graphcolors", &string)) {
+ /* not configured -- use default */
+ graph_set_column_colors(column_colors_ansi,
+ column_colors_ansi_max);
+ } else {
+ static struct argv_array custom_colors = ARGV_ARRAY_INIT;
+ argv_array_clear(&custom_colors);
+ parse_graph_colors_config(&custom_colors, string);
+ free(string);
+ /* graph_set_column_colors takes a max-index, not a count */
+ graph_set_column_colors(custom_colors.argv,
+ custom_colors.argc - 1);
+ }
+ }
graph->commit = NULL;
graph->revs = opt;
case GREP_SOURCE_FILE:
gs->identifier = xstrdup(identifier);
break;
+ case GREP_SOURCE_SUBMODULE:
+ if (!identifier) {
+ gs->identifier = NULL;
+ break;
+ }
+ /*
+ * FALL THROUGH
+ * If the identifier is non-NULL (in the submodule case) it
+ * will be a SHA1 that needs to be copied.
+ */
case GREP_SOURCE_SHA1:
gs->identifier = xmalloc(20);
hashcpy(gs->identifier, identifier);
break;
case GREP_SOURCE_BUF:
gs->identifier = NULL;
+ break;
}
}
switch (gs->type) {
case GREP_SOURCE_FILE:
case GREP_SOURCE_SHA1:
+ case GREP_SOURCE_SUBMODULE:
free(gs->buf);
gs->buf = NULL;
gs->size = 0;
return grep_source_load_sha1(gs);
case GREP_SOURCE_BUF:
return gs->buf ? 0 : -1;
+ case GREP_SOURCE_SUBMODULE:
+ break;
}
- die("BUG: invalid grep_source type");
+ die("BUG: invalid grep_source type to load");
}
void grep_source_load_driver(struct grep_source *gs)
GREP_SOURCE_SHA1,
GREP_SOURCE_FILE,
GREP_SOURCE_BUF,
+ GREP_SOURCE_SUBMODULE,
} type;
void *identifier;
return 0;
#if defined(GIT_WINDOWS_NATIVE)
-{ /* cannot trust the executable bit, peek into the file instead */
+ /*
+ * On Windows there is no executable bit. The file extension
+ * indicates whether it can be run as an executable, and Git
+ * has special-handling to detect scripts and launch them
+ * through the indicated script interpreter. We test for the
+ * file extension first because virus scanners may make
+ * it quite expensive to open many files.
+ */
+ if (ends_with(name, ".exe"))
+ return S_IXUSR;
+
+{
+ /*
+ * Now that we know it does not have an executable extension,
+ * peek into the file instead.
+ */
char buf[3] = { 0 };
int n;
int fd = open(name, O_RDONLY);
if (fd >= 0) {
n = read(fd, buf, 2);
if (n == 2)
- /* DOS executables start with "MZ" */
- if (!strcmp(buf, "#!") || !strcmp(buf, "MZ"))
+ /* look for a she-bang */
+ if (!strcmp(buf, "#!"))
st.st_mode |= S_IXUSR;
close(fd);
}
#include "walker.h"
#include "http.h"
#include "list.h"
+#include "transport.h"
struct alt_base {
char *base;
#endif
}
+static int is_alternate_allowed(const char *url)
+{
+ const char *protocols[] = {
+ "http", "https", "ftp", "ftps"
+ };
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(protocols); i++) {
+ const char *end;
+ if (skip_prefix(url, protocols[i], &end) &&
+ starts_with(end, "://"))
+ break;
+ }
+
+ if (i >= ARRAY_SIZE(protocols)) {
+ warning("ignoring alternate with unknown protocol: %s", url);
+ return 0;
+ }
+ if (!is_transport_allowed(protocols[i], 0)) {
+ warning("ignoring alternate with restricted protocol: %s", url);
+ return 0;
+ }
+
+ return 1;
+}
+
static void process_alternates_response(void *callback_data)
{
struct alternates_request *alt_req =
struct strbuf target = STRBUF_INIT;
strbuf_add(&target, base, serverlen);
strbuf_add(&target, data + i, posn - i - 7);
- if (walker->get_verbosely)
- fprintf(stderr, "Also look at %s\n",
+
+ if (is_alternate_allowed(target.buf)) {
+ warning("adding alternate object store: %s",
target.buf);
- newalt = xmalloc(sizeof(*newalt));
- newalt->next = NULL;
- newalt->base = strbuf_detach(&target, NULL);
- newalt->got_indices = 0;
- newalt->packs = NULL;
-
- while (tail->next != NULL)
- tail = tail->next;
- tail->next = newalt;
+ newalt = xmalloc(sizeof(*newalt));
+ newalt->next = NULL;
+ newalt->base = strbuf_detach(&target, NULL);
+ newalt->got_indices = 0;
+ newalt->packs = NULL;
+
+ while (tail->next != NULL)
+ tail = tail->next;
+ tail->next = newalt;
+ }
}
}
i = posn + 1;
struct alternates_request alt_req;
struct walker_data *cdata = walker->data;
+ if (http_follow_config != HTTP_FOLLOW_ALWAYS)
+ return;
+
/*
* If another request has already started fetching alternates,
* wait for them to arrive and return to processing this request's
* we turned off CURLOPT_FAILONERROR to avoid losing a
* persistent connection and got CURLE_OK.
*/
- if (req->http_code == 404 && req->curl_result == CURLE_OK &&
+ if (req->http_code >= 300 && req->curl_result == CURLE_OK &&
(starts_with(req->url, "http://") ||
- starts_with(req->url, "https://")))
+ starts_with(req->url, "https://"))) {
req->curl_result = CURLE_HTTP_RETURNED_ERROR;
+ xsnprintf(req->errorstr, sizeof(req->errorstr),
+ "HTTP request failed");
+ }
if (obj_req->state == ABORTED) {
ret = error("Request for %s aborted", hex);
static const char *user_agent;
static int curl_empty_auth;
+enum http_follow_config http_follow_config = HTTP_FOLLOW_INITIAL;
+
#if LIBCURL_VERSION_NUM >= 0x071700
/* Use CURLOPT_KEYPASSWD as is */
#elif LIBCURL_VERSION_NUM >= 0x070903
return 0;
}
+ if (!strcmp("http.followredirects", var)) {
+ if (value && !strcmp(value, "initial"))
+ http_follow_config = HTTP_FOLLOW_INITIAL;
+ else if (git_config_bool(var, value))
+ http_follow_config = HTTP_FOLLOW_ALWAYS;
+ else
+ http_follow_config = HTTP_FOLLOW_NONE;
+ return 0;
+ }
+
/* Fall back on the default ones */
return git_default_config(var, value, cb);
}
curl_easy_setopt(handle, CURLOPT_DEBUGDATA, NULL);
}
+static long get_curl_allowed_protocols(int from_user)
+{
+ long allowed_protocols = 0;
+
+ if (is_transport_allowed("http", from_user))
+ allowed_protocols |= CURLPROTO_HTTP;
+ if (is_transport_allowed("https", from_user))
+ allowed_protocols |= CURLPROTO_HTTPS;
+ if (is_transport_allowed("ftp", from_user))
+ allowed_protocols |= CURLPROTO_FTP;
+ if (is_transport_allowed("ftps", from_user))
+ allowed_protocols |= CURLPROTO_FTPS;
+
+ return allowed_protocols;
+}
static CURL *get_curl_handle(void)
{
CURL *result = curl_easy_init();
- long allowed_protocols = 0;
if (!result)
die("curl_easy_init failed");
curl_low_speed_time);
}
- curl_easy_setopt(result, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20);
#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
curl_easy_setopt(result, CURLOPT_POST301, 1);
#endif
#if LIBCURL_VERSION_NUM >= 0x071304
- if (is_transport_allowed("http"))
- allowed_protocols |= CURLPROTO_HTTP;
- if (is_transport_allowed("https"))
- allowed_protocols |= CURLPROTO_HTTPS;
- if (is_transport_allowed("ftp"))
- allowed_protocols |= CURLPROTO_FTP;
- if (is_transport_allowed("ftps"))
- allowed_protocols |= CURLPROTO_FTPS;
- curl_easy_setopt(result, CURLOPT_REDIR_PROTOCOLS, allowed_protocols);
+ curl_easy_setopt(result, CURLOPT_REDIR_PROTOCOLS,
+ get_curl_allowed_protocols(0));
+ curl_easy_setopt(result, CURLOPT_PROTOCOLS,
+ get_curl_allowed_protocols(-1));
#else
- if (transport_restrict_protocols())
- warning("protocol restrictions not applied to curl redirects because\n"
- "your curl version is too old (>= 7.19.4)");
+ warning("protocol restrictions not applied to curl redirects because\n"
+ "your curl version is too old (>= 7.19.4)");
#endif
if (getenv("GIT_CURL_VERBOSE"))
curl_easy_setopt(result, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(slot->curl, CURLOPT_RANGE, NULL);
+ /*
+ * Default following to off unless "ALWAYS" is configured; this gives
+ * callers a sane starting point, and they can tweak for individual
+ * HTTP_FOLLOW_* cases themselves.
+ */
+ if (http_follow_config == HTTP_FOLLOW_ALWAYS)
+ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1);
+ else
+ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 0);
+
#if LIBCURL_VERSION_NUM >= 0x070a08
curl_easy_setopt(slot->curl, CURLOPT_IPRESOLVE, git_curl_ipresolve);
#endif
* If we see a failing http code with CURLE_OK, we have turned off
* FAILONERROR (to keep the server's custom error response), and should
* translate the code into failure here.
+ *
+ * Likewise, if we see a redirect (30x code), that means we turned off
+ * redirect-following, and we should treat the result as an error.
*/
if (results->curl_result == CURLE_OK &&
- results->http_code >= 400) {
+ results->http_code >= 300) {
results->curl_result = CURLE_HTTP_RETURNED_ERROR;
/*
* Normally curl will already have put the "reason phrase"
strbuf_addstr(&buf, " no-cache");
if (options && options->keep_error)
curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 0);
+ if (options && options->initial_request &&
+ http_follow_config == HTTP_FOLLOW_INITIAL)
+ curl_easy_setopt(slot->curl, CURLOPT_FOLLOWLOCATION, 1);
headers = curl_slist_append(headers, buf.buf);
*
* Note that this assumes a sane redirect scheme. It's entirely possible
* in the example above to end up at a URL that does not even end in
- * "info/refs". In such a case we simply punt, as there is not much we can
- * do (and such a scheme is unlikely to represent a real git repository,
- * which means we are likely about to abort anyway).
+ * "info/refs". In such a case we die. There's not much we can do, such a
+ * scheme is unlikely to represent a real git repository, and failing to
+ * rewrite the base opens options for malicious redirects to do funny things.
*/
static int update_url_from_redirect(struct strbuf *base,
const char *asked,
const struct strbuf *got)
{
const char *tail;
- size_t tail_len;
+ size_t new_len;
if (!strcmp(asked, got->buf))
return 0;
die("BUG: update_url_from_redirect: %s is not a superset of %s",
asked, base->buf);
- tail_len = strlen(tail);
-
- if (got->len < tail_len ||
- strcmp(tail, got->buf + got->len - tail_len))
- return 0; /* insane redirect scheme */
+ new_len = got->len;
+ if (!strip_suffix_mem(got->buf, &new_len, tail))
+ die(_("unable to update url base from redirection:\n"
+ " asked for: %s\n"
+ " redirect: %s"),
+ asked, got->buf);
strbuf_reset(base);
- strbuf_add(base, got->buf, got->len - tail_len);
+ strbuf_add(base, got->buf, new_len);
+
return 1;
}
if (c != CURLE_OK)
die("BUG: curl_easy_getinfo for HTTP code failed: %s",
curl_easy_strerror(c));
- if (slot->http_code >= 400)
+ if (slot->http_code >= 300)
return size;
}
extern char curl_errorstr[CURL_ERROR_SIZE];
+enum http_follow_config {
+ HTTP_FOLLOW_NONE,
+ HTTP_FOLLOW_ALWAYS,
+ HTTP_FOLLOW_INITIAL
+};
+extern enum http_follow_config http_follow_config;
+
static inline int missing__target(int code, int result)
{
return /* file:// URL -- do we ever use one??? */
/* Options for http_get_*() */
struct http_get_options {
unsigned no_cache:1,
- keep_error:1;
+ keep_error:1,
+ initial_request:1;
/* If non-NULL, returns the content-type of the response. */
struct strbuf *content_type;
int flags, long timeout_ms)
{
int fd = lock_file_timeout(lk, path, flags, timeout_ms);
- if (fd < 0 && (flags & LOCK_DIE_ON_ERROR))
- unable_to_lock_die(path, errno);
+ if (fd < 0) {
+ if (flags & LOCK_DIE_ON_ERROR)
+ unable_to_lock_die(path, errno);
+ if (flags & LOCK_REPORT_ON_ERROR) {
+ struct strbuf buf = STRBUF_INIT;
+ unable_to_lock_message(path, errno, &buf);
+ error("%s", buf.buf);
+ strbuf_release(&buf);
+ }
+ }
return fd;
}
/*
* If a lock is already taken for the file, `die()` with an error
* message. If this flag is not specified, trying to lock a file that
- * is already locked returns -1 to the caller.
+ * is already locked silently returns -1 to the caller, or ...
*/
#define LOCK_DIE_ON_ERROR 1
+/*
+ * ... this flag can be passed instead to return -1 and give the usual
+ * error message upon an error.
+ */
+#define LOCK_REPORT_ON_ERROR 4
+
/*
* Usually symbolic links in the destination path are resolved. This
* means that (1) the lockfile is created by adding ".lock" to the
{
if (!mi->inbody_header_accum.len)
return;
- assert(check_header(mi, &mi->inbody_header_accum, mi->s_hdr_data, 0));
+ if (!check_header(mi, &mi->inbody_header_accum, mi->s_hdr_data, 0))
+ die("BUG: inbody_header_accum, if not empty, must always contain a valid in-body header");
strbuf_reset(&mi->inbody_header_accum);
}
struct cache_entry *nce;
nce = refresh_cache_entry(ce, CE_MATCH_REFRESH | CE_MATCH_IGNORE_MISSING);
+ if (!nce)
+ return err(o, _("addinfo_cache failed for path '%s'"), path);
if (nce != ce)
ret = add_cache_entry(nce, options);
}
return unmerged;
}
-static int string_list_df_name_compare(const void *a, const void *b)
+static int string_list_df_name_compare(const char *one, const char *two)
{
- const struct string_list_item *one = a;
- const struct string_list_item *two = b;
- int onelen = strlen(one->string);
- int twolen = strlen(two->string);
+ int onelen = strlen(one);
+ int twolen = strlen(two);
/*
* Here we only care that entries for D/F conflicts are
* adjacent, in particular with the file of the D/F conflict
* since in other cases any changes in their order due to
* sorting cause no problems for us.
*/
- int cmp = df_name_compare(one->string, onelen, S_IFDIR,
- two->string, twolen, S_IFDIR);
+ int cmp = df_name_compare(one, onelen, S_IFDIR,
+ two, twolen, S_IFDIR);
/*
* Now that 'foo' and 'foo/bar' compare equal, we have to make sure
* that 'foo' comes before 'foo/bar'.
string_list_append(&df_sorted_entries, next->string)->util =
next->util;
}
- qsort(df_sorted_entries.items, entries->nr, sizeof(*entries->items),
- string_list_df_name_compare);
+ df_sorted_entries.cmp = string_list_df_name_compare;
+ string_list_sort(&df_sorted_entries);
string_list_clear(&o->df_conflict_file_set, 1);
for (i = 0; i < df_sorted_entries.nr; i++) {
return strbuf_detach(&newpath, NULL);
}
-static int dir_in_way(const char *path, int check_working_copy)
+/**
+ * Check whether a directory in the index is in the way of an incoming
+ * file. Return 1 if so. If check_working_copy is non-zero, also
+ * check the working directory. If empty_ok is non-zero, also return
+ * 0 in the case where the working-tree dir exists but is empty.
+ */
+static int dir_in_way(const char *path, int check_working_copy, int empty_ok)
{
int pos;
struct strbuf dirpath = STRBUF_INIT;
}
strbuf_release(&dirpath);
- return check_working_copy && !lstat(path, &st) && S_ISDIR(st.st_mode);
+ return check_working_copy && !lstat(path, &st) && S_ISDIR(st.st_mode) &&
+ !(empty_ok && is_empty_dir(path));
}
static int was_tracked(const char *path)
{
char *renamed = NULL;
int ret = 0;
- if (dir_in_way(path, !o->call_depth)) {
+ if (dir_in_way(path, !o->call_depth, 0)) {
renamed = unique_path(o, path, a_oid ? o->branch1 : o->branch2);
}
remove_file(o, 0, rename->path, 0);
dst_name = unique_path(o, rename->path, cur_branch);
} else {
- if (dir_in_way(rename->path, !o->call_depth)) {
+ if (dir_in_way(rename->path, !o->call_depth, 0)) {
dst_name = unique_path(o, rename->path, cur_branch);
output(o, 1, _("%s is a directory in %s adding as %s instead"),
rename->path, other_branch, dst_name);
o->branch2 == rename_conflict_info->branch1) ?
pair1->two->path : pair1->one->path;
- if (dir_in_way(path, !o->call_depth))
+ if (dir_in_way(path, !o->call_depth,
+ S_ISGITLINK(pair1->two->mode)))
df_conflict_remains = 1;
}
if (merge_file_special_markers(o, &one, &a, &b,
oid = b_oid;
conf = _("directory/file");
}
- if (dir_in_way(path, !o->call_depth)) {
+ if (dir_in_way(path, !o->call_depth,
+ S_ISGITLINK(a_mode))) {
char *new_path = unique_path(o, path, add_branch);
clean_merge = 0;
output(o, 1, _("CONFLICT (%s): There is a directory with name %s in %s. "
}
}
- hold_locked_index(lock, 1);
+ hold_locked_index(lock, LOCK_DIE_ON_ERROR);
clean = merge_recursive(o, head_commit, next_commit, ca,
result);
if (clean < 0)
refresh_cache(REFRESH_QUIET);
- if (hold_locked_index(lock_file, 0) < 0)
+ if (hold_locked_index(lock_file, LOCK_REPORT_ON_ERROR) < 0)
return -1;
memset(&trees, 0, sizeof(trees));
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" -wait -merge -3 -a1 \
"$merge_tool_path" -wait -2 \
"$LOCAL" "$REMOTE" "$MERGED" >/dev/null 2>&1
fi
- check_unchanged
}
translate_merge_tool_path() {
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" "$LOCAL" "$REMOTE" "$BASE" \
"$merge_tool_path" "$LOCAL" "$REMOTE" \
-mergeoutput="$MERGED"
fi
- check_unchanged
}
translate_merge_tool_path() {
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" -MF="$LOCAL" -TF="$REMOTE" -BF="$BASE" \
"$merge_tool_path" -MF="$LOCAL" -TF="$REMOTE" \
-RF="$MERGED"
fi
- check_unchanged
}
translate_merge_tool_path() {
fi >/dev/null 2>&1
}
-translate_merge_tool_path() {
+translate_merge_tool_path () {
echo DeltaWalker
}
+
+exit_code_trustable () {
+ true
+}
--result="$MERGED" "$LOCAL" "$REMOTE"
fi
}
+
+exit_code_trustable () {
+ true
+}
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" \
"$merge_tool_path" \
"$LOCAL" "$MERGED" "$REMOTE" | cat
fi
- check_unchanged
}
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" \
"$merge_tool_path" "$LOCAL" "$REMOTE" \
--default --mode=merge2 --to="$MERGED"
fi
- check_unchanged
}
translate_merge_tool_path() {
echo emacs
}
+
+exit_code_trustable () {
+ true
+}
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" -merge "$LOCAL" "$BASE" "$REMOTE" -o:"$MERGED" -nh
else
"$merge_tool_path" -merge "$LOCAL" "$REMOTE" -o:"$MERGED" -nh
fi
- check_unchanged
}
translate_merge_tool_path() {
>/dev/null 2>&1
fi
}
+
+exit_code_trustable () {
+ true
+}
diff_cmd () {
"$merge_tool_path" "$LOCAL" "$REMOTE"
}
+
+exit_code_trustable () {
+ true
+}
then
check_meld_for_output_version
fi
- touch "$BACKUP"
+
if test "$meld_has_output_option" = true
then
"$merge_tool_path" --output "$MERGED" \
else
"$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE"
fi
- check_unchanged
}
# Check whether we should use 'meld --output <file>'
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" "$LOCAL" "$REMOTE" \
"$merge_tool_path" "$LOCAL" "$REMOTE" \
-merge "$MERGED" | cat
fi
- check_unchanged
}
}
merge_cmd () {
- touch "$BACKUP"
if ! $base_present
then
cp -- "$LOCAL" "$BASE"
create_virtual_base "$BASE" "$REMOTE"
fi
"$merge_tool_path" "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
- check_unchanged
}
create_empty_file () {
"$merge_tool_path" -o "$MERGED" "$LOCAL" "$REMOTE"
fi
}
+
+exit_code_trustable () {
+ true
+}
merge_cmd () {
if $base_present
then
- touch "$BACKUP"
basename="$(basename "$merge_tool_path" .exe)"
if test "$basename" = "tortoisegitmerge"
then
-base:"$BASE" -mine:"$LOCAL" \
-theirs:"$REMOTE" -merged:"$MERGED"
fi
- check_unchanged
else
echo "$merge_tool_path cannot be used without a base" 1>&2
return 1
}
merge_cmd () {
- touch "$BACKUP"
case "$1" in
gvimdiff|vimdiff)
if $base_present
fi
;;
esac
- check_unchanged
}
translate_merge_tool_path() {
;;
esac
}
+
+exit_code_trustable () {
+ true
+}
merge_cmd () {
# mergetool.winmerge.trustExitCode is implicitly false.
# touch $BACKUP so that we can check_unchanged.
- touch "$BACKUP"
"$merge_tool_path" -u -e -dl Local -dr Remote \
"$LOCAL" "$REMOTE" "$MERGED"
- check_unchanged
}
translate_merge_tool_path() {
diff_cmd () {
"$merge_tool_path" \
-R 'Accel.Search: "Ctrl+F"' \
- -R 'Accel.SearchForward: "Ctrl-G"' \
+ -R 'Accel.SearchForward: "Ctrl+G"' \
"$LOCAL" "$REMOTE"
}
merge_cmd () {
- touch "$BACKUP"
if $base_present
then
"$merge_tool_path" -X --show-merged-pane \
- -R 'Accel.SaveAsMerged: "Ctrl-S"' \
+ -R 'Accel.SaveAsMerged: "Ctrl+S"' \
-R 'Accel.Search: "Ctrl+F"' \
- -R 'Accel.SearchForward: "Ctrl-G"' \
+ -R 'Accel.SearchForward: "Ctrl+G"' \
--merged-file "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
else
"$merge_tool_path" -X $extra \
- -R 'Accel.SaveAsMerged: "Ctrl-S"' \
+ -R 'Accel.SaveAsMerged: "Ctrl+S"' \
-R 'Accel.Search: "Ctrl+F"' \
- -R 'Accel.SearchForward: "Ctrl-G"' \
+ -R 'Accel.SearchForward: "Ctrl+G"' \
--merged-file "$MERGED" "$LOCAL" "$REMOTE"
fi
- check_unchanged
}
const char * const *usagestr,
const struct option *options)
{
- fprintf(stderr, "%s\n\n", msg);
+ fprintf(stderr, "fatal: %s\n\n", msg);
usage_with_options(usagestr, options);
}
*
* Performs the following normalizations on src, storing the result in dst:
* - Ensures that components are separated by '/' (Windows only)
- * - Squashes sequences of '/'.
+ * - Squashes sequences of '/' except "//server/share" on Windows
* - Removes "." components.
* - Removes ".." components, and the components the precede them.
* Returns failure (non-zero) if a ".." component appears as first path
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
{
char *dst0;
- int i;
+ const char *end;
- for (i = has_dos_drive_prefix(src); i > 0; i--)
- *dst++ = *src++;
+ /*
+ * Copy initial part of absolute path: "/", "C:/", "//server/share/".
+ */
+ end = src + offset_1st_component(src);
+ while (src < end) {
+ char c = *src++;
+ if (is_dir_sep(c))
+ c = '/';
+ *dst++ = c;
+ }
dst0 = dst;
- if (is_dir_sep(*src)) {
- *dst++ = '/';
- while (is_dir_sep(*src))
- src++;
- }
+ while (is_dir_sep(*src))
+ src++;
for (;;) {
char c = *src;
char mnemonic; /* this cannot be ':'! */
const char *name;
} pathspec_magic[] = {
- { PATHSPEC_FROMTOP, '/', "top" },
- { PATHSPEC_LITERAL, 0, "literal" },
- { PATHSPEC_GLOB, '\0', "glob" },
- { PATHSPEC_ICASE, '\0', "icase" },
- { PATHSPEC_EXCLUDE, '!', "exclude" },
+ { PATHSPEC_FROMTOP, '/', "top" },
+ { PATHSPEC_LITERAL, '\0', "literal" },
+ { PATHSPEC_GLOB, '\0', "glob" },
+ { PATHSPEC_ICASE, '\0', "icase" },
+ { PATHSPEC_EXCLUDE, '!', "exclude" },
};
-static void prefix_short_magic(struct strbuf *sb, int prefixlen,
- unsigned short_magic)
+static void prefix_magic(struct strbuf *sb, int prefixlen, unsigned magic)
{
int i;
strbuf_addstr(sb, ":(");
for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
- if (short_magic & pathspec_magic[i].bit) {
+ if (magic & pathspec_magic[i].bit) {
if (sb->buf[sb->len - 1] != '(')
strbuf_addch(sb, ',');
strbuf_addstr(sb, pathspec_magic[i].name);
strbuf_addf(sb, ",prefix:%d)", prefixlen);
}
-/*
- * Take an element of a pathspec and check for magic signatures.
- * Append the result to the prefix. Return the magic bitmap.
- *
- * For now, we only parse the syntax and throw out anything other than
- * "top" magic.
- *
- * NEEDSWORK: This needs to be rewritten when we start migrating
- * get_pathspec() users to use the "struct pathspec" interface. For
- * example, a pathspec element may be marked as case-insensitive, but
- * the prefix part must always match literally, and a single stupid
- * string cannot express such a case.
- */
-static unsigned prefix_pathspec(struct pathspec_item *item,
- unsigned *p_short_magic,
- const char **raw, unsigned flags,
- const char *prefix, int prefixlen,
- const char *elt)
+static inline int get_literal_global(void)
{
- static int literal_global = -1;
- static int glob_global = -1;
- static int noglob_global = -1;
- static int icase_global = -1;
- unsigned magic = 0, short_magic = 0, global_magic = 0;
- const char *copyfrom = elt, *long_magic_end = NULL;
- char *match;
- int i, pathspec_prefix = -1;
+ static int literal = -1;
+
+ if (literal < 0)
+ literal = git_env_bool(GIT_LITERAL_PATHSPECS_ENVIRONMENT, 0);
+
+ return literal;
+}
+
+static inline int get_glob_global(void)
+{
+ static int glob = -1;
+
+ if (glob < 0)
+ glob = git_env_bool(GIT_GLOB_PATHSPECS_ENVIRONMENT, 0);
+
+ return glob;
+}
+
+static inline int get_noglob_global(void)
+{
+ static int noglob = -1;
+
+ if (noglob < 0)
+ noglob = git_env_bool(GIT_NOGLOB_PATHSPECS_ENVIRONMENT, 0);
+
+ return noglob;
+}
+
+static inline int get_icase_global(void)
+{
+ static int icase = -1;
+
+ if (icase < 0)
+ icase = git_env_bool(GIT_ICASE_PATHSPECS_ENVIRONMENT, 0);
+
+ return icase;
+}
+
+static int get_global_magic(int element_magic)
+{
+ int global_magic = 0;
- if (literal_global < 0)
- literal_global = git_env_bool(GIT_LITERAL_PATHSPECS_ENVIRONMENT, 0);
- if (literal_global)
+ if (get_literal_global())
global_magic |= PATHSPEC_LITERAL;
- if (glob_global < 0)
- glob_global = git_env_bool(GIT_GLOB_PATHSPECS_ENVIRONMENT, 0);
- if (glob_global)
+ /* --glob-pathspec is overridden by :(literal) */
+ if (get_glob_global() && !(element_magic & PATHSPEC_LITERAL))
global_magic |= PATHSPEC_GLOB;
- if (noglob_global < 0)
- noglob_global = git_env_bool(GIT_NOGLOB_PATHSPECS_ENVIRONMENT, 0);
-
- if (glob_global && noglob_global)
+ if (get_glob_global() && get_noglob_global())
die(_("global 'glob' and 'noglob' pathspec settings are incompatible"));
-
- if (icase_global < 0)
- icase_global = git_env_bool(GIT_ICASE_PATHSPECS_ENVIRONMENT, 0);
- if (icase_global)
+ if (get_icase_global())
global_magic |= PATHSPEC_ICASE;
if ((global_magic & PATHSPEC_LITERAL) &&
die(_("global 'literal' pathspec setting is incompatible "
"with all other global pathspec settings"));
- if (flags & PATHSPEC_LITERAL_PATH)
- global_magic = 0;
+ /* --noglob-pathspec adds :(literal) _unless_ :(glob) is specified */
+ if (get_noglob_global() && !(element_magic & PATHSPEC_GLOB))
+ global_magic |= PATHSPEC_LITERAL;
- if (elt[0] != ':' || literal_global ||
- (flags & PATHSPEC_LITERAL_PATH)) {
- ; /* nothing to do */
- } else if (elt[1] == '(') {
- /* longhand */
- const char *nextat;
- for (copyfrom = elt + 2;
- *copyfrom && *copyfrom != ')';
- copyfrom = nextat) {
- size_t len = strcspn(copyfrom, ",)");
- if (copyfrom[len] == ',')
- nextat = copyfrom + len + 1;
- else
- /* handle ')' and '\0' */
- nextat = copyfrom + len;
- if (!len)
- continue;
- for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) {
- if (strlen(pathspec_magic[i].name) == len &&
- !strncmp(pathspec_magic[i].name, copyfrom, len)) {
- magic |= pathspec_magic[i].bit;
- break;
- }
- if (starts_with(copyfrom, "prefix:")) {
- char *endptr;
- pathspec_prefix = strtol(copyfrom + 7,
- &endptr, 10);
- if (endptr - copyfrom != len)
- die(_("invalid parameter for pathspec magic 'prefix'"));
- /* "i" would be wrong, but it does not matter */
- break;
- }
+ return global_magic;
+}
+
+/*
+ * Parse the pathspec element looking for long magic
+ *
+ * saves all magic in 'magic'
+ * if prefix magic is used, save the prefix length in 'prefix_len'
+ * returns the position in 'elem' after all magic has been parsed
+ */
+static const char *parse_long_magic(unsigned *magic, int *prefix_len,
+ const char *elem)
+{
+ const char *pos;
+ const char *nextat;
+
+ for (pos = elem + 2; *pos && *pos != ')'; pos = nextat) {
+ size_t len = strcspn(pos, ",)");
+ int i;
+
+ if (pos[len] == ',')
+ nextat = pos + len + 1; /* handle ',' */
+ else
+ nextat = pos + len; /* handle ')' and '\0' */
+
+ if (!len)
+ continue;
+
+ if (starts_with(pos, "prefix:")) {
+ char *endptr;
+ *prefix_len = strtol(pos + 7, &endptr, 10);
+ if (endptr - pos != len)
+ die(_("invalid parameter for pathspec magic 'prefix'"));
+ continue;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) {
+ if (strlen(pathspec_magic[i].name) == len &&
+ !strncmp(pathspec_magic[i].name, pos, len)) {
+ *magic |= pathspec_magic[i].bit;
+ break;
}
- if (ARRAY_SIZE(pathspec_magic) <= i)
- die(_("Invalid pathspec magic '%.*s' in '%s'"),
- (int) len, copyfrom, elt);
}
- if (*copyfrom != ')')
- die(_("Missing ')' at the end of pathspec magic in '%s'"), elt);
- long_magic_end = copyfrom;
- copyfrom++;
- } else {
- /* shorthand */
- for (copyfrom = elt + 1;
- *copyfrom && *copyfrom != ':';
- copyfrom++) {
- char ch = *copyfrom;
- if (!is_pathspec_magic(ch))
+ if (ARRAY_SIZE(pathspec_magic) <= i)
+ die(_("Invalid pathspec magic '%.*s' in '%s'"),
+ (int) len, pos, elem);
+ }
+
+ if (*pos != ')')
+ die(_("Missing ')' at the end of pathspec magic in '%s'"),
+ elem);
+ pos++;
+
+ return pos;
+}
+
+/*
+ * Parse the pathspec element looking for short magic
+ *
+ * saves all magic in 'magic'
+ * returns the position in 'elem' after all magic has been parsed
+ */
+static const char *parse_short_magic(unsigned *magic, const char *elem)
+{
+ const char *pos;
+
+ for (pos = elem + 1; *pos && *pos != ':'; pos++) {
+ char ch = *pos;
+ int i;
+
+ if (!is_pathspec_magic(ch))
+ break;
+
+ for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) {
+ if (pathspec_magic[i].mnemonic == ch) {
+ *magic |= pathspec_magic[i].bit;
break;
- for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
- if (pathspec_magic[i].mnemonic == ch) {
- short_magic |= pathspec_magic[i].bit;
- break;
- }
- if (ARRAY_SIZE(pathspec_magic) <= i)
- die(_("Unimplemented pathspec magic '%c' in '%s'"),
- ch, elt);
+ }
}
- if (*copyfrom == ':')
- copyfrom++;
+
+ if (ARRAY_SIZE(pathspec_magic) <= i)
+ die(_("Unimplemented pathspec magic '%c' in '%s'"),
+ ch, elem);
}
- magic |= short_magic;
- *p_short_magic = short_magic;
+ if (*pos == ':')
+ pos++;
- /* --noglob-pathspec adds :(literal) _unless_ :(glob) is specified */
- if (noglob_global && !(magic & PATHSPEC_GLOB))
- global_magic |= PATHSPEC_LITERAL;
+ return pos;
+}
- /* --glob-pathspec is overridden by :(literal) */
- if ((global_magic & PATHSPEC_GLOB) && (magic & PATHSPEC_LITERAL))
- global_magic &= ~PATHSPEC_GLOB;
+static const char *parse_element_magic(unsigned *magic, int *prefix_len,
+ const char *elem)
+{
+ if (elem[0] != ':' || get_literal_global())
+ return elem; /* nothing to do */
+ else if (elem[1] == '(')
+ /* longhand */
+ return parse_long_magic(magic, prefix_len, elem);
+ else
+ /* shorthand */
+ return parse_short_magic(magic, elem);
+}
+
+static void strip_submodule_slash_cheap(struct pathspec_item *item)
+{
+ if (item->len >= 1 && item->match[item->len - 1] == '/') {
+ int i = cache_name_pos(item->match, item->len - 1);
+
+ if (i >= 0 && S_ISGITLINK(active_cache[i]->ce_mode)) {
+ item->len--;
+ item->match[item->len] = '\0';
+ }
+ }
+}
+
+static void strip_submodule_slash_expensive(struct pathspec_item *item)
+{
+ int i;
+
+ for (i = 0; i < active_nr; i++) {
+ struct cache_entry *ce = active_cache[i];
+ int ce_len = ce_namelen(ce);
+
+ if (!S_ISGITLINK(ce->ce_mode))
+ continue;
+
+ if (item->len <= ce_len || item->match[ce_len] != '/' ||
+ memcmp(ce->name, item->match, ce_len))
+ continue;
+
+ if (item->len == ce_len + 1) {
+ /* strip trailing slash */
+ item->len--;
+ item->match[item->len] = '\0';
+ } else {
+ die(_("Pathspec '%s' is in submodule '%.*s'"),
+ item->original, ce_len, ce->name);
+ }
+ }
+}
+
+static void die_inside_submodule_path(struct pathspec_item *item)
+{
+ int i;
+
+ for (i = 0; i < active_nr; i++) {
+ struct cache_entry *ce = active_cache[i];
+ int ce_len = ce_namelen(ce);
+
+ if (!S_ISGITLINK(ce->ce_mode))
+ continue;
+
+ if (item->len < ce_len ||
+ !(item->match[ce_len] == '/' || item->match[ce_len] == '\0') ||
+ memcmp(ce->name, item->match, ce_len))
+ continue;
- magic |= global_magic;
+ die(_("Pathspec '%s' is in submodule '%.*s'"),
+ item->original, ce_len, ce->name);
+ }
+}
+
+/*
+ * Perform the initialization of a pathspec_item based on a pathspec element.
+ */
+static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
+ const char *prefix, int prefixlen,
+ const char *elt)
+{
+ unsigned magic = 0, element_magic = 0;
+ const char *copyfrom = elt;
+ char *match;
+ int pathspec_prefix = -1;
+
+ /* PATHSPEC_LITERAL_PATH ignores magic */
+ if (flags & PATHSPEC_LITERAL_PATH) {
+ magic = PATHSPEC_LITERAL;
+ } else {
+ copyfrom = parse_element_magic(&element_magic,
+ &pathspec_prefix,
+ elt);
+ magic |= element_magic;
+ magic |= get_global_magic(element_magic);
+ }
+
+ item->magic = magic;
if (pathspec_prefix >= 0 &&
(prefixlen || (prefix && *prefix)))
if ((magic & PATHSPEC_LITERAL) && (magic & PATHSPEC_GLOB))
die(_("%s: 'literal' and 'glob' are incompatible"), elt);
+ /* Create match string which will be used for pathspec matching */
if (pathspec_prefix >= 0) {
match = xstrdup(copyfrom);
prefixlen = pathspec_prefix;
match = xstrdup(copyfrom);
prefixlen = 0;
} else {
- match = prefix_path_gently(prefix, prefixlen, &prefixlen, copyfrom);
+ match = prefix_path_gently(prefix, prefixlen,
+ &prefixlen, copyfrom);
if (!match)
die(_("%s: '%s' is outside repository"), elt, copyfrom);
}
- *raw = item->match = match;
+
+ item->match = match;
+ item->len = strlen(item->match);
+ item->prefix = prefixlen;
+
/*
* Prefix the pathspec (keep all magic) and assign to
* original. Useful for passing to another command.
*/
- if (flags & PATHSPEC_PREFIX_ORIGIN) {
+ if ((flags & PATHSPEC_PREFIX_ORIGIN) &&
+ prefixlen && !get_literal_global()) {
struct strbuf sb = STRBUF_INIT;
- if (prefixlen && !literal_global) {
- /* Preserve the actual prefix length of each pattern */
- if (short_magic)
- prefix_short_magic(&sb, prefixlen, short_magic);
- else if (long_magic_end) {
- strbuf_add(&sb, elt, long_magic_end - elt);
- strbuf_addf(&sb, ",prefix:%d)", prefixlen);
- } else
- strbuf_addf(&sb, ":(prefix:%d)", prefixlen);
- }
+
+ /* Preserve the actual prefix length of each pattern */
+ prefix_magic(&sb, prefixlen, element_magic);
+
strbuf_addstr(&sb, match);
item->original = strbuf_detach(&sb, NULL);
- } else
- item->original = elt;
- item->len = strlen(item->match);
- item->prefix = prefixlen;
-
- if ((flags & PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP) &&
- (item->len >= 1 && item->match[item->len - 1] == '/') &&
- (i = cache_name_pos(item->match, item->len - 1)) >= 0 &&
- S_ISGITLINK(active_cache[i]->ce_mode)) {
- item->len--;
- match[item->len] = '\0';
+ } else {
+ item->original = xstrdup(elt);
}
+ if (flags & PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP)
+ strip_submodule_slash_cheap(item);
+
if (flags & PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE)
- for (i = 0; i < active_nr; i++) {
- struct cache_entry *ce = active_cache[i];
- int ce_len = ce_namelen(ce);
-
- if (!S_ISGITLINK(ce->ce_mode))
- continue;
-
- if (item->len <= ce_len || match[ce_len] != '/' ||
- memcmp(ce->name, match, ce_len))
- continue;
- if (item->len == ce_len + 1) {
- /* strip trailing slash */
- item->len--;
- match[item->len] = '\0';
- } else
- die (_("Pathspec '%s' is in submodule '%.*s'"),
- elt, ce_len, ce->name);
- }
+ strip_submodule_slash_expensive(item);
- if (magic & PATHSPEC_LITERAL)
+ if (magic & PATHSPEC_LITERAL) {
item->nowildcard_len = item->len;
- else {
+ } else {
item->nowildcard_len = simple_length(item->match);
if (item->nowildcard_len < prefixlen)
item->nowildcard_len = prefixlen;
}
+
item->flags = 0;
if (magic & PATHSPEC_GLOB) {
/*
}
/* sanity checks, pathspec matchers assume these are sane */
- assert(item->nowildcard_len <= item->len &&
- item->prefix <= item->len);
- return magic;
+ if (item->nowildcard_len > item->len ||
+ item->prefix > item->len) {
+ /*
+ * This case can be triggered by the user pointing us to a
+ * pathspec inside a submodule, which is an input error.
+ * Detect that here and complain, but fallback in the
+ * non-submodule case to a BUG, as we have no idea what
+ * would trigger that.
+ */
+ die_inside_submodule_path(item);
+ die ("BUG: item->nowildcard_len > item->len || item->prefix > item->len)");
+ }
}
static int pathspec_item_cmp(const void *a_, const void *b_)
}
static void NORETURN unsupported_magic(const char *pattern,
- unsigned magic,
- unsigned short_magic)
+ unsigned magic)
{
struct strbuf sb = STRBUF_INIT;
- int i, n;
- for (n = i = 0; i < ARRAY_SIZE(pathspec_magic); i++) {
+ int i;
+ for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) {
const struct pathspec_magic *m = pathspec_magic + i;
if (!(magic & m->bit))
continue;
if (sb.len)
- strbuf_addch(&sb, ' ');
- if (short_magic & m->bit)
- strbuf_addf(&sb, "'%c'", m->mnemonic);
+ strbuf_addstr(&sb, ", ");
+
+ if (m->mnemonic)
+ strbuf_addf(&sb, _("'%s' (mnemonic: '%c')"),
+ m->name, m->mnemonic);
else
strbuf_addf(&sb, "'%s'", m->name);
- n++;
}
/*
* We may want to substitute "this command" with a command
/* No arguments with prefix -> prefix pathspec */
if (!entry) {
- static const char *raw[2];
-
if (flags & PATHSPEC_PREFER_FULL)
return;
die("BUG: PATHSPEC_PREFER_CWD requires arguments");
pathspec->items = item = xcalloc(1, sizeof(*item));
- item->match = prefix;
- item->original = prefix;
+ item->match = xstrdup(prefix);
+ item->original = xstrdup(prefix);
item->nowildcard_len = item->len = strlen(prefix);
item->prefix = item->len;
- raw[0] = prefix;
- raw[1] = NULL;
pathspec->nr = 1;
- pathspec->_raw = raw;
return;
}
pathspec->nr = n;
ALLOC_ARRAY(pathspec->items, n);
item = pathspec->items;
- pathspec->_raw = argv;
prefixlen = prefix ? strlen(prefix) : 0;
for (i = 0; i < n; i++) {
- unsigned short_magic;
entry = argv[i];
- item[i].magic = prefix_pathspec(item + i, &short_magic,
- argv + i, flags,
- prefix, prefixlen, entry);
- if ((flags & PATHSPEC_LITERAL_PATH) &&
- !(magic_mask & PATHSPEC_LITERAL))
- item[i].magic |= PATHSPEC_LITERAL;
+ init_pathspec_item(item + i, flags, prefix, prefixlen, entry);
+
if (item[i].magic & PATHSPEC_EXCLUDE)
nr_exclude++;
if (item[i].magic & magic_mask)
- unsupported_magic(entry,
- item[i].magic & magic_mask,
- short_magic);
+ unsupported_magic(entry, item[i].magic & magic_mask);
if ((flags & PATHSPEC_SYMLINK_LEADING_PATH) &&
has_symlink_leading_path(item[i].match, item[i].len)) {
}
}
-/*
- * N.B. get_pathspec() is deprecated in favor of the "struct pathspec"
- * based interface - see pathspec.c:parse_pathspec().
- *
- * Arguments:
- * - prefix - a path relative to the root of the working tree
- * - pathspec - a list of paths underneath the prefix path
- *
- * Iterates over pathspec, prepending each path with prefix,
- * and return the resulting list.
- *
- * If pathspec is empty, return a singleton list containing prefix.
- *
- * If pathspec and prefix are both empty, return an empty list.
- *
- * This is typically used by built-in commands such as add.c, in order
- * to normalize argv arguments provided to the built-in into a list of
- * paths to process, all relative to the root of the working tree.
- */
-const char **get_pathspec(const char *prefix, const char **pathspec)
-{
- struct pathspec ps;
- parse_pathspec(&ps,
- PATHSPEC_ALL_MAGIC &
- ~(PATHSPEC_FROMTOP | PATHSPEC_LITERAL),
- PATHSPEC_PREFER_CWD,
- prefix, pathspec);
- return ps._raw;
-}
-
void copy_pathspec(struct pathspec *dst, const struct pathspec *src)
{
+ int i;
+
*dst = *src;
ALLOC_ARRAY(dst->items, dst->nr);
COPY_ARRAY(dst->items, src->items, dst->nr);
+
+ for (i = 0; i < dst->nr; i++) {
+ dst->items[i].match = xstrdup(src->items[i].match);
+ dst->items[i].original = xstrdup(src->items[i].original);
+ }
}
void clear_pathspec(struct pathspec *pathspec)
{
+ int i;
+
+ for (i = 0; i < pathspec->nr; i++) {
+ free(pathspec->items[i].match);
+ free(pathspec->items[i].original);
+ }
free(pathspec->items);
pathspec->items = NULL;
+ pathspec->nr = 0;
}
#define PATHSPEC_ONESTAR 1 /* the pathspec pattern satisfies GFNM_ONESTAR */
struct pathspec {
- const char **_raw; /* get_pathspec() result, not freed by clear_pathspec() */
int nr;
unsigned int has_wildcard:1;
unsigned int recursive:1;
unsigned magic;
int max_depth;
struct pathspec_item {
- const char *match;
- const char *original;
+ char *match;
+ char *original;
unsigned magic;
int len, prefix;
int nowildcard_len;
} # %TEMP_* Lexical Context
+=item prefix_lines ( PREFIX, STRING [, STRING... ])
+
+Prefixes lines in C<STRING> with C<PREFIX>.
+
+=cut
+
+sub prefix_lines {
+ my $prefix = shift;
+ my $string = join("\n", @_);
+ $string =~ s/^/$prefix/mg;
+ return $string;
+}
+
+=item get_comment_line_char ( )
+
+Gets the core.commentchar configuration value.
+The value falls-back to '#' if core.commentchar is set to 'auto'.
+
+=cut
+
+sub get_comment_line_char {
+ my $comment_line_char = config("core.commentchar") || '#';
+ $comment_line_char = '#' if ($comment_line_char eq 'auto');
+ $comment_line_char = '#' if (length($comment_line_char) != 1);
+ return $comment_line_char;
+}
+
+=item comment_lines ( STRING [, STRING... ])
+
+Comments lines following core.commentchar configuration.
+
+=cut
+
+sub comment_lines {
+ my $comment_line_char = get_comment_line_char;
+ return prefix_lines("$comment_line_char ", @_);
+}
+
=back
=head1 ERROR HANDLING
}
}
-our @EXPORT = qw(__);
+our @EXPORT = qw(__ __n N__);
our @EXPORT_OK = @EXPORT;
sub __bootstrap_locale_messages {
eval {
__bootstrap_locale_messages();
*__ = \&Locale::Messages::gettext;
+ *__n = \&Locale::Messages::ngettext;
1;
} or do {
# Tell test.pl that we couldn't load the gettext library.
# Just a fall-through no-op
*__ = sub ($) { $_[0] };
+ *__n = sub ($$$) { $_[2] == 1 ? $_[0] : $_[1] };
};
+
+ sub N__($) { return shift; }
}
1;
printf __("The following error occurred: %s\n"), $error;
+ printf __n("commited %d file\n", "commited %d files\n", $files), $files;
+
+
=head1 DESCRIPTION
Git's internal Perl interface to gettext via L<Locale::Messages>. If
L<Locale::Messages>'s gettext function if all goes well, otherwise our
passthrough fallback function.
+=head2 __n($$$)
+
+L<Locale::Messages>'s ngettext function or passthrough fallback function.
+
+=head2 N__($)
+
+No-operation that only returns its argument. Use this if you want xgettext to
+extract the text to the pot template but do not want to trigger retrival of the
+translation at run time.
+
=head1 AUTHOR
E<AElig>var ArnfjE<ouml>rE<eth> Bjarmason <avarab@gmail.com>
my $latest = $ra->get_latest_revnum;
$ra->get_log("", $latest, 0, 1, 0, 1, sub {});
};
- } while ($@ && ($c = shift @components));
+ } while ($@ && defined($c = shift @components));
return canonicalize_url($url);
}
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-08-27 23:21+0800\n"
-"PO-Revision-Date: 2016-08-28 10:32-0600\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-28 20:03-0700\n"
"Last-Translator: Alex Henrie <alexhenrie24@gmail.com>\n"
"Language-Team: Catalan\n"
"Language: ca\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.8\n"
+"X-Generator: Poedit 1.8.11\n"
#: advice.c:55
#, c-format
"\n"
" git checkout -b <nom-de-branca-nova>\n"
-#: archive.c:12
-msgid "git archive [<options>] <tree-ish> [<path>...]"
-msgstr "git archive [<opcions>] <arbre> [<camí>...]"
+#: apply.c:57
+#, c-format
+msgid "unrecognized whitespace option '%s'"
+msgstr "opció d'espai en blanc '%s' no reconeguda"
-#: archive.c:13
-msgid "git archive --list"
-msgstr "git archive --list"
+#: apply.c:73
+#, c-format
+msgid "unrecognized whitespace ignore option '%s'"
+msgstr "opció d'ignoral d'espai en blanc '%s' no reconeguda"
-#: archive.c:14
-msgid ""
-"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
-msgstr ""
-"git archive --remote <dipòsit> [--exec <ordre>] [<opcions>] <arbre> "
-"[<camí>...]"
+#: apply.c:125
+msgid "--reject and --3way cannot be used together."
+msgstr "--reject i --3way no es poden usar junts."
-#: archive.c:15
-msgid "git archive --remote <repo> [--exec <cmd>] --list"
-msgstr "git archive --remote <dipòsit> [--exec <ordre>] --list"
+#: apply.c:127
+msgid "--cached and --3way cannot be used together."
+msgstr "--cached i --3way no es poden usar junts."
-#: archive.c:344 builtin/add.c:139 builtin/add.c:435 builtin/rm.c:327
-#, c-format
-msgid "pathspec '%s' did not match any files"
-msgstr "L'especificació de camí '%s' no ha coincidit amb cap fitxer"
+#: apply.c:130
+msgid "--3way outside a repository"
+msgstr "--3way fora d'un dipòsit"
-#: archive.c:429
-msgid "fmt"
-msgstr "format"
+#: apply.c:141
+msgid "--index outside a repository"
+msgstr "--index fora d'un dipòsit"
-#: archive.c:429
-msgid "archive format"
-msgstr "format d'arxiu"
+#: apply.c:144
+msgid "--cached outside a repository"
+msgstr "--cached fora d'un dipòsit"
-#: archive.c:430 builtin/log.c:1422
-msgid "prefix"
-msgstr "prefix"
+#: apply.c:845
+#, c-format
+msgid "Cannot prepare timestamp regexp %s"
+msgstr "No es pot preparar l'expressió regular de marca de temps %s"
-#: archive.c:431
-msgid "prepend prefix to each pathname in the archive"
-msgstr "anteposa el prefix a cada nom de camí en l'arxiu"
+#: apply.c:854
+#, c-format
+msgid "regexec returned %d for input: %s"
+msgstr "regexec ha retornat %d per l'entrada: %s"
-#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2553 builtin/blame.c:2554
-#: builtin/config.c:59 builtin/fast-export.c:987 builtin/fast-export.c:989
-#: builtin/grep.c:722 builtin/hash-object.c:100 builtin/ls-files.c:460
-#: builtin/ls-files.c:463 builtin/notes.c:399 builtin/notes.c:562
-#: builtin/read-tree.c:109 parse-options.h:153
-msgid "file"
-msgstr "fitxer"
+#: apply.c:938
+#, c-format
+msgid "unable to find filename in patch at line %d"
+msgstr "no s'ha pogut trobar el nom de fitxer en el pedaç a la línia %d"
-#: archive.c:433 builtin/archive.c:89
-msgid "write the archive to this file"
-msgstr "escriu l'arxiu a aquest fitxer"
+#: apply.c:977
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
+msgstr ""
+"git apply: git-diff dolent - /dev/null esperat, %s rebut en la línia %d"
-#: archive.c:435
-msgid "read .gitattributes in working directory"
-msgstr "llegeix .gitattributes en el directori de treball"
+#: apply.c:983
+#, c-format
+msgid "git apply: bad git-diff - inconsistent new filename on line %d"
+msgstr ""
+"git apply: git-diff dolent - nom de fitxer nou inconsistent en la línia %d"
-#: archive.c:436
-msgid "report archived files on stderr"
-msgstr "informa de fitxers arxivats en stderr"
+#: apply.c:984
+#, c-format
+msgid "git apply: bad git-diff - inconsistent old filename on line %d"
+msgstr ""
+"git apply: git-diff dolent - nom de fitxer antic inconsistent en la línia %d"
-#: archive.c:437
-msgid "store only"
-msgstr "només emmagatzema"
+#: apply.c:990
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null on line %d"
+msgstr "git apply: git-diff dolent - /dev/null esperat en la línia %d"
-#: archive.c:438
-msgid "compress faster"
-msgstr "comprimeix més ràpidament"
+#: apply.c:1488
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recompte: línia inesperada: %.*s"
-#: archive.c:446
-msgid "compress better"
-msgstr "comprimeix millor"
+#: apply.c:1557
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "fragment de pedaç sense capçalera a la línia %d: %.*s"
-#: archive.c:449
-msgid "list supported archive formats"
-msgstr "allista els formats d'arxiu admesos"
+#: apply.c:1577
+#, 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] ""
+"a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
+"%d component de nom de camí inicial (línia %d)"
+msgstr[1] ""
+"a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
+"%d components de nom de camí inicial (línia %d)"
-#: archive.c:451 builtin/archive.c:90 builtin/clone.c:82
-#: builtin/submodule--helper.c:832
-msgid "repo"
-msgstr "dipòsit"
+#: apply.c:1589
+#, c-format
+msgid "git diff header lacks filename information (line %d)"
+msgstr ""
+"a la capçalera de git diff li manca informació de nom de fitxer (línia %d)"
-#: archive.c:452 builtin/archive.c:91
-msgid "retrieve the archive from remote repository <repo>"
-msgstr "recupera l'arxiu del dipòsit remot <dipòsit>"
+#: apply.c:1759
+msgid "new file depends on old contents"
+msgstr "el fitxer nou depèn dels continguts antics"
-#: archive.c:453 builtin/archive.c:92 builtin/notes.c:483
-msgid "command"
-msgstr "ordre"
+#: apply.c:1761
+msgid "deleted file still has contents"
+msgstr "el fitxer suprimit encara té continguts"
-#: archive.c:454 builtin/archive.c:93
-msgid "path to the remote git-upload-archive command"
-msgstr "camí a l'ordre git-upload-archive remota"
+#: apply.c:1795
+#, c-format
+msgid "corrupt patch at line %d"
+msgstr "pedaç malmès a la línia %d"
-#: archive.c:461
-msgid "Unexpected option --remote"
-msgstr "Opció inesperada --remote"
+#: apply.c:1832
+#, c-format
+msgid "new file %s depends on old contents"
+msgstr "el fitxer nou %s depèn dels continguts antics"
-#: archive.c:463
-msgid "Option --exec can only be used together with --remote"
-msgstr "L'opció --exec només es pot usar junt amb --remote"
+#: apply.c:1834
+#, c-format
+msgid "deleted file %s still has contents"
+msgstr "el fitxer suprimit %s encara té continguts"
-#: archive.c:465
-msgid "Unexpected option --output"
-msgstr "Opció inesperada --output"
+#: apply.c:1837
+#, c-format
+msgid "** warning: file %s becomes empty but is not deleted"
+msgstr "** advertència: el fitxer %s queda buit però no se suprimeix"
-#: archive.c:487
+#: apply.c:1984
#, c-format
-msgid "Unknown archive format '%s'"
-msgstr "Format d'arxiu desconegut '%s'"
+msgid "corrupt binary patch at line %d: %.*s"
+msgstr "pedaç binari malmès a la línia %d: %.*s"
-#: archive.c:494
+#: apply.c:2021
#, c-format
-msgid "Argument not supported for format '%s': -%d"
-msgstr "Paràmetre no admet per al format '%s': -%d"
+msgid "unrecognized binary patch at line %d"
+msgstr "pedaç binari no reconegut a la línia %d"
-#: attr.c:263
-msgid ""
-"Negative patterns are ignored in git attributes\n"
-"Use '\\!' for literal leading exclamation."
-msgstr ""
-"Els patrons negatius s'ignoren en els atributs de git\n"
-"Useu '\\!' per exclamació capdavantera literal."
+#: apply.c:2182
+#, c-format
+msgid "patch with only garbage at line %d"
+msgstr "pedaç amb només escombraries a la línia %d"
-#: bisect.c:441
+#: apply.c:2274
#, c-format
-msgid "Could not open file '%s'"
-msgstr "No s'ha pogut obrir el fitxer '%s'"
+msgid "unable to read symlink %s"
+msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
-#: bisect.c:446
+#: apply.c:2278
#, c-format
-msgid "Badly quoted content in file '%s': %s"
-msgstr "Comentari amb cometes dolentes en el fitxer '%s': %s"
+msgid "unable to open or read %s"
+msgstr "no s'ha pogut obrir o llegir %s"
-#: bisect.c:655
+#: apply.c:2931
#, c-format
-msgid "We cannot bisect more!\n"
-msgstr "No podem bisecar més!\n"
+msgid "invalid start of line: '%c'"
+msgstr "inici de línia no vàlid: '%c'"
-#: bisect.c:708
+#: apply.c:3050
#, c-format
-msgid "Not a valid commit name %s"
-msgstr "No és un nom de comissió vàlid %s"
+msgid "Hunk #%d succeeded at %d (offset %d line)."
+msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
+msgstr[0] "El tros #%d ha tingut èxit a %d (desplaçament d'%d línia)."
+msgstr[1] "El tros #%d ha tingut èxit a %d (desplaçament de %d línies)."
-#: bisect.c:732
+#: apply.c:3062
#, c-format
-msgid ""
-"The merge base %s is bad.\n"
-"This means the bug has been fixed between %s and [%s].\n"
-msgstr ""
-"La base de fusió %s és dolenta.\n"
-"Això vol dir que el defecte s'ha arreglat entre %s i [%s].\n"
+msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
+msgstr "El context s'ha reduït a (%ld/%ld) per a aplicar el fragment a %d"
-#: bisect.c:737
+#: apply.c:3068
#, c-format
msgid ""
-"The merge base %s is new.\n"
-"The property has changed between %s and [%s].\n"
+"while searching for:\n"
+"%.*s"
msgstr ""
-"La base de fusió %s és nova.\n"
-"La propietat s'ha canviat entre %s i [%s].\n"
+"tot cercant:\n"
+"%.*s"
-#: bisect.c:742
+#: apply.c:3090
#, c-format
-msgid ""
-"The merge base %s is %s.\n"
-"This means the first '%s' commit is between %s and [%s].\n"
-msgstr ""
-"La base de fusió %s és %s.\n"
-"Això vol dir que la primera comissió '%s' és entre %s i [%s].\n"
+msgid "missing binary patch data for '%s'"
+msgstr "manquen les dades de pedaç binari de '%s'"
-#: bisect.c:750
+#: apply.c:3098
#, c-format
-msgid ""
-"Some %s revs are not ancestor of the %s rev.\n"
-"git bisect cannot work properly in this case.\n"
-"Maybe you mistook %s and %s revs?\n"
+msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
+msgstr "no es pot aplicar al revés un pedaç binari sense el tros revés a '%s'"
+
+#: apply.c:3144
+#, c-format
+msgid "cannot apply binary patch to '%s' without full index line"
msgstr ""
-"Unes %s revisions no són els avantpassats de la revisió %s.\n"
-"git bisect no pot funcionar correctament en aquest cas.\n"
-"Potser heu confós les revisions %s i %s?\n"
+"no es pot aplicar un pedaç binari a '%s' sense la línia d'índex completa"
-#: bisect.c:763
+#: apply.c:3154
#, c-format
msgid ""
-"the merge base between %s and [%s] must be skipped.\n"
-"So we cannot be sure the first %s commit is between %s and %s.\n"
-"We continue anyway."
+"the patch applies to '%s' (%s), which does not match the current contents."
msgstr ""
-"s'ha de saltar la base de fusió entre %s i [%s].\n"
-"Llavors, no podem estar segurs que la primera comissió %s sigui entre %s i "
-"%s.\n"
-"Continuem de totes maneres."
+"el pedaç s'aplica a '%s' (%s), el qual no coincideix amb els continguts "
+"actuals."
-#: bisect.c:798
+#: apply.c:3162
#, c-format
-msgid "Bisecting: a merge base must be tested\n"
-msgstr "Bisecant: s'ha de provar una base de fusió\n"
+msgid "the patch applies to an empty '%s' but it is not empty"
+msgstr "el pedaç s'aplica a un '%s' buit però no és buit"
-#: bisect.c:849
+#: apply.c:3180
#, c-format
-msgid "a %s revision is needed"
-msgstr "es necessita una revisió %s"
+msgid "the necessary postimage %s for '%s' cannot be read"
+msgstr "no es pot llegir la postimatge necessari %s per a '%s'"
-#: bisect.c:866 builtin/notes.c:174 builtin/tag.c:248
+#: apply.c:3193
#, c-format
-msgid "could not create file '%s'"
-msgstr "no s'ha pogut crear el fitxer '%s'"
+msgid "binary patch does not apply to '%s'"
+msgstr "el pedaç binari no s'aplica a '%s'"
-#: bisect.c:917
+#: apply.c:3199
#, c-format
-msgid "could not read file '%s'"
-msgstr "no s'ha pogut llegir el fitxer '%s'"
+msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
+msgstr ""
+"el pedaç binari a '%s' crea un resultat incorrecte (esperant %s, %s rebut)"
-#: bisect.c:947
-msgid "reading bisect refs failed"
-msgstr "la lectura de les referències de bisecció ha fallat"
+#: apply.c:3220
+#, c-format
+msgid "patch failed: %s:%ld"
+msgstr "el pedaç ha fallat: %s:%ld"
-#: bisect.c:967
+#: apply.c:3342
#, c-format
-msgid "%s was both %s and %s\n"
-msgstr "%s era ambdós %s i %s\n"
+msgid "cannot checkout %s"
+msgstr "no es pot agafar %s"
-#: bisect.c:975
+#: apply.c:3390 apply.c:3401 apply.c:3447 setup.c:248
#, c-format
-msgid ""
-"No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
-msgstr ""
-"No s'ha trobat cap comissió provable.\n"
-"Potser heu començat amb paràmetres de camí dolents?\n"
+msgid "failed to read %s"
+msgstr "s'ha fallat en llegir %s"
-#: bisect.c:994
+#: apply.c:3398
#, c-format
-msgid "(roughly %d step)"
-msgid_plural "(roughly %d steps)"
-msgstr[0] "(aproximadament %d pas)"
-msgstr[1] "(aproximadament %d passos)"
+msgid "reading from '%s' beyond a symbolic link"
+msgstr "s'està llegint de '%s' més enllà d'un enllaç simbòlic"
-#. TRANSLATORS: the last %s will be replaced with
-#. "(roughly %d steps)" translation
-#: bisect.c:998
+#: apply.c:3427 apply.c:3667
#, c-format
-msgid "Bisecting: %d revision left to test after this %s\n"
-msgid_plural "Bisecting: %d revisions left to test after this %s\n"
-msgstr[0] "Bisecant: manca %d revisió a provar després d'aquesta %s\n"
-msgstr[1] "Bisecant: manquen %d revisions a provar després d'aquesta %s\n"
+msgid "path %s has been renamed/deleted"
+msgstr "el camí %s s'ha canviat de nom / s'ha suprimit"
-#: branch.c:53
+#: apply.c:3510 apply.c:3681
#, c-format
-msgid ""
-"\n"
-"After fixing the error cause you may try to fix up\n"
-"the remote tracking information by invoking\n"
-"\"git branch --set-upstream-to=%s%s%s\"."
-msgstr ""
-"\n"
-"Després de corregir la causa de l'error, podeu\n"
-"intentar corregir la informació de seguiment remot\n"
-"invocant \"git branch --set-upstream-to=%s%s%s\"."
+msgid "%s: does not exist in index"
+msgstr "%s: no existeix en l'índex"
-#: branch.c:67
+#: apply.c:3519 apply.c:3689
#, c-format
-msgid "Not setting branch %s as its own upstream."
-msgstr "No s'està establint la branca %s com a la seva pròpia font."
+msgid "%s: does not match index"
+msgstr "%s: no coincideix amb l'índex"
-#: branch.c:93
-#, c-format
-msgid "Branch %s set up to track remote branch %s from %s by rebasing."
+#: apply.c:3554
+msgid "repository lacks the necessary blob to fall back on 3-way merge."
msgstr ""
-"La branca %s està configurada per a seguir la branca remota %s de %s per "
-"rebasar."
+"al dipòsit li manca el blob necessari per a retrocedir a una fusió de 3 vies."
-#: branch.c:94
+#: apply.c:3557
#, c-format
-msgid "Branch %s set up to track remote branch %s from %s."
-msgstr "La branca %s està configurada per a seguir la branca remota %s de %s."
+msgid "Falling back to three-way merge...\n"
+msgstr "S'està retrocedint a una fusió de 3 vies...\n"
-#: branch.c:98
+#: apply.c:3573 apply.c:3577
#, c-format
-msgid "Branch %s set up to track local branch %s by rebasing."
-msgstr ""
-"La branca %s està configurada per a seguir la branca local %s per rebasar."
+msgid "cannot read the current contents of '%s'"
+msgstr "no es poden llegir els continguts actuals de '%s'"
-#: branch.c:99
+#: apply.c:3589
#, c-format
-msgid "Branch %s set up to track local branch %s."
-msgstr "La branca %s està configurada per a seguir la branca local %s."
+msgid "Failed to fall back on three-way merge...\n"
+msgstr "S'ha fallat en retrocedir a una fusió de 3 vies...\n"
-#: branch.c:104
+#: apply.c:3603
#, c-format
-msgid "Branch %s set up to track remote ref %s by rebasing."
-msgstr ""
-"La branca %s està configurada per a seguir la referència remota %s per "
-"rebasar."
+msgid "Applied patch to '%s' with conflicts.\n"
+msgstr "S'ha aplicat el pedaç a '%s' amb conflictes.\n"
-#: branch.c:105
+#: apply.c:3608
#, c-format
-msgid "Branch %s set up to track remote ref %s."
-msgstr "La branca %s està configurada per a seguir la referència remota %s."
+msgid "Applied patch to '%s' cleanly.\n"
+msgstr "S'ha aplicat el pedaç a '%s' netament.\n"
-#: branch.c:109
-#, c-format
-msgid "Branch %s set up to track local ref %s by rebasing."
-msgstr ""
-"La branca %s està configurada per a seguir la referència local %s per "
-"rebasar."
+#: apply.c:3634
+msgid "removal patch leaves file contents"
+msgstr "el pedaç d'eliminació deixa els continguts dels fitxers"
-#: branch.c:110
+#: apply.c:3706
#, c-format
-msgid "Branch %s set up to track local ref %s."
-msgstr "La branca %s està configurada per a seguir la referència local %s."
-
-#: branch.c:119
-msgid "Unable to write upstream branch configuration"
-msgstr "No es pot escriure la configuració de la branca font"
+msgid "%s: wrong type"
+msgstr "%s: tipus erroni"
-#: branch.c:156
+#: apply.c:3708
#, c-format
-msgid "Not tracking: ambiguous information for ref %s"
-msgstr "No seguint: informació ambigua per a la referència %s"
+msgid "%s has type %o, expected %o"
+msgstr "%s és del tipus %o, s'esperava %o"
-#: branch.c:185
+#: apply.c:3859 apply.c:3861
#, c-format
-msgid "'%s' is not a valid branch name."
-msgstr "'%s' no és un nom de branca vàlid."
+msgid "invalid path '%s'"
+msgstr "camí no vàlid: %s"
-#: branch.c:190
+#: apply.c:3917
#, c-format
-msgid "A branch named '%s' already exists."
-msgstr "Una branca amb nom '%s' ja existeix."
-
-#: branch.c:198
-msgid "Cannot force update the current branch."
-msgstr "No es pot actualitzar la branca actual a la força."
+msgid "%s: already exists in index"
+msgstr "%s: ja existeix en l'índex"
-#: branch.c:218
+#: apply.c:3920
#, c-format
-msgid "Cannot setup tracking information; starting point '%s' is not a branch."
-msgstr ""
-"No es pot configurar la informació de seguiment; el punt inicial '%s' no és "
-"una branca."
+msgid "%s: already exists in working directory"
+msgstr "%s: ja existeix en el directori de treball"
-#: branch.c:220
+#: apply.c:3940
#, c-format
-msgid "the requested upstream branch '%s' does not exist"
-msgstr "la branca font demanada '%s' no existeix"
-
-#: branch.c:222
-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 ""
-"\n"
-"Si teniu pensat basar el vostre treball en una branca\n"
-"font que ja existeix al remot, pot ser que necessiteu\n"
-"executar \"git fetch\" per a obtenir-la.\n"
-"\n"
-"Si teniu pensat pujar una branca local nova que seguirà\n"
-"la seva contrapart remota, pot ser que vulgueu usar\n"
-"\"git push -u\" per a establir la configuració font\n"
-"mentre pugeu."
+msgid "new mode (%o) of %s does not match old mode (%o)"
+msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o)"
-#: branch.c:266
+#: apply.c:3945
#, c-format
-msgid "Not a valid object name: '%s'."
-msgstr "No és un nom d'objecte vàlid: '%s'."
+msgid "new mode (%o) of %s does not match old mode (%o) of %s"
+msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o) de %s"
-#: branch.c:286
+#: apply.c:3965
#, c-format
-msgid "Ambiguous object name: '%s'."
-msgstr "Nom d'objecte ambigu: '%s'."
+msgid "affected file '%s' is beyond a symbolic link"
+msgstr "el fitxer afectat '%s' és més enllà d'un enllaç simbòlic"
-#: branch.c:291
+#: apply.c:3969
#, c-format
-msgid "Not a valid branch point: '%s'."
-msgstr "No és un punt de ramificació vàlid: '%s'."
+msgid "%s: patch does not apply"
+msgstr "%s: el pedaç no s'aplica"
-#: branch.c:345
+#: apply.c:3984
#, c-format
-msgid "'%s' is already checked out at '%s'"
-msgstr "'%s' ja s'ha agafat a '%s'"
+msgid "Checking patch %s..."
+msgstr "S'està comprovant el pedaç %s..."
-#: branch.c:364
+#: apply.c:4075
#, c-format
-msgid "HEAD of working tree %s is not updated"
-msgstr "La HEAD de l'arbre de treball %s no està actualitzat"
+msgid "sha1 information is lacking or useless for submodule %s"
+msgstr "falta la informació sha1 o és inútil per al submòdul %s"
-#: bundle.c:34
+#: apply.c:4082
#, c-format
-msgid "'%s' does not look like a v2 bundle file"
-msgstr "'%s' no sembla un fitxer de farcell v2"
+msgid "mode change for %s, which is not in current HEAD"
+msgstr "canvi de mode per a %s, el qual no està en el HEAD actual"
-#: bundle.c:61
+#: apply.c:4085
#, c-format
-msgid "unrecognized header: %s%s (%d)"
-msgstr "capçalera no reconeguda: %s%s (%d)"
+msgid "sha1 information is lacking or useless (%s)."
+msgstr "falta informació sha1 o és inútil (%s)."
-#: bundle.c:87 builtin/commit.c:778
+#: apply.c:4090 builtin/checkout.c:233 builtin/reset.c:135
#, c-format
-msgid "could not open '%s'"
-msgstr "no s'ha pogut obrir '%s'"
-
-#: bundle.c:139
-msgid "Repository lacks these prerequisite commits:"
-msgstr "Al dipòsit li manquen aquestes comissions prerequisits:"
+msgid "make_cache_entry failed for path '%s'"
+msgstr "make_cache_entry ha fallat per al camí '%s'"
-#: bundle.c:163 ref-filter.c:1462 sequencer.c:630 sequencer.c:1085
-#: builtin/blame.c:2763 builtin/commit.c:1057 builtin/log.c:348
-#: builtin/log.c:890 builtin/log.c:1336 builtin/log.c:1659 builtin/log.c:1901
-#: builtin/merge.c:356 builtin/shortlog.c:170
-msgid "revision walk setup failed"
-msgstr "la configuració del passeig per revisions ha fallat"
+#: apply.c:4094
+#, c-format
+msgid "could not add %s to temporary index"
+msgstr "no s'ha pogut afegir %s a l'index temporal"
-#: bundle.c:185
+#: apply.c:4104
#, c-format
-msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
-msgstr[0] "El farcell conté aquesta referència:"
-msgstr[1] "El farcell conté aquestes %d referències:"
+msgid "could not write temporary index to %s"
+msgstr "no s'ha pogut escriure l'índex temporal a %s"
-#: bundle.c:192
-msgid "The bundle records a complete history."
-msgstr "El farcell registra una història completa."
+#: apply.c:4242
+#, c-format
+msgid "unable to remove %s from index"
+msgstr "no s'ha pogut eliminar %s de l'índex"
-#: bundle.c:194
+#: apply.c:4277
#, c-format
-msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
-msgstr[0] "El farcell requereix aquesta referència:"
-msgstr[1] "El farcell requereix aquestes %d referències:"
+msgid "corrupt patch for submodule %s"
+msgstr "pedaç malmès per al submòdul %s"
-#: bundle.c:253
-msgid "Could not spawn pack-objects"
-msgstr "No s'ha pogut executar el pack-objects"
+#: apply.c:4283
+#, c-format
+msgid "unable to stat newly created file '%s'"
+msgstr "no s'ha pogut fer stat al fitxer novament creat '%s'"
-#: bundle.c:264
-msgid "pack-objects died"
-msgstr "El pack-objects s'ha mort"
+#: apply.c:4291
+#, c-format
+msgid "unable to create backing store for newly created file %s"
+msgstr ""
+"no s'ha pogut crear un magatzem de recolzament per al fitxer novament creat "
+"%s"
-#: bundle.c:304
-msgid "rev-list died"
-msgstr "El rev-list s'ha mort"
+#: apply.c:4297 apply.c:4441
+#, c-format
+msgid "unable to add cache entry for %s"
+msgstr "no s'ha pogut afegir una entrada de cau per a %s"
-#: bundle.c:353
+#: apply.c:4338
#, c-format
-msgid "ref '%s' is excluded by the rev-list options"
-msgstr "les opcions de la llista de revisions exclouen la referència '%s'"
+msgid "failed to write to '%s'"
+msgstr "s'ha fallat en escriure a '%s'"
-#: bundle.c:443 builtin/log.c:165 builtin/log.c:1565 builtin/shortlog.c:273
+#: apply.c:4342
#, c-format
-msgid "unrecognized argument: %s"
-msgstr "paràmetre no reconegut: %s"
+msgid "closing file '%s'"
+msgstr "s'està tancant el fitxer '%s'"
-#: bundle.c:451
-msgid "Refusing to create empty bundle."
-msgstr "S'està refusant crear un farcell buit."
+#: apply.c:4412
+#, c-format
+msgid "unable to write file '%s' mode %o"
+msgstr "no s'ha pogut escriure el fitxer '%s' mode %o"
-#: bundle.c:463
+#: apply.c:4510
#, c-format
-msgid "cannot create '%s'"
-msgstr "no es pot crear '%s'"
+msgid "Applied patch %s cleanly."
+msgstr "El pedaç %s s'ha aplicat netament."
-#: bundle.c:491
-msgid "index-pack died"
-msgstr "L'index-pack s'ha mort"
+#: apply.c:4518
+msgid "internal error"
+msgstr "error intern"
-#: color.c:290
+#: apply.c:4521
#, c-format
-msgid "invalid color value: %.*s"
-msgstr "valor de color no vàlid: %.*s"
+msgid "Applying patch %%s with %d reject..."
+msgid_plural "Applying patch %%s with %d rejects..."
+msgstr[0] "S'està aplicant el pedaç %%s amb %d rebuig..."
+msgstr[1] "S'està aplicant el pedaç %%s amb %d rebuitjos..."
-#: commit.c:40 builtin/am.c:433 builtin/am.c:469 builtin/am.c:1505
-#: builtin/am.c:2119
+#: apply.c:4532
#, c-format
-msgid "could not parse %s"
-msgstr "no s'ha pogut analitzar %s"
+msgid "truncating .rej filename to %.*s.rej"
+msgstr "s'està truncant el nom del fitxer .rej a %.*s.rej"
-#: commit.c:42
+#: apply.c:4540 builtin/fetch.c:740 builtin/fetch.c:989
#, c-format
-msgid "%s %s is not a commit!"
-msgstr "%s %s no és una comissió!"
+msgid "cannot open %s"
+msgstr "no es pot obrir %s"
-#: compat/obstack.c:406 compat/obstack.c:408
-msgid "memory exhausted"
-msgstr "memòria esgotada"
+#: apply.c:4554
+#, c-format
+msgid "Hunk #%d applied cleanly."
+msgstr "El tros #%d s'ha aplicat netament."
-#: config.c:516
+#: apply.c:4558
#, c-format
-msgid "bad config line %d in blob %s"
-msgstr "línia de configuració dolenta %d en el blob %s"
+msgid "Rejected hunk #%d."
+msgstr "S'ha rebutjat el tros #%d."
-#: config.c:520
+#: apply.c:4668
#, c-format
-msgid "bad config line %d in file %s"
-msgstr "línia de configuració dolenta %d en el fitxer %s"
+msgid "Skipped patch '%s'."
+msgstr "S'ha saltat el pedaç '%s'."
-#: config.c:524
+#: apply.c:4676
+msgid "unrecognized input"
+msgstr "entrada no reconeguda"
+
+#: apply.c:4695
+msgid "unable to read index file"
+msgstr "no es pot llegir el fitxer d'índex"
+
+#: apply.c:4833
#, c-format
-msgid "bad config line %d in standard input"
-msgstr "línia de configuració dolenta %d en l'entrada estàndard"
+msgid "can't open patch '%s': %s"
+msgstr "no es pot obrir el pedaç '%s': %s"
-#: config.c:528
+#: apply.c:4858
#, c-format
-msgid "bad config line %d in submodule-blob %s"
-msgstr "línia de configuració dolenta %d en el blob de submòdul %s"
+msgid "squelched %d whitespace error"
+msgid_plural "squelched %d whitespace errors"
+msgstr[0] "s'ha omès %d error d'espai en blanc"
+msgstr[1] "s'han omès %d errors d'espai en blanc"
-#: config.c:532
+#: apply.c:4864 apply.c:4879
#, c-format
-msgid "bad config line %d in command line %s"
-msgstr "línia de configuració dolenta %d en la línia d'ordres %s"
+msgid "%d line adds whitespace errors."
+msgid_plural "%d lines add whitespace errors."
+msgstr[0] "%d línia afegeix errors d'espai en blanc."
+msgstr[1] "%d línies afegeixen errors d'espai en blanc."
-#: config.c:536
+#: apply.c:4872
#, c-format
-msgid "bad config line %d in %s"
-msgstr "línia de configuració dolenta %d en %s"
+msgid "%d line applied after fixing whitespace errors."
+msgid_plural "%d lines applied after fixing whitespace errors."
+msgstr[0] ""
+"S'ha aplicat %d línia desprès d'arreglar els errors d'espai en blanc."
+msgstr[1] ""
+"S'han aplicat %d línies desprès d'arreglar els errors d'espai en blanc."
-#: config.c:655
-msgid "out of range"
-msgstr "fora de rang"
+#: apply.c:4888 builtin/add.c:463 builtin/mv.c:286 builtin/rm.c:431
+msgid "Unable to write new index file"
+msgstr "no s'ha pogut escriure un fitxer d'índex nou"
-#: config.c:655
-msgid "invalid unit"
-msgstr "unitat no vàlida"
+#: apply.c:4919 apply.c:4922 builtin/am.c:2277 builtin/am.c:2280
+#: builtin/clone.c:95 builtin/fetch.c:98 builtin/pull.c:180
+#: builtin/submodule--helper.c:281 builtin/submodule--helper.c:407
+#: builtin/submodule--helper.c:589 builtin/submodule--helper.c:592
+#: builtin/submodule--helper.c:944 builtin/submodule--helper.c:947
+msgid "path"
+msgstr "camí"
-#: config.c:661
-#, c-format
-msgid "bad numeric config value '%s' for '%s': %s"
-msgstr "valor de configuració numèric dolent '%s' per '%s': %s"
+#: apply.c:4920
+msgid "don't apply changes matching the given path"
+msgstr "no apliquis els canvis que coincideixin amb el camí donat"
-#: config.c:666
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
-msgstr "valor de configuració numèric dolent '%s' per '%s' en el blob %s: %s"
+#: apply.c:4923
+msgid "apply changes matching the given path"
+msgstr "aplica els canvis que coincideixin amb el camí donat"
-#: config.c:669
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in file %s: %s"
-msgstr "valor de configuració numèric dolent '%s' per '%s' en el fitxer %s: %s"
+#: apply.c:4925 builtin/am.c:2286
+msgid "num"
+msgstr "número"
-#: config.c:672
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in standard input: %s"
+#: apply.c:4926
+msgid "remove <num> leading slashes from traditional diff paths"
msgstr ""
-"valor de configuració numèric dolent '%s' per '%s' en l'entrada estàndard: %s"
+"elimina <nombre> barres obliqües inicials dels camins de diferència "
+"tradicionals"
-#: config.c:675
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
-msgstr ""
-"valor de configuració numèric dolent '%s' per '%s' en el blob de submòdul "
-"%s: %s"
+#: apply.c:4929
+msgid "ignore additions made by the patch"
+msgstr "ignora afegiments fets pel pedaç"
-#: config.c:678
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
+#: apply.c:4931
+msgid "instead of applying the patch, output diffstat for the input"
msgstr ""
-"valor de configuració numèric dolent '%s' per '%s' en la línia d'ordres %s: "
-"%s"
+"en lloc d'aplicar el pedaç, emet les estadístiques de diferència de l'entrada"
-#: config.c:681
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr "valor de configuració numèric dolent '%s' per '%s' en %s: %s"
+#: apply.c:4935
+msgid "show number of added and deleted lines in decimal notation"
+msgstr "mostra el nombre de línies afegides i suprimides en notació decimal"
-#: config.c:768
-#, c-format
-msgid "failed to expand user dir in: '%s'"
-msgstr "s'ha fallat en expandir el directori d'usuari en '%s'"
+#: apply.c:4937
+msgid "instead of applying the patch, output a summary for the input"
+msgstr "en lloc d'aplicar el pedaç, emet un resum de l'entrada"
-#: config.c:849 config.c:860
-#, c-format
-msgid "bad zlib compression level %d"
-msgstr "nivell de compressió de zlib dolent %d"
+#: apply.c:4939
+msgid "instead of applying the patch, see if the patch is applicable"
+msgstr "en lloc d'aplicar el pedaç, veges si el pedaç és aplicable"
-#: config.c:978
-#, c-format
-msgid "invalid mode for object creation: %s"
-msgstr "mode de creació d'objecte no vàlid: %s"
+#: apply.c:4941
+msgid "make sure the patch is applicable to the current index"
+msgstr "assegura que el pedaç sigui aplicable a l'índex actual"
-#: config.c:1312
-msgid "unable to parse command-line config"
-msgstr "no s'ha pogut analitzar la configuració de la línia d'ordres"
+#: apply.c:4943
+msgid "apply a patch without touching the working tree"
+msgstr "aplica un pedaç sense tocar l'arbre de treball"
-#: config.c:1362
-msgid "unknown error occurred while reading the configuration files"
-msgstr "un error desconegut ha ocorregut en llegir els fitxers de configuració"
+#: apply.c:4945
+msgid "accept a patch that touches outside the working area"
+msgstr "accepta un pedaç que toqui fora de l'àrea de treball"
-#: config.c:1716
-#, c-format
-msgid "unable to parse '%s' from command-line config"
-msgstr "no s'ha pogut analitzar '%s' de la configuració de la línia d'ordres"
+#: apply.c:4947
+msgid "also apply the patch (use with --stat/--summary/--check)"
+msgstr "aplica el pedaç també (useu amb --stat/--summary/--check)"
-#: config.c:1718
-#, c-format
-msgid "bad config variable '%s' in file '%s' at line %d"
-msgstr "variable de configuració dolenta '%s' en el fitxer '%s' a la línia %d"
+#: apply.c:4949
+msgid "attempt three-way merge if a patch does not apply"
+msgstr "intenta una fusió de tres vies si el pedaç no s'aplica"
-#: config.c:1777
-#, c-format
-msgid "%s has multiple values"
-msgstr "%s té múltiples valors"
+#: apply.c:4951
+msgid "build a temporary index based on embedded index information"
+msgstr "construeix un índex temporal basat en la informació d'índex incrustada"
-#: config.c:2311
-#, c-format
-msgid "could not set '%s' to '%s'"
-msgstr "no s'ha pogut establir '%s' a '%s'"
+#: apply.c:4954 builtin/checkout-index.c:169 builtin/ls-files.c:505
+msgid "paths are separated with NUL character"
+msgstr "els camins se separen amb el caràcter NUL"
-#: config.c:2313
-#, c-format
-msgid "could not unset '%s'"
-msgstr "no s'ha pogut desestablir '%s'"
+#: apply.c:4956
+msgid "ensure at least <n> lines of context match"
+msgstr "assegura't que almenys <n> línies de context coincideixin"
-#: connected.c:63 builtin/fsck.c:173 builtin/prune.c:140
-msgid "Checking connectivity"
-msgstr "S'està comprovant la connectivitat"
+#: apply.c:4957 builtin/am.c:2265
+msgid "action"
+msgstr "acció"
-#: connected.c:74
-msgid "Could not run 'git rev-list'"
-msgstr "No s'ha pogut executar 'git rev-list'"
+#: apply.c:4958
+msgid "detect new or modified lines that have whitespace errors"
+msgstr ""
+"detecta les línies noves o modificades que tinguin errors d'espai en blanc"
-#: connected.c:94
-msgid "failed write to rev-list"
-msgstr "escriptura fallada a rev-list"
+#: apply.c:4961 apply.c:4964
+msgid "ignore changes in whitespace when finding context"
+msgstr "ignora els canvis d'espai en blanc en cercar context"
-#: connected.c:101
-msgid "failed to close rev-list's stdin"
-msgstr "s'ha fallat en tancar l'stdin del rev-list"
+#: apply.c:4967
+msgid "apply the patch in reverse"
+msgstr "aplica el pedaç al revés"
-#: date.c:97
-msgid "in the future"
-msgstr "en el futur"
+#: apply.c:4969
+msgid "don't expect at least one line of context"
+msgstr "no esperis almenys una línia de context"
-#: date.c:103
-#, c-format
-msgid "%lu second ago"
-msgid_plural "%lu seconds ago"
-msgstr[0] "fa %lu segon"
-msgstr[1] "fa %lu segons"
+#: apply.c:4971
+msgid "leave the rejected hunks in corresponding *.rej files"
+msgstr "deixa els trossos rebutjats en fitxers *.reg corresponents"
-#: date.c:110
-#, c-format
-msgid "%lu minute ago"
-msgid_plural "%lu minutes ago"
-msgstr[0] "fa %lu minut"
-msgstr[1] "fa %lu minuts"
+#: apply.c:4973
+msgid "allow overlapping hunks"
+msgstr "permet trossos encavalcants"
-#: date.c:117
-#, c-format
-msgid "%lu hour ago"
-msgid_plural "%lu hours ago"
-msgstr[0] "fa %lu hora"
-msgstr[1] "fa %lu hores"
+#: apply.c:4974 builtin/add.c:267 builtin/check-ignore.c:19
+#: builtin/commit.c:1339 builtin/count-objects.c:94 builtin/fsck.c:593
+#: builtin/log.c:1860 builtin/mv.c:110 builtin/read-tree.c:114
+msgid "be verbose"
+msgstr "sigues detallat"
-#: date.c:124
-#, c-format
-msgid "%lu day ago"
-msgid_plural "%lu days ago"
-msgstr[0] "fa %lu dia"
-msgstr[1] "fa %lu dies"
+#: apply.c:4976
+msgid "tolerate incorrectly detected missing new-line at the end of file"
+msgstr "tolera una línia nova incorrectament detectada al final del fitxer"
-#: date.c:130
-#, c-format
-msgid "%lu week ago"
-msgid_plural "%lu weeks ago"
-msgstr[0] "fa %lu setmana"
-msgstr[1] "fa %lu setmanes"
+#: apply.c:4979
+msgid "do not trust the line counts in the hunk headers"
+msgstr "no confiïs en els recomptes de línia en les capçaleres dels trossos"
-#: date.c:137
-#, c-format
-msgid "%lu month ago"
-msgid_plural "%lu months ago"
-msgstr[0] "fa %lu mes"
-msgstr[1] "fa %lu mesos"
+#: apply.c:4981 builtin/am.c:2274
+msgid "root"
+msgstr "arrel"
-#: date.c:148
-#, c-format
-msgid "%lu year"
-msgid_plural "%lu years"
-msgstr[0] "%lu any"
-msgstr[1] "%lu anys"
+#: apply.c:4982
+msgid "prepend <root> to all filenames"
+msgstr "anteposa <arrel> a tots els noms de fitxer"
-#. TRANSLATORS: "%s" is "<n> years"
-#: date.c:151
-#, c-format
-msgid "%s, %lu month ago"
-msgid_plural "%s, %lu months ago"
-msgstr[0] "fa %s i %lu mes"
-msgstr[1] "fa %s i %lu mesos"
+#: archive.c:12
+msgid "git archive [<options>] <tree-ish> [<path>...]"
+msgstr "git archive [<opcions>] <arbre> [<camí>...]"
-#: date.c:156 date.c:161
-#, c-format
-msgid "%lu year ago"
-msgid_plural "%lu years ago"
-msgstr[0] "fa %lu any"
-msgstr[1] "fa %lu anys"
+#: archive.c:13
+msgid "git archive --list"
+msgstr "git archive --list"
-#: diffcore-order.c:24
-#, c-format
-msgid "failed to read orderfile '%s'"
-msgstr "s'ha fallat en llegir el fitxer d'ordres '%s'"
+#: archive.c:14
+msgid ""
+"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
+msgstr ""
+"git archive --remote <dipòsit> [--exec <ordre>] [<opcions>] <arbre> "
+"[<camí>...]"
-#: diffcore-rename.c:540
-msgid "Performing inexact rename detection"
-msgstr "S'està realitzant una detecció inexacta de canvis de nom"
+#: archive.c:15
+msgid "git archive --remote <repo> [--exec <cmd>] --list"
+msgstr "git archive --remote <dipòsit> [--exec <ordre>] --list"
-#: diff.c:116
+#: archive.c:344 builtin/add.c:152 builtin/add.c:442 builtin/rm.c:327
#, c-format
-msgid " Failed to parse dirstat cut-off percentage '%s'\n"
-msgstr " S'ha fallat en analitzar el percentatge limitant de dirstat '%s'\n"
+msgid "pathspec '%s' did not match any files"
+msgstr "l'especificació de camí '%s' no ha coincidit amb cap fitxer"
-#: diff.c:121
-#, c-format
-msgid " Unknown dirstat parameter '%s'\n"
-msgstr " Paràmetre de dirstat desconegut '%s'\n"
+#: archive.c:429
+msgid "fmt"
+msgstr "format"
-#: diff.c:225
-#, c-format
-msgid "Unknown value for 'diff.submodule' config variable: '%s'"
-msgstr ""
-"Valor desconegut de la variable de configuració de 'diff.submodule': '%s'"
+#: archive.c:429
+msgid "archive format"
+msgstr "format d'arxiu"
-#: diff.c:277
-#, c-format
-msgid ""
-"Found errors in 'diff.dirstat' config variable:\n"
-"%s"
-msgstr ""
-"S'han trobat errors en la variable de configuració 'diff.dirstat':\n"
-"%s"
+#: archive.c:430 builtin/log.c:1429
+msgid "prefix"
+msgstr "prefix"
-#: diff.c:3017
-#, c-format
-msgid "external diff died, stopping at %s"
-msgstr "El diff external s'ha mort, s'està aturant a %s"
+#: archive.c:431
+msgid "prepend prefix to each pathname in the archive"
+msgstr "anteposa el prefix a cada nom de camí en l'arxiu"
-#: diff.c:3415
-msgid "--follow requires exactly one pathspec"
-msgstr "--follow requereix exactament una especificació de camí"
+#: archive.c:432 builtin/blame.c:2603 builtin/blame.c:2604 builtin/config.c:59
+#: builtin/fast-export.c:987 builtin/fast-export.c:989 builtin/grep.c:723
+#: builtin/hash-object.c:101 builtin/ls-files.c:539 builtin/ls-files.c:542
+#: builtin/notes.c:401 builtin/notes.c:564 builtin/read-tree.c:109
+#: parse-options.h:153
+msgid "file"
+msgstr "fitxer"
-#: diff.c:3578
-#, c-format
-msgid ""
-"Failed to parse --dirstat/-X option parameter:\n"
-"%s"
-msgstr ""
-"S'ha fallat en analitzar el paràmetre d'opció de --dirstat/-X:\n"
-"%s"
+#: archive.c:433 builtin/archive.c:89
+msgid "write the archive to this file"
+msgstr "escriu l'arxiu a aquest fitxer"
-#: diff.c:3592
-#, c-format
-msgid "Failed to parse --submodule option parameter: '%s'"
-msgstr "S'ha fallat en analitzar el paràmetre d'opció de --submodule: %s"
+#: archive.c:435
+msgid "read .gitattributes in working directory"
+msgstr "llegeix .gitattributes en el directori de treball"
-#: dir.c:1823
-msgid "failed to get kernel name and information"
-msgstr "s'ha fallat en obtenir el nombre i la informació del nucli"
+#: archive.c:436
+msgid "report archived files on stderr"
+msgstr "informa de fitxers arxivats en stderr"
-#: dir.c:1942
-msgid "Untracked cache is disabled on this system or location."
-msgstr ""
-"La memòria cau no seguida està inhabilitada en aquest sistema o ubicació."
+#: archive.c:437
+msgid "store only"
+msgstr "només emmagatzema"
-#: gpg-interface.c:178
-msgid "gpg failed to sign the data"
-msgstr "gpg ha fallat en signar les dades"
+#: archive.c:438
+msgid "compress faster"
+msgstr "comprimeix més ràpidament"
-#: gpg-interface.c:208
-msgid "could not create temporary file"
-msgstr "no s'ha pogut crear el fitxer temporal"
+#: archive.c:446
+msgid "compress better"
+msgstr "comprimeix millor"
-#: gpg-interface.c:210
-#, c-format
-msgid "failed writing detached signature to '%s'"
-msgstr "s'ha fallat en escriure la signatura separada a '%s'"
+#: archive.c:449
+msgid "list supported archive formats"
+msgstr "allista els formats d'arxiu admesos"
-#: grep.c:1792
-#, c-format
-msgid "'%s': unable to read %s"
-msgstr "'%s': no s'ha pogut llegir %s"
+#: archive.c:451 builtin/archive.c:90 builtin/clone.c:85 builtin/clone.c:88
+#: builtin/submodule--helper.c:601 builtin/submodule--helper.c:953
+msgid "repo"
+msgstr "dipòsit"
-#: grep.c:1809 builtin/clone.c:382 builtin/diff.c:84 builtin/rm.c:155
-#, c-format
-msgid "failed to stat '%s'"
-msgstr "s'ha fallat en fer stat a '%s'"
+#: archive.c:452 builtin/archive.c:91
+msgid "retrieve the archive from remote repository <repo>"
+msgstr "recupera l'arxiu del dipòsit remot <dipòsit>"
-#: grep.c:1820
-#, c-format
-msgid "'%s': short read"
-msgstr "'%s': lectura curta"
+#: archive.c:453 builtin/archive.c:92 builtin/notes.c:485
+msgid "command"
+msgstr "ordre"
-#: help.c:205
-#, c-format
-msgid "available git commands in '%s'"
-msgstr "ordres de git disponibles en '%s'"
+#: archive.c:454 builtin/archive.c:93
+msgid "path to the remote git-upload-archive command"
+msgstr "camí a l'ordre git-upload-archive remota"
-#: help.c:212
-msgid "git commands available from elsewhere on your $PATH"
-msgstr "ordres de git disponibles d'altres llocs en el vostre $PATH"
+#: archive.c:461
+msgid "Unexpected option --remote"
+msgstr "Opció inesperada --remote"
-#: help.c:244
-msgid "These are common Git commands used in various situations:"
-msgstr "Aquestes són ordres del Git comunament usades en diverses situacions:"
+#: archive.c:463
+msgid "Option --exec can only be used together with --remote"
+msgstr "L'opció --exec només es pot usar junt amb --remote"
-#: help.c:309
-#, 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' sembla una ordre de git, però no hem pogut\n"
-"executar-la. Pot ser que git-%s estigui estropejat?"
+#: archive.c:465
+msgid "Unexpected option --output"
+msgstr "Opció inesperada --output"
-#: help.c:366
-msgid "Uh oh. Your system reports no Git commands at all."
-msgstr "Ai. El vostre sistema no informa de cap ordre de Git."
+#: archive.c:487
+#, c-format
+msgid "Unknown archive format '%s'"
+msgstr "Format d'arxiu desconegut '%s'"
-#: help.c:388
+#: archive.c:494
#, c-format
+msgid "Argument not supported for format '%s': -%d"
+msgstr "Paràmetre no admès per al format '%s': -%d"
+
+#: attr.c:263
msgid ""
-"WARNING: You called a Git command named '%s', which does not exist.\n"
-"Continuing under the assumption that you meant '%s'"
+"Negative patterns are ignored in git attributes\n"
+"Use '\\!' for literal leading exclamation."
msgstr ""
-"ADVERTÈNCIA: Heu invocat una ordre de Git amb nom '%s', la qual no "
-"existeix.\n"
-"S'està continuant sota l'assumpció que volíeu dir '%s'"
+"Els patrons negatius s'ignoren en els atributs de git\n"
+"Useu '\\!' per exclamació capdavantera literal."
-#: help.c:393
+#: bisect.c:441
#, c-format
-msgid "in %0.1f seconds automatically..."
-msgstr "en %0.1f segons automàticament..."
+msgid "Could not open file '%s'"
+msgstr "No s'ha pogut obrir el fitxer '%s'"
-#: help.c:400
+#: bisect.c:446
#, c-format
-msgid "git: '%s' is not a git command. See 'git --help'."
-msgstr "git: '%s' no és una ordre de git. Vegeu 'git --help'."
+msgid "Badly quoted content in file '%s': %s"
+msgstr "Comentari amb cometes dolentes en el fitxer '%s': %s"
-#: help.c:404 help.c:470
-msgid ""
-"\n"
-"Did you mean this?"
-msgid_plural ""
-"\n"
-"Did you mean one of these?"
-msgstr[0] ""
-"\n"
-"Volíeu dir això?"
-msgstr[1] ""
-"\n"
-"Volíeu dir un d'aquests?"
+#: bisect.c:655
+#, c-format
+msgid "We cannot bisect more!\n"
+msgstr "No podem bisecar més!\n"
-#: help.c:466
+#: bisect.c:708
#, c-format
-msgid "%s: %s - %s"
-msgstr "%s: %s - %s"
+msgid "Not a valid commit name %s"
+msgstr "No és un nom de comissió vàlid %s"
-#: lockfile.c:152
+#: bisect.c:732
#, c-format
msgid ""
-"Unable to create '%s.lock': %s.\n"
-"\n"
-"Another git process seems to be running in this repository, e.g.\n"
-"an editor opened by 'git commit'. Please make sure all processes\n"
-"are terminated then try again. If it still fails, a git process\n"
-"may have crashed in this repository earlier:\n"
-"remove the file manually to continue."
+"The merge base %s is bad.\n"
+"This means the bug has been fixed between %s and [%s].\n"
msgstr ""
-"No s'ha pogut crear '%s.lock': %s.\n"
-"\n"
-"Sembla que un altre procés de git s'està executant en aquest\n"
-"dipòsit, per exemple, un editor obert per 'git commit'. Si us\n"
-"plau, assegureu-vos que tots els processos s'hagin terminat i\n"
-"llavors trobeu de nou. Si encara falla, potser que un procés de\n"
-"git ha tingut una pana:\n"
-"elimineu el fitxer manualment per a continuar."
+"La base de fusió %s és dolenta.\n"
+"Això vol dir que el defecte s'ha arreglat entre %s i [%s].\n"
-#: lockfile.c:160
+#: bisect.c:737
#, c-format
-msgid "Unable to create '%s.lock': %s"
-msgstr "No es pot crear '%s.lock': %s"
+msgid ""
+"The merge base %s is new.\n"
+"The property has changed between %s and [%s].\n"
+msgstr ""
+"La base de fusió %s és nova.\n"
+"La propietat s'ha canviat entre %s i [%s].\n"
-#: merge.c:41
-msgid "failed to read the cache"
-msgstr "s'ha fallat en llegir la memòria cau"
+#: bisect.c:742
+#, c-format
+msgid ""
+"The merge base %s is %s.\n"
+"This means the first '%s' commit is between %s and [%s].\n"
+msgstr ""
+"La base de fusió %s és %s.\n"
+"Això vol dir que la primera comissió '%s' és entre %s i [%s].\n"
-#: merge.c:94 builtin/am.c:1992 builtin/am.c:2027 builtin/checkout.c:375
-#: builtin/checkout.c:589 builtin/clone.c:732
-msgid "unable to write new index file"
-msgstr "no s'ha pogut escriure un fitxer d'índex nou"
+#: bisect.c:750
+#, c-format
+msgid ""
+"Some %s revs are not ancestor of the %s rev.\n"
+"git bisect cannot work properly in this case.\n"
+"Maybe you mistook %s and %s revs?\n"
+msgstr ""
+"Unes revisions %s no són els avantpassats de la revisió %s.\n"
+"git bisect no pot funcionar correctament en aquest cas.\n"
+"Potser heu confós les revisions %s i %s?\n"
-#: merge-recursive.c:209
-msgid "(bad commit)\n"
-msgstr "(comissió dolenta)\n"
+#: bisect.c:763
+#, c-format
+msgid ""
+"the merge base between %s and [%s] must be skipped.\n"
+"So we cannot be sure the first %s commit is between %s and %s.\n"
+"We continue anyway."
+msgstr ""
+"s'ha de saltar la base de fusió entre %s i [%s].\n"
+"Llavors, no podem estar segurs de que la primera comissió %s sigui entre %s "
+"i %s.\n"
+"Continuem de totes maneres."
-#: merge-recursive.c:231
+#: bisect.c:798
#, c-format
-msgid "addinfo_cache failed for path '%s'"
-msgstr "addinfo_cache ha fallat per al camí '%s'"
+msgid "Bisecting: a merge base must be tested\n"
+msgstr "Bisecant: s'ha de provar una base de fusió\n"
-#: merge-recursive.c:301
-msgid "error building trees"
-msgstr "error en construir arbres"
+#: bisect.c:849
+#, c-format
+msgid "a %s revision is needed"
+msgstr "es necessita una revisió %s"
-#: merge-recursive.c:720
+#: bisect.c:866 builtin/notes.c:174 builtin/tag.c:248
#, c-format
-msgid "failed to create path '%s'%s"
-msgstr "s'ha fallat en crear el camí '%s' %s"
+msgid "could not create file '%s'"
+msgstr "no s'ha pogut crear el fitxer '%s'"
-#: merge-recursive.c:731
+#: bisect.c:917
#, c-format
-msgid "Removing %s to make room for subdirectory\n"
-msgstr "S'està eliminant %s per a fer espai per al subdirectori\n"
+msgid "could not read file '%s'"
+msgstr "no s'ha pogut llegir el fitxer '%s'"
-#: merge-recursive.c:745 merge-recursive.c:764
-msgid ": perhaps a D/F conflict?"
-msgstr ": potser un conflicte D/F?"
+#: bisect.c:947
+msgid "reading bisect refs failed"
+msgstr "la lectura de les referències de bisecció ha fallat"
-#: merge-recursive.c:754
+#: bisect.c:967
#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "s'està refusant perdre el fitxer no seguit a '%s'"
+msgid "%s was both %s and %s\n"
+msgstr "%s era ambdós %s i %s\n"
-#: merge-recursive.c:796
+#: bisect.c:975
#, c-format
-msgid "cannot read object %s '%s'"
-msgstr "no es pot llegir l'objecte %s '%s'"
+msgid ""
+"No testable commit found.\n"
+"Maybe you started with bad path parameters?\n"
+msgstr ""
+"No s'ha trobat cap comissió provable.\n"
+"Potser heu començat amb paràmetres de camí dolents?\n"
-#: merge-recursive.c:798
+#: bisect.c:994
#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "blob esperat per a %s '%s'"
+msgid "(roughly %d step)"
+msgid_plural "(roughly %d steps)"
+msgstr[0] "(aproximadament %d pas)"
+msgstr[1] "(aproximadament %d passos)"
-#: merge-recursive.c:822
+#. TRANSLATORS: the last %s will be replaced with
+#. "(roughly %d steps)" translation
+#: bisect.c:998
#, c-format
-msgid "failed to open '%s': %s"
-msgstr "s'ha fallat en obrir '%s': %s"
+msgid "Bisecting: %d revision left to test after this %s\n"
+msgid_plural "Bisecting: %d revisions left to test after this %s\n"
+msgstr[0] "Bisecant: manca %d revisió a provar després d'aquesta %s\n"
+msgstr[1] "Bisecant: manquen %d revisions a provar després d'aquesta %s\n"
-#: merge-recursive.c:833
+#: branch.c:53
#, c-format
-msgid "failed to symlink '%s': %s"
-msgstr "s'ha fallat en fer l'enllaç simbòlic '%s': %s"
+msgid ""
+"\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking\n"
+"\"git branch --set-upstream-to=%s%s%s\"."
+msgstr ""
+"\n"
+"Després de corregir la causa de l'error, podeu\n"
+"intentar corregir la informació de seguiment remot\n"
+"invocant \"git branch --set-upstream-to=%s%s%s\"."
-#: merge-recursive.c:838
+#: branch.c:67
#, c-format
-msgid "do not know what to do with %06o %s '%s'"
-msgstr "no se sap què fer amb %06o %s '%s'"
-
-#: merge-recursive.c:978
-msgid "Failed to execute internal merge"
-msgstr "S'ha fallat en executar la fusió interna"
+msgid "Not setting branch %s as its own upstream."
+msgstr "No s'està establint la branca %s com a la seva pròpia font."
-#: merge-recursive.c:982
+#: branch.c:93
#, c-format
-msgid "Unable to add %s to database"
-msgstr "no s'ha pogut afegir %s a la base de dades"
+msgid "Branch %s set up to track remote branch %s from %s by rebasing."
+msgstr ""
+"La branca %s està configurada per a seguir la branca remota %s de %s per "
+"rebasar."
-#: merge-recursive.c:1081 merge-recursive.c:1095
+#: branch.c:94
#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree."
-msgstr ""
-"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
-"s'ha deixat en l'arbre."
+msgid "Branch %s set up to track remote branch %s from %s."
+msgstr "La branca %s està configurada per a seguir la branca remota %s de %s."
-#: merge-recursive.c:1087 merge-recursive.c:1100
+#: branch.c:98
#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree at %s."
+msgid "Branch %s set up to track local branch %s by rebasing."
msgstr ""
-"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
-"s'ha deixat en l'arbre a %s."
-
-#: merge-recursive.c:1143
-msgid "rename"
-msgstr "canvia de nom"
-
-#: merge-recursive.c:1143
-msgid "renamed"
-msgstr "canviat de nom"
+"La branca %s està configurada per a seguir la branca local %s per rebasar."
-#: merge-recursive.c:1200
+#: branch.c:99
#, c-format
-msgid "%s is a directory in %s adding as %s instead"
-msgstr "%s és un directori en %s; s'està afegint com a %s en lloc d'això"
+msgid "Branch %s set up to track local branch %s."
+msgstr "La branca %s està configurada per a seguir la branca local %s."
-#: merge-recursive.c:1225
+#: branch.c:104
#, c-format
-msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
-"\"->\"%s\" in \"%s\"%s"
+msgid "Branch %s set up to track remote ref %s by rebasing."
msgstr ""
-"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom \"%s\"->\"%s\" en la "
-"branca \"%s\" canvi de nom \"%s\"->\"%s\" en \"%s\"%s"
+"La branca %s està configurada per a seguir la referència remota %s per "
+"rebasar."
-#: merge-recursive.c:1230
-msgid " (left unresolved)"
-msgstr " (deixat sense resolució)"
+#: branch.c:105
+#, c-format
+msgid "Branch %s set up to track remote ref %s."
+msgstr "La branca %s està configurada per a seguir la referència remota %s."
-#: merge-recursive.c:1292
+#: branch.c:109
#, c-format
-msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
+msgid "Branch %s set up to track local ref %s by rebasing."
msgstr ""
-"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom %s->%s en %s. Canvi de "
-"nom %s->%s en %s"
+"La branca %s està configurada per a seguir la referència local %s per "
+"rebasar."
-#: merge-recursive.c:1325
+#: branch.c:110
#, c-format
-msgid "Renaming %s to %s and %s to %s instead"
-msgstr "S'està canviant el nom de %s a %s i %s a %s en lloc d'això"
+msgid "Branch %s set up to track local ref %s."
+msgstr "La branca %s està configurada per a seguir la referència local %s."
-#: merge-recursive.c:1531
+#: branch.c:119
+msgid "Unable to write upstream branch configuration"
+msgstr "No es pot escriure la configuració de la branca font"
+
+#: branch.c:156
#, c-format
-msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
-msgstr ""
-"CONFLICTE (canvi de nom/afegiment): Canvi de nom %s->%s en %s. %s afegit en "
-"%s"
+msgid "Not tracking: ambiguous information for ref %s"
+msgstr "No seguint: informació ambigua per a la referència %s"
-#: merge-recursive.c:1546
+#: branch.c:185
#, c-format
-msgid "Adding merged %s"
-msgstr "S'està afegint %s fusionat"
+msgid "'%s' is not a valid branch name."
+msgstr "'%s' no és un nom de branca vàlid."
-#: merge-recursive.c:1553 merge-recursive.c:1766
+#: branch.c:190
#, c-format
-msgid "Adding as %s instead"
-msgstr "S'està afegint com a %s en lloc d'això"
+msgid "A branch named '%s' already exists."
+msgstr "Una branca amb nom '%s' ja existeix."
-#: merge-recursive.c:1610
+#: branch.c:198
+msgid "Cannot force update the current branch."
+msgstr "No es pot actualitzar la branca actual a la força."
+
+#: branch.c:218
#, c-format
-msgid "cannot read object %s"
-msgstr "no es pot llegir l'objecte %s"
+msgid "Cannot setup tracking information; starting point '%s' is not a branch."
+msgstr ""
+"No es pot configurar la informació de seguiment; el punt inicial '%s' no és "
+"una branca."
-#: merge-recursive.c:1613
+#: branch.c:220
#, c-format
-msgid "object %s is not a blob"
-msgstr "L'objecte %s no és un blob"
+msgid "the requested upstream branch '%s' does not exist"
+msgstr "la branca font demanada '%s' no existeix"
-#: merge-recursive.c:1666
-msgid "modify"
-msgstr "modifica"
+#: branch.c:222
+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 ""
+"\n"
+"Si teniu pensat basar el vostre treball en una branca\n"
+"font que ja existeix al remot, pot ser que necessiteu\n"
+"executar \"git fetch\" per a obtenir-la.\n"
+"\n"
+"Si teniu pensat pujar una branca local nova que seguirà\n"
+"la seva contrapart remota, pot ser que vulgueu usar\n"
+"\"git push -u\" per a establir la configuració font\n"
+"mentre pugeu."
-#: merge-recursive.c:1666
-msgid "modified"
-msgstr "modificat"
+#: branch.c:265
+#, c-format
+msgid "Not a valid object name: '%s'."
+msgstr "No és un nom d'objecte vàlid: '%s'."
-#: merge-recursive.c:1676
-msgid "content"
-msgstr "contingut"
+#: branch.c:285
+#, c-format
+msgid "Ambiguous object name: '%s'."
+msgstr "Nom d'objecte ambigu: '%s'."
-#: merge-recursive.c:1683
-msgid "add/add"
-msgstr "afegiment/afegiment"
+#: branch.c:290
+#, c-format
+msgid "Not a valid branch point: '%s'."
+msgstr "No és un punt de ramificació vàlid: '%s'."
-#: merge-recursive.c:1718
+#: branch.c:344
#, c-format
-msgid "Skipped %s (merged same as existing)"
-msgstr "S'ha saltat %s (el fusionat és igual a l'existent)"
+msgid "'%s' is already checked out at '%s'"
+msgstr "'%s' ja s'ha agafat a '%s'"
-#: merge-recursive.c:1732
+#: branch.c:363
#, c-format
-msgid "Auto-merging %s"
-msgstr "S'està autofusionant %s"
+msgid "HEAD of working tree %s is not updated"
+msgstr "La HEAD de l'arbre de treball %s no està actualitzat"
-#: merge-recursive.c:1736 git-submodule.sh:919
-msgid "submodule"
-msgstr "submòdul"
+#: bundle.c:34
+#, c-format
+msgid "'%s' does not look like a v2 bundle file"
+msgstr "'%s' no sembla un fitxer de farcell v2"
-#: merge-recursive.c:1737
+#: bundle.c:61
#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
+msgid "unrecognized header: %s%s (%d)"
+msgstr "capçalera no reconeguda: %s%s (%d)"
-#: merge-recursive.c:1831
+#: bundle.c:87 sequencer.c:963 builtin/commit.c:777
#, c-format
-msgid "Removing %s"
-msgstr "S'està eliminant %s"
+msgid "could not open '%s'"
+msgstr "no s'ha pogut obrir '%s'"
-#: merge-recursive.c:1857
-msgid "file/directory"
-msgstr "fitxer/directori"
+#: bundle.c:139
+msgid "Repository lacks these prerequisite commits:"
+msgstr "Al dipòsit li manquen aquestes comissions prerequisits:"
-#: merge-recursive.c:1863
-msgid "directory/file"
-msgstr "directori/fitxer"
+#: bundle.c:163 ref-filter.c:1462 sequencer.c:830 sequencer.c:1374
+#: builtin/blame.c:2814 builtin/commit.c:1061 builtin/log.c:348
+#: builtin/log.c:890 builtin/log.c:1340 builtin/log.c:1666 builtin/log.c:1909
+#: builtin/merge.c:356 builtin/shortlog.c:170
+msgid "revision walk setup failed"
+msgstr "la configuració del passeig per revisions ha fallat"
-#: merge-recursive.c:1868
+#: bundle.c:185
#, c-format
-msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
-msgstr ""
-"CONFLICTE (%s): Hi ha un directori amb nom %s en %s. S'està afegint %s com a "
-"%s"
-
-#: merge-recursive.c:1877
-#, c-format
-msgid "Adding %s"
-msgstr "S'està afegint %s"
+msgid "The bundle contains this ref:"
+msgid_plural "The bundle contains these %d refs:"
+msgstr[0] "El farcell conté aquesta referència:"
+msgstr[1] "El farcell conté aquestes %d referències:"
-#: merge-recursive.c:1914
-msgid "Already up-to-date!"
-msgstr "Ja està al dia!"
+#: bundle.c:192
+msgid "The bundle records a complete history."
+msgstr "El farcell registra una història completa."
-#: merge-recursive.c:1923
+#: bundle.c:194
#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "la fusió dels arbres %s i %s ha fallat"
+msgid "The bundle requires this ref:"
+msgid_plural "The bundle requires these %d refs:"
+msgstr[0] "El farcell requereix aquesta referència:"
+msgstr[1] "El farcell requereix aquestes %d referències:"
-#: merge-recursive.c:2006
-msgid "Merging:"
-msgstr "Fusionant:"
+#: bundle.c:253
+msgid "Could not spawn pack-objects"
+msgstr "No s'ha pogut executar el pack-objects"
-#: merge-recursive.c:2019
-#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "s'ha trobat %u avantpassat:"
-msgstr[1] "s'han trobat %u avantpassats:"
+#: bundle.c:264
+msgid "pack-objects died"
+msgstr "El pack-objects s'ha mort"
-#: merge-recursive.c:2058
-msgid "merge returned no commit"
-msgstr "la fusió no ha retornat cap comissió"
+#: bundle.c:304
+msgid "rev-list died"
+msgstr "El rev-list s'ha mort"
-#: merge-recursive.c:2121
+#: bundle.c:353
#, c-format
-msgid "Could not parse object '%s'"
-msgstr "No s'ha pogut analitzar l'objecte '%s'"
+msgid "ref '%s' is excluded by the rev-list options"
+msgstr "les opcions de la llista de revisions exclouen la referència '%s'"
-#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788
-msgid "Unable to write index."
-msgstr "No s'ha pogut escriure l'índex."
+#: bundle.c:443 builtin/log.c:165 builtin/log.c:1572 builtin/shortlog.c:273
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "paràmetre no reconegut: %s"
-#: notes-utils.c:41
-msgid "Cannot commit uninitialized/unreferenced notes tree"
-msgstr "No es pot cometre un arbre de notes no inicialitzat / no referenciat"
+#: bundle.c:451
+msgid "Refusing to create empty bundle."
+msgstr "S'està refusant crear un farcell buit."
-#: notes-utils.c:100
+#: bundle.c:463
#, c-format
-msgid "Bad notes.rewriteMode value: '%s'"
-msgstr "Valor de notes.rewriteMode dolent: '%s'"
+msgid "cannot create '%s'"
+msgstr "no es pot crear '%s'"
-#: notes-utils.c:110
+#: bundle.c:491
+msgid "index-pack died"
+msgstr "L'index-pack s'ha mort"
+
+#: color.c:290
#, c-format
-msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
-msgstr "S'està refusant reescriure les notes en %s (fora de refs/notes/)"
+msgid "invalid color value: %.*s"
+msgstr "valor de color no vàlid: %.*s"
-#. TRANSLATORS: The first %s is the name of the
-#. environment variable, the second %s is its value
-#: notes-utils.c:137
+#: commit.c:40 builtin/am.c:421 builtin/am.c:457 builtin/am.c:1493
+#: builtin/am.c:2127
#, c-format
-msgid "Bad %s value: '%s'"
-msgstr "Valor dolent de %s: '%s'"
+msgid "could not parse %s"
+msgstr "no s'ha pogut analitzar %s"
-#: object.c:242
+#: commit.c:42
#, c-format
-msgid "unable to parse object: %s"
-msgstr "no s'ha pogut analitzar l'objecte: %s"
+msgid "%s %s is not a commit!"
+msgstr "%s %s no és una comissió!"
-#: parse-options.c:572
-msgid "..."
-msgstr "..."
+#: commit.c:1514
+msgid ""
+"Warning: commit message did not conform to UTF-8.\n"
+"You may want to amend it after fixing the message, or set the config\n"
+"variable i18n.commitencoding to the encoding your project uses.\n"
+msgstr ""
+"Advertència: el missatge de comissió no conformava a UTF-8.\n"
+"Potser voleu esemenar-lo després de corregir el missatge, o establir\n"
+"la variable de configuració i18n.commitencoding a la codificació que\n"
+"usi el vostre projecte.\n"
-#: parse-options.c:590
+#: compat/obstack.c:406 compat/obstack.c:408
+msgid "memory exhausted"
+msgstr "memòria esgotada"
+
+#: config.c:516
#, c-format
-msgid "usage: %s"
-msgstr "ús: %s"
+msgid "bad config line %d in blob %s"
+msgstr "línia de configuració dolenta %d en el blob %s"
-#. TRANSLATORS: the colon here should align with the
-#. one in "usage: %s" translation
-#: parse-options.c:594
+#: config.c:520
#, c-format
-msgid " or: %s"
-msgstr " o: %s"
+msgid "bad config line %d in file %s"
+msgstr "línia de configuració dolenta %d en el fitxer %s"
-#: parse-options.c:597
+#: config.c:524
#, c-format
-msgid " %s"
-msgstr " %s"
+msgid "bad config line %d in standard input"
+msgstr "línia de configuració dolenta %d en l'entrada estàndard"
-#: parse-options.c:631
-msgid "-NUM"
-msgstr "-NUM"
+#: config.c:528
+#, c-format
+msgid "bad config line %d in submodule-blob %s"
+msgstr "línia de configuració dolenta %d en el blob de submòdul %s"
-#: parse-options-cb.c:108
+#: config.c:532
#, c-format
-msgid "malformed object name '%s'"
-msgstr "nom de camp mal format '%s'"
+msgid "bad config line %d in command line %s"
+msgstr "línia de configuració dolenta %d en la línia d'ordres %s"
-#: path.c:798
+#: config.c:536
#, c-format
-msgid "Could not make %s writable by group"
-msgstr "No s'ha pogut fer %s escrivible pel grup"
+msgid "bad config line %d in %s"
+msgstr "línia de configuració dolenta %d en %s"
-#: pathspec.c:133
-msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
-msgstr ""
-"els ajusts d'especificació de camí 'glob' i 'noglob' globals són "
-"incompatibles"
+#: config.c:655
+msgid "out of range"
+msgstr "fora de rang"
-#: pathspec.c:143
-msgid ""
-"global 'literal' pathspec setting is incompatible with all other global "
-"pathspec settings"
-msgstr ""
-"l'ajust d'especificació de camí 'literal' global és incompatible amb tots "
-"els altres ajusts d'especificació de camí globals"
+#: config.c:655
+msgid "invalid unit"
+msgstr "unitat no vàlida"
-#: pathspec.c:177
-msgid "invalid parameter for pathspec magic 'prefix'"
-msgstr "paràmetre no vàlid per a la màgia d'especificació de camí 'prefix'"
+#: config.c:661
+#, c-format
+msgid "bad numeric config value '%s' for '%s': %s"
+msgstr "valor de configuració numèric dolent '%s' per '%s': %s"
-#: pathspec.c:183
+#: config.c:666
#, c-format
-msgid "Invalid pathspec magic '%.*s' in '%s'"
-msgstr "Màgia d'especificació de camí no vàlida '%.*s' en '%s'"
+msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
+msgstr "valor de configuració numèric dolent '%s' per '%s' en el blob %s: %s"
-#: pathspec.c:187
+#: config.c:669
#, c-format
-msgid "Missing ')' at the end of pathspec magic in '%s'"
-msgstr "')' mancant al final de la màgia d'especificació de camí en '%s'"
+msgid "bad numeric config value '%s' for '%s' in file %s: %s"
+msgstr "valor de configuració numèric dolent '%s' per '%s' en el fitxer %s: %s"
-#: pathspec.c:205
+#: config.c:672
#, c-format
-msgid "Unimplemented pathspec magic '%c' in '%s'"
-msgstr "Màgia d'especificació de camí no implementada '%c' en '%s'"
+msgid "bad numeric config value '%s' for '%s' in standard input: %s"
+msgstr ""
+"valor de configuració numèric dolent '%s' per '%s' en l'entrada estàndard: %s"
-#: pathspec.c:230
+#: config.c:675
#, c-format
-msgid "%s: 'literal' and 'glob' are incompatible"
-msgstr "%s: 'literal' i 'glob' són incompatibles"
+msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
+msgstr ""
+"valor de configuració numèric dolent '%s' per '%s' en el blob de submòdul "
+"%s: %s"
-#: pathspec.c:241
+#: config.c:678
#, c-format
-msgid "%s: '%s' is outside repository"
-msgstr "%s: '%s' és fora del dipòsit"
+msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
+msgstr ""
+"valor de configuració numèric dolent '%s' per '%s' en la línia d'ordres %s: "
+"%s"
-#: pathspec.c:291
+#: config.c:681
#, c-format
-msgid "Pathspec '%s' is in submodule '%.*s'"
-msgstr "L'especificació '%s' és en el submòdul '%.*s'"
+msgid "bad numeric config value '%s' for '%s' in %s: %s"
+msgstr "valor de configuració numèric dolent '%s' per '%s' en %s: %s"
-#: pathspec.c:353
+#: config.c:768
#, c-format
-msgid "%s: pathspec magic not supported by this command: %s"
-msgstr ""
-"%s: aquesta ordre no és compatible amb la màgia d'especificació de camí: %s"
+msgid "failed to expand user dir in: '%s'"
+msgstr "s'ha fallat en expandir el directori d'usuari en: '%s'"
-#: pathspec.c:433
+#: config.c:852 config.c:863
#, c-format
-msgid "pathspec '%s' is beyond a symbolic link"
-msgstr "l'especificació de camí '%s' és més enllà d'un enllaç simbòlic"
+msgid "bad zlib compression level %d"
+msgstr "nivell de compressió de zlib dolent %d"
-#: pathspec.c:442
-msgid ""
-"There is nothing to exclude from by :(exclude) patterns.\n"
-"Perhaps you forgot to add either ':/' or '.' ?"
-msgstr ""
-"No hi ha res a excloure per patrons :(exclusió).\n"
-"Potser heu oblidat afegir o ':/' o '.' ?"
+#: config.c:978
+#, c-format
+msgid "invalid mode for object creation: %s"
+msgstr "mode de creació d'objecte no vàlid: %s"
-#: pretty.c:973
-msgid "unable to parse --pretty format"
-msgstr "no s'ha pogut analitzar el format --pretty"
+#: config.c:1312
+msgid "unable to parse command-line config"
+msgstr "no s'ha pogut analitzar la configuració de la línia d'ordres"
-#: progress.c:235
-msgid "done"
-msgstr "fet"
+#: config.c:1362
+msgid "unknown error occurred while reading the configuration files"
+msgstr "un error desconegut ha ocorregut en llegir els fitxers de configuració"
-#: read-cache.c:1281
+#: config.c:1716
#, c-format
-msgid ""
-"index.version set, but the value is invalid.\n"
-"Using version %i"
-msgstr ""
-"index.version establert, però el valor no és vàlid.\n"
-"S'està usant la versió %i"
+msgid "unable to parse '%s' from command-line config"
+msgstr "no s'ha pogut analitzar '%s' de la configuració de la línia d'ordres"
-#: read-cache.c:1291
+#: config.c:1718
#, c-format
-msgid ""
-"GIT_INDEX_VERSION set, but the value is invalid.\n"
-"Using version %i"
-msgstr ""
-"GIT_INDEX_VERSION establert, però el valor no és vàlid.\n"
-"S'està usant la versió %i"
+msgid "bad config variable '%s' in file '%s' at line %d"
+msgstr "variable de configuració dolenta '%s' en el fitxer '%s' a la línia %d"
-#: refs.c:551 builtin/merge.c:840
+#: config.c:1777
#, c-format
-msgid "Could not open '%s' for writing"
-msgstr "No s'ha pogut obrir '%s' per a escriptura"
+msgid "%s has multiple values"
+msgstr "%s té múltiples valors"
-#: refs/files-backend.c:2534
+#: config.c:2311
#, c-format
-msgid "could not delete reference %s: %s"
-msgstr "no s'ha pogut suprimir la referència %s: %s"
+msgid "could not set '%s' to '%s'"
+msgstr "no s'ha pogut establir '%s' a '%s'"
-#: refs/files-backend.c:2537
+#: config.c:2313
#, c-format
-msgid "could not delete references: %s"
-msgstr "no s'ha pogut suprimir les referències: %s"
+msgid "could not unset '%s'"
+msgstr "no s'ha pogut desestablir '%s'"
+
+#: connect.c:49
+msgid "The remote end hung up upon initial contact"
+msgstr "El costat remot ha penjat en el moment de contacte inicial"
+
+#: connect.c:51
+msgid ""
+"Could not read from remote repository.\n"
+"\n"
+"Please make sure you have the correct access rights\n"
+"and the repository exists."
+msgstr ""
+"No s'ha pogut llegir del dipòsit remot.\n"
+"\n"
+"Si us plau, assegureu-vos que tingueu els drets\n"
+"d'accés correctes i que el dipòsit existeixi."
+
+#: connected.c:63 builtin/fsck.c:173 builtin/prune.c:140
+msgid "Checking connectivity"
+msgstr "S'està comprovant la connectivitat"
+
+#: connected.c:75
+msgid "Could not run 'git rev-list'"
+msgstr "No s'ha pogut executar 'git rev-list'"
+
+#: connected.c:95
+msgid "failed write to rev-list"
+msgstr "escriptura fallada al rev-list"
-#: refs/files-backend.c:2546
+#: connected.c:102
+msgid "failed to close rev-list's stdin"
+msgstr "s'ha fallat en tancar l'stdin del rev-list"
+
+#: convert.c:201
#, c-format
-msgid "could not remove reference %s"
-msgstr "no s'ha pogut eliminar la referència %s"
+msgid ""
+"CRLF will be replaced by LF in %s.\n"
+"The file will have its original line endings in your working directory."
+msgstr ""
+"LF reemplaçarà CRLF en %s.\n"
+"El fitxer tindrà els seus terminadors de línia originals en el vostre "
+"directori de treball."
-#: ref-filter.c:55
+#: convert.c:205
#, c-format
-msgid "expected format: %%(color:<color>)"
-msgstr "format esperat: %%(color:<color>)"
+msgid "CRLF would be replaced by LF in %s."
+msgstr "LF reemplaçaria CRLF en %s."
-#: ref-filter.c:57
+#: convert.c:211
#, c-format
-msgid "unrecognized color: %%(color:%s)"
-msgstr "color no reconegut: %%(color:%s)"
+msgid ""
+"LF will be replaced by CRLF in %s.\n"
+"The file will have its original line endings in your working directory."
+msgstr ""
+"CRLF reemplaçarà LF en %s.\n"
+"El fitxer tindrà els seus terminadors de línia originals en el vostre "
+"directori de treball."
-#: ref-filter.c:71
+#: convert.c:215
#, c-format
-msgid "unrecognized format: %%(%s)"
-msgstr "format no reconegut: %%(%s)"
+msgid "LF would be replaced by CRLF in %s"
+msgstr "CRLF reemplaçaria LF en %s"
-#: ref-filter.c:77
+#: date.c:97
+msgid "in the future"
+msgstr "en el futur"
+
+#: date.c:103
#, c-format
-msgid "%%(body) does not take arguments"
-msgstr "%%(body) no accepta paràmetres"
+msgid "%lu second ago"
+msgid_plural "%lu seconds ago"
+msgstr[0] "fa %lu segon"
+msgstr[1] "fa %lu segons"
-#: ref-filter.c:84
+#: date.c:110
#, c-format
-msgid "%%(subject) does not take arguments"
-msgstr "%%(subject) no accepta paràmetres"
+msgid "%lu minute ago"
+msgid_plural "%lu minutes ago"
+msgstr[0] "fa %lu minut"
+msgstr[1] "fa %lu minuts"
-#: ref-filter.c:101
+#: date.c:117
#, c-format
-msgid "positive value expected contents:lines=%s"
-msgstr "valor positiu esperat contents:lines=%s"
+msgid "%lu hour ago"
+msgid_plural "%lu hours ago"
+msgstr[0] "fa %lu hora"
+msgstr[1] "fa %lu hores"
-#: ref-filter.c:103
+#: date.c:124
#, c-format
-msgid "unrecognized %%(contents) argument: %s"
-msgstr "paràmetre %%(contents) no reconegut: %s"
+msgid "%lu day ago"
+msgid_plural "%lu days ago"
+msgstr[0] "fa %lu dia"
+msgstr[1] "fa %lu dies"
-#: ref-filter.c:113
+#: date.c:130
#, c-format
-msgid "unrecognized %%(objectname) argument: %s"
-msgstr "paràmetre %%(objectname) no reconegut: %s"
+msgid "%lu week ago"
+msgid_plural "%lu weeks ago"
+msgstr[0] "fa %lu setmana"
+msgstr[1] "fa %lu setmanes"
-#: ref-filter.c:135
+#: date.c:137
#, c-format
-msgid "expected format: %%(align:<width>,<position>)"
-msgstr "format esperat: %%(align:<amplada>,<posició>)"
+msgid "%lu month ago"
+msgid_plural "%lu months ago"
+msgstr[0] "fa %lu mes"
+msgstr[1] "fa %lu mesos"
-#: ref-filter.c:147
+#: date.c:148
#, c-format
-msgid "unrecognized position:%s"
-msgstr "posició no reconeguda:%s"
+msgid "%lu year"
+msgid_plural "%lu years"
+msgstr[0] "%lu any"
+msgstr[1] "%lu anys"
-#: ref-filter.c:151
+#. TRANSLATORS: "%s" is "<n> years"
+#: date.c:151
#, c-format
-msgid "unrecognized width:%s"
-msgstr "amplada no reconeguda:%s"
+msgid "%s, %lu month ago"
+msgid_plural "%s, %lu months ago"
+msgstr[0] "fa %s i %lu mes"
+msgstr[1] "fa %s i %lu mesos"
-#: ref-filter.c:157
+#: date.c:156 date.c:161
#, c-format
-msgid "unrecognized %%(align) argument: %s"
-msgstr "paràmetre %%(align) no reconegut: %s"
+msgid "%lu year ago"
+msgid_plural "%lu years ago"
+msgstr[0] "fa %lu any"
+msgstr[1] "fa %lu anys"
-#: ref-filter.c:161
+#: diffcore-order.c:24
#, c-format
-msgid "positive width expected with the %%(align) atom"
-msgstr "amplada positiva esperada amb l'àtom %%(align)"
+msgid "failed to read orderfile '%s'"
+msgstr "s'ha fallat en llegir el fitxer d'ordres '%s'"
-#: ref-filter.c:244
+#: diffcore-rename.c:536
+msgid "Performing inexact rename detection"
+msgstr "S'està realitzant una detecció inexacta de canvis de nom"
+
+#: diff.c:62
#, c-format
-msgid "malformed field name: %.*s"
-msgstr "nom d'objecte mal format: %.*s"
+msgid "option '%s' requires a value"
+msgstr "l'opció '%s' requereix un valor"
-#: ref-filter.c:270
+#: diff.c:124
#, c-format
-msgid "unknown field name: %.*s"
-msgstr "nom de camp desconegut: %.*s"
+msgid " Failed to parse dirstat cut-off percentage '%s'\n"
+msgstr " S'ha fallat en analitzar el percentatge limitant de dirstat '%s'\n"
-#: ref-filter.c:372
+#: diff.c:129
#, c-format
-msgid "format: %%(end) atom used without corresponding atom"
-msgstr "format: s'ha usat l'àtom %%(end) sense l'àtom corresponent"
+msgid " Unknown dirstat parameter '%s'\n"
+msgstr " Paràmetre de dirstat desconegut '%s'\n"
-#: ref-filter.c:424
+#: diff.c:283
#, c-format
-msgid "malformed format string %s"
-msgstr "cadena de format mal format %s"
+msgid "Unknown value for 'diff.submodule' config variable: '%s'"
+msgstr ""
+"Valor desconegut de la variable de configuració de 'diff.submodule': '%s'"
-#: ref-filter.c:878
-msgid ":strip= requires a positive integer argument"
-msgstr ":strip= requereix un paràmetre enter positiu"
+#: diff.c:346
+#, c-format
+msgid ""
+"Found errors in 'diff.dirstat' config variable:\n"
+"%s"
+msgstr ""
+"S'han trobat errors en la variable de configuració 'diff.dirstat':\n"
+"%s"
-#: ref-filter.c:883
+#: diff.c:3087
#, c-format
-msgid "ref '%s' does not have %ld components to :strip"
-msgstr "la referència '%s' no té %ld components per a :strip"
+msgid "external diff died, stopping at %s"
+msgstr "el diff external s'ha mort, s'està aturant a %s"
-#: ref-filter.c:1046
+#: diff.c:3412
+msgid "--name-only, --name-status, --check and -s are mutually exclusive"
+msgstr "--name-only, --name-status, --check i -s són mutualment exclusius"
+
+#: diff.c:3502
+msgid "--follow requires exactly one pathspec"
+msgstr "--follow requereix exactament una especificació de camí"
+
+#: diff.c:3665
#, c-format
-msgid "unknown %.*s format %s"
-msgstr "format de %.*s desconegut %s"
+msgid ""
+"Failed to parse --dirstat/-X option parameter:\n"
+"%s"
+msgstr ""
+"S'ha fallat en analitzar el paràmetre d'opció de --dirstat/-X:\n"
+"%s"
-#: ref-filter.c:1066 ref-filter.c:1097
+#: diff.c:3679
#, c-format
-msgid "missing object %s for %s"
-msgstr "manca l'objecte %s per a %s"
+msgid "Failed to parse --submodule option parameter: '%s'"
+msgstr "S'ha fallat en analitzar el paràmetre d'opció de --submodule: '%s'"
-#: ref-filter.c:1069 ref-filter.c:1100
+#: diff.c:4700
+msgid "inexact rename detection was skipped due to too many files."
+msgstr "s'ha saltat la detecció de canvi de nom a causa de massa fitxers."
+
+#: diff.c:4703
+msgid "only found copies from modified paths due to too many files."
+msgstr ""
+"només s'han trobat còpies des de camins modificats a causa de massa fitxers."
+
+#: diff.c:4706
#, c-format
-msgid "parse_object_buffer failed on %s for %s"
-msgstr "parse_object_buffer ha fallat en %s per a %s"
+msgid ""
+"you may want to set your %s variable to at least %d and retry the command."
+msgstr ""
+"potser voleu establir la vostra variable %s a almenys %d i tornar a intentar "
+"l'ordre."
-#: ref-filter.c:1311
+#: dir.c:1866
+msgid "failed to get kernel name and information"
+msgstr "s'ha fallat en obtenir el nombre i la informació del nucli"
+
+#: dir.c:1985
+msgid "Untracked cache is disabled on this system or location."
+msgstr ""
+"La memòria cau no seguida està inhabilitada en aquest sistema o ubicació."
+
+#: fetch-pack.c:213
+msgid "git fetch-pack: expected shallow list"
+msgstr "git fetch-pack: llista superficial esperada"
+
+#: fetch-pack.c:225
+msgid "git fetch-pack: expected ACK/NAK, got EOF"
+msgstr "git fetch-pack: ACK/NAK esperat, EOF rebut"
+
+#: fetch-pack.c:243
#, c-format
-msgid "malformed object at '%s'"
-msgstr "objecte mal format a '%s'"
+msgid "git fetch-pack: expected ACK/NAK, got '%s'"
+msgstr "git fetch-pack: ACK/NAK esperat, '%s' rebut"
-#: ref-filter.c:1373
+#: fetch-pack.c:295
+msgid "--stateless-rpc requires multi_ack_detailed"
+msgstr "--stateless-rpc requereix multi_ack_detailed"
+
+#: fetch-pack.c:381
#, c-format
-msgid "ignoring ref with broken name %s"
-msgstr "s'està ignorant la referència amb nom trencat %s"
+msgid "invalid shallow line: %s"
+msgstr "línia de shallow no vàlida: %s"
-#: ref-filter.c:1378
+#: fetch-pack.c:387
#, c-format
-msgid "ignoring broken ref %s"
-msgstr "s'està ignorant la referència trencada %s"
+msgid "invalid unshallow line: %s"
+msgstr "línia d'unshallow no vàlida: %s"
-#: ref-filter.c:1651
+#: fetch-pack.c:389
#, c-format
-msgid "format: %%(end) atom missing"
-msgstr "format: manca l'àtom %%(end)"
+msgid "object not found: %s"
+msgstr "objecte no trobat: %s"
-#: ref-filter.c:1705
+#: fetch-pack.c:392
#, c-format
-msgid "malformed object name %s"
-msgstr "nom d'objecte %s mal format"
+msgid "error in object: %s"
+msgstr "error en objecte: %s"
-#: remote.c:746
+#: fetch-pack.c:394
#, c-format
-msgid "Cannot fetch both %s and %s to %s"
-msgstr "No es pot obtenir ambdós %s i %s a %s"
+msgid "no shallow found: %s"
+msgstr "no s'ha trobat cap superficial: %s"
-#: remote.c:750
+#: fetch-pack.c:397
#, c-format
-msgid "%s usually tracks %s, not %s"
-msgstr "%s generalment segueix %s, no %s"
+msgid "expected shallow/unshallow, got %s"
+msgstr "s'esperava shallow/unshallow, s'ha rebut %s"
-#: remote.c:754
+#: fetch-pack.c:436
#, c-format
-msgid "%s tracks both %s and %s"
-msgstr "%s segueix ambdós %s i %s"
+msgid "got %s %d %s"
+msgstr "%s %d %s rebut"
-#: remote.c:762
-msgid "Internal error"
-msgstr "Error intern"
+#: fetch-pack.c:450
+#, c-format
+msgid "invalid commit %s"
+msgstr "comissió no vàlida %s"
-#: remote.c:1677 remote.c:1720
-msgid "HEAD does not point to a branch"
-msgstr "HEAD no assenyala cap branca"
+#: fetch-pack.c:483
+msgid "giving up"
+msgstr "s'està rendint"
-#: remote.c:1686
-#, c-format
-msgid "no such branch: '%s'"
-msgstr "no hi ha tal branca: '%s'"
+#: fetch-pack.c:493 progress.c:235
+msgid "done"
+msgstr "fet"
-#: remote.c:1689
+#: fetch-pack.c:505
#, c-format
-msgid "no upstream configured for branch '%s'"
-msgstr "cap font configurada per a la branca '%s'"
+msgid "got %s (%d) %s"
+msgstr "s'ha rebut %s (%d) %s"
-#: remote.c:1695
+#: fetch-pack.c:551
#, c-format
-msgid "upstream branch '%s' not stored as a remote-tracking branch"
-msgstr "La branca font '%s' no s'emmagatzema com a branca amb seguiment remot"
+msgid "Marking %s as complete"
+msgstr "S'està marcant %s com a complet"
-#: remote.c:1710
+#: fetch-pack.c:697
#, c-format
-msgid "push destination '%s' on remote '%s' has no local tracking branch"
-msgstr ""
-"el destí de pujada '%s' en el remot '%s' no té cap branca seguidora local"
+msgid "already have %s (%s)"
+msgstr "ja es té %s (%s)"
-#: remote.c:1725
+#: fetch-pack.c:735
+msgid "fetch-pack: unable to fork off sideband demultiplexer"
+msgstr "fetch-pack: no s'ha pogut bifurcar del demultiplexor de banda lateral"
+
+#: fetch-pack.c:743
+msgid "protocol error: bad pack header"
+msgstr "error de protocol: capçalera de paquet dolent"
+
+#: fetch-pack.c:799
#, c-format
-msgid "branch '%s' has no remote for pushing"
-msgstr "la branca '%s' no té cap remot al qual pujar"
+msgid "fetch-pack: unable to fork off %s"
+msgstr "fetch-pack: no es pot bifurcar de %s"
-#: remote.c:1736
+#: fetch-pack.c:815
#, c-format
-msgid "push refspecs for '%s' do not include '%s'"
-msgstr "les especificacions de referència de '%s' no inclouen '%s'"
+msgid "%s failed"
+msgstr "%s ha fallat"
-#: remote.c:1749
-msgid "push has no destination (push.default is 'nothing')"
-msgstr "push no té destí (push.default és 'nothing')"
+#: fetch-pack.c:817
+msgid "error in sideband demultiplexer"
+msgstr "error en demultiplexor de banda lateral"
-#: remote.c:1771
-msgid "cannot resolve 'simple' push to a single destination"
-msgstr "no es pot resoldre una pujada 'simple' a un sol destí"
+#: fetch-pack.c:844
+msgid "Server does not support shallow clients"
+msgstr "El servidor no permet clients superficials"
-#: remote.c:2073
-#, c-format
-msgid "Your branch is based on '%s', but the upstream is gone.\n"
-msgstr "La vostra branca està basada en '%s', però la font no hi és.\n"
-
-#: remote.c:2077
-msgid " (use \"git branch --unset-upstream\" to fixup)\n"
-msgstr " (useu \"git branch --unset-upstream\" per a arreglar)\n"
-
-#: remote.c:2080
-#, c-format
-msgid "Your branch is up-to-date with '%s'.\n"
-msgstr "La vostra branca està al dia amb '%s'.\n"
+#: fetch-pack.c:848
+msgid "Server supports multi_ack_detailed"
+msgstr "El servidor accepta multi_ack_detailed"
-#: remote.c:2084
-#, 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] "La vostra branca està davant de '%s' per %d comissió.\n"
-msgstr[1] "La vostra branca està davant de '%s' per %d comissions.\n"
+#: fetch-pack.c:851
+msgid "Server supports no-done"
+msgstr "El servidor accepta no-done"
-#: remote.c:2090
-msgid " (use \"git push\" to publish your local commits)\n"
-msgstr " (useu \"git push\" per a publicar les vostres comissions locals)\n"
+#: fetch-pack.c:857
+msgid "Server supports multi_ack"
+msgstr "El servidor accepta multi_ack"
-#: remote.c:2093
-#, 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] ""
-"La vostra branca està darrere de '%s' per %d comissió, i pot avançar-se "
-"ràpidament.\n"
-msgstr[1] ""
-"La vostra branca està darrere de '%s' per %d comissions, i pot avançar-se "
-"ràpidament.\n"
+#: fetch-pack.c:861
+msgid "Server supports side-band-64k"
+msgstr "El servidor accepta side-band-64k"
-#: remote.c:2101
-msgid " (use \"git pull\" to update your local branch)\n"
-msgstr " (useu \"git pull\" per a actualitzar la vostra branca local)\n"
+#: fetch-pack.c:865
+msgid "Server supports side-band"
+msgstr "El servidor accepta banda lateral"
-#: remote.c:2104
-#, 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] ""
-"La vostra branca i '%s' s'han divergit,\n"
-"i tenen %d i %d comissió distinta cada una, respectivament.\n"
-msgstr[1] ""
-"La vostra branca i '%s' s'han divergit,\n"
-"i tenen %d i %d comissions distintes cada una, respectivament.\n"
+#: fetch-pack.c:869
+msgid "Server supports allow-tip-sha1-in-want"
+msgstr "El servidor accepta allow-tip-sha1-in-want"
-#: remote.c:2114
-msgid " (use \"git pull\" to merge the remote branch into yours)\n"
-msgstr " (useu \"git pull\" per a fusionar la branca remota a la vostra)\n"
+#: fetch-pack.c:873
+msgid "Server supports allow-reachable-sha1-in-want"
+msgstr "El servidor accepta allow-reachable-sha1-in-want"
-#: revision.c:2132
-msgid "your current branch appears to be broken"
-msgstr "la vostra branca actual sembla trencada"
+#: fetch-pack.c:883
+msgid "Server supports ofs-delta"
+msgstr "El servidor accepta ofs-delta"
-#: revision.c:2135
+#: fetch-pack.c:890
#, c-format
-msgid "your current branch '%s' does not have any commits yet"
-msgstr "la vostra branca actual '%s' encara no té cap comissió"
-
-#: revision.c:2329
-msgid "--first-parent is incompatible with --bisect"
-msgstr "--first-parent és incompatible amb --bisect"
-
-#: run-command.c:92
-msgid "open /dev/null failed"
-msgstr "s'ha fallat en obrir /dev/null"
+msgid "Server version is %.*s"
+msgstr "La versió del servidor és %.*s"
-#: run-command.c:94
-#, c-format
-msgid "dup2(%d,%d) failed"
-msgstr "dup2(%d,%d) ha fallat"
+#: fetch-pack.c:896
+msgid "Server does not support --shallow-since"
+msgstr "El servidor no admet --shallow-since"
-#: send-pack.c:298
-msgid "failed to sign the push certificate"
-msgstr "s'ha fallat en signar el certificat de pujada"
+#: fetch-pack.c:900
+msgid "Server does not support --shallow-exclude"
+msgstr "El servidor no admet --shallow-exclude"
-#: send-pack.c:411
-msgid "the receiving end does not support --signed push"
-msgstr "el destí receptor no admet pujar --signed"
+#: fetch-pack.c:902
+msgid "Server does not support --deepen"
+msgstr "El servidor no admet --deepen"
-#: send-pack.c:413
-msgid ""
-"not sending a push certificate since the receiving end does not support --"
-"signed push"
-msgstr ""
-"no s'està enviant una certificació de pujada perquè el destí receptor no "
-"admet pujar --signed"
+#: fetch-pack.c:913
+msgid "no common commits"
+msgstr "cap comissió en comú"
-#: send-pack.c:425
-msgid "the receiving end does not support --atomic push"
-msgstr "el destí receptor no admet pujar --atomic"
+#: fetch-pack.c:925
+msgid "git fetch-pack: fetch failed."
+msgstr "git fetch-pack: l'obtenció ha fallat."
-#: send-pack.c:430
-msgid "the receiving end does not support push options"
-msgstr "el destí receptor no admet opcions de pujada"
+#: fetch-pack.c:1087
+msgid "no matching remote head"
+msgstr "no hi ha cap cap remot coincident"
-#: sequencer.c:174
-msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'"
-msgstr ""
-"després de resoldre els conflictes, marqueu els camins\n"
-"corregits amb 'git add <camins>' o 'git rm <camins>'"
+#: gpg-interface.c:185
+msgid "gpg failed to sign the data"
+msgstr "gpg ha fallat en signar les dades"
-#: sequencer.c:177
-msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
-msgstr ""
-"després de resoldre els conflictes, marqueu els camins\n"
-"corregits amb 'git add <camins>' o 'git rm <camins>'\n"
-"i cometeu el resultat amb 'git commit'"
+#: gpg-interface.c:215
+msgid "could not create temporary file"
+msgstr "no s'ha pogut crear el fitxer temporal"
-#: sequencer.c:190 sequencer.c:841 sequencer.c:924
+#: gpg-interface.c:217
#, c-format
-msgid "Could not write to %s"
-msgstr "No s'ha pogut escriure a %s"
+msgid "failed writing detached signature to '%s'"
+msgstr "s'ha fallat en escriure la signatura separada a '%s'"
-#: sequencer.c:193 sequencer.c:843 sequencer.c:928
+#: grep.c:1782
#, c-format
-msgid "Error wrapping up %s."
-msgstr "Ha hagut un error en finalitzar %s."
-
-#: sequencer.c:208
-msgid "Your local changes would be overwritten by cherry-pick."
-msgstr "Els vostres canvis locals se sobreescriurien pel recull de cireres."
-
-#: sequencer.c:210
-msgid "Your local changes would be overwritten by revert."
-msgstr "Els vostres canvis locals se sobreescriurien per la reversió."
-
-#: sequencer.c:213
-msgid "Commit your changes or stash them to proceed."
-msgstr "Cometeu els vostres canvis o emmagatzemeu-los per a procedir."
+msgid "'%s': unable to read %s"
+msgstr "'%s': no s'ha pogut llegir %s"
-#: sequencer.c:228
+#: grep.c:1799 builtin/clone.c:381 builtin/diff.c:84 builtin/rm.c:155
#, c-format
-msgid "%s: fast-forward"
-msgstr "%s: avanç ràpid"
+msgid "failed to stat '%s'"
+msgstr "s'ha fallat en fer stat a '%s'"
-#. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:303
+#: grep.c:1810
#, c-format
-msgid "%s: Unable to write new index file"
-msgstr "%s: No s'ha pogut escriure un fitxer d'índex nou"
-
-#: sequencer.c:321
-msgid "Could not resolve HEAD commit\n"
-msgstr "No s'ha pogut resoldre la comissió HEAD\n"
-
-#: sequencer.c:341
-msgid "Unable to update cache tree\n"
-msgstr "No s'ha pogut actualitzar l'arbre cau\n"
+msgid "'%s': short read"
+msgstr "'%s': lectura curta"
-#: sequencer.c:393
+#: help.c:203
#, c-format
-msgid "Could not parse commit %s\n"
-msgstr "No s'ha pogut analitzar la comissió %s\n"
+msgid "available git commands in '%s'"
+msgstr "ordres de git disponibles en '%s'"
-#: sequencer.c:398
-#, c-format
-msgid "Could not parse parent commit %s\n"
-msgstr "No s'ha pogut analitzar la comissió mare %s\n"
+#: help.c:210
+msgid "git commands available from elsewhere on your $PATH"
+msgstr "ordres de git disponibles d'altres llocs en el vostre $PATH"
-#: sequencer.c:463
-msgid "Your index file is unmerged."
-msgstr "El vostre fitxer d'índex està sense fusionar."
+#: help.c:241
+msgid "These are common Git commands used in various situations:"
+msgstr "Aquestes són ordres del Git comunament usades en diverses situacions:"
-#: sequencer.c:482
+#: help.c:306
#, c-format
-msgid "Commit %s is a merge but no -m option was given."
-msgstr "La comissió %s és una fusió però no s'ha donat cap opció -m."
+msgid ""
+"'%s' appears to be a git command, but we were not\n"
+"able to execute it. Maybe git-%s is broken?"
+msgstr ""
+"'%s' sembla una ordre de git, però no hem pogut\n"
+"executar-la. Pot ser que git-%s estigui estropejat?"
-#: sequencer.c:490
-#, c-format
-msgid "Commit %s does not have parent %d"
-msgstr "La comissió %s no té mare %d"
+#: help.c:361
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr "Ai. El vostre sistema no informa de cap ordre de Git."
-#: sequencer.c:494
+#: help.c:383
#, c-format
-msgid "Mainline was specified but commit %s is not a merge."
+msgid ""
+"WARNING: You called a Git command named '%s', which does not exist.\n"
+"Continuing under the assumption that you meant '%s'"
msgstr ""
-"S'ha especificat la línia principal però la comissió %s no és una fusió."
+"ADVERTÈNCIA: Heu invocat una ordre de Git amb nom '%s', la qual no "
+"existeix.\n"
+"S'està continuant sota l'assumpció que volíeu dir '%s'"
-#. TRANSLATORS: The first %s will be "revert" or
-#. "cherry-pick", the second %s a SHA1
-#: sequencer.c:507
+#: help.c:388
#, c-format
-msgid "%s: cannot parse parent commit %s"
-msgstr "%s: no es pot analitzar la comissió mare %s"
+msgid "in %0.1f seconds automatically..."
+msgstr "en %0.1f segons automàticament..."
-#: sequencer.c:511
+#: help.c:395
#, c-format
-msgid "Cannot get commit message for %s"
-msgstr "No es pot obtenir el missatge de comissió de %s"
+msgid "git: '%s' is not a git command. See 'git --help'."
+msgstr "git: '%s' no és una ordre de git. Vegeu 'git --help'."
-#: sequencer.c:597
-#, c-format
-msgid "could not revert %s... %s"
-msgstr "no s'ha pogut revertir %s...%s"
+#: help.c:399 help.c:465
+msgid ""
+"\n"
+"Did you mean this?"
+msgid_plural ""
+"\n"
+"Did you mean one of these?"
+msgstr[0] ""
+"\n"
+"Volíeu dir això?"
+msgstr[1] ""
+"\n"
+"Volíeu dir un d'aquests?"
-#: sequencer.c:598
+#: help.c:461
#, c-format
-msgid "could not apply %s... %s"
-msgstr "no s'ha pogut aplicar %s...%s"
+msgid "%s: %s - %s"
+msgstr "%s: %s - %s"
-#: sequencer.c:633
-msgid "empty commit set passed"
-msgstr "conjunt de comissions buit passat"
+#: ident.c:334
+msgid ""
+"\n"
+"*** Please tell me who you are.\n"
+"\n"
+"Run\n"
+"\n"
+" git config --global user.email \"you@example.com\"\n"
+" git config --global user.name \"Your Name\"\n"
+"\n"
+"to set your account's default identity.\n"
+"Omit --global to set the identity only in this repository.\n"
+"\n"
+msgstr ""
+"\n"
+"*** Si us plau, digueu-me qui sou.\n"
+"\n"
+"Executeu\n"
+"\n"
+" git config --global user.email \"vós@example.com\"\n"
+" git config --global user.name \"El Vostre Nom\"\n"
+"\n"
+"per a establir la identitat predeterminat del vostre compte.\n"
+"Ometeu --global per a establir la identitat només en aquest dipòsit.\n"
-#: sequencer.c:641
+#: lockfile.c:152
#, c-format
-msgid "git %s: failed to read the index"
-msgstr "git %s: s'ha fallat en llegir l'índex"
+msgid ""
+"Unable to create '%s.lock': %s.\n"
+"\n"
+"Another git process seems to be running in this repository, e.g.\n"
+"an editor opened by 'git commit'. Please make sure all processes\n"
+"are terminated then try again. If it still fails, a git process\n"
+"may have crashed in this repository earlier:\n"
+"remove the file manually to continue."
+msgstr ""
+"No s'ha pogut crear '%s.lock': %s.\n"
+"\n"
+"Sembla que un altre procés de git s'està executant en aquest\n"
+"dipòsit, per exemple, un editor obert per 'git commit'. Si us\n"
+"plau, assegureu-vos que tots els processos s'hagin terminat i\n"
+"llavors trobeu de nou. Si encara falla, potser que un procés de\n"
+"git ha tingut una pana:\n"
+"elimineu el fitxer manualment per a continuar."
-#: sequencer.c:645
+#: lockfile.c:160
#, c-format
-msgid "git %s: failed to refresh the index"
-msgstr "git %s: s'ha fallat en actualitzar l'índex"
-
-#: sequencer.c:705
-msgid "Cannot revert during another revert."
-msgstr "No es pot revertir durant una altra reversió."
+msgid "Unable to create '%s.lock': %s"
+msgstr "No s'ha pogut crear '%s.lock': %s"
-#: sequencer.c:706
-msgid "Cannot revert during a cherry-pick."
-msgstr "No es pot revertir durant un recull de cireres."
+#: merge.c:41
+msgid "failed to read the cache"
+msgstr "s'ha fallat en llegir la memòria cau"
-#: sequencer.c:709
-msgid "Cannot cherry-pick during a revert."
-msgstr "No es pot recollir cireres durant una reversió."
+#: merge.c:96 builtin/am.c:2000 builtin/am.c:2035 builtin/checkout.c:374
+#: builtin/checkout.c:588 builtin/clone.c:731
+msgid "unable to write new index file"
+msgstr "no s'ha pogut escriure un fitxer d'índex nou"
-#: sequencer.c:710
-msgid "Cannot cherry-pick during another cherry-pick."
-msgstr "No es pot recollir cireres durant altre recull de cireres."
+#: merge-recursive.c:209
+msgid "(bad commit)\n"
+msgstr "(comissió dolenta)\n"
-#: sequencer.c:732
+#: merge-recursive.c:231
#, c-format
-msgid "Could not parse line %d."
-msgstr "No s'ha pogut analitzar la línia %d."
+msgid "addinfo_cache failed for path '%s'"
+msgstr "addinfo_cache ha fallat per al camí '%s'"
-#: sequencer.c:737
-msgid "No commits parsed."
-msgstr "No s'ha analitzat cap comissió."
+#: merge-recursive.c:301
+msgid "error building trees"
+msgstr "error en construir arbres"
-#: sequencer.c:749
+#: merge-recursive.c:720
#, c-format
-msgid "Could not open %s"
-msgstr "No s'ha pogut obrir %s"
+msgid "failed to create path '%s'%s"
+msgstr "s'ha fallat en crear el camí '%s'%s"
-#: sequencer.c:753
+#: merge-recursive.c:731
#, c-format
-msgid "Could not read %s."
-msgstr "No s'ha pogut llegir %s."
+msgid "Removing %s to make room for subdirectory\n"
+msgstr "S'està eliminant %s per a fer espai per al subdirectori\n"
-#: sequencer.c:760
-#, c-format
-msgid "Unusable instruction sheet: %s"
-msgstr "Full d'instruccions inusable: %s"
+#: merge-recursive.c:745 merge-recursive.c:764
+msgid ": perhaps a D/F conflict?"
+msgstr ": potser un conflicte D/F?"
-#: sequencer.c:790
+#: merge-recursive.c:754
#, c-format
-msgid "Invalid key: %s"
-msgstr "Clau no vàlida: %s"
+msgid "refusing to lose untracked file at '%s'"
+msgstr "s'està refusant perdre el fitxer no seguit a '%s'"
-#: sequencer.c:793 builtin/pull.c:50 builtin/pull.c:52
+#: merge-recursive.c:796 builtin/cat-file.c:34
#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Valor no vàlid per a %s: %s"
+msgid "cannot read object %s '%s'"
+msgstr "no es pot llegir l'objecte %s '%s'"
-#: sequencer.c:803
+#: merge-recursive.c:798
#, c-format
-msgid "Malformed options sheet: %s"
-msgstr "Full d'opcions mal format: %s"
-
-#: sequencer.c:822
-msgid "a cherry-pick or revert is already in progress"
-msgstr "un recull de cireres o una reversió ja està en curs"
-
-#: sequencer.c:823
-msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
-msgstr "intenteu \"git cherry-pick (--continue | --quit | --abort)\""
+msgid "blob expected for %s '%s'"
+msgstr "blob esperat per a %s '%s'"
-#: sequencer.c:827
+#: merge-recursive.c:822
#, c-format
-msgid "Could not create sequencer directory %s"
-msgstr "No s'ha pogut crear el directori de seqüenciador %s"
-
-#: sequencer.c:862 sequencer.c:998
-msgid "no cherry-pick or revert in progress"
-msgstr "ni hi ha cap recull de cireres ni cap reversió en curs"
-
-#: sequencer.c:864
-msgid "cannot resolve HEAD"
-msgstr "no es pot resoldre HEAD"
-
-#: sequencer.c:866 sequencer.c:900
-msgid "cannot abort from a branch yet to be born"
-msgstr "no es pot avortar des d'una branca que encara ha de nàixer"
+msgid "failed to open '%s': %s"
+msgstr "s'ha fallat en obrir '%s': %s"
-#: sequencer.c:886 builtin/fetch.c:724 builtin/fetch.c:970
+#: merge-recursive.c:833
#, c-format
-msgid "cannot open %s"
-msgstr "no es pot obrir %s"
+msgid "failed to symlink '%s': %s"
+msgstr "s'ha fallat en fer l'enllaç simbòlic '%s': %s"
-#: sequencer.c:888
+#: merge-recursive.c:838
#, c-format
-msgid "cannot read %s: %s"
-msgstr "no es pot llegir %s: %s"
-
-#: sequencer.c:889
-msgid "unexpected end of file"
-msgstr "final de fitxer inesperat"
-
-#: sequencer.c:895
-#, c-format
-msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
-msgstr "el fitxer HEAD emmagatzemat abans del recull de cireres '%s' és malmès"
-
-#: sequencer.c:921
-#, c-format
-msgid "Could not format %s."
-msgstr "No s'ha pogut formatar %s."
-
-#: sequencer.c:1066
-#, c-format
-msgid "%s: can't cherry-pick a %s"
-msgstr "%s: no es pot recollir com a cirera un %s"
-
-#: sequencer.c:1069
-#, c-format
-msgid "%s: bad revision"
-msgstr "%s: revisió dolenta"
+msgid "do not know what to do with %06o %s '%s'"
+msgstr "no se sap què fer amb %06o %s '%s'"
-#: sequencer.c:1102
-msgid "Can't revert as initial commit"
-msgstr "No es pot revertir com a comissió inicial"
+#: merge-recursive.c:978
+msgid "Failed to execute internal merge"
+msgstr "S'ha fallat en executar la fusió interna"
-#: setup.c:160
+#: merge-recursive.c:982
#, c-format
-msgid ""
-"%s: no such path in the working tree.\n"
-"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
-msgstr ""
-"%s: no hi ha tal camí en l'arbre de treball.\n"
-"Useu 'git <ordre> -- <camí>...' per a especificar camins que no existeixin "
-"localment."
+msgid "Unable to add %s to database"
+msgstr "no s'ha pogut afegir %s a la base de dades"
-#: setup.c:173
+#: merge-recursive.c:1081 merge-recursive.c:1095
#, c-format
msgid ""
-"ambiguous argument '%s': unknown revision or path not in the working tree.\n"
-"Use '--' to separate paths from revisions, like this:\n"
-"'git <command> [<revision>...] -- [<file>...]'"
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree."
msgstr ""
-"paràmetre ambigu '%s': revisió no coneguda o camí no en l'arbre de treball.\n"
-"Useu '--' per a separar els camins de les revisions, com això:\n"
-"'git <ordre> [<revisió>...] -- [<fitxer>...]'"
+"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
+"s'ha deixat en l'arbre."
-#: setup.c:223
+#: merge-recursive.c:1087 merge-recursive.c:1100
#, c-format
msgid ""
-"ambiguous argument '%s': both revision and filename\n"
-"Use '--' to separate paths from revisions, like this:\n"
-"'git <command> [<revision>...] -- [<file>...]'"
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree at %s."
msgstr ""
-"paràmetre ambigu '%s': ambdós una revisió i un nom de fitxer\n"
-"Useu '--' per a separar els camins de les revisions, com això:\n"
-"'git <ordre> [<revisió>...] -- [<fitxer>...]'"
-
-#: setup.c:248 builtin/apply.c:3362 builtin/apply.c:3373 builtin/apply.c:3419
-#, c-format
-msgid "failed to read %s"
-msgstr "s'ha fallat en llegir %s"
+"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
+"s'ha deixat en l'arbre a %s."
-#: setup.c:468
-#, c-format
-msgid "Expected git repo version <= %d, found %d"
-msgstr "S'esperava una versió de dipòsit de git <= %d, s'ha trobat %d"
+#: merge-recursive.c:1143
+msgid "rename"
+msgstr "canvi de nom"
-#: setup.c:476
-msgid "unknown repository extensions found:"
-msgstr "s'han trobat extensions de dipòsit desconegudes:"
+#: merge-recursive.c:1143
+msgid "renamed"
+msgstr "canviat de nom"
-#: setup.c:762
+#: merge-recursive.c:1200
#, c-format
-msgid "Not a git repository (or any of the parent directories): %s"
-msgstr "No un dipòsit de git (ni cap dels directoris pares): %s"
-
-#: setup.c:764 setup.c:915 builtin/index-pack.c:1641
-msgid "Cannot come back to cwd"
-msgstr "No es pot tornar al directori de treball actual"
-
-#: setup.c:845
-msgid "Unable to read current working directory"
-msgstr "No s'ha pogut llegir el directori de treball actual"
+msgid "%s is a directory in %s adding as %s instead"
+msgstr "%s és un directori en %s; s'està afegint com a %s en lloc d'això"
-#: setup.c:920
+#: merge-recursive.c:1225
#, c-format
msgid ""
-"Not a git repository (or any parent up to mount point %s)\n"
-"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
+"\"->\"%s\" in \"%s\"%s"
msgstr ""
-"No un dipòsit de git (ni cap pare fins el punt de muntatge %s)\n"
-"S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM "
-"no està establert)."
+"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom \"%s\"->\"%s\" en la "
+"branca \"%s\" canvi de nom \"%s\"->\"%s\" en \"%s\"%s"
-#: setup.c:927
-#, c-format
-msgid "Cannot change to '%s/..'"
-msgstr "No es pot canviar a '%s/..'"
+#: merge-recursive.c:1230
+msgid " (left unresolved)"
+msgstr " (deixat sense resolució)"
-#: setup.c:989
+#: merge-recursive.c:1292
#, c-format
-msgid ""
-"Problem with core.sharedRepository filemode value (0%.3o).\n"
-"The owner of files must always have read and write permissions."
+msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
msgstr ""
-"Problema amb el valor de mode de fitxer core.sharedRepository (0%.3o).\n"
-"El propietari dels fitxers sempre ha de tenir permissions de lectura i "
-"escriptura."
-
-#: sha1_file.c:1046
-msgid "offset before end of packfile (broken .idx?)"
-msgstr "desplaçament abans de la fi del fitxer de paquet (.idx trencat?)"
+"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom %s->%s en %s. Canvi de "
+"nom %s->%s en %s"
-#: sha1_file.c:2434
+#: merge-recursive.c:1325
#, c-format
-msgid "offset before start of pack index for %s (corrupt index?)"
-msgstr ""
-"desplaçament abans d'inici d'índex de paquet per a %s (índex corromput?)"
+msgid "Renaming %s to %s and %s to %s instead"
+msgstr "S'està canviant el nom de %s a %s i %s a %s en lloc d'això"
-#: sha1_file.c:2438
+#: merge-recursive.c:1531
#, c-format
-msgid "offset beyond end of pack index for %s (truncated index?)"
-msgstr ""
-"desplaçament més enllà de la fi d'índex de paquet per a %s (índex truncat?)"
-
-#: sha1_name.c:462
-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\""
+msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
msgstr ""
-"Git normalment mai crea una referència que acabi amb 40 caràcters\n"
-"hexadecimals perquè s'ignorarà quan només especifiqueu 40 caràcters\n"
-"hexadecimals. Aquestes referències es poden crear per error. Per\n"
-"exemple,\n"
-"\n"
-" git checkout -b $br $(git rev-parse ...)\n"
-"\n"
-"on \"$br\" és d'alguna manera buit i una referència de 40 caràcters\n"
-"hexadecimals. Si us plau, examineu aquestes referències i potser\n"
-"suprimiu-les. Desactiveu aquest missatge executant\n"
-"\"git config advice.objectNameWarning false\""
+"CONFLICTE (canvi de nom/afegiment): Canvi de nom %s->%s en %s. %s afegit en "
+"%s"
-#: submodule.c:64 submodule.c:98
-msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
-msgstr ""
-"No es pot canviar un .gitmodules no fusionat, primer resoldreu els "
-"conflictes de fusió"
+#: merge-recursive.c:1546
+#, c-format
+msgid "Adding merged %s"
+msgstr "S'està afegint %s fusionat"
-#: submodule.c:68 submodule.c:102
+#: merge-recursive.c:1553 merge-recursive.c:1766
#, c-format
-msgid "Could not find section in .gitmodules where path=%s"
-msgstr "No s'ha pogut trobar la secció en .gitmodules on path=%s"
+msgid "Adding as %s instead"
+msgstr "S'està afegint com a %s en lloc d'això"
-#: submodule.c:76
+#: merge-recursive.c:1610
#, c-format
-msgid "Could not update .gitmodules entry %s"
-msgstr "No s'ha pogut actualitzar l'entrada de .gitmodules %s"
+msgid "cannot read object %s"
+msgstr "no es pot llegir l'objecte %s"
-#: submodule.c:109
+#: merge-recursive.c:1613
#, c-format
-msgid "Could not remove .gitmodules entry for %s"
-msgstr "No s'ha pogut eliminar l'entrada de .gitmodules per a %s"
+msgid "object %s is not a blob"
+msgstr "l'objecte %s no és un blob"
-#: submodule.c:120
-msgid "staging updated .gitmodules failed"
-msgstr "L'allistament del .gitmodules actualitzat ha fallat"
+#: merge-recursive.c:1666
+msgid "modify"
+msgstr "modificació"
-#: submodule.c:177
-msgid "negative values not allowed for submodule.fetchJobs"
-msgstr "no es permeten els valors negatius a submodule.fetchJobs"
+#: merge-recursive.c:1666
+msgid "modified"
+msgstr "modificat"
-#: submodule-config.c:358
-#, c-format
-msgid "invalid value for %s"
-msgstr "valor no vàlid per a %s"
+#: merge-recursive.c:1676
+msgid "content"
+msgstr "contingut"
-#: trailer.c:237
-#, c-format
-msgid "running trailer command '%s' failed"
-msgstr "l'execució de l'ordre de remolc '%s' ha fallat"
+#: merge-recursive.c:1683
+msgid "add/add"
+msgstr "afegiment/afegiment"
-#: trailer.c:492 trailer.c:496 trailer.c:500 trailer.c:554 trailer.c:558
-#: trailer.c:562
+#: merge-recursive.c:1718
#, c-format
-msgid "unknown value '%s' for key '%s'"
-msgstr "valor desconegut '%s' per a la clau '%s'"
+msgid "Skipped %s (merged same as existing)"
+msgstr "S'ha saltat %s (el fusionat és igual a l'existent)"
-#: trailer.c:544 trailer.c:549 builtin/remote.c:289
+#: merge-recursive.c:1732
#, c-format
-msgid "more than one %s"
-msgstr "més d'un %s"
+msgid "Auto-merging %s"
+msgstr "S'està autofusionant %s"
+
+#: merge-recursive.c:1736 git-submodule.sh:924
+msgid "submodule"
+msgstr "submòdul"
-#: trailer.c:582
+#: merge-recursive.c:1737
#, c-format
-msgid "empty trailer token in trailer '%.*s'"
-msgstr "fitxa de remolc buida en el remolc '%.*s'"
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
-#: trailer.c:702
+#: merge-recursive.c:1831
#, c-format
-msgid "could not read input file '%s'"
-msgstr "no s'ha pogut llegir el fitxer d'entrada '%s'"
+msgid "Removing %s"
+msgstr "S'està eliminant %s"
-#: trailer.c:705
-msgid "could not read from stdin"
-msgstr "No s'ha pogut llegir des d'stdin"
+#: merge-recursive.c:1857
+msgid "file/directory"
+msgstr "fitxer/directori"
-#: trailer.c:857 builtin/am.c:42
-#, c-format
-msgid "could not stat %s"
-msgstr "no s'ha pogut fer stat a %s"
+#: merge-recursive.c:1863
+msgid "directory/file"
+msgstr "directori/fitxer"
-#: trailer.c:859
+#: merge-recursive.c:1868
#, c-format
-msgid "file %s is not a regular file"
-msgstr "el fitxer %s no és un fitxer regular"
+msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
+msgstr ""
+"CONFLICTE (%s): Hi ha un directori amb nom %s en %s. S'està afegint %s com a "
+"%s"
-#: trailer.c:861
+#: merge-recursive.c:1877
#, c-format
-msgid "file %s is not writable by user"
-msgstr "el fitxer %s no és gravable per l'usuari"
+msgid "Adding %s"
+msgstr "S'està afegint %s"
-#: trailer.c:873
-msgid "could not open temporary file"
-msgstr "no s'ha pogut obrir el fitxer temporal"
+#: merge-recursive.c:1914
+msgid "Already up-to-date!"
+msgstr "Ja està al dia!"
-#: trailer.c:912
+#: merge-recursive.c:1923
#, c-format
-msgid "could not rename temporary file to %s"
-msgstr "no s'ha pogut canviar el nom del fitxer temporal a %s"
+msgid "merging of trees %s and %s failed"
+msgstr "la fusió dels arbres %s i %s ha fallat"
-#: transport.c:62
+#: merge-recursive.c:2006
+msgid "Merging:"
+msgstr "Fusionant:"
+
+#: merge-recursive.c:2019
#, c-format
-msgid "Would set upstream of '%s' to '%s' of '%s'\n"
-msgstr "Canviaria la font de '%s' a '%s' de '%s'\n"
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "s'ha trobat %u avantpassat en comú:"
+msgstr[1] "s'han trobat %u avantpassats en comú:"
-#: transport.c:151
+#: merge-recursive.c:2058
+msgid "merge returned no commit"
+msgstr "la fusió no ha retornat cap comissió"
+
+#: merge-recursive.c:2121
#, c-format
-msgid "transport: invalid depth option '%s'"
-msgstr "transport: opció de profunditat no vàlida '%s'"
+msgid "Could not parse object '%s'"
+msgstr "No s'ha pogut analitzar l'objecte '%s'"
+
+#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788
+msgid "Unable to write index."
+msgstr "No s'ha pogut escriure l'índex."
-#: transport.c:771
+#: notes-merge.c:273
#, c-format
msgid ""
-"The following submodule paths contain changes that can\n"
-"not be found on any remote:\n"
+"You have not concluded your previous notes merge (%s exists).\n"
+"Please, use 'git notes merge --commit' or 'git notes merge --abort' to "
+"commit/abort the previous merge before you start a new notes merge."
msgstr ""
-"Els camins de submòdul següents contenen canvis que no\n"
-"es poden trobar en cap remot:\n"
+"No heu conclòs la vostra fusió de notes prèvia (%s existeix).\n"
+"Si us plau, useu 'git notes merge --commit' o 'git notes merge --abort' per "
+"a cometre/avortar la fusió prèvia abans de començar una fusió de notes nova."
-#: transport.c:775
+#: notes-merge.c:280
#, c-format
-msgid ""
-"\n"
-"Please try\n"
-"\n"
-"\tgit push --recurse-submodules=on-demand\n"
-"\n"
-"or cd to the path and use\n"
-"\n"
-"\tgit push\n"
-"\n"
-"to push them to a remote.\n"
-"\n"
-msgstr ""
-"\n"
-"Si us plau, intenteu\n"
-"\n"
-"\tgit push --recurse-submodules=on-demand\n"
-"\n"
-"o canviar de directori al camí i useu\n"
-"\n"
-"\tgit push\n"
-"\n"
-"per a pujar-los a un remot.\n"
+msgid "You have not concluded your notes merge (%s exists)."
+msgstr "No heu conclòs la vostra fusió de notes (%s existeix)."
-#: transport.c:783
-msgid "Aborting."
-msgstr "S'està avortant."
+#: notes-utils.c:41
+msgid "Cannot commit uninitialized/unreferenced notes tree"
+msgstr "No es pot cometre un arbre de notes no inicialitzat / no referenciat"
-#: transport-helper.c:1041
+#: notes-utils.c:100
#, c-format
-msgid "Could not read ref %s"
-msgstr "No s'ha pogut llegir la referència %s"
+msgid "Bad notes.rewriteMode value: '%s'"
+msgstr "Valor de notes.rewriteMode dolent: '%s'"
-#: unpack-trees.c:64
+#: notes-utils.c:110
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%sPlease commit your changes or stash them before you switch branches."
-msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"agafar:\n"
-"%%sSi us plau, cometeu els vostres canvis o emmagatzemeu-los abans de "
-"canviar de branca."
+msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
+msgstr "S'està refusant reescriure les notes en %s (fora de refs/notes/)"
-#: unpack-trees.c:66
+#. TRANSLATORS: The first %s is the name of the
+#. environment variable, the second %s is its value
+#: notes-utils.c:137
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%s"
-msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"agafar:\n"
-"%%s"
+msgid "Bad %s value: '%s'"
+msgstr "Valor dolent de %s: '%s'"
-#: unpack-trees.c:69
+#: object.c:242
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%sPlease commit your changes or stash them before you merge."
-msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar:\n"
-"%%sSi us plau, cometeu els vostres canvis o emmagatzemeu-los abans de "
-"fusionar."
+msgid "unable to parse object: %s"
+msgstr "no s'ha pogut analitzar l'objecte: %s"
-#: unpack-trees.c:71
+#: parse-options.c:572
+msgid "..."
+msgstr "..."
+
+#: parse-options.c:590
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%s"
-msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"fusionar:\n"
-"%%s"
+msgid "usage: %s"
+msgstr "ús: %s"
-#: unpack-trees.c:74
+#. TRANSLATORS: the colon here should align with the
+#. one in "usage: %s" translation
+#: parse-options.c:594
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by %s:\n"
-"%%sPlease commit your changes or stash them before you %s."
-msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per %s:\n"
-"%%sSi us plau, cometeu els vostres canvis o emmagatzemeu-los abans de %s."
+msgid " or: %s"
+msgstr " o: %s"
-#: unpack-trees.c:76
+#: parse-options.c:597
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by %s:\n"
-"%%s"
-msgstr ""
-"Els vostres canvis locals als fitxers següents se sobreescriurien per %s:\n"
-"%%s"
+msgid " %s"
+msgstr " %s"
-#: unpack-trees.c:81
+#: parse-options.c:631
+msgid "-NUM"
+msgstr "-NUM"
+
+#: parse-options-cb.c:108
#, c-format
-msgid ""
-"Updating the following directories would lose untracked files in it:\n"
-"%s"
-msgstr ""
-"Actualitzar els directoris següents perdria fitxers no seguits en el:\n"
-"%s"
+msgid "malformed object name '%s'"
+msgstr "nom d'objecte mal format '%s'"
-#: unpack-trees.c:85
+#: path.c:826
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by checkout:\n"
-"%%sPlease move or remove them before you switch branches."
+msgid "Could not make %s writable by group"
+msgstr "No s'ha pogut fer %s escrivible pel grup"
+
+#: pathspec.c:133
+msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"agafar:\n"
-"%%sSi us plau, moveu-los o elimineu-los abans de canviar de branca."
+"els ajusts d'especificació de camí 'glob' i 'noglob' globals són "
+"incompatibles"
-#: unpack-trees.c:87
-#, c-format
+#: pathspec.c:143
msgid ""
-"The following untracked working tree files would be removed by checkout:\n"
-"%%s"
+"global 'literal' pathspec setting is incompatible with all other global "
+"pathspec settings"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"agafar:\n"
-"%%s"
+"l'ajust d'especificació de camí 'literal' global és incompatible amb tots "
+"els altres ajusts d'especificació de camí globals"
-#: unpack-trees.c:90
+#: pathspec.c:177
+msgid "invalid parameter for pathspec magic 'prefix'"
+msgstr "paràmetre no vàlid per a la màgia d'especificació de camí 'prefix'"
+
+#: pathspec.c:183
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by merge:\n"
-"%%sPlease move or remove them before you merge."
-msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"fusionar:\n"
-"%%sSi us plau, moveu-los o elimineu-los abans de fusionar."
+msgid "Invalid pathspec magic '%.*s' in '%s'"
+msgstr "Màgia d'especificació de camí no vàlida '%.*s' en '%s'"
-#: unpack-trees.c:92
+#: pathspec.c:187
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by merge:\n"
-"%%s"
-msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
-"fusionar:\n"
-"%%s"
+msgid "Missing ')' at the end of pathspec magic in '%s'"
+msgstr "')' mancant al final de la màgia d'especificació de camí en '%s'"
-#: unpack-trees.c:95
+#: pathspec.c:205
+#, c-format
+msgid "Unimplemented pathspec magic '%c' in '%s'"
+msgstr "Màgia d'especificació de camí no implementada '%c' en '%s'"
+
+#: pathspec.c:230
+#, c-format
+msgid "%s: 'literal' and 'glob' are incompatible"
+msgstr "%s: 'literal' i 'glob' són incompatibles"
+
+#: pathspec.c:241
+#, c-format
+msgid "%s: '%s' is outside repository"
+msgstr "%s: '%s' és fora del dipòsit"
+
+#: pathspec.c:291
#, c-format
+msgid "Pathspec '%s' is in submodule '%.*s'"
+msgstr "L'especificació '%s' és en el submòdul '%.*s'"
+
+#: pathspec.c:353
+#, c-format
+msgid "%s: pathspec magic not supported by this command: %s"
+msgstr ""
+"%s: aquesta ordre no és compatible amb la màgia d'especificació de camí: %s"
+
+#: pathspec.c:408
msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%sPlease move or remove them before you %s."
+"empty strings as pathspecs will be made invalid in upcoming releases. please "
+"use . instead if you meant to match all paths"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per %s:\n"
-"%%sSi us plau, moveu-los o elimineu-los abans de %s."
+"es faran no vàlides les cadenes buides com especificacions de camí en "
+"versions futures. si us plau, useu . en lloc d'això si volíeu coincidir amb "
+"tots els camins"
-#: unpack-trees.c:97
+#: pathspec.c:440
#, c-format
+msgid "pathspec '%s' is beyond a symbolic link"
+msgstr "l'especificació de camí '%s' és més enllà d'un enllaç simbòlic"
+
+#: pathspec.c:449
msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%s"
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per %s:\n"
-"%%s"
+"No hi ha res a excloure per patrons :(exclusió).\n"
+"Potser heu oblidat afegir o ':/' o '.' ?"
-#: unpack-trees.c:102
+#: pretty.c:971
+msgid "unable to parse --pretty format"
+msgstr "no s'ha pogut analitzar el format --pretty"
+
+#: read-cache.c:1315
#, c-format
msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%sPlease move or remove them before you switch branches."
+"index.version set, but the value is invalid.\n"
+"Using version %i"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"agafar:\n"
-"%%sSi us plau, moveu-los o elimineu-los abans de canviar de branca."
+"index.version està establerta, però el valor no és vàlid.\n"
+"S'està usant la versió %i"
-#: unpack-trees.c:104
+#: read-cache.c:1325
#, c-format
msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%s"
+"GIT_INDEX_VERSION set, but the value is invalid.\n"
+"Using version %i"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"agafar:\n"
-"%%s"
+"GIT_INDEX_VERSION està establerta, però el valor no és vàlid.\n"
+"S'està usant la versió %i"
-#: unpack-trees.c:107
+#: refs.c:576 builtin/merge.c:840
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%sPlease move or remove them before you merge."
-msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"fusionar:\n"
-"%%sSi us plau, moveu-los o elimineu-los abans de fusionar."
+msgid "Could not open '%s' for writing"
+msgstr "No s'ha pogut obrir '%s' per a escriptura"
-#: unpack-trees.c:109
+#: refs/files-backend.c:2481
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%s"
-msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"fusionar:\n"
-"%%s"
+msgid "could not delete reference %s: %s"
+msgstr "no s'ha pogut suprimir la referència %s: %s"
-#: unpack-trees.c:112
+#: refs/files-backend.c:2484
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%sPlease move or remove them before you %s."
+msgid "could not delete references: %s"
+msgstr "no s'ha pogut suprimir les referències: %s"
+
+#: refs/files-backend.c:2493
+#, c-format
+msgid "could not remove reference %s"
+msgstr "no s'ha pogut eliminar la referència %s"
+
+#: ref-filter.c:55
+#, c-format
+msgid "expected format: %%(color:<color>)"
+msgstr "format esperat: %%(color:<color>)"
+
+#: ref-filter.c:57
+#, c-format
+msgid "unrecognized color: %%(color:%s)"
+msgstr "color no reconegut: %%(color:%s)"
+
+#: ref-filter.c:71
+#, c-format
+msgid "unrecognized format: %%(%s)"
+msgstr "format no reconegut: %%(%s)"
+
+#: ref-filter.c:77
+#, c-format
+msgid "%%(body) does not take arguments"
+msgstr "%%(body) no accepta paràmetres"
+
+#: ref-filter.c:84
+#, c-format
+msgid "%%(subject) does not take arguments"
+msgstr "%%(subject) no accepta paràmetres"
+
+#: ref-filter.c:101
+#, c-format
+msgid "positive value expected contents:lines=%s"
+msgstr "valor positiu esperat contents:lines=%s"
+
+#: ref-filter.c:103
+#, c-format
+msgid "unrecognized %%(contents) argument: %s"
+msgstr "paràmetre %%(contents) no reconegut: %s"
+
+#: ref-filter.c:113
+#, c-format
+msgid "unrecognized %%(objectname) argument: %s"
+msgstr "paràmetre %%(objectname) no reconegut: %s"
+
+#: ref-filter.c:135
+#, c-format
+msgid "expected format: %%(align:<width>,<position>)"
+msgstr "format esperat: %%(align:<amplada>,<posició>)"
+
+#: ref-filter.c:147
+#, c-format
+msgid "unrecognized position:%s"
+msgstr "posició no reconeguda:%s"
+
+#: ref-filter.c:151
+#, c-format
+msgid "unrecognized width:%s"
+msgstr "amplada no reconeguda:%s"
+
+#: ref-filter.c:157
+#, c-format
+msgid "unrecognized %%(align) argument: %s"
+msgstr "paràmetre %%(align) no reconegut: %s"
+
+#: ref-filter.c:161
+#, c-format
+msgid "positive width expected with the %%(align) atom"
+msgstr "amplada positiva esperada amb l'àtom %%(align)"
+
+#: ref-filter.c:244
+#, c-format
+msgid "malformed field name: %.*s"
+msgstr "nom de camp mal format: %.*s"
+
+#: ref-filter.c:270
+#, c-format
+msgid "unknown field name: %.*s"
+msgstr "nom de camp desconegut: %.*s"
+
+#: ref-filter.c:372
+#, c-format
+msgid "format: %%(end) atom used without corresponding atom"
+msgstr "format: s'ha usat l'àtom %%(end) sense l'àtom corresponent"
+
+#: ref-filter.c:424
+#, c-format
+msgid "malformed format string %s"
+msgstr "cadena de format mal format %s"
+
+#: ref-filter.c:878
+msgid ":strip= requires a positive integer argument"
+msgstr ":strip= requereix un paràmetre enter positiu"
+
+#: ref-filter.c:883
+#, c-format
+msgid "ref '%s' does not have %ld components to :strip"
+msgstr "la referència '%s' no té %ld components per a :strip"
+
+#: ref-filter.c:1046
+#, c-format
+msgid "unknown %.*s format %s"
+msgstr "format de %.*s desconegut %s"
+
+#: ref-filter.c:1066 ref-filter.c:1097
+#, c-format
+msgid "missing object %s for %s"
+msgstr "manca l'objecte %s per a %s"
+
+#: ref-filter.c:1069 ref-filter.c:1100
+#, c-format
+msgid "parse_object_buffer failed on %s for %s"
+msgstr "parse_object_buffer ha fallat en %s per a %s"
+
+#: ref-filter.c:1311
+#, c-format
+msgid "malformed object at '%s'"
+msgstr "objecte mal format a '%s'"
+
+#: ref-filter.c:1373
+#, c-format
+msgid "ignoring ref with broken name %s"
+msgstr "s'està ignorant la referència amb nom trencat %s"
+
+#: ref-filter.c:1378
+#, c-format
+msgid "ignoring broken ref %s"
+msgstr "s'està ignorant la referència trencada %s"
+
+#: ref-filter.c:1633
+#, c-format
+msgid "format: %%(end) atom missing"
+msgstr "format: manca l'àtom %%(end)"
+
+#: ref-filter.c:1687
+#, c-format
+msgid "malformed object name %s"
+msgstr "nom d'objecte %s mal format"
+
+#: remote.c:746
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "No es pot obtenir ambdós %s i %s a %s"
+
+#: remote.c:750
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s generalment segueix %s, no %s"
+
+#: remote.c:754
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "%s segueix ambdós %s i %s"
+
+#: remote.c:762
+msgid "Internal error"
+msgstr "Error intern"
+
+#: remote.c:1677 remote.c:1720
+msgid "HEAD does not point to a branch"
+msgstr "HEAD no assenyala cap branca"
+
+#: remote.c:1686
+#, c-format
+msgid "no such branch: '%s'"
+msgstr "no hi ha tal branca: '%s'"
+
+#: remote.c:1689
+#, c-format
+msgid "no upstream configured for branch '%s'"
+msgstr "cap font configurada per a la branca '%s'"
+
+#: remote.c:1695
+#, c-format
+msgid "upstream branch '%s' not stored as a remote-tracking branch"
+msgstr "la branca font '%s' no s'emmagatzema com a branca amb seguiment remot"
+
+#: remote.c:1710
+#, c-format
+msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"%s:\n"
-"%%sSi us plau, moveu-los o elimineu-los abans de %s."
+"el destí de pujada '%s' en el remot '%s' no té cap branca seguidora local"
-#: unpack-trees.c:114
+#: remote.c:1725
+#, c-format
+msgid "branch '%s' has no remote for pushing"
+msgstr "la branca '%s' no té cap remot al qual pujar"
+
+#: remote.c:1736
+#, c-format
+msgid "push refspecs for '%s' do not include '%s'"
+msgstr "les especificacions de referència de '%s' no inclouen '%s'"
+
+#: remote.c:1749
+msgid "push has no destination (push.default is 'nothing')"
+msgstr "push no té destí (push.default és 'nothing')"
+
+#: remote.c:1771
+msgid "cannot resolve 'simple' push to a single destination"
+msgstr "no es pot resoldre una pujada 'simple' a un sol destí"
+
+#: remote.c:2073
+#, c-format
+msgid "Your branch is based on '%s', but the upstream is gone.\n"
+msgstr "La vostra branca està basada en '%s', però la font no hi és.\n"
+
+#: remote.c:2077
+msgid " (use \"git branch --unset-upstream\" to fixup)\n"
+msgstr " (useu \"git branch --unset-upstream\" per a arreglar)\n"
+
+#: remote.c:2080
+#, c-format
+msgid "Your branch is up-to-date with '%s'.\n"
+msgstr "La vostra branca està al dia amb '%s'.\n"
+
+#: remote.c:2084
+#, 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] "La vostra branca està davant de '%s' per %d comissió.\n"
+msgstr[1] "La vostra branca està davant de '%s' per %d comissions.\n"
+
+#: remote.c:2090
+msgid " (use \"git push\" to publish your local commits)\n"
+msgstr " (useu \"git push\" per a publicar les vostres comissions locals)\n"
+
+#: remote.c:2093
+#, 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] ""
+"La vostra branca està darrere de '%s' per %d comissió, i pot avançar-se "
+"ràpidament.\n"
+msgstr[1] ""
+"La vostra branca està darrere de '%s' per %d comissions, i pot avançar-se "
+"ràpidament.\n"
+
+#: remote.c:2101
+msgid " (use \"git pull\" to update your local branch)\n"
+msgstr " (useu \"git pull\" per a actualitzar la vostra branca local)\n"
+
+#: remote.c:2104
#, c-format
msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%s"
-msgstr ""
-"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
-"%s:\n"
-"%%s"
+"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] ""
+"La vostra branca i '%s' s'han divergit,\n"
+"i tenen %d i %d comissió distinta cada una, respectivament.\n"
+msgstr[1] ""
+"La vostra branca i '%s' s'han divergit,\n"
+"i tenen %d i %d comissions distintes cada una, respectivament.\n"
-#: unpack-trees.c:121
+#: remote.c:2114
+msgid " (use \"git pull\" to merge the remote branch into yours)\n"
+msgstr " (useu \"git pull\" per a fusionar la branca remota a la vostra)\n"
+
+#: revision.c:2158
+msgid "your current branch appears to be broken"
+msgstr "la vostra branca actual sembla trencada"
+
+#: revision.c:2161
#, c-format
-msgid "Entry '%s' overlaps with '%s'. Cannot bind."
-msgstr "L'entrada '%s' encavalca amb '%s'. No es pot vincular."
+msgid "your current branch '%s' does not have any commits yet"
+msgstr "la vostra branca actual '%s' encara no té cap comissió"
-#: unpack-trees.c:124
+#: revision.c:2355
+msgid "--first-parent is incompatible with --bisect"
+msgstr "--first-parent és incompatible amb --bisect"
+
+#: run-command.c:106
+msgid "open /dev/null failed"
+msgstr "s'ha fallat en obrir /dev/null"
+
+#: run-command.c:108
#, c-format
+msgid "dup2(%d,%d) failed"
+msgstr "dup2(%d,%d) ha fallat"
+
+#: send-pack.c:297
+msgid "failed to sign the push certificate"
+msgstr "s'ha fallat en signar el certificat de pujada"
+
+#: send-pack.c:410
+msgid "the receiving end does not support --signed push"
+msgstr "el destí receptor no admet pujar --signed"
+
+#: send-pack.c:412
msgid ""
-"Cannot update sparse checkout: the following entries are not up-to-date:\n"
-"%s"
+"not sending a push certificate since the receiving end does not support --"
+"signed push"
msgstr ""
-"No es pot actualitzar l'agafament parcial: les entrades següents no estan al "
-"dia:\n"
-"%s"
+"no s'està enviant una certificació de pujada perquè el destí receptor no "
+"admet pujar --signed"
-#: unpack-trees.c:126
-#, c-format
+#: send-pack.c:424
+msgid "the receiving end does not support --atomic push"
+msgstr "el destí receptor no admet pujar --atomic"
+
+#: send-pack.c:429
+msgid "the receiving end does not support push options"
+msgstr "el destí receptor no admet opcions de pujada"
+
+#: sequencer.c:171
+msgid "revert"
+msgstr "revertir"
+
+#: sequencer.c:171
+msgid "cherry-pick"
+msgstr "recollir cireres"
+
+#: sequencer.c:228
msgid ""
-"The following Working tree files would be overwritten by sparse checkout "
-"update:\n"
-"%s"
+"after resolving the conflicts, mark the corrected paths\n"
+"with 'git add <paths>' or 'git rm <paths>'"
msgstr ""
-"Els fitxers següents en l'arbre de treball se sobreescriurien per "
-"actualitzar l'agafament parcial:\n"
-"%s"
+"després de resoldre els conflictes, marqueu els camins\n"
+"corregits amb 'git add <camins>' o 'git rm <camins>'"
-#: unpack-trees.c:128
-#, c-format
+#: sequencer.c:231
msgid ""
-"The following Working tree files would be removed by sparse checkout "
-"update:\n"
-"%s"
+"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 ""
-"Els fitxers següents en l'arbre de treball s'eliminarien per actualitzar "
-"l'agafament parcial:\n"
-"%s"
+"després de resoldre els conflictes, marqueu els camins\n"
+"corregits amb 'git add <camins>' o 'git rm <camins>'\n"
+"i cometeu el resultat amb 'git commit'"
-#: unpack-trees.c:205
+#: sequencer.c:244 sequencer.c:1209
#, c-format
-msgid "Aborting\n"
-msgstr "S'està avortant\n"
+msgid "could not lock '%s'"
+msgstr "no s'ha pogut bloquejar '%s'"
-#: unpack-trees.c:237
-msgid "Checking out files"
-msgstr "S'està agafant fitxers"
+#: sequencer.c:247 sequencer.c:1125 sequencer.c:1214
+#, c-format
+msgid "could not write to '%s'"
+msgstr "no s'ha pogut escriure a '%s'"
-#: urlmatch.c:120
-msgid "invalid URL scheme name or missing '://' suffix"
-msgstr "l'esquema d'URL no és vàlid o li manca el sufix '://'"
+#: sequencer.c:251
+#, c-format
+msgid "could not write eol to '%s'"
+msgstr "no s'ha pogut escriure el terminador de línia a '%s'"
-#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
+#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
#, c-format
-msgid "invalid %XX escape sequence"
-msgstr "seqüència d'escapament %XX no vàlida"
+msgid "failed to finalize '%s'."
+msgstr "s'ha fallat en finalitzar '%s'."
-#: urlmatch.c:172
-msgid "missing host and scheme is not 'file:'"
-msgstr "manca la màquina i l'esquema no és 'file:'"
+#: sequencer.c:279 builtin/am.c:259 builtin/commit.c:749 builtin/merge.c:1032
+#, c-format
+msgid "could not read '%s'"
+msgstr "no s'ha pogut llegir '%s'"
-#: urlmatch.c:189
-msgid "a 'file:' URL may not have a port number"
-msgstr "un URL 'file:' no pot tenir número de port"
+#: sequencer.c:305
+#, c-format
+msgid "your local changes would be overwritten by %s."
+msgstr "els vostres canvis locals se sobreescriurien per %s."
-#: urlmatch.c:199
-msgid "invalid characters in host name"
-msgstr "hi ha caràcters no vàlids en el nom de màquina"
+#: sequencer.c:309
+msgid "commit your changes or stash them to proceed."
+msgstr "cometeu els vostres canvis o emmagatzemeu-los per a procedir."
-#: urlmatch.c:244 urlmatch.c:255
-msgid "invalid port number"
-msgstr "número de port no vàlid"
+#: sequencer.c:324
+#, c-format
+msgid "%s: fast-forward"
+msgstr "%s: avanç ràpid"
+
+#. TRANSLATORS: %s will be "revert" or "cherry-pick"
+#: sequencer.c:399
+#, c-format
+msgid "%s: Unable to write new index file"
+msgstr "%s: No s'ha pogut escriure un fitxer d'índex nou"
-#: urlmatch.c:322
-msgid "invalid '..' path segment"
-msgstr "segment de camí '..' no vàlid"
+#: sequencer.c:418
+msgid "could not resolve HEAD commit\n"
+msgstr "no s'ha pogut resoldre la comissió HEAD\n"
-#: worktree.c:282
-#, c-format
-msgid "failed to read '%s'"
-msgstr "s'ha fallat en llegir '%s'"
+#: sequencer.c:438
+msgid "unable to update cache tree\n"
+msgstr "no s'ha pogut actualitzar l'arbre cau\n"
-#: wrapper.c:222 wrapper.c:392
+#: sequencer.c:483
#, c-format
-msgid "could not open '%s' for reading and writing"
-msgstr "no s'ha pogut obrir '%s' per a lectura i escriptura"
+msgid ""
+"you have staged changes in your working tree\n"
+"If these changes are meant to be squashed into the previous commit, run:\n"
+"\n"
+" git commit --amend %s\n"
+"\n"
+"If they are meant to go into a new commit, run:\n"
+"\n"
+" git commit %s\n"
+"\n"
+"In both cases, once you're done, continue with:\n"
+"\n"
+" git rebase --continue\n"
+msgstr ""
+"teniu canvis allistats en el vostre arbre de treball\n"
+"Si aquests canvis són per a aixafar-se a la comissió prèvia, executeu:\n"
+"\n"
+" git commit --amend %s\n"
+"\n"
+"Si són per a formar una comissió nova, executeu:\n"
+"\n"
+" git commit %s\n"
+"\n"
+"En ambdós cassos, quan hàgiu terminat, continueu amb:\n"
+"\n"
+" git rebase --continue\n"
-#: wrapper.c:224 wrapper.c:394 builtin/am.c:778
+#: sequencer.c:567
#, c-format
-msgid "could not open '%s' for writing"
-msgstr "no s'ha pogut obrir '%s' per a escriptura"
+msgid "could not parse commit %s\n"
+msgstr "no s'ha pogut analitzar la comissió %s\n"
-#: wrapper.c:226 wrapper.c:396 builtin/am.c:324 builtin/am.c:771
-#: builtin/am.c:859 builtin/commit.c:1712 builtin/merge.c:1029
-#: builtin/pull.c:407
+#: sequencer.c:572
#, c-format
-msgid "could not open '%s' for reading"
-msgstr "no s'ha pogut obrir '%s' per a lectura"
+msgid "could not parse parent commit %s\n"
+msgstr "no s'ha pogut analitzar la comissió mare %s\n"
-#: wrapper.c:605 wrapper.c:626
+#: sequencer.c:656
+msgid "your index file is unmerged."
+msgstr "el vostre fitxer d'índex està sense fusionar."
+
+#: sequencer.c:675
#, c-format
-msgid "unable to access '%s'"
-msgstr "no s'ha pogut accedir a '%s'"
+msgid "commit %s is a merge but no -m option was given."
+msgstr "la comissió %s és una fusió però no s'ha donat cap opció -m."
-#: wrapper.c:634
-msgid "unable to get current working directory"
-msgstr "no s'ha pogut obtenir el directori de treball actual"
+#: sequencer.c:683
+#, c-format
+msgid "commit %s does not have parent %d"
+msgstr "la comissió %s no té mare %d"
-#: wrapper.c:658
+#: sequencer.c:687
#, c-format
-msgid "could not write to %s"
-msgstr "no s'ha pogut escriure a %s"
+msgid "mainline was specified but commit %s is not a merge."
+msgstr ""
+"s'ha especificat la línia principal però la comissió %s no és una fusió."
-#: wrapper.c:660
+#. TRANSLATORS: The first %s will be a "todo" command like
+#. "revert" or "pick", the second %s a SHA1.
+#: sequencer.c:700
#, c-format
-msgid "could not close %s"
-msgstr "no s'ha pogut tancar %s"
+msgid "%s: cannot parse parent commit %s"
+msgstr "%s: no es pot analitzar la comissió mare %s"
-#: wt-status.c:150
-msgid "Unmerged paths:"
-msgstr "Camins sense fusionar:"
+#: sequencer.c:705
+#, c-format
+msgid "cannot get commit message for %s"
+msgstr "no es pot obtenir el missatge de comissió de %s"
-#: wt-status.c:177 wt-status.c:204
+#: sequencer.c:797
#, c-format
-msgid " (use \"git reset %s <file>...\" to unstage)"
-msgstr " (useu \"git reset %s <fitxer>...\" per a desallistar)"
+msgid "could not revert %s... %s"
+msgstr "no s'ha pogut revertir %s... %s"
-#: wt-status.c:179 wt-status.c:206
-msgid " (use \"git rm --cached <file>...\" to unstage)"
-msgstr " (useu \"git rm --cached <fitxer>...\" per a desallistar)"
+#: sequencer.c:798
+#, c-format
+msgid "could not apply %s... %s"
+msgstr "no s'ha pogut aplicar %s... %s"
-#: wt-status.c:183
-msgid " (use \"git add <file>...\" to mark resolution)"
-msgstr " (useu \"git add <fitxer>...\" per a senyalar resolució)"
+#: sequencer.c:833
+msgid "empty commit set passed"
+msgstr "conjunt de comissions buit passat"
-#: wt-status.c:185 wt-status.c:189
-msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
-msgstr ""
-" (useu \"git add/rm <fitxer>...\" segons sigui apropiat per a senyalar "
-"resolució)"
+#: sequencer.c:843
+#, c-format
+msgid "git %s: failed to read the index"
+msgstr "git %s: s'ha fallat en llegir l'índex"
-#: wt-status.c:187
-msgid " (use \"git rm <file>...\" to mark resolution)"
-msgstr " (useu \"git rm <fitxer>...\" per a senyalar resolució)"
+#: sequencer.c:850
+#, c-format
+msgid "git %s: failed to refresh the index"
+msgstr "git %s: s'ha fallat en actualitzar l'índex"
-#: wt-status.c:198 wt-status.c:882
-msgid "Changes to be committed:"
-msgstr "Canvis a cometre:"
+#: sequencer.c:944
+#, c-format
+msgid "invalid line %d: %.*s"
+msgstr "línia no vàlida %d: %.*s"
-#: wt-status.c:216 wt-status.c:891
-msgid "Changes not staged for commit:"
-msgstr "Canvis no allistats per a cometre:"
+#: sequencer.c:950
+msgid "no commits parsed."
+msgstr "no s'ha analitzat cap comissió."
-#: wt-status.c:220
-msgid " (use \"git add <file>...\" to update what will be committed)"
-msgstr " (useu \"git add <fitxer>...\" per a actualitzar què es cometrà)"
+#: sequencer.c:966
+#, c-format
+msgid "could not read '%s'."
+msgstr "no s'ha pogut llegir '%s'."
-#: wt-status.c:222
-msgid " (use \"git add/rm <file>...\" to update what will be committed)"
-msgstr " (useu \"git add/rm <fitxer>...\" per a actualitzar què es cometrà)"
+#: sequencer.c:972
+#, c-format
+msgid "unusable instruction sheet: '%s'"
+msgstr "full d'instruccions inusable: '%s'"
-#: wt-status.c:223
-msgid ""
-" (use \"git checkout -- <file>...\" to discard changes in working directory)"
-msgstr ""
-" (useu \"git checkout -- <fitxer>...\" per a descartar els canvis en el "
-"directori de treball)"
+#: sequencer.c:983
+msgid "cannot cherry-pick during a revert."
+msgstr "no es pot recollir cireres durant una reversió."
-#: wt-status.c:225
-msgid " (commit or discard the untracked or modified content in submodules)"
-msgstr ""
-" (cometeu o descarteu el contingut modificat o no seguit en els submòduls)"
+#: sequencer.c:985
+msgid "cannot revert during a cherry-pick."
+msgstr "no es pot revertir durant un recull de cireres."
-#: wt-status.c:237
+#: sequencer.c:1028
#, c-format
-msgid " (use \"git %s <file>...\" to include in what will be committed)"
-msgstr " (useu \"git %s <fitxer>...\" per a incloure-ho en què es cometrà)"
-
-#: wt-status.c:252
-msgid "both deleted:"
-msgstr "suprimit per ambdós:"
+msgid "invalid key: %s"
+msgstr "clau no vàlida: %s"
-#: wt-status.c:254
-msgid "added by us:"
-msgstr "afegit per nosaltres:"
-
-#: wt-status.c:256
-msgid "deleted by them:"
-msgstr "suprimit per ells:"
+#: sequencer.c:1031
+#, c-format
+msgid "invalid value for %s: %s"
+msgstr "valor no vàlid per a %s: %s"
-#: wt-status.c:258
-msgid "added by them:"
-msgstr "afegit per ells:"
+#: sequencer.c:1063
+#, c-format
+msgid "malformed options sheet: '%s'"
+msgstr "full d'opcions mal format: '%s'"
-#: wt-status.c:260
-msgid "deleted by us:"
-msgstr "suprimit per nosaltres:"
+#: sequencer.c:1101
+msgid "a cherry-pick or revert is already in progress"
+msgstr "un recull de cireres o una reversió ja està en curs"
-#: wt-status.c:262
-msgid "both added:"
-msgstr "afegit per ambdós:"
+#: sequencer.c:1102
+msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
+msgstr "intenteu \"git cherry-pick (--continue | --quit | --abort)\""
-#: wt-status.c:264
-msgid "both modified:"
-msgstr "modificat per ambdós:"
+#: sequencer.c:1106
+#, c-format
+msgid "could not create sequencer directory '%s'"
+msgstr "no s'ha pogut crear el directori de seqüenciador '%s'"
-#: wt-status.c:274
-msgid "new file:"
-msgstr "fitxer nou:"
+#: sequencer.c:1120
+msgid "could not lock HEAD"
+msgstr "no s'ha pogut bloquejar HEAD"
-#: wt-status.c:276
-msgid "copied:"
-msgstr "copiat:"
+#: sequencer.c:1151 sequencer.c:1289
+msgid "no cherry-pick or revert in progress"
+msgstr "ni hi ha cap recull de cireres ni cap reversió en curs"
-#: wt-status.c:278
-msgid "deleted:"
-msgstr "suprimit:"
+#: sequencer.c:1153
+msgid "cannot resolve HEAD"
+msgstr "no es pot resoldre HEAD"
-#: wt-status.c:280
-msgid "modified:"
-msgstr "modificat:"
+#: sequencer.c:1155 sequencer.c:1189
+msgid "cannot abort from a branch yet to be born"
+msgstr "no es pot avortar des d'una branca que encara ha de nàixer"
-#: wt-status.c:282
-msgid "renamed:"
-msgstr "canviat de nom:"
+#: sequencer.c:1175 builtin/grep.c:578
+#, c-format
+msgid "cannot open '%s'"
+msgstr "no es pot obrir '%s'"
-#: wt-status.c:284
-msgid "typechange:"
-msgstr "canviat de tipus:"
+#: sequencer.c:1177
+#, c-format
+msgid "cannot read '%s': %s"
+msgstr "no es pot llegir '%s': %s"
-#: wt-status.c:286
-msgid "unknown:"
-msgstr "desconegut:"
+#: sequencer.c:1178
+msgid "unexpected end of file"
+msgstr "final de fitxer inesperat"
-#: wt-status.c:288
-msgid "unmerged:"
-msgstr "sense fusionar:"
+#: sequencer.c:1184
+#, c-format
+msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
+msgstr "el fitxer HEAD emmagatzemat abans del recull de cireres '%s' és malmès"
-#: wt-status.c:370
-msgid "new commits, "
-msgstr "comissions noves, "
+#: sequencer.c:1354
+#, c-format
+msgid "%s: can't cherry-pick a %s"
+msgstr "%s: no es pot recollir com a cirera un %s"
-#: wt-status.c:372
-msgid "modified content, "
-msgstr "contingut modificat, "
+#: sequencer.c:1358
+#, c-format
+msgid "%s: bad revision"
+msgstr "%s: revisió dolenta"
-#: wt-status.c:374
-msgid "untracked content, "
-msgstr "contingut no seguit, "
+#: sequencer.c:1391
+msgid "can't revert as initial commit"
+msgstr "no es pot revertir com a comissió inicial"
-#: wt-status.c:756
-msgid "Submodules changed but not updated:"
-msgstr "Submòduls canviats però no actualitzats:"
+#: setup.c:160
+#, c-format
+msgid ""
+"%s: no such path in the working tree.\n"
+"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
+msgstr ""
+"%s: no hi ha tal camí en l'arbre de treball.\n"
+"Useu 'git <ordre> -- <camí>...' per a especificar camins que no existeixin "
+"localment."
-#: wt-status.c:758
-msgid "Submodule changes to be committed:"
-msgstr "Canvis de submòdul a cometre:"
+#: setup.c:173
+#, c-format
+msgid ""
+"ambiguous argument '%s': unknown revision or path not in the working tree.\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
+msgstr ""
+"paràmetre ambigu '%s': revisió no coneguda o camí no en l'arbre de treball.\n"
+"Useu '--' per a separar els camins de les revisions, com això:\n"
+"'git <ordre> [<revisió>...] -- [<fitxer>...]'"
-#: wt-status.c:839
+#: setup.c:223
+#, c-format
msgid ""
-"Do not touch the line above.\n"
-"Everything below will be removed."
+"ambiguous argument '%s': both revision and filename\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
msgstr ""
-"No toqueu la línia de sobre.\n"
-"Tot el que hi ha a sota s'eliminarà."
+"paràmetre ambigu '%s': ambdós una revisió i un nom de fitxer\n"
+"Useu '--' per a separar els camins de les revisions, com això:\n"
+"'git <ordre> [<revisió>...] -- [<fitxer>...]'"
-#: wt-status.c:950
-msgid "You have unmerged paths."
-msgstr "Teniu camins sense fusionar."
+#: setup.c:468
+#, c-format
+msgid "Expected git repo version <= %d, found %d"
+msgstr "S'esperava una versió de dipòsit de git <= %d, s'ha trobat %d"
-#: wt-status.c:953
-msgid " (fix conflicts and run \"git commit\")"
-msgstr " (arregleu els conflictes i executeu \"git commit\")"
+#: setup.c:476
+msgid "unknown repository extensions found:"
+msgstr "s'han trobat extensions de dipòsit desconegudes:"
-#: wt-status.c:955
-msgid " (use \"git merge --abort\" to abort the merge)"
-msgstr " (useu \"git merge --abort\" per a avortar la fusió)"
+#: setup.c:762
+#, c-format
+msgid "Not a git repository (or any of the parent directories): %s"
+msgstr "No és un dipòsit de git (ni cap dels directoris pares): %s"
-#: wt-status.c:960
-msgid "All conflicts fixed but you are still merging."
-msgstr "Tots els conflictes estan arreglats però encara esteu fusionant."
+#: setup.c:764 setup.c:915 builtin/index-pack.c:1641
+msgid "Cannot come back to cwd"
+msgstr "No es pot tornar al directori de treball actual"
-#: wt-status.c:963
-msgid " (use \"git commit\" to conclude merge)"
-msgstr " (useu \"git commit\" per a concloure la fusió)"
+#: setup.c:845
+msgid "Unable to read current working directory"
+msgstr "No s'ha pogut llegir el directori de treball actual"
-#: wt-status.c:973
-msgid "You are in the middle of an am session."
-msgstr "Esteu enmig d'una sessió am."
+#: setup.c:920
+#, c-format
+msgid ""
+"Not a git repository (or any parent up to mount point %s)\n"
+"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
+msgstr ""
+"No un dipòsit de git (ni cap pare fins el punt de muntatge %s)\n"
+"S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM "
+"no està establert)."
-#: wt-status.c:976
-msgid "The current patch is empty."
-msgstr "El pedaç actual està buit."
+#: setup.c:927
+#, c-format
+msgid "Cannot change to '%s/..'"
+msgstr "No es pot canviar a '%s/..'"
-#: wt-status.c:980
-msgid " (fix conflicts and then run \"git am --continue\")"
-msgstr " (arregleu els conflictes i després executeu \"git am --continue\")"
+#: setup.c:989
+#, c-format
+msgid ""
+"Problem with core.sharedRepository filemode value (0%.3o).\n"
+"The owner of files must always have read and write permissions."
+msgstr ""
+"Hi ha un problema amb el valor de mode de fitxer core.sharedRepository "
+"(0%.3o).\n"
+"El propietari dels fitxers sempre ha de tenir permissions de lectura i "
+"escriptura."
-#: wt-status.c:982
-msgid " (use \"git am --skip\" to skip this patch)"
-msgstr " (useu \"git am --skip\" per a ometre aquest pedaç)"
+#: sha1_file.c:473
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "el camí '%s' no existeix"
-#: wt-status.c:984
-msgid " (use \"git am --abort\" to restore the original branch)"
-msgstr " (useu \"git am --abort\" per a restaurar la branca original)"
+#: sha1_file.c:499
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"Encara no se suporta el dipòsit de referència '%s' com a agafament enllaçat."
-#: wt-status.c:1109
-msgid "No commands done."
-msgstr "No s'ha fet cap ordre."
+#: sha1_file.c:505
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "el dipòsit de referència '%s' no és un dipòsit local."
-#: wt-status.c:1112
+#: sha1_file.c:511
#, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Última ordre feta (%d ordre feta):"
-msgstr[1] "Últimes ordres fetes (%d ordres fetes):"
+msgid "reference repository '%s' is shallow"
+msgstr "el dipòsit de referència '%s' és superficial"
-#: wt-status.c:1123
+#: sha1_file.c:519
#, c-format
-msgid " (see more in file %s)"
-msgstr " (vegeu més en el fitxer %s)"
+msgid "reference repository '%s' is grafted"
+msgstr "el dipòsit de referència '%s' és empeltat"
-#: wt-status.c:1128
-msgid "No commands remaining."
-msgstr "No manca cap ordre."
+#: sha1_file.c:1159
+msgid "offset before end of packfile (broken .idx?)"
+msgstr "desplaçament abans de la fi del fitxer de paquet (.idx trencat?)"
-#: wt-status.c:1131
+#: sha1_file.c:2592
#, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Ordre següent a fer (manca %d ordre):"
-msgstr[1] "Ordres següents a fer (manquen %d ordres):"
+msgid "offset before start of pack index for %s (corrupt index?)"
+msgstr ""
+"desplaçament abans d'inici d'índex de paquet per a %s (índex corromput?)"
-#: wt-status.c:1139
-msgid " (use \"git rebase --edit-todo\" to view and edit)"
-msgstr " (useu \"git rebase --edit-todo\" per a veure i editar)"
+#: sha1_file.c:2596
+#, c-format
+msgid "offset beyond end of pack index for %s (truncated index?)"
+msgstr ""
+"desplaçament més enllà de la fi d'índex de paquet per a %s (índex truncat?)"
-#: wt-status.c:1152
+#: sha1_name.c:407
#, c-format
-msgid "You are currently rebasing branch '%s' on '%s'."
-msgstr "Actualment esteu rebasant la branca '%s' en '%s'."
+msgid "short SHA1 %s is ambiguous"
+msgstr "l'SHA1 %s curt és ambigu"
-#: wt-status.c:1157
-msgid "You are currently rebasing."
-msgstr "Actualment esteu rebasant."
+#: sha1_name.c:418
+msgid "The candidates are:"
+msgstr "Els candidats són:"
-#: wt-status.c:1171
-msgid " (fix conflicts and then run \"git rebase --continue\")"
+#: sha1_name.c:578
+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 ""
-" (arregleu els conflictes i després executeu \"git rebase --continue\")"
+"Git normalment mai crea una referència que acabi amb 40 caràcters\n"
+"hexadecimals perquè s'ignorarà quan només especifiqueu 40 caràcters\n"
+"hexadecimals. Aquestes referències es poden crear per error. Per\n"
+"exemple,\n"
+"\n"
+" git checkout -b $br $(git rev-parse ...)\n"
+"\n"
+"on \"$br\" és d'alguna manera buida i una referència de 40 caràcters\n"
+"hexadecimals. Si us plau, examineu aquestes referències i potser\n"
+"suprimiu-les. Desactiveu aquest missatge executant\n"
+"\"git config advice.objectNameWarning false\""
-#: wt-status.c:1173
-msgid " (use \"git rebase --skip\" to skip this patch)"
-msgstr " (useu \"git rebase --skip\" per a saltar aquest pedaç)"
+#: submodule.c:64 submodule.c:98
+msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
+msgstr ""
+"No es pot canviar un .gitmodules no fusionat, primer resoldreu els "
+"conflictes de fusió"
-#: wt-status.c:1175
-msgid " (use \"git rebase --abort\" to check out the original branch)"
-msgstr " (useu \"git rebase --abort\" per a agafar la branca original)"
+#: submodule.c:68 submodule.c:102
+#, c-format
+msgid "Could not find section in .gitmodules where path=%s"
+msgstr "No s'ha pogut trobar la secció en .gitmodules on path=%s"
-#: wt-status.c:1181
-msgid " (all conflicts fixed: run \"git rebase --continue\")"
-msgstr " (tots els conflictes arreglats: executeu \"git rebase --continue\")"
+#: submodule.c:76
+#, c-format
+msgid "Could not update .gitmodules entry %s"
+msgstr "No s'ha pogut actualitzar l'entrada de .gitmodules %s"
-#: wt-status.c:1185
+#: submodule.c:109
#, c-format
-msgid ""
-"You are currently splitting a commit while rebasing branch '%s' on '%s'."
-msgstr ""
-"Actualment esteu dividint una comissió mentre rebaseu la branca '%s' en '%s'."
+msgid "Could not remove .gitmodules entry for %s"
+msgstr "No s'ha pogut eliminar l'entrada de .gitmodules per a %s"
-#: wt-status.c:1190
-msgid "You are currently splitting a commit during a rebase."
-msgstr "Actualment esteu dividint una comissió durant un rebasament."
+#: submodule.c:120
+msgid "staging updated .gitmodules failed"
+msgstr "l'allistament del .gitmodules actualitzat ha fallat"
-#: wt-status.c:1193
-msgid " (Once your working directory is clean, run \"git rebase --continue\")"
-msgstr ""
-" (Una vegada que el vostre directori de treball sigui net, executeu \"git "
-"rebase --continue\")"
+#: submodule.c:158
+msgid "negative values not allowed for submodule.fetchJobs"
+msgstr "no es permeten els valors negatius a submodule.fetchJobs"
-#: wt-status.c:1197
+#: submodule-config.c:358
#, c-format
-msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
-msgstr ""
-"Actualment esteu editant una comissió mentre rebaseu la branca '%s' en '%s'."
+msgid "invalid value for %s"
+msgstr "valor no vàlid per a %s"
-#: wt-status.c:1202
-msgid "You are currently editing a commit during a rebase."
-msgstr "Actualment esteu editant una comissió durant un rebasament."
+#: trailer.c:238
+#, c-format
+msgid "running trailer command '%s' failed"
+msgstr "l'execució de l'ordre de remolc '%s' ha fallat"
-#: wt-status.c:1205
-msgid " (use \"git commit --amend\" to amend the current commit)"
-msgstr " (useu \"git commit --amend\" per a esmenar la comissió actual)"
+#: trailer.c:471 trailer.c:475 trailer.c:479 trailer.c:533 trailer.c:537
+#: trailer.c:541
+#, c-format
+msgid "unknown value '%s' for key '%s'"
+msgstr "valor desconegut '%s' per a la clau '%s'"
-#: wt-status.c:1207
-msgid ""
-" (use \"git rebase --continue\" once you are satisfied with your changes)"
-msgstr ""
-" (useu \"git rebase --continue\" una vegada que esteu satisfet amb els "
-"vostres canvis)"
+#: trailer.c:523 trailer.c:528 builtin/remote.c:289
+#, c-format
+msgid "more than one %s"
+msgstr "més d'un %s"
-#: wt-status.c:1217
+#: trailer.c:672
#, c-format
-msgid "You are currently cherry-picking commit %s."
-msgstr "Actualment esteu recollint com a cirera la comissió %s."
+msgid "empty trailer token in trailer '%.*s'"
+msgstr "fitxa de remolc buida en el remolc '%.*s'"
-#: wt-status.c:1222
-msgid " (fix conflicts and run \"git cherry-pick --continue\")"
-msgstr " (arregleu els conflictes i executeu \"git cherry-pick --continue\")"
+#: trailer.c:695
+#, c-format
+msgid "could not read input file '%s'"
+msgstr "no s'ha pogut llegir el fitxer d'entrada '%s'"
-#: wt-status.c:1225
-msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
-msgstr ""
-" (tots els conflictes arreglats: executeu \"git cherry-pick --continue\")"
+#: trailer.c:698
+msgid "could not read from stdin"
+msgstr "no s'ha pogut llegir des d'stdin"
-#: wt-status.c:1227
-msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
-msgstr ""
-" (useu \"git cherry-pick --abort\" per a cancel·lar l'operació de recull de "
-"cireres)"
+#: trailer.c:929 builtin/am.c:44
+#, c-format
+msgid "could not stat %s"
+msgstr "no s'ha pogut fer stat a %s"
-#: wt-status.c:1236
+#: trailer.c:931
#, c-format
-msgid "You are currently reverting commit %s."
-msgstr "Actualment esteu revertint la comissió %s."
+msgid "file %s is not a regular file"
+msgstr "el fitxer %s no és un fitxer regular"
-#: wt-status.c:1241
-msgid " (fix conflicts and run \"git revert --continue\")"
-msgstr " (arregleu els conflictes i executeu \"git revert --continue\")"
+#: trailer.c:933
+#, c-format
+msgid "file %s is not writable by user"
+msgstr "el fitxer %s no és gravable per l'usuari"
-#: wt-status.c:1244
-msgid " (all conflicts fixed: run \"git revert --continue\")"
-msgstr ""
-" (tots els conflictes estan arreglats: executeu \"git revert --continue\")"
+#: trailer.c:945
+msgid "could not open temporary file"
+msgstr "no s'ha pogut obrir el fitxer temporal"
-#: wt-status.c:1246
-msgid " (use \"git revert --abort\" to cancel the revert operation)"
-msgstr ""
-" (useu \"git revert --abort\" per a cancel·lar l'operació de reversió)"
+#: trailer.c:983
+#, c-format
+msgid "could not rename temporary file to %s"
+msgstr "no s'ha pogut canviar el nom del fitxer temporal a %s"
-#: wt-status.c:1257
+#: transport.c:62
#, c-format
-msgid "You are currently bisecting, started from branch '%s'."
-msgstr "Actualment esteu bisecant, heu començat des de la branca '%s'."
+msgid "Would set upstream of '%s' to '%s' of '%s'\n"
+msgstr "Canviaria la font de '%s' a '%s' de '%s'\n"
-#: wt-status.c:1261
-msgid "You are currently bisecting."
-msgstr "Actualment esteu bisecant."
+#: transport.c:151
+#, c-format
+msgid "transport: invalid depth option '%s'"
+msgstr "transport: opció de profunditat no vàlida '%s'"
-#: wt-status.c:1264
-msgid " (use \"git bisect reset\" to get back to the original branch)"
-msgstr " (useu \"git bisect reset\" per a tornar a la branca original)"
+#: transport.c:817
+#, c-format
+msgid ""
+"The following submodule paths contain changes that can\n"
+"not be found on any remote:\n"
+msgstr ""
+"Els camins de submòdul següents contenen canvis que no\n"
+"es poden trobar en cap remot:\n"
-#: wt-status.c:1464
-msgid "On branch "
-msgstr "En la branca "
+#: transport.c:821
+#, c-format
+msgid ""
+"\n"
+"Please try\n"
+"\n"
+"\tgit push --recurse-submodules=on-demand\n"
+"\n"
+"or cd to the path and use\n"
+"\n"
+"\tgit push\n"
+"\n"
+"to push them to a remote.\n"
+"\n"
+msgstr ""
+"\n"
+"Si us plau, intenteu\n"
+"\n"
+"\tgit push --recurse-submodules=on-demand\n"
+"\n"
+"o canviar de directori al camí i useu\n"
+"\n"
+"\tgit push\n"
+"\n"
+"per a pujar-los a un remot.\n"
-#: wt-status.c:1470
-msgid "interactive rebase in progress; onto "
-msgstr "rebasament interactiu en progrés; sobre "
+#: transport.c:829
+msgid "Aborting."
+msgstr "S'està avortant."
-#: wt-status.c:1472
-msgid "rebase in progress; onto "
-msgstr "rebasament en progrés; sobre "
+#: transport-helper.c:1075
+#, c-format
+msgid "Could not read ref %s"
+msgstr "No s'ha pogut llegir la referència %s"
-#: wt-status.c:1477
-msgid "HEAD detached at "
-msgstr "HEAD separat a "
+#: tree-walk.c:31
+msgid "too-short tree object"
+msgstr "objecte d'arbre massa curt"
-#: wt-status.c:1479
-msgid "HEAD detached from "
-msgstr "HEAD separat de "
+#: tree-walk.c:37
+msgid "malformed mode in tree entry"
+msgstr "mode mal format en entrada d'arbre"
-#: wt-status.c:1482
-msgid "Not currently on any branch."
-msgstr "Actualment no s'és en cap branca."
+#: tree-walk.c:41
+msgid "empty filename in tree entry"
+msgstr "nom de fitxer buit en entrada de arbre"
-#: wt-status.c:1500
-msgid "Initial commit"
-msgstr "Comissió inicial"
+#: tree-walk.c:113
+msgid "too-short tree file"
+msgstr "fitxer d'arbre massa curt"
-#: wt-status.c:1514
-msgid "Untracked files"
-msgstr "Fitxers no seguits"
+#: unpack-trees.c:64
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%sPlease commit your changes or stash them before you switch branches."
+msgstr ""
+"Els vostres canvis locals als fitxers següents se sobreescriurien per "
+"agafar:\n"
+"%%sSi us plau, cometeu els vostres canvis o emmagatzemeu-los abans de "
+"canviar de branca."
-#: wt-status.c:1516
-msgid "Ignored files"
-msgstr "Fitxers ignorats"
+#: unpack-trees.c:66
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%s"
+msgstr ""
+"Els vostres canvis locals als fitxers següents se sobreescriurien per "
+"agafar:\n"
+"%%s"
+
+#: unpack-trees.c:69
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%sPlease commit your changes or stash them before you merge."
+msgstr ""
+"Els vostres canvis locals als fitxers següents se sobreescriurien per "
+"fusionar:\n"
+"%%sSi us plau, cometeu els vostres canvis o emmagatzemeu-los abans de "
+"fusionar."
-#: wt-status.c:1520
+#: unpack-trees.c:71
#, 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')."
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%s"
msgstr ""
-"S'ha trigat %.2f segons a enumerar fitxers no seguits.\n"
-"'status -uno' pot accelerar-ho, però heu d'anar amb compte de no\n"
-"oblidar-vos d'afegir fitxers nous per vós mateix (vegeu\n"
-"'git help status')."
+"Els vostres canvis locals als fitxers següents se sobreescriurien per "
+"fusionar:\n"
+"%%s"
-#: wt-status.c:1526
+#: unpack-trees.c:74
#, c-format
-msgid "Untracked files not listed%s"
-msgstr "Els fitxers no seguits no estan llistats%s"
-
-#: wt-status.c:1528
-msgid " (use -u option to show untracked files)"
-msgstr " (useu l'opció -u per a mostrar els fitxers no seguits)"
-
-#: wt-status.c:1534
-msgid "No changes"
-msgstr "Sense canvis"
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%sPlease commit your changes or stash them before you %s."
+msgstr ""
+"Els vostres canvis locals als fitxers següents se sobreescriurien per %s:\n"
+"%%sSi us plau, cometeu els vostres canvis o emmagatzemeu-los abans de %s."
-#: wt-status.c:1539
+#: unpack-trees.c:76
#, c-format
-msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%s"
msgstr ""
-"no hi ha canvis afegits a cometre (useu \"git add\" o \"git commit -a\")\n"
+"Els vostres canvis locals als fitxers següents se sobreescriurien per %s:\n"
+"%%s"
-#: wt-status.c:1542
+#: unpack-trees.c:81
#, c-format
-msgid "no changes added to commit\n"
-msgstr "no hi ha canvis afegits a cometre\n"
+msgid ""
+"Updating the following directories would lose untracked files in it:\n"
+"%s"
+msgstr ""
+"Actualitzar els directoris següents perdria fitxers no seguits en el:\n"
+"%s"
-#: wt-status.c:1545
+#: unpack-trees.c:85
#, c-format
msgid ""
-"nothing added to commit but untracked files present (use \"git add\" to "
-"track)\n"
+"The following untracked working tree files would be removed by checkout:\n"
+"%%sPlease move or remove them before you switch branches."
msgstr ""
-"no hi ha res afegit a cometre però fitxers no seguits estan presents (useu "
-"\"git add\" per a seguir-los)\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
+"agafar:\n"
+"%%sSi us plau, moveu-los o elimineu-los abans de canviar de branca."
-#: wt-status.c:1548
+#: unpack-trees.c:87
#, c-format
-msgid "nothing added to commit but untracked files present\n"
-msgstr "no hi ha res afegit a cometre però fitxers no seguits estan presents\n"
+msgid ""
+"The following untracked working tree files would be removed by checkout:\n"
+"%%s"
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
+"agafar:\n"
+"%%s"
-#: wt-status.c:1551
+#: unpack-trees.c:90
#, c-format
-msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%sPlease move or remove them before you merge."
msgstr ""
-"no hi ha res a cometre (creeu/copieu fitxers i useu \"git add\" per a seguir-"
-"los)\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
+"fusionar:\n"
+"%%sSi us plau, moveu-los o elimineu-los abans de fusionar."
-#: wt-status.c:1554 wt-status.c:1559
+#: unpack-trees.c:92
#, c-format
-msgid "nothing to commit\n"
-msgstr "no hi ha res a cometre\n"
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%s"
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
+"fusionar:\n"
+"%%s"
-#: wt-status.c:1557
+#: unpack-trees.c:95
#, c-format
-msgid "nothing to commit (use -u to show untracked files)\n"
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%sPlease move or remove them before you %s."
msgstr ""
-"no hi ha res a cometre (useu -u per a mostrar els fitxers no seguits)\n"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per %s:\n"
+"%%sSi us plau, moveu-los o elimineu-los abans de %s."
-#: wt-status.c:1561
+#: unpack-trees.c:97
#, c-format
-msgid "nothing to commit, working tree clean\n"
-msgstr "no hi ha res a cometre, l'arbre de treball està net\n"
-
-#: wt-status.c:1668
-msgid "Initial commit on "
-msgstr "Comissió inicial en "
-
-#: wt-status.c:1672
-msgid "HEAD (no branch)"
-msgstr "HEAD (sense branca)"
-
-#: wt-status.c:1701
-msgid "gone"
-msgstr "no hi és"
-
-#: wt-status.c:1703 wt-status.c:1711
-msgid "behind "
-msgstr "darrere "
-
-#: wt-status.c:1706 wt-status.c:1709
-msgid "ahead "
-msgstr "davant per "
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%s"
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per %s:\n"
+"%%s"
-#: compat/precompose_utf8.c:57 builtin/clone.c:415
+#: unpack-trees.c:102
#, c-format
-msgid "failed to unlink '%s'"
-msgstr "s'ha fallat en desenllaçar '%s'"
-
-#: builtin/add.c:22
-msgid "git add [<options>] [--] <pathspec>..."
-msgstr "git add [<opcions>] [--] <especificació-de-camí>..."
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"agafar:\n"
+"%%sSi us plau, moveu-los o elimineu-los abans de canviar de branca."
-#: builtin/add.c:65
+#: unpack-trees.c:104
#, c-format
-msgid "unexpected diff status %c"
-msgstr "estat de diff inesperat %c"
-
-#: builtin/add.c:71 builtin/commit.c:281
-msgid "updating files failed"
-msgstr "s'ha fallat en actualitzar els fitxers"
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
+"%%s"
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"agafar:\n"
+"%%s"
-#: builtin/add.c:81
+#: unpack-trees.c:107
#, c-format
-msgid "remove '%s'\n"
-msgstr "elimina '%s'\n"
+msgid ""
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%sPlease move or remove them before you merge."
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"fusionar:\n"
+"%%sSi us plau, moveu-los o elimineu-los abans de fusionar."
-#: builtin/add.c:136
-msgid "Unstaged changes after refreshing the index:"
-msgstr "Canvis no allistats després d'actualitzar l'índex:"
+#: unpack-trees.c:109
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%s"
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"fusionar:\n"
+"%%s"
-#: builtin/add.c:196 builtin/rev-parse.c:811
-msgid "Could not read the index"
-msgstr "No s'ha pogut llegir l'índex"
+#: unpack-trees.c:112
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"%s:\n"
+"%%sSi us plau, moveu-los o elimineu-los abans de %s."
-#: builtin/add.c:207
+#: unpack-trees.c:114
#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "No s'ha pogut obrir '%s' per a escriptura."
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%s"
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"%s:\n"
+"%%s"
-#: builtin/add.c:211
-msgid "Could not write patch"
-msgstr "No s'ha pogut escriure el pedaç"
+#: unpack-trees.c:121
+#, c-format
+msgid "Entry '%s' overlaps with '%s'. Cannot bind."
+msgstr "L'entrada '%s' encavalca amb '%s'. No es pot vincular."
-#: builtin/add.c:214
-msgid "editing patch failed"
-msgstr "l'edició del pedaç ha fallat"
+#: unpack-trees.c:124
+#, c-format
+msgid ""
+"Cannot update sparse checkout: the following entries are not up-to-date:\n"
+"%s"
+msgstr ""
+"No es pot actualitzar l'agafament parcial: les entrades següents no estan al "
+"dia:\n"
+"%s"
-#: builtin/add.c:217
+#: unpack-trees.c:126
#, c-format
-msgid "Could not stat '%s'"
-msgstr "No s'ha pogut fer stat a '%s'"
+msgid ""
+"The following working tree files would be overwritten by sparse checkout "
+"update:\n"
+"%s"
+msgstr ""
+"Els fitxers següents en l'arbre de treball se sobreescriurien per "
+"actualitzar l'agafament parcial:\n"
+"%s"
-#: builtin/add.c:219
-msgid "Empty patch. Aborted."
-msgstr "El pedaç és buit. S'ha avortat."
+#: unpack-trees.c:128
+#, c-format
+msgid ""
+"The following working tree files would be removed by sparse checkout "
+"update:\n"
+"%s"
+msgstr ""
+"Els fitxers següents en l'arbre de treball s'eliminarien per actualitzar "
+"l'agafament parcial:\n"
+"%s"
-#: builtin/add.c:224
+#: unpack-trees.c:205
#, c-format
-msgid "Could not apply '%s'"
-msgstr "No s'ha pogut aplicar '%s'"
+msgid "Aborting\n"
+msgstr "S'està avortant\n"
-#: builtin/add.c:234
-msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr ""
-"Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
+#: unpack-trees.c:237
+msgid "Checking out files"
+msgstr "S'està agafant fitxers"
-#: builtin/add.c:253 builtin/clean.c:870 builtin/fetch.c:113 builtin/mv.c:111
-#: builtin/prune-packed.c:55 builtin/pull.c:197 builtin/push.c:521
-#: builtin/remote.c:1327 builtin/rm.c:268 builtin/send-pack.c:162
-msgid "dry run"
-msgstr "marxa en sec"
+#: urlmatch.c:120
+msgid "invalid URL scheme name or missing '://' suffix"
+msgstr "l'esquema d'URL no és vàlid o li manca el sufix '://'"
-#: builtin/add.c:254 builtin/apply.c:4854 builtin/check-ignore.c:19
-#: builtin/commit.c:1334 builtin/count-objects.c:85 builtin/fsck.c:593
-#: builtin/log.c:1852 builtin/mv.c:110 builtin/read-tree.c:114
-msgid "be verbose"
-msgstr "sigues detallat"
+#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
+#, c-format
+msgid "invalid %XX escape sequence"
+msgstr "seqüència d'escapament %XX no vàlida"
+
+#: urlmatch.c:172
+msgid "missing host and scheme is not 'file:'"
+msgstr "manca la màquina i l'esquema no és 'file:'"
-#: builtin/add.c:256
-msgid "interactive picking"
-msgstr "recull interactiu"
+#: urlmatch.c:189
+msgid "a 'file:' URL may not have a port number"
+msgstr "un URL 'file:' no pot tenir número de port"
-#: builtin/add.c:257 builtin/checkout.c:1157 builtin/reset.c:286
-msgid "select hunks interactively"
-msgstr "selecciona els trossos interactivament"
+#: urlmatch.c:199
+msgid "invalid characters in host name"
+msgstr "hi ha caràcters no vàlids en el nom de màquina"
-#: builtin/add.c:258
-msgid "edit current diff and apply"
-msgstr "edita la diferència actual i aplica-la"
+#: urlmatch.c:244 urlmatch.c:255
+msgid "invalid port number"
+msgstr "número de port no vàlid"
-#: builtin/add.c:259
-msgid "allow adding otherwise ignored files"
-msgstr "permet afegir fitxers que d'altra manera s'ignoren"
+#: urlmatch.c:322
+msgid "invalid '..' path segment"
+msgstr "segment de camí '..' no vàlid"
-#: builtin/add.c:260
-msgid "update tracked files"
-msgstr "actualitza els fitxers seguits"
+#: worktree.c:282
+#, c-format
+msgid "failed to read '%s'"
+msgstr "s'ha fallat en llegir '%s'"
-#: builtin/add.c:261
-msgid "record only the fact that the path will be added later"
-msgstr "registra només el fet que el camí s'afegirà més tard"
+#: wrapper.c:222 wrapper.c:392
+#, c-format
+msgid "could not open '%s' for reading and writing"
+msgstr "no s'ha pogut obrir '%s' per a lectura i escriptura"
-#: builtin/add.c:262
-msgid "add changes from all tracked and untracked files"
-msgstr "afegeix els canvis de tots els fitxers seguits i no seguits"
+#: wrapper.c:224 wrapper.c:394 builtin/am.c:766
+#, c-format
+msgid "could not open '%s' for writing"
+msgstr "no s'ha pogut obrir '%s' per a escriptura"
-#: builtin/add.c:265
-msgid "ignore paths removed in the working tree (same as --no-all)"
-msgstr ""
-"ignora els camins eliminats en l'arbre de treball (el mateix que --no-all)"
+#: wrapper.c:226 wrapper.c:396 builtin/am.c:320 builtin/am.c:759
+#: builtin/am.c:847 builtin/commit.c:1705 builtin/merge.c:1029
+#: builtin/pull.c:341
+#, c-format
+msgid "could not open '%s' for reading"
+msgstr "no s'ha pogut obrir '%s' per a lectura"
-#: builtin/add.c:267
-msgid "don't add, only refresh the index"
-msgstr "no afegeixis, només actualitza l'índex"
+#: wrapper.c:605 wrapper.c:626
+#, c-format
+msgid "unable to access '%s'"
+msgstr "no s'ha pogut accedir a '%s'"
-#: builtin/add.c:268
-msgid "just skip files which cannot be added because of errors"
-msgstr "només omet els fitxers que no es poden afegir a causa d'errors"
+#: wrapper.c:634
+msgid "unable to get current working directory"
+msgstr "no s'ha pogut obtenir el directori de treball actual"
-#: builtin/add.c:269
-msgid "check if - even missing - files are ignored in dry run"
-msgstr ""
-"comproveu si els fitxers - fins i tot els absents - s'ignoren en marxa en sec"
+#: wrapper.c:658
+#, c-format
+msgid "could not write to %s"
+msgstr "no s'ha pogut escriure a %s"
-#: builtin/add.c:270 builtin/update-index.c:958
-msgid "(+/-)x"
-msgstr "(+/-)x"
+#: wrapper.c:660
+#, c-format
+msgid "could not close %s"
+msgstr "no s'ha pogut tancar %s"
-#: builtin/add.c:270 builtin/update-index.c:959
-msgid "override the executable bit of the listed files"
-msgstr "passa per alt el bit executable dels fitxers llistats"
+#: wt-status.c:151
+msgid "Unmerged paths:"
+msgstr "Camins sense fusionar:"
-#: builtin/add.c:292
+#: wt-status.c:178 wt-status.c:205
#, c-format
-msgid "Use -f if you really want to add them.\n"
-msgstr "Useu -f si realment els voleu afegir.\n"
+msgid " (use \"git reset %s <file>...\" to unstage)"
+msgstr " (useu \"git reset %s <fitxer>...\" per a desallistar)"
-#: builtin/add.c:300
-msgid "adding files failed"
-msgstr "l'afegiment de fitxers ha fallat"
+#: wt-status.c:180 wt-status.c:207
+msgid " (use \"git rm --cached <file>...\" to unstage)"
+msgstr " (useu \"git rm --cached <fitxer>...\" per a desallistar)"
-#: builtin/add.c:336
-msgid "-A and -u are mutually incompatible"
-msgstr "-A i -u són mutualment incompatibles"
+#: wt-status.c:184
+msgid " (use \"git add <file>...\" to mark resolution)"
+msgstr " (useu \"git add <fitxer>...\" per a senyalar resolució)"
-#: builtin/add.c:343
-msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr "L'opció --ignore-missing només es pot usar junt amb --dry-run"
+#: wt-status.c:186 wt-status.c:190
+msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
+msgstr ""
+" (useu \"git add/rm <fitxer>...\" segons sigui apropiat per a senyalar "
+"resolució)"
-#: builtin/add.c:352
-#, c-format
-msgid "--chmod param '%s' must be either -x or +x"
-msgstr "el paràmetre --chmod '%s' ha de ser o -x o +x"
+#: wt-status.c:188
+msgid " (use \"git rm <file>...\" to mark resolution)"
+msgstr " (useu \"git rm <fitxer>...\" per a senyalar resolució)"
-#: builtin/add.c:367
-#, c-format
-msgid "Nothing specified, nothing added.\n"
-msgstr "No s'ha especificat res, no s'ha afegit res.\n"
+#: wt-status.c:199 wt-status.c:945
+msgid "Changes to be committed:"
+msgstr "Canvis a cometre:"
-#: builtin/add.c:368
-#, c-format
-msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr "Potser volíeu dir 'git add .'?\n"
+#: wt-status.c:217 wt-status.c:954
+msgid "Changes not staged for commit:"
+msgstr "Canvis no allistats per a cometre:"
-#: builtin/add.c:373 builtin/check-ignore.c:172 builtin/checkout.c:279
-#: builtin/checkout.c:473 builtin/clean.c:914 builtin/commit.c:340
-#: builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298
-#: builtin/submodule--helper.c:240
-msgid "index file corrupt"
-msgstr "fitxer d'índex malmès"
+#: wt-status.c:221
+msgid " (use \"git add <file>...\" to update what will be committed)"
+msgstr " (useu \"git add <fitxer>...\" per a actualitzar què es cometrà)"
-#: builtin/add.c:454 builtin/apply.c:4784 builtin/mv.c:286 builtin/rm.c:431
-msgid "Unable to write new index file"
-msgstr "no s'ha pogut escriure un fitxer d'índex nou"
+#: wt-status.c:223
+msgid " (use \"git add/rm <file>...\" to update what will be committed)"
+msgstr " (useu \"git add/rm <fitxer>...\" per a actualitzar què es cometrà)"
-#: builtin/am.c:257 builtin/commit.c:750 builtin/merge.c:1032
-#, c-format
-msgid "could not read '%s'"
-msgstr "no s'ha pogut llegir '%s'"
+#: wt-status.c:224
+msgid ""
+" (use \"git checkout -- <file>...\" to discard changes in working directory)"
+msgstr ""
+" (useu \"git checkout -- <fitxer>...\" per a descartar els canvis en el "
+"directori de treball)"
-#: builtin/am.c:426
-msgid "could not parse author script"
-msgstr "no s'ha pogut analitzar l'script d'autor"
+#: wt-status.c:226
+msgid " (commit or discard the untracked or modified content in submodules)"
+msgstr ""
+" (cometeu o descarteu el contingut modificat o no seguit en els submòduls)"
-#: builtin/am.c:503
+#: wt-status.c:238
#, c-format
-msgid "'%s' was deleted by the applypatch-msg hook"
-msgstr "s'ha suprimit '%s' pel ganxo applypatch-msg"
+msgid " (use \"git %s <file>...\" to include in what will be committed)"
+msgstr " (useu \"git %s <fitxer>...\" per a incloure-ho en què es cometrà)"
-#: builtin/am.c:544 builtin/notes.c:301
-#, c-format
-msgid "Malformed input line: '%s'."
-msgstr "Línia d'entrada mal formada: '%s'."
+#: wt-status.c:253
+msgid "both deleted:"
+msgstr "suprimit per ambdós:"
-#: builtin/am.c:581 builtin/notes.c:316
-#, c-format
-msgid "Failed to copy notes from '%s' to '%s'"
-msgstr "S'ha fallat en copiar les notes de '%s' a '%s'"
+#: wt-status.c:255
+msgid "added by us:"
+msgstr "afegit per nosaltres:"
-#: builtin/am.c:607
-msgid "fseek failed"
-msgstr "fseek ha fallat"
+#: wt-status.c:257
+msgid "deleted by them:"
+msgstr "suprimit per ells:"
-#: builtin/am.c:787
-#, c-format
-msgid "could not parse patch '%s'"
-msgstr "no s'ha pogut analitzar el pedaç '%s'"
+#: wt-status.c:259
+msgid "added by them:"
+msgstr "afegit per ells:"
-#: builtin/am.c:852
-msgid "Only one StGIT patch series can be applied at once"
-msgstr "només una sèrie de pedaços StGIT es pot aplicar a la vegada"
+#: wt-status.c:261
+msgid "deleted by us:"
+msgstr "suprimit per nosaltres:"
-#: builtin/am.c:899
-msgid "invalid timestamp"
-msgstr "marca de temps no vàlida"
+#: wt-status.c:263
+msgid "both added:"
+msgstr "afegit per ambdós:"
-#: builtin/am.c:902 builtin/am.c:910
-msgid "invalid Date line"
-msgstr "línia Date no vàlida"
+#: wt-status.c:265
+msgid "both modified:"
+msgstr "modificat per ambdós:"
-#: builtin/am.c:907
-msgid "invalid timezone offset"
-msgstr "desplaçament de zona de temps no vàlid"
+#: wt-status.c:275
+msgid "new file:"
+msgstr "fitxer nou:"
-#: builtin/am.c:996
-msgid "Patch format detection failed."
-msgstr "La detecció de format de pedaç ha fallat."
+#: wt-status.c:277
+msgid "copied:"
+msgstr "copiat:"
-#: builtin/am.c:1001 builtin/clone.c:380
-#, c-format
-msgid "failed to create directory '%s'"
-msgstr "s'ha fallat en crear el directori '%s'"
+#: wt-status.c:279
+msgid "deleted:"
+msgstr "suprimit:"
-#: builtin/am.c:1005
-msgid "Failed to split patches."
-msgstr "S'ha fallat en dividir els pedaços."
+#: wt-status.c:281
+msgid "modified:"
+msgstr "modificat:"
-#: builtin/am.c:1137 builtin/commit.c:366
-msgid "unable to write index file"
-msgstr "no s'ha pogut escriure el fitxer d'índex"
+#: wt-status.c:283
+msgid "renamed:"
+msgstr "canviat de nom:"
-#: builtin/am.c:1188
-#, c-format
-msgid "When you have resolved this problem, run \"%s --continue\"."
-msgstr "Quan hàgiu resolt aquest problema, executeu \"%s --continue\"."
+#: wt-status.c:285
+msgid "typechange:"
+msgstr "canviat de tipus:"
-#: builtin/am.c:1189
-#, c-format
-msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
-msgstr ""
-"Si preferiu saltar aquest pedaç, executeu \"%s --skip\" en lloc d'això."
+#: wt-status.c:287
+msgid "unknown:"
+msgstr "desconegut:"
-#: builtin/am.c:1190
-#, c-format
-msgid "To restore the original branch and stop patching, run \"%s --abort\"."
-msgstr ""
-"Per a restaurar la branca original i deixar d'apedaçar, executeu \"%s --abort"
-"\"."
+#: wt-status.c:289
+msgid "unmerged:"
+msgstr "sense fusionar:"
-#: builtin/am.c:1328
-msgid "Patch is empty. Was it split wrong?"
-msgstr "El pedaç és buit. S'ha dividit malament?"
+#: wt-status.c:371
+msgid "new commits, "
+msgstr "comissions noves, "
-#: builtin/am.c:1402 builtin/log.c:1543
-#, c-format
-msgid "invalid ident line: %s"
-msgstr "línia d'identitat no vàlida: %s"
+#: wt-status.c:373
+msgid "modified content, "
+msgstr "contingut modificat, "
-#: builtin/am.c:1429
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "no s'ha pogut analitzar la comissió %s"
+#: wt-status.c:375
+msgid "untracked content, "
+msgstr "contingut no seguit, "
-#: builtin/am.c:1602
-msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr ""
-"Al dipòsit li manquen els blobs necessaris per a retrocedir a una fusió de 3 "
-"vies."
+#: wt-status.c:818
+msgid "Submodules changed but not updated:"
+msgstr "Submòduls canviats però no actualitzats:"
-#: builtin/am.c:1604
-msgid "Using index info to reconstruct a base tree..."
-msgstr "S'està usant la informació d'índex per a reconstruir un arbre base..."
+#: wt-status.c:820
+msgid "Submodule changes to be committed:"
+msgstr "Canvis de submòdul a cometre:"
-#: builtin/am.c:1623
+#: wt-status.c:901
msgid ""
-"Did you hand edit your patch?\n"
-"It does not apply to blobs recorded in its index."
+"Do not touch the line above.\n"
+"Everything below will be removed."
msgstr ""
-"Heu editat el vostre pedaç a mà?\n"
-"No s'aplica als blobs recordats en el seu índex."
+"No toqueu la línia a dalt.\n"
+"Tot el que hi ha a sota s'eliminarà."
-#: builtin/am.c:1629
-msgid "Falling back to patching base and 3-way merge..."
-msgstr "S'està retrocedint a apedaçar la base i fusionar de 3 vies..."
+#: wt-status.c:1013
+msgid "You have unmerged paths."
+msgstr "Teniu camins sense fusionar."
-#: builtin/am.c:1654
-msgid "Failed to merge in the changes."
-msgstr "S'ha fallat en fusionar els canvis."
+#: wt-status.c:1016
+msgid " (fix conflicts and run \"git commit\")"
+msgstr " (arregleu els conflictes i executeu \"git commit\")"
-#: builtin/am.c:1679 builtin/merge.c:628
-msgid "git write-tree failed to write a tree"
-msgstr "git write-tree ha fallat en escriure un arbre"
+#: wt-status.c:1018
+msgid " (use \"git merge --abort\" to abort the merge)"
+msgstr " (useu \"git merge --abort\" per a avortar la fusió)"
-#: builtin/am.c:1686
-msgid "applying to an empty history"
-msgstr "s'està aplicant a una història buida"
+#: wt-status.c:1023
+msgid "All conflicts fixed but you are still merging."
+msgstr "Tots els conflictes estan arreglats però encara esteu fusionant."
+
+#: wt-status.c:1026
+msgid " (use \"git commit\" to conclude merge)"
+msgstr " (useu \"git commit\" per a concloure la fusió)"
+
+#: wt-status.c:1036
+msgid "You are in the middle of an am session."
+msgstr "Esteu enmig d'una sessió am."
-#: builtin/am.c:1699 builtin/commit.c:1776 builtin/merge.c:798
-#: builtin/merge.c:823
-msgid "failed to write commit object"
-msgstr "s'ha fallat en escriure l'objecte de comissió"
+#: wt-status.c:1039
+msgid "The current patch is empty."
+msgstr "El pedaç actual està buit."
-#: builtin/am.c:1731 builtin/am.c:1735
-#, c-format
-msgid "cannot resume: %s does not exist."
-msgstr "no es pot reprendre: %s no existeix."
+#: wt-status.c:1043
+msgid " (fix conflicts and then run \"git am --continue\")"
+msgstr " (arregleu els conflictes i després executeu \"git am --continue\")"
-#: builtin/am.c:1751
-msgid "cannot be interactive without stdin connected to a terminal."
-msgstr ""
-"no es pot ser interactiu sense que stdin sigui connectat a un terminal."
+#: wt-status.c:1045
+msgid " (use \"git am --skip\" to skip this patch)"
+msgstr " (useu \"git am --skip\" per a ometre aquest pedaç)"
-#: builtin/am.c:1756
-msgid "Commit Body is:"
-msgstr "El cos de la comissió és:"
+#: wt-status.c:1047
+msgid " (use \"git am --abort\" to restore the original branch)"
+msgstr " (useu \"git am --abort\" per a restaurar la branca original)"
-#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
-#. in your translation. The program will only accept English
-#. input at this point.
-#.
-#: builtin/am.c:1766
-msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
-msgstr ""
-"Voleu aplicar-lo? [y]es/[n]o/[e]dita/[v]isualitza el pedaç/[a]ccepta'ls "
-"tots: "
+#: wt-status.c:1172
+msgid "No commands done."
+msgstr "No s'ha fet cap ordre."
-#: builtin/am.c:1816
+#: wt-status.c:1175
#, c-format
-msgid "Dirty index: cannot apply patches (dirty: %s)"
-msgstr "Índex brut: no es pot aplicar pedaços (bruts: %s)"
+msgid "Last command done (%d command done):"
+msgid_plural "Last commands done (%d commands done):"
+msgstr[0] "Última ordre feta (%d ordre feta):"
+msgstr[1] "Últimes ordres fetes (%d ordres fetes):"
-#: builtin/am.c:1853 builtin/am.c:1925
+#: wt-status.c:1186
#, c-format
-msgid "Applying: %.*s"
-msgstr "S'està aplicant: %.*s"
+msgid " (see more in file %s)"
+msgstr " (vegeu més en el fitxer %s)"
-#: builtin/am.c:1869
-msgid "No changes -- Patch already applied."
-msgstr "Sense canvis -- El pedaç ja s'ha aplicat."
+#: wt-status.c:1191
+msgid "No commands remaining."
+msgstr "No manca cap ordre."
-#: builtin/am.c:1877
+#: wt-status.c:1194
#, c-format
-msgid "Patch failed at %s %.*s"
-msgstr "El pedaç ha fallat a %s %.*s"
+msgid "Next command to do (%d remaining command):"
+msgid_plural "Next commands to do (%d remaining commands):"
+msgstr[0] "Ordre següent a fer (manca %d ordre):"
+msgstr[1] "Ordres següents a fer (manquen %d ordres):"
+
+#: wt-status.c:1202
+msgid " (use \"git rebase --edit-todo\" to view and edit)"
+msgstr " (useu \"git rebase --edit-todo\" per a veure i editar)"
-#: builtin/am.c:1883
+#: wt-status.c:1215
#, c-format
-msgid "The copy of the patch that failed is found in: %s"
-msgstr "La còpia del pedaç que ha fallat es troba en: %s"
+msgid "You are currently rebasing branch '%s' on '%s'."
+msgstr "Actualment esteu rebasant la branca '%s' en '%s'."
-#: builtin/am.c:1928
-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 ""
-"Cap canvi - heu oblidat d'usar 'git add'?\n"
-"Si no hi ha res a allistar, probablement alguna altra cosa\n"
-"ja ha introduït els mateixos canvis; potser voleu ometre aquest pedaç."
+#: wt-status.c:1220
+msgid "You are currently rebasing."
+msgstr "Actualment esteu rebasant."
-#: builtin/am.c:1935
-msgid ""
-"You still have unmerged paths in your index.\n"
-"Did you forget to use 'git add'?"
+#: wt-status.c:1234
+msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr ""
-"Encara teniu camins sense fusionar en el vostre índex.\n"
-"Heu oblidat d'usar 'git add'?"
+" (arregleu els conflictes i després executeu \"git rebase --continue\")"
-#: builtin/am.c:2043 builtin/am.c:2047 builtin/am.c:2059 builtin/reset.c:308
-#: builtin/reset.c:316
-#, c-format
-msgid "Could not parse object '%s'."
-msgstr "No s'ha pogut analitzar l'objecte '%s'."
+#: wt-status.c:1236
+msgid " (use \"git rebase --skip\" to skip this patch)"
+msgstr " (useu \"git rebase --skip\" per a saltar aquest pedaç)"
-#: builtin/am.c:2095
-msgid "failed to clean index"
-msgstr "s'ha fallat en netejar l'índex"
+#: wt-status.c:1238
+msgid " (use \"git rebase --abort\" to check out the original branch)"
+msgstr " (useu \"git rebase --abort\" per a agafar la branca original)"
-#: builtin/am.c:2129
-msgid ""
-"You seem to have moved HEAD since the last 'am' failure.\n"
-"Not rewinding to ORIG_HEAD"
+#: wt-status.c:1244
+msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr ""
-"Sembla que heu mogut HEAD després de l'última fallada de 'am'.\n"
-"No rebobinant a ORIG_HEAD"
+" (tots els conflictes estan arreglats: executeu \"git rebase --continue\")"
-#: builtin/am.c:2192
+#: wt-status.c:1248
#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Valor no vàlid per a --patch-format: %s"
-
-#: builtin/am.c:2225
-msgid "git am [<options>] [(<mbox>|<Maildir>)...]"
-msgstr "git am [<opcions>] [(<bústia>|<directori-de-correu>)...]"
-
-#: builtin/am.c:2226
-msgid "git am [<options>] (--continue | --skip | --abort)"
-msgstr "git am [<opcions>] (--continue | --skip | --abort)"
-
-#: builtin/am.c:2232
-msgid "run interactively"
-msgstr "executa interactivament"
-
-#: builtin/am.c:2234
-msgid "historical option -- no-op"
-msgstr "opció històrica -- no-op"
-
-#: builtin/am.c:2236
-msgid "allow fall back on 3way merging if needed"
-msgstr "permet retrocedir a una fusió de 3 vies si és necessari"
-
-#: builtin/am.c:2237 builtin/init-db.c:481 builtin/prune-packed.c:57
-#: builtin/repack.c:172
-msgid "be quiet"
-msgstr "calla"
-
-#: builtin/am.c:2239
-msgid "add a Signed-off-by line to the commit message"
-msgstr "afegeix una línia Signed-off-by al missatge de comissió"
+msgid ""
+"You are currently splitting a commit while rebasing branch '%s' on '%s'."
+msgstr ""
+"Actualment esteu dividint una comissió mentre rebaseu la branca '%s' en '%s'."
-#: builtin/am.c:2242
-msgid "recode into utf8 (default)"
-msgstr "recodifica en utf8 (per defecte)"
+#: wt-status.c:1253
+msgid "You are currently splitting a commit during a rebase."
+msgstr "Actualment esteu dividint una comissió durant un rebasament."
-#: builtin/am.c:2244
-msgid "pass -k flag to git-mailinfo"
-msgstr "passa la bandera -k al git-mailinfo"
+#: wt-status.c:1256
+msgid " (Once your working directory is clean, run \"git rebase --continue\")"
+msgstr ""
+" (Una vegada que el vostre directori de treball sigui net, executeu \"git "
+"rebase --continue\")"
-#: builtin/am.c:2246
-msgid "pass -b flag to git-mailinfo"
-msgstr "passa la bandera -b al git-mailinfo"
+#: wt-status.c:1260
+#, c-format
+msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
+msgstr ""
+"Actualment esteu editant una comissió mentre rebaseu la branca '%s' en '%s'."
-#: builtin/am.c:2248
-msgid "pass -m flag to git-mailinfo"
-msgstr "passa la bandera -m al git-mailinfo"
+#: wt-status.c:1265
+msgid "You are currently editing a commit during a rebase."
+msgstr "Actualment esteu editant una comissió durant un rebasament."
-#: builtin/am.c:2250
-msgid "pass --keep-cr flag to git-mailsplit for mbox format"
-msgstr "passa la bandera --keep-cr al git-mailsplit pel format mbox"
+#: wt-status.c:1268
+msgid " (use \"git commit --amend\" to amend the current commit)"
+msgstr " (useu \"git commit --amend\" per a esmenar la comissió actual)"
-#: builtin/am.c:2253
-msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
+#: wt-status.c:1270
+msgid ""
+" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
-"no passis la bandera --keep-cr al git-mailsplit independent de am.keepcr"
-
-#: builtin/am.c:2256
-msgid "strip everything before a scissors line"
-msgstr "despulla tot abans d'una línia de tissores"
-
-#: builtin/am.c:2257 builtin/apply.c:4837
-msgid "action"
-msgstr "acció"
+" (useu \"git rebase --continue\" una vegada que estigueu satisfet amb els "
+"vostres canvis)"
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2270 builtin/am.c:2273 builtin/am.c:2276 builtin/am.c:2279
-#: builtin/am.c:2285
-msgid "pass it through git-apply"
-msgstr "passa-ho a través del git-apply"
+#: wt-status.c:1280
+#, c-format
+msgid "You are currently cherry-picking commit %s."
+msgstr "Actualment esteu recollint com a cirera la comissió %s."
-#: builtin/am.c:2266 builtin/apply.c:4861
-msgid "root"
-msgstr "arrel"
+#: wt-status.c:1285
+msgid " (fix conflicts and run \"git cherry-pick --continue\")"
+msgstr " (arregleu els conflictes i executeu \"git cherry-pick --continue\")"
-#: builtin/am.c:2269 builtin/am.c:2272 builtin/apply.c:4799
-#: builtin/apply.c:4802 builtin/clone.c:90 builtin/fetch.c:96
-#: builtin/pull.c:179 builtin/submodule--helper.c:277
-#: builtin/submodule--helper.c:402 builtin/submodule--helper.c:482
-#: builtin/submodule--helper.c:485 builtin/submodule--helper.c:823
-#: builtin/submodule--helper.c:826
-msgid "path"
-msgstr "camí"
+#: wt-status.c:1288
+msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
+msgstr ""
+" (tots els conflictes estan arreglats: executeu \"git cherry-pick --continue"
+"\")"
-#: builtin/am.c:2275 builtin/fmt-merge-msg.c:666 builtin/fmt-merge-msg.c:669
-#: builtin/grep.c:706 builtin/merge.c:200 builtin/pull.c:134 builtin/pull.c:193
-#: builtin/repack.c:181 builtin/repack.c:185 builtin/show-branch.c:645
-#: builtin/show-ref.c:175 builtin/tag.c:340 parse-options.h:132
-#: parse-options.h:134 parse-options.h:244
-msgid "n"
-msgstr "n"
+#: wt-status.c:1290
+msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
+msgstr ""
+" (useu \"git cherry-pick --abort\" per a cancel·lar l'operació de recull de "
+"cireres)"
-#: builtin/am.c:2278 builtin/apply.c:4805
-msgid "num"
-msgstr "número"
+#: wt-status.c:1299
+#, c-format
+msgid "You are currently reverting commit %s."
+msgstr "Actualment esteu revertint la comissió %s."
-#: builtin/am.c:2281 builtin/for-each-ref.c:37 builtin/replace.c:438
-#: builtin/tag.c:372
-msgid "format"
-msgstr "format"
+#: wt-status.c:1304
+msgid " (fix conflicts and run \"git revert --continue\")"
+msgstr " (arregleu els conflictes i executeu \"git revert --continue\")"
-#: builtin/am.c:2282
-msgid "format the patch(es) are in"
-msgstr "el format en el qual estan els pedaços"
+#: wt-status.c:1307
+msgid " (all conflicts fixed: run \"git revert --continue\")"
+msgstr ""
+" (tots els conflictes estan arreglats: executeu \"git revert --continue\")"
-#: builtin/am.c:2288
-msgid "override error message when patch failure occurs"
+#: wt-status.c:1309
+msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
-"passa per alt el missatge d'error quan s'ocorre una fallada en apedaçar"
+" (useu \"git revert --abort\" per a cancel·lar l'operació de reversió)"
-#: builtin/am.c:2290
-msgid "continue applying patches after resolving a conflict"
-msgstr "segueix aplicant pedaços després de resoldre un conflicte"
+#: wt-status.c:1320
+#, c-format
+msgid "You are currently bisecting, started from branch '%s'."
+msgstr "Actualment esteu bisecant, heu començat des de la branca '%s'."
-#: builtin/am.c:2293
-msgid "synonyms for --continue"
-msgstr "sinònims de --continue"
+#: wt-status.c:1324
+msgid "You are currently bisecting."
+msgstr "Actualment esteu bisecant."
-#: builtin/am.c:2296
-msgid "skip the current patch"
-msgstr "salta el pedaç actual"
+#: wt-status.c:1327
+msgid " (use \"git bisect reset\" to get back to the original branch)"
+msgstr " (useu \"git bisect reset\" per a tornar a la branca original)"
-#: builtin/am.c:2299
-msgid "restore the original branch and abort the patching operation."
-msgstr "restaura la branca original i avorta l'operació d'apedaçament."
+#: wt-status.c:1524
+msgid "On branch "
+msgstr "En la branca "
-#: builtin/am.c:2303
-msgid "lie about committer date"
-msgstr "menteix sobre la data del comitent"
+#: wt-status.c:1530
+msgid "interactive rebase in progress; onto "
+msgstr "rebasament interactiu en progrés; sobre "
-#: builtin/am.c:2305
-msgid "use current timestamp for author date"
-msgstr "usa el marc de temps actual per la data d'autor"
+#: wt-status.c:1532
+msgid "rebase in progress; onto "
+msgstr "rebasament en progrés; sobre "
-#: builtin/am.c:2307 builtin/commit.c:1610 builtin/merge.c:229
-#: builtin/pull.c:164 builtin/revert.c:92 builtin/tag.c:355
-msgid "key-id"
-msgstr "ID de clau"
+#: wt-status.c:1537
+msgid "HEAD detached at "
+msgstr "HEAD separat a "
-#: builtin/am.c:2308
-msgid "GPG-sign commits"
-msgstr "signa les comissions amb GPG"
+#: wt-status.c:1539
+msgid "HEAD detached from "
+msgstr "HEAD separat de "
-#: builtin/am.c:2311
-msgid "(internal use for git-rebase)"
-msgstr "(ús intern per al git-rebase)"
+#: wt-status.c:1542
+msgid "Not currently on any branch."
+msgstr "Actualment no s'és en cap branca."
-#: builtin/am.c:2326
-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 ""
-"Fa molt que l'opció -b/--binary no ha fet res, i\n"
-"s'eliminarà. Si us plau, no l'useu més."
+#: wt-status.c:1560
+msgid "Initial commit"
+msgstr "Comissió inicial"
-#: builtin/am.c:2333
-msgid "failed to read the index"
-msgstr "s'ha fallat en llegir l'índex"
+#: wt-status.c:1574
+msgid "Untracked files"
+msgstr "Fitxers no seguits"
-#: builtin/am.c:2348
-#, c-format
-msgid "previous rebase directory %s still exists but mbox given."
-msgstr ""
-"un directori de rebasament anterior %s encara existeix però s'ha donat una "
-"bústia."
+#: wt-status.c:1576
+msgid "Ignored files"
+msgstr "Fitxers ignorats"
-#: builtin/am.c:2372
+#: wt-status.c:1580
#, c-format
msgid ""
-"Stray %s directory found.\n"
-"Use \"git am --abort\" to remove it."
+"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 ""
-"Directori %s extraviat trobat.\n"
-"Useu \"git am --abort\" per a eliminar-lo."
+"Ha trigat %.2f segons enumerar els fitxers no seguits.\n"
+"'status -uno' pot accelerar-ho, però heu d'anar amb compte de no\n"
+"oblidar-vos d'afegir fitxers nous per vós mateix (vegeu\n"
+"'git help status')."
-#: builtin/am.c:2378
-msgid "Resolve operation not in progress, we are not resuming."
-msgstr "Operació de resolució no en curs; no reprenem."
+#: wt-status.c:1586
+#, c-format
+msgid "Untracked files not listed%s"
+msgstr "Els fitxers no seguits no estan llistats%s"
-#: builtin/apply.c:122
-msgid "git apply [<options>] [<patch>...]"
-msgstr "git apply [<opcions>] [<pedaç>...]"
+#: wt-status.c:1588
+msgid " (use -u option to show untracked files)"
+msgstr " (useu l'opció -u per a mostrar els fitxers no seguits)"
-#: builtin/apply.c:153
-#, c-format
-msgid "unrecognized whitespace option '%s'"
-msgstr "opció d'espai en blanc '%s' no reconeguda"
+#: wt-status.c:1594
+msgid "No changes"
+msgstr "Sense canvis"
-#: builtin/apply.c:169
+#: wt-status.c:1599
#, c-format
-msgid "unrecognized whitespace ignore option '%s'"
-msgstr "opció d'ignoral d'espai en blanc '%s' no reconeguda"
+msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+msgstr ""
+"no hi ha canvis afegits a cometre (useu \"git add\" o \"git commit -a\")\n"
-#: builtin/apply.c:854
+#: wt-status.c:1602
#, c-format
-msgid "Cannot prepare timestamp regexp %s"
-msgstr "No es pot preparar l'expressió regular de marca de temps %s"
+msgid "no changes added to commit\n"
+msgstr "no hi ha canvis afegits a cometre\n"
-#: builtin/apply.c:863
+#: wt-status.c:1605
#, c-format
-msgid "regexec returned %d for input: %s"
-msgstr "regexec ha retornat %d per l'entrada: %s"
+msgid ""
+"nothing added to commit but untracked files present (use \"git add\" to "
+"track)\n"
+msgstr ""
+"no hi ha res afegit a cometre però fitxers no seguits estan presents (useu "
+"\"git add\" per a seguir-los)\n"
-#: builtin/apply.c:947
+#: wt-status.c:1608
#, c-format
-msgid "unable to find filename in patch at line %d"
-msgstr "no s'ha pogut trobar el nom de fitxer en el pedaç a la línia %d"
+msgid "nothing added to commit but untracked files present\n"
+msgstr "no hi ha res afegit a cometre però fitxers no seguits estan presents\n"
-#: builtin/apply.c:984
+#: wt-status.c:1611
#, c-format
-msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
+msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
-"git apply: git-diff dolent - /dev/null esperat, %s rebut en la línia %d"
+"no hi ha res a cometre (creeu/copieu fitxers i useu \"git add\" per a seguir-"
+"los)\n"
-#: builtin/apply.c:989
+#: wt-status.c:1614 wt-status.c:1619
#, c-format
-msgid "git apply: bad git-diff - inconsistent new filename on line %d"
-msgstr ""
-"git apply: git-diff dolent - nom de fitxer nou inconsistent en la línia %d"
+msgid "nothing to commit\n"
+msgstr "no hi ha res a cometre\n"
-#: builtin/apply.c:990
+#: wt-status.c:1617
#, c-format
-msgid "git apply: bad git-diff - inconsistent old filename on line %d"
+msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
-"git apply: git-diff dolent - nom de fitxer antic inconsistent en la línia %d"
+"no hi ha res a cometre (useu -u per a mostrar els fitxers no seguits)\n"
-#: builtin/apply.c:995
+#: wt-status.c:1621
#, c-format
-msgid "git apply: bad git-diff - expected /dev/null on line %d"
-msgstr "git apply: git-diff dolent - /dev/null esperat en la línia %d"
+msgid "nothing to commit, working tree clean\n"
+msgstr "no hi ha res a cometre, l'arbre de treball està net\n"
-#: builtin/apply.c:1489
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recompte: línia inesperada: %.*s"
+#: wt-status.c:1728
+msgid "Initial commit on "
+msgstr "Comissió inicial en "
-#: builtin/apply.c:1550
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "fragment de pedaç sense capçalera a la línia %d: %.*s"
+#: wt-status.c:1732
+msgid "HEAD (no branch)"
+msgstr "HEAD (sense branca)"
-#: builtin/apply.c:1567
-#, 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] ""
-"a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
-"%d component de nom de camí inicial (línia %d)"
-msgstr[1] ""
-"a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
-"%d components de nom de camí inicial (línia %d)"
+#: wt-status.c:1761
+msgid "gone"
+msgstr "no hi és"
-#: builtin/apply.c:1743
-msgid "new file depends on old contents"
-msgstr "el fitxer nou depèn dels continguts antics"
+#: wt-status.c:1763 wt-status.c:1771
+msgid "behind "
+msgstr "darrere "
-#: builtin/apply.c:1745
-msgid "deleted file still has contents"
-msgstr "el fitxer suprimit encara té continguts"
+#: wt-status.c:1766 wt-status.c:1769
+msgid "ahead "
+msgstr "davant per "
-#: builtin/apply.c:1774
+#. TRANSLATORS: the action is e.g. "pull with rebase"
+#: wt-status.c:2270
#, c-format
-msgid "corrupt patch at line %d"
-msgstr "el pedaç és malmès a la línia %d"
+msgid "cannot %s: You have unstaged changes."
+msgstr "no es pot %s: Teniu canvis no allistats."
-#: builtin/apply.c:1810
-#, c-format
-msgid "new file %s depends on old contents"
-msgstr "el fitxer nou %s depèn dels continguts antics"
+#: wt-status.c:2276
+msgid "additionally, your index contains uncommitted changes."
+msgstr "addicionalment, el vostre índex conté canvis sense cometre."
-#: builtin/apply.c:1812
+#: wt-status.c:2278
#, c-format
-msgid "deleted file %s still has contents"
-msgstr "el fitxer suprimit %s encara té continguts"
+msgid "cannot %s: Your index contains uncommitted changes."
+msgstr "no es pot %s: El vostre índex conté canvis sense cometre."
-#: builtin/apply.c:1815
+#: compat/precompose_utf8.c:57 builtin/clone.c:414
#, c-format
-msgid "** warning: file %s becomes empty but is not deleted"
-msgstr "** advertència: el fitxer %s queda buit però no se suprimeix"
+msgid "failed to unlink '%s'"
+msgstr "s'ha fallat en desenllaçar '%s'"
-#: builtin/apply.c:1962
-#, c-format
-msgid "corrupt binary patch at line %d: %.*s"
-msgstr "pedaç binari malmès a la línia %d: %.*s"
+#: builtin/add.c:22
+msgid "git add [<options>] [--] <pathspec>..."
+msgstr "git add [<opcions>] [--] <especificació-de-camí>..."
-#: builtin/apply.c:1999
+#: builtin/add.c:80
#, c-format
-msgid "unrecognized binary patch at line %d"
-msgstr "pedaç binari no reconegut a la línia %d"
+msgid "unexpected diff status %c"
+msgstr "estat de diff inesperat %c"
+
+#: builtin/add.c:85 builtin/commit.c:291
+msgid "updating files failed"
+msgstr "s'ha fallat en actualitzar els fitxers"
-#: builtin/apply.c:2154
+#: builtin/add.c:95
#, c-format
-msgid "patch with only garbage at line %d"
-msgstr "pedaç amb només escombraries a la línia %d"
+msgid "remove '%s'\n"
+msgstr "elimina '%s'\n"
+
+#: builtin/add.c:149
+msgid "Unstaged changes after refreshing the index:"
+msgstr "Canvis no allistats després d'actualitzar l'índex:"
-#: builtin/apply.c:2244
+#: builtin/add.c:209 builtin/rev-parse.c:840
+msgid "Could not read the index"
+msgstr "No s'ha pogut llegir l'índex"
+
+#: builtin/add.c:220
#, c-format
-msgid "unable to read symlink %s"
-msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
+msgid "Could not open '%s' for writing."
+msgstr "No s'ha pogut obrir '%s' per a escriptura."
+
+#: builtin/add.c:224
+msgid "Could not write patch"
+msgstr "No s'ha pogut escriure el pedaç"
+
+#: builtin/add.c:227
+msgid "editing patch failed"
+msgstr "l'edició del pedaç ha fallat"
-#: builtin/apply.c:2248
+#: builtin/add.c:230
#, c-format
-msgid "unable to open or read %s"
-msgstr "no s'ha pogut obrir o llegir %s"
+msgid "Could not stat '%s'"
+msgstr "No s'ha pogut fer stat a '%s'"
+
+#: builtin/add.c:232
+msgid "Empty patch. Aborted."
+msgstr "El pedaç és buit. S'ha avortat."
-#: builtin/apply.c:2901
+#: builtin/add.c:237
#, c-format
-msgid "invalid start of line: '%c'"
-msgstr "inici de línia no vàlid: '%c'"
+msgid "Could not apply '%s'"
+msgstr "No s'ha pogut aplicar '%s'"
+
+#: builtin/add.c:247
+msgid "The following paths are ignored by one of your .gitignore files:\n"
+msgstr ""
+"Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
+
+#: builtin/add.c:266 builtin/clean.c:870 builtin/fetch.c:115 builtin/mv.c:111
+#: builtin/prune-packed.c:55 builtin/pull.c:198 builtin/push.c:521
+#: builtin/remote.c:1326 builtin/rm.c:268 builtin/send-pack.c:162
+msgid "dry run"
+msgstr "marxa en sec"
+
+#: builtin/add.c:269
+msgid "interactive picking"
+msgstr "recull interactiu"
+
+#: builtin/add.c:270 builtin/checkout.c:1156 builtin/reset.c:286
+msgid "select hunks interactively"
+msgstr "selecciona els trossos interactivament"
+
+#: builtin/add.c:271
+msgid "edit current diff and apply"
+msgstr "edita la diferència actual i aplica-la"
+
+#: builtin/add.c:272
+msgid "allow adding otherwise ignored files"
+msgstr "permet afegir fitxers que d'altra manera s'ignoren"
+
+#: builtin/add.c:273
+msgid "update tracked files"
+msgstr "actualitza els fitxers seguits"
+
+#: builtin/add.c:274
+msgid "record only the fact that the path will be added later"
+msgstr "registra només el fet de que el camí s'afegirà més tard"
+
+#: builtin/add.c:275
+msgid "add changes from all tracked and untracked files"
+msgstr "afegeix els canvis de tots els fitxers seguits i no seguits"
+
+#: builtin/add.c:278
+msgid "ignore paths removed in the working tree (same as --no-all)"
+msgstr ""
+"ignora els camins eliminats en l'arbre de treball (el mateix que --no-all)"
+
+#: builtin/add.c:280
+msgid "don't add, only refresh the index"
+msgstr "no afegeixis, només actualitza l'índex"
+
+#: builtin/add.c:281
+msgid "just skip files which cannot be added because of errors"
+msgstr "només omet els fitxers que no es poden afegir a causa d'errors"
+
+#: builtin/add.c:282
+msgid "check if - even missing - files are ignored in dry run"
+msgstr ""
+"comproveu si els fitxers - fins i tot els absents - s'ignoren en marxa en sec"
+
+#: builtin/add.c:283 builtin/update-index.c:947
+msgid "(+/-)x"
+msgstr "(+/-)x"
+
+#: builtin/add.c:283 builtin/update-index.c:948
+msgid "override the executable bit of the listed files"
+msgstr "passa per alt el bit executable dels fitxers llistats"
-#: builtin/apply.c:3020
+#: builtin/add.c:305
#, c-format
-msgid "Hunk #%d succeeded at %d (offset %d line)."
-msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
-msgstr[0] "El tros #%d ha tingut èxit a %d (desplaçament %d línia)."
-msgstr[1] "El tros #%d ha tingut èxit a %d (desplaçament %d línies)."
+msgid "Use -f if you really want to add them.\n"
+msgstr "Useu -f si realment els voleu afegir.\n"
+
+#: builtin/add.c:312
+msgid "adding files failed"
+msgstr "l'afegiment de fitxers ha fallat"
+
+#: builtin/add.c:348
+msgid "-A and -u are mutually incompatible"
+msgstr "-A i -u són mutualment incompatibles"
+
+#: builtin/add.c:355
+msgid "Option --ignore-missing can only be used together with --dry-run"
+msgstr "L'opció --ignore-missing només es pot usar junt amb --dry-run"
-#: builtin/apply.c:3032
+#: builtin/add.c:359
#, c-format
-msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
-msgstr "El context s'ha reduït a (%ld/%ld) per a aplicar el fragment a %d"
+msgid "--chmod param '%s' must be either -x or +x"
+msgstr "el paràmetre --chmod '%s' ha de ser o -x o +x"
-#: builtin/apply.c:3038
+#: builtin/add.c:374
#, c-format
-msgid ""
-"while searching for:\n"
-"%.*s"
-msgstr ""
-"tot cercant:\n"
-"%.*s"
+msgid "Nothing specified, nothing added.\n"
+msgstr "No s'ha especificat res, no s'ha afegit res.\n"
-#: builtin/apply.c:3060
+#: builtin/add.c:375
#, c-format
-msgid "missing binary patch data for '%s'"
-msgstr "manquen les dades de pedaç binari de '%s'"
+msgid "Maybe you wanted to say 'git add .'?\n"
+msgstr "Potser volíeu dir 'git add .'?\n"
+
+#: builtin/add.c:380 builtin/check-ignore.c:172 builtin/checkout.c:279
+#: builtin/checkout.c:472 builtin/clean.c:914 builtin/commit.c:350
+#: builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298
+#: builtin/submodule--helper.c:244
+msgid "index file corrupt"
+msgstr "fitxer d'índex malmès"
+
+#: builtin/am.c:414
+msgid "could not parse author script"
+msgstr "no s'ha pogut analitzar l'script d'autor"
-#: builtin/apply.c:3163
+#: builtin/am.c:491
#, c-format
-msgid "binary patch does not apply to '%s'"
-msgstr "el pedaç binari no s'aplica a '%s'"
+msgid "'%s' was deleted by the applypatch-msg hook"
+msgstr "s'ha suprimit '%s' pel ganxo applypatch-msg"
-#: builtin/apply.c:3169
+#: builtin/am.c:532
#, c-format
-msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
-msgstr ""
-"el pedaç binari a '%s' crea un resultat incorrecte (esperant %s, %s rebut)"
+msgid "Malformed input line: '%s'."
+msgstr "Línia d'entrada mal formada: '%s'."
-#: builtin/apply.c:3190
+#: builtin/am.c:569
#, c-format
-msgid "patch failed: %s:%ld"
-msgstr "el pedaç ha fallat: %s:%ld"
+msgid "Failed to copy notes from '%s' to '%s'"
+msgstr "S'ha fallat en copiar les notes de '%s' a '%s'"
+
+#: builtin/am.c:595
+msgid "fseek failed"
+msgstr "fseek ha fallat"
-#: builtin/apply.c:3314
+#: builtin/am.c:775
#, c-format
-msgid "cannot checkout %s"
-msgstr "no es pot agafar %s"
+msgid "could not parse patch '%s'"
+msgstr "no s'ha pogut analitzar el pedaç '%s'"
+
+#: builtin/am.c:840
+msgid "Only one StGIT patch series can be applied at once"
+msgstr "només una sèrie de pedaços StGIT es pot aplicar a la vegada"
-#: builtin/apply.c:3370
-#, c-format
-msgid "reading from '%s' beyond a symbolic link"
-msgstr "s'està llegint de '%s' més enllà d'un enllaç simbòlic"
+#: builtin/am.c:887
+msgid "invalid timestamp"
+msgstr "marca de temps no vàlida"
-#: builtin/apply.c:3399 builtin/apply.c:3630
-#, c-format
-msgid "path %s has been renamed/deleted"
-msgstr "el camí %s s'ha canviat de nom / s'ha suprimit"
+#: builtin/am.c:890 builtin/am.c:898
+msgid "invalid Date line"
+msgstr "línia Date no vàlida"
-#: builtin/apply.c:3482 builtin/apply.c:3644
-#, c-format
-msgid "%s: does not exist in index"
-msgstr "%s: no existeix en l'índex"
+#: builtin/am.c:895
+msgid "invalid timezone offset"
+msgstr "desplaçament de zona de temps no vàlid"
-#: builtin/apply.c:3486 builtin/apply.c:3636 builtin/apply.c:3658
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
+#: builtin/am.c:984
+msgid "Patch format detection failed."
+msgstr "La detecció de format de pedaç ha fallat."
-#: builtin/apply.c:3491 builtin/apply.c:3652
+#: builtin/am.c:989 builtin/clone.c:379
#, c-format
-msgid "%s: does not match index"
-msgstr "%s: no coincideix amb l'índex"
+msgid "failed to create directory '%s'"
+msgstr "s'ha fallat en crear el directori '%s'"
-#: builtin/apply.c:3597
-msgid "removal patch leaves file contents"
-msgstr "el pedaç d'eliminació deixa els continguts dels fitxers"
+#: builtin/am.c:993
+msgid "Failed to split patches."
+msgstr "S'ha fallat en dividir els pedaços."
-#: builtin/apply.c:3669
-#, c-format
-msgid "%s: wrong type"
-msgstr "%s: tipus erroni"
+#: builtin/am.c:1125 builtin/commit.c:376
+msgid "unable to write index file"
+msgstr "no s'ha pogut escriure el fitxer d'índex"
-#: builtin/apply.c:3671
+#: builtin/am.c:1176
#, c-format
-msgid "%s has type %o, expected %o"
-msgstr "%s és del tipus %o, s'esperava %o"
+msgid "When you have resolved this problem, run \"%s --continue\"."
+msgstr "Quan hàgiu resolt aquest problema, executeu \"%s --continue\"."
-#: builtin/apply.c:3822 builtin/apply.c:3824
+#: builtin/am.c:1177
#, c-format
-msgid "invalid path '%s'"
-msgstr "camí no vàlid: %s"
+msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
+msgstr ""
+"Si preferiu saltar aquest pedaç, executeu \"%s --skip\" en lloc d'això."
-#: builtin/apply.c:3879
+#: builtin/am.c:1178
#, c-format
-msgid "%s: already exists in index"
-msgstr "%s: ja existeix en l'índex"
+msgid "To restore the original branch and stop patching, run \"%s --abort\"."
+msgstr ""
+"Per a restaurar la branca original i deixar d'apedaçar, executeu \"%s --abort"
+"\"."
-#: builtin/apply.c:3882
-#, c-format
-msgid "%s: already exists in working directory"
-msgstr "%s: ja existeix en el directori de treball"
+#: builtin/am.c:1316
+msgid "Patch is empty. Was it split wrong?"
+msgstr "El pedaç és buit. S'ha dividit malament?"
-#: builtin/apply.c:3902
+#: builtin/am.c:1390 builtin/log.c:1550
#, c-format
-msgid "new mode (%o) of %s does not match old mode (%o)"
-msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o)"
+msgid "invalid ident line: %s"
+msgstr "línia d'identitat no vàlida: %s"
-#: builtin/apply.c:3907
+#: builtin/am.c:1417
#, c-format
-msgid "new mode (%o) of %s does not match old mode (%o) of %s"
-msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o) de %s"
+msgid "unable to parse commit %s"
+msgstr "no s'ha pogut analitzar la comissió %s"
-#: builtin/apply.c:3927
-#, c-format
-msgid "affected file '%s' is beyond a symbolic link"
-msgstr "el fitxer afectat '%s' és més enllà d'un enllaç simbòlic"
+#: builtin/am.c:1610
+msgid "Repository lacks necessary blobs to fall back on 3-way merge."
+msgstr ""
+"Al dipòsit li manquen els blobs necessaris per a retrocedir a una fusió de 3 "
+"vies."
-#: builtin/apply.c:3931
-#, c-format
-msgid "%s: patch does not apply"
-msgstr "%s: el pedaç no s'aplica"
+#: builtin/am.c:1612
+msgid "Using index info to reconstruct a base tree..."
+msgstr "S'està usant la informació d'índex per a reconstruir un arbre base..."
-#: builtin/apply.c:3945
-#, c-format
-msgid "Checking patch %s..."
-msgstr "S'està comprovant el pedaç %s..."
+#: builtin/am.c:1631
+msgid ""
+"Did you hand edit your patch?\n"
+"It does not apply to blobs recorded in its index."
+msgstr ""
+"Heu editat el vostre pedaç a mà?\n"
+"No s'aplica als blobs recordats en el seu índex."
-#: builtin/apply.c:4038 builtin/checkout.c:233 builtin/reset.c:135
-#, c-format
-msgid "make_cache_entry failed for path '%s'"
-msgstr "make_cache_entry ha fallat per al camí '%s'"
+#: builtin/am.c:1637
+msgid "Falling back to patching base and 3-way merge..."
+msgstr "S'està retrocedint a apedaçar la base i fusionar de 3 vies..."
-#: builtin/apply.c:4182
-#, c-format
-msgid "unable to remove %s from index"
-msgstr "no s'ha pogut eliminar %s de l'índex"
+#: builtin/am.c:1662
+msgid "Failed to merge in the changes."
+msgstr "S'ha fallat en fusionar els canvis."
-#: builtin/apply.c:4215
-#, c-format
-msgid "corrupt patch for submodule %s"
-msgstr "pedaç malmès per al submòdul %s"
+#: builtin/am.c:1686 builtin/merge.c:628
+msgid "git write-tree failed to write a tree"
+msgstr "git write-tree ha fallat en escriure un arbre"
-#: builtin/apply.c:4219
-#, c-format
-msgid "unable to stat newly created file '%s'"
-msgstr "no s'ha pogut fer stat al fitxer novament creat '%s'"
+#: builtin/am.c:1693
+msgid "applying to an empty history"
+msgstr "s'està aplicant a una història buida"
+
+#: builtin/am.c:1706 builtin/commit.c:1769 builtin/merge.c:798
+#: builtin/merge.c:823
+msgid "failed to write commit object"
+msgstr "s'ha fallat en escriure l'objecte de comissió"
-#: builtin/apply.c:4224
+#: builtin/am.c:1739 builtin/am.c:1743
#, c-format
-msgid "unable to create backing store for newly created file %s"
+msgid "cannot resume: %s does not exist."
+msgstr "no es pot reprendre: %s no existeix."
+
+#: builtin/am.c:1759
+msgid "cannot be interactive without stdin connected to a terminal."
msgstr ""
-"no s'ha pogut crear un magatzem de recolzament per al fitxer novament creat "
-"%s"
+"no es pot ser interactiu sense que stdin estigui connectada a un terminal."
-#: builtin/apply.c:4227 builtin/apply.c:4340
-#, c-format
-msgid "unable to add cache entry for %s"
-msgstr "no s'ha pogut afegir una entrada de cau per a %s"
+#: builtin/am.c:1764
+msgid "Commit Body is:"
+msgstr "El cos de la comissió és:"
-#: builtin/apply.c:4260
-#, c-format
-msgid "closing file '%s'"
-msgstr "s'està tancant el fitxer '%s'"
+#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
+#. in your translation. The program will only accept English
+#. input at this point.
+#.
+#: builtin/am.c:1774
+msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
+msgstr ""
+"Voleu aplicar-lo? [y]es/[n]o/[e]dita/[v]isualitza el pedaç/[a]ccepta'ls "
+"tots: "
-#: builtin/apply.c:4313
+#: builtin/am.c:1824
#, c-format
-msgid "unable to write file '%s' mode %o"
-msgstr "no s'ha pogut escriure el fitxer '%s' mode %o"
+msgid "Dirty index: cannot apply patches (dirty: %s)"
+msgstr "Índex brut: no es pot aplicar pedaços (bruts: %s)"
-#: builtin/apply.c:4403
+#: builtin/am.c:1861 builtin/am.c:1933
#, c-format
-msgid "Applied patch %s cleanly."
-msgstr "El pedaç %s s'ha aplicat netament."
+msgid "Applying: %.*s"
+msgstr "S'està aplicant: %.*s"
-#: builtin/apply.c:4411
-msgid "internal error"
-msgstr "error intern"
+#: builtin/am.c:1877
+msgid "No changes -- Patch already applied."
+msgstr "Sense canvis -- El pedaç ja s'ha aplicat."
-#: builtin/apply.c:4414
+#: builtin/am.c:1885
#, c-format
-msgid "Applying patch %%s with %d reject..."
-msgid_plural "Applying patch %%s with %d rejects..."
-msgstr[0] "S'està aplicant el pedaç %%s amb %d rebuig..."
-msgstr[1] "S'està aplicant el pedaç %%s amb %d rebuitjos..."
+msgid "Patch failed at %s %.*s"
+msgstr "El pedaç ha fallat a %s %.*s"
-#: builtin/apply.c:4424
+#: builtin/am.c:1891
#, c-format
-msgid "truncating .rej filename to %.*s.rej"
-msgstr "s'està truncant el nom del fitxer .rej a %.*s.rej"
+msgid "The copy of the patch that failed is found in: %s"
+msgstr "La còpia del pedaç que ha fallat es troba en: %s"
-#: builtin/apply.c:4432
-#, c-format
-msgid "cannot open %s: %s"
-msgstr "no es pot obrir %s: %s"
+#: builtin/am.c:1936
+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 ""
+"Cap canvi - heu oblidat d'usar 'git add'?\n"
+"Si no hi ha res a allistar, probablement alguna altra cosa ja ha\n"
+"introduït els mateixos canvis; potser voleu ometre aquest pedaç."
-#: builtin/apply.c:4445
-#, c-format
-msgid "Hunk #%d applied cleanly."
-msgstr "El tros #%d s'ha aplicat netament."
+#: builtin/am.c:1943
+msgid ""
+"You still have unmerged paths in your index.\n"
+"Did you forget to use 'git add'?"
+msgstr ""
+"Encara teniu camins sense fusionar en el vostre índex.\n"
+"Heu oblidat d'usar 'git add'?"
-#: builtin/apply.c:4448
+#: builtin/am.c:2051 builtin/am.c:2055 builtin/am.c:2067 builtin/reset.c:308
+#: builtin/reset.c:316
#, c-format
-msgid "Rejected hunk #%d."
-msgstr "S'ha rebutjat el tros #%d."
+msgid "Could not parse object '%s'."
+msgstr "No s'ha pogut analitzar l'objecte '%s'."
+
+#: builtin/am.c:2103
+msgid "failed to clean index"
+msgstr "s'ha fallat en netejar l'índex"
+
+#: builtin/am.c:2137
+msgid ""
+"You seem to have moved HEAD since the last 'am' failure.\n"
+"Not rewinding to ORIG_HEAD"
+msgstr ""
+"Sembla que heu mogut HEAD després de l'última fallada de 'am'.\n"
+"No s'està rebobinant a ORIG_HEAD"
-#: builtin/apply.c:4537
+#: builtin/am.c:2200
#, c-format
-msgid "Skipped patch '%s'."
-msgstr "S'ha saltat el pedaç '%s'."
+msgid "Invalid value for --patch-format: %s"
+msgstr "Valor no vàlid per a --patch-format: %s"
-#: builtin/apply.c:4545
-msgid "unrecognized input"
-msgstr "entrada no reconeguda"
+#: builtin/am.c:2233
+msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
+msgstr "git am [<opcions>] [(<bústia> | <directori-de-correu>)...]"
-#: builtin/apply.c:4556
-msgid "unable to read index file"
-msgstr "no es pot llegir el fitxer d'índex"
+#: builtin/am.c:2234
+msgid "git am [<options>] (--continue | --skip | --abort)"
+msgstr "git am [<opcions>] (--continue | --skip | --abort)"
-#: builtin/apply.c:4701
-msgid "--3way outside a repository"
-msgstr "--3way fora d'un dipòsit"
+#: builtin/am.c:2240
+msgid "run interactively"
+msgstr "executa interactivament"
-#: builtin/apply.c:4709
-msgid "--index outside a repository"
-msgstr "--index fora d'un dipòsit"
+#: builtin/am.c:2242
+msgid "historical option -- no-op"
+msgstr "opció històrica -- no-op"
-#: builtin/apply.c:4712
-msgid "--cached outside a repository"
-msgstr "--cached fora d'un dipòsit"
+#: builtin/am.c:2244
+msgid "allow fall back on 3way merging if needed"
+msgstr "permet retrocedir a una fusió de 3 vies si és necessari"
-#: builtin/apply.c:4745
-#, c-format
-msgid "can't open patch '%s'"
-msgstr "no es pot obrir el pedaç '%s'"
+#: builtin/am.c:2245 builtin/init-db.c:483 builtin/prune-packed.c:57
+#: builtin/repack.c:172
+msgid "be quiet"
+msgstr "calla"
-#: builtin/apply.c:4760
-#, c-format
-msgid "squelched %d whitespace error"
-msgid_plural "squelched %d whitespace errors"
-msgstr[0] "s'ha omès %d error d'espai en blanc"
-msgstr[1] "s'han omès %d errors d'espai en blanc"
+#: builtin/am.c:2247
+msgid "add a Signed-off-by line to the commit message"
+msgstr "afegeix una línia Signed-off-by al missatge de comissió"
-#: builtin/apply.c:4766 builtin/apply.c:4776
-#, c-format
-msgid "%d line adds whitespace errors."
-msgid_plural "%d lines add whitespace errors."
-msgstr[0] "%d línia afegeix errors d'espai en blanc."
-msgstr[1] "%d línies afegeixen errors d'espai en blanc."
+#: builtin/am.c:2250
+msgid "recode into utf8 (default)"
+msgstr "recodifica en utf8 (per defecte)"
-#: builtin/apply.c:4800
-msgid "don't apply changes matching the given path"
-msgstr "no apliquis els canvis que coincideixin amb el camí donat"
+#: builtin/am.c:2252
+msgid "pass -k flag to git-mailinfo"
+msgstr "passa la bandera -k al git-mailinfo"
-#: builtin/apply.c:4803
-msgid "apply changes matching the given path"
-msgstr "aplica els canvis que coincideixin amb el camí donat"
+#: builtin/am.c:2254
+msgid "pass -b flag to git-mailinfo"
+msgstr "passa la bandera -b al git-mailinfo"
-#: builtin/apply.c:4806
-msgid "remove <num> leading slashes from traditional diff paths"
-msgstr ""
-"elimina <nombre> barres obliqües inicials dels camins de diferència "
-"tradicionals"
+#: builtin/am.c:2256
+msgid "pass -m flag to git-mailinfo"
+msgstr "passa la bandera -m al git-mailinfo"
-#: builtin/apply.c:4809
-msgid "ignore additions made by the patch"
-msgstr "ignora afegiments fets pel pedaç"
+#: builtin/am.c:2258
+msgid "pass --keep-cr flag to git-mailsplit for mbox format"
+msgstr "passa la bandera --keep-cr al git-mailsplit per al format mbox"
-#: builtin/apply.c:4811
-msgid "instead of applying the patch, output diffstat for the input"
+#: builtin/am.c:2261
+msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
-"en lloc d'aplicar el pedaç, emet les estadístiques de diferència de l'entrada"
+"no passis la bandera --keep-cr al git-mailsplit independent de am.keepcr"
-#: builtin/apply.c:4815
-msgid "show number of added and deleted lines in decimal notation"
-msgstr "mostra el nombre de línies afegides i suprimides en notació decimal"
+#: builtin/am.c:2264
+msgid "strip everything before a scissors line"
+msgstr "despulla tot abans d'una línia de tissores"
-#: builtin/apply.c:4817
-msgid "instead of applying the patch, output a summary for the input"
-msgstr "en lloc d'aplicar el pedaç, emet un resum de l'entrada"
+#: builtin/am.c:2266 builtin/am.c:2269 builtin/am.c:2272 builtin/am.c:2275
+#: builtin/am.c:2278 builtin/am.c:2281 builtin/am.c:2284 builtin/am.c:2287
+#: builtin/am.c:2293
+msgid "pass it through git-apply"
+msgstr "passa-ho a través del git-apply"
+
+#: builtin/am.c:2283 builtin/fmt-merge-msg.c:662 builtin/fmt-merge-msg.c:665
+#: builtin/grep.c:707 builtin/merge.c:200 builtin/pull.c:135 builtin/pull.c:194
+#: builtin/repack.c:181 builtin/repack.c:185 builtin/show-branch.c:644
+#: builtin/show-ref.c:175 builtin/tag.c:340 parse-options.h:132
+#: parse-options.h:134 parse-options.h:245
+msgid "n"
+msgstr "n"
-#: builtin/apply.c:4819
-msgid "instead of applying the patch, see if the patch is applicable"
-msgstr "en lloc d'aplicar el pedaç, veges si el pedaç és aplicable"
+#: builtin/am.c:2289 builtin/for-each-ref.c:37 builtin/replace.c:438
+#: builtin/tag.c:372
+msgid "format"
+msgstr "format"
-#: builtin/apply.c:4821
-msgid "make sure the patch is applicable to the current index"
-msgstr "assegura que el pedaç sigui aplicable a l'índex actual"
+#: builtin/am.c:2290
+msgid "format the patch(es) are in"
+msgstr "el format en el qual estan els pedaços"
-#: builtin/apply.c:4823
-msgid "apply a patch without touching the working tree"
-msgstr "aplica un pedaç sense tocar l'arbre de treball"
+#: builtin/am.c:2296
+msgid "override error message when patch failure occurs"
+msgstr ""
+"passa per alt el missatge d'error quan s'ocorre una fallada en apedaçar"
-#: builtin/apply.c:4825
-msgid "accept a patch that touches outside the working area"
-msgstr "accepta un pedaç que toqui fora de l'àrea de treball"
+#: builtin/am.c:2298
+msgid "continue applying patches after resolving a conflict"
+msgstr "segueix aplicant pedaços després de resoldre un conflicte"
-#: builtin/apply.c:4827
-msgid "also apply the patch (use with --stat/--summary/--check)"
-msgstr "aplica el pedaç també (useu amb --stat/--summary/--check)"
+#: builtin/am.c:2301
+msgid "synonyms for --continue"
+msgstr "sinònims de --continue"
-#: builtin/apply.c:4829
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "intenta una fusió de tres vies si el pedaç no s'aplica"
+#: builtin/am.c:2304
+msgid "skip the current patch"
+msgstr "salta el pedaç actual"
-#: builtin/apply.c:4831
-msgid "build a temporary index based on embedded index information"
-msgstr "construeix un índex temporal basat en la informació d'índex incrustada"
+#: builtin/am.c:2307
+msgid "restore the original branch and abort the patching operation."
+msgstr "restaura la branca original i avorta l'operació d'apedaçament."
-#: builtin/apply.c:4834 builtin/checkout-index.c:169 builtin/ls-files.c:426
-msgid "paths are separated with NUL character"
-msgstr "els camins se separen amb el caràcter NUL"
+#: builtin/am.c:2311
+msgid "lie about committer date"
+msgstr "menteix sobre la data del comitent"
-#: builtin/apply.c:4836
-msgid "ensure at least <n> lines of context match"
-msgstr "assegura't que almenys <n> línies de context coincideixin"
+#: builtin/am.c:2313
+msgid "use current timestamp for author date"
+msgstr "usa el marc de temps actual per la data d'autor"
-#: builtin/apply.c:4838
-msgid "detect new or modified lines that have whitespace errors"
-msgstr ""
-"detecta les línies noves o modificades que tinguin errors d'espai en blanc"
+#: builtin/am.c:2315 builtin/commit.c:1605 builtin/merge.c:229
+#: builtin/pull.c:165 builtin/revert.c:92 builtin/tag.c:355
+msgid "key-id"
+msgstr "ID de clau"
-#: builtin/apply.c:4841 builtin/apply.c:4844
-msgid "ignore changes in whitespace when finding context"
-msgstr "ignora els canvis d'espai en blanc en cercar context"
+#: builtin/am.c:2316
+msgid "GPG-sign commits"
+msgstr "signa les comissions amb GPG"
-#: builtin/apply.c:4847
-msgid "apply the patch in reverse"
-msgstr "aplica el pedaç al revés"
+#: builtin/am.c:2319
+msgid "(internal use for git-rebase)"
+msgstr "(ús intern per al git-rebase)"
-#: builtin/apply.c:4849
-msgid "don't expect at least one line of context"
-msgstr "no esperis almenys una línia de context"
+#: builtin/am.c:2334
+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 ""
+"Fa molt que l'opció -b/--binary no ha fet res, i\n"
+"s'eliminarà. Si us plau, no l'useu més."
-#: builtin/apply.c:4851
-msgid "leave the rejected hunks in corresponding *.rej files"
-msgstr "deixa els trossos rebutjats en fitxers *.reg coresspondents"
+#: builtin/am.c:2341
+msgid "failed to read the index"
+msgstr "s'ha fallat en llegir l'índex"
-#: builtin/apply.c:4853
-msgid "allow overlapping hunks"
-msgstr "permet trossos encavalcants"
+#: builtin/am.c:2356
+#, c-format
+msgid "previous rebase directory %s still exists but mbox given."
+msgstr ""
+"un directori de rebasament anterior %s encara existeix però s'ha donat una "
+"bústia."
-#: builtin/apply.c:4856
-msgid "tolerate incorrectly detected missing new-line at the end of file"
-msgstr "tolera una línia nova incorrectament detectada al final del fitxer"
+#: builtin/am.c:2380
+#, c-format
+msgid ""
+"Stray %s directory found.\n"
+"Use \"git am --abort\" to remove it."
+msgstr ""
+"S'ha trobat un directori %s extraviat.\n"
+"Useu \"git am --abort\" per a eliminar-lo."
-#: builtin/apply.c:4859
-msgid "do not trust the line counts in the hunk headers"
-msgstr "no confiïs en els recomptes de línia en les capçaleres dels trossos"
+#: builtin/am.c:2386
+msgid "Resolve operation not in progress, we are not resuming."
+msgstr "Una operació de resolució no està en curs; no reprenem."
-#: builtin/apply.c:4862
-msgid "prepend <root> to all filenames"
-msgstr "anteposa <arrel> a tots els noms de fitxer"
+#: builtin/apply.c:8
+msgid "git apply [<options>] [<patch>...]"
+msgstr "git apply [<opcions>] [<pedaç>...]"
#: builtin/archive.c:17
#, c-format
msgid "Blaming lines"
msgstr "S'estan culpant les línies"
-#: builtin/blame.c:2536
+#: builtin/blame.c:2577
msgid "Show blame entries as we find them, incrementally"
msgstr "Mostra les entrades de culpa mentre les trobem, incrementalment"
-#: builtin/blame.c:2537
+#: builtin/blame.c:2578
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr ""
"Mostra un SHA-1 en blanc per les comissions de frontera (Per defecte: "
"desactivat)"
-#: builtin/blame.c:2538
+#: builtin/blame.c:2579
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr ""
"No tractis les comissions d'arrel com a límits (Per defecte: desactivat)"
-#: builtin/blame.c:2539
+#: builtin/blame.c:2580
msgid "Show work cost statistics"
msgstr "Mostra les estadístiques de preu de treball"
-#: builtin/blame.c:2540
+#: builtin/blame.c:2581
msgid "Force progress reporting"
msgstr "Força l'informe de progrés"
-#: builtin/blame.c:2541
+#: builtin/blame.c:2582
msgid "Show output score for blame entries"
msgstr "Mostra la puntuació de sortida de les entrades de culpa"
-#: builtin/blame.c:2542
+#: builtin/blame.c:2583
msgid "Show original filename (Default: auto)"
msgstr "Mostra el nom de fitxer original (Per defecte: automàtic)"
-#: builtin/blame.c:2543
+#: builtin/blame.c:2584
msgid "Show original linenumber (Default: off)"
msgstr "Mostra el número de línia original (Per defecte: desactivat)"
-#: builtin/blame.c:2544
+#: builtin/blame.c:2585
msgid "Show in a format designed for machine consumption"
msgstr "Presenta en un format dissenyat per consumpció per màquina"
-#: builtin/blame.c:2545
+#: builtin/blame.c:2586
msgid "Show porcelain format with per-line commit information"
msgstr "Mostra el format de porcellana amb informació de comissió per línia"
-#: builtin/blame.c:2546
+#: builtin/blame.c:2587
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr ""
"Usa el mateix mode de sortida que git-annotate (Per defecte: desactivat)"
-#: builtin/blame.c:2547
+#: builtin/blame.c:2588
msgid "Show raw timestamp (Default: off)"
msgstr "Mostra la marca de temps crua (Per defecte: desactivat)"
-#: builtin/blame.c:2548
+#: builtin/blame.c:2589
msgid "Show long commit SHA1 (Default: off)"
msgstr "Mostra l'SHA1 de comissió llarg (Per defecte: desactivat)"
-#: builtin/blame.c:2549
+#: builtin/blame.c:2590
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Omet el nom d'autor i la marca de temps (Per defecte: desactivat)"
-#: builtin/blame.c:2550
+#: builtin/blame.c:2591
msgid "Show author email instead of name (Default: off)"
msgstr ""
"Mostra l'adreça de correu electrònic de l'autor en lloc del nom (Per "
"defecte: desactivat)"
-#: builtin/blame.c:2551
+#: builtin/blame.c:2592
msgid "Ignore whitespace differences"
msgstr "Ignora les diferències d'espai en blanc"
-#: builtin/blame.c:2552
+#: builtin/blame.c:2599
+msgid "Use an experimental indent-based heuristic to improve diffs"
+msgstr ""
+"Usa un heurístic experimental basat en sagnat per a millorar les diferències"
+
+#: builtin/blame.c:2600
+msgid "Use an experimental blank-line-based heuristic to improve diffs"
+msgstr ""
+"Usa un heurístic experimental basat en línies en blanc per a millorar les "
+"diferències"
+
+#: builtin/blame.c:2602
msgid "Spend extra cycles to find better match"
msgstr "Gasta cicles extres per a trobar una coincidència millor"
-#: builtin/blame.c:2553
+#: builtin/blame.c:2603
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
-#: builtin/blame.c:2554
+#: builtin/blame.c:2604
msgid "Use <file>'s contents as the final image"
msgstr "Usa els continguts de <fitxer> com a la imatge final"
-#: builtin/blame.c:2555 builtin/blame.c:2556
+#: builtin/blame.c:2605 builtin/blame.c:2606
msgid "score"
msgstr "puntuació"
-#: builtin/blame.c:2555
+#: builtin/blame.c:2605
msgid "Find line copies within and across files"
msgstr "Troba còpies de línia dins i a través dels fitxers"
-#: builtin/blame.c:2556
+#: builtin/blame.c:2606
msgid "Find line movements within and across files"
msgstr "Troba moviments de línia dins i a través dels fitxers"
-#: builtin/blame.c:2557
+#: builtin/blame.c:2607
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2557
+#: builtin/blame.c:2607
msgid "Process only line range n,m, counting from 1"
msgstr "Processa només el rang de línies n,m, comptant des d'1"
+#: builtin/blame.c:2654
+msgid "--progress can't be used with --incremental or porcelain formats"
+msgstr ""
+"no es pot usar --progress amb els formats --incremental o de porcellana"
+
#. TRANSLATORS: This string is used to tell us the maximum
#. display width for a relative timestamp in "git blame"
#. output. For C locale, "4 years, 11 months ago", which
#. takes 22 places, is the longest among various forms of
#. relative timestamps, but your language may need more or
#. fewer display columns.
-#: builtin/blame.c:2649
+#: builtin/blame.c:2700
msgid "4 years, 11 months ago"
msgstr "fa 4 anys i 11 mesos"
+#: builtin/blame.c:2780
+msgid "--contents and --reverse do not blend well."
+msgstr "--contents i --reverse no es jutgen bé."
+
+#: builtin/blame.c:2800
+msgid "cannot use --contents with final commit object name"
+msgstr "no es pot usar --contents amb el nom d'objecte de la comissió final"
+
+#: builtin/blame.c:2805
+msgid "--reverse and --first-parent together require specified latest commit"
+msgstr ""
+"--reverse i --first-parent-together requereixen una última comissió "
+"especificada"
+
+#: builtin/blame.c:2832
+msgid ""
+"--reverse --first-parent together require range along first-parent chain"
+msgstr ""
+"--reverse --first-parent junts requereixen un rang de la cadena de mares "
+"primeres"
+
+#: builtin/blame.c:2843
+#, c-format
+msgid "no such path %s in %s"
+msgstr "no hi ha tal camí %s en %s"
+
+#: builtin/blame.c:2854
+#, c-format
+msgid "cannot read blob %s for path %s"
+msgstr "no es pot llegir el blob %s per al camí %s"
+
+#: builtin/blame.c:2873
+#, c-format
+msgid "file %s has only %lu line"
+msgid_plural "file %s has only %lu lines"
+msgstr[0] "el fitxer %s té només %lu línia"
+msgstr[1] "el fitxer %s té només %lu línies"
+
#: builtin/branch.c:26
msgid "git branch [<options>] [-r | -a] [--merged | --no-merged]"
msgstr "git branch [<opcions>] [-r | -a] [--merged | --no-merged]"
msgid "change the upstream info"
msgstr "canvia la informació de font"
+#: builtin/branch.c:660
+msgid "Unset the upstream info"
+msgstr "Desestableix la informació de font"
+
#: builtin/branch.c:661
msgid "use colored output"
msgstr "usa sortida colorada"
msgid "field name to sort on"
msgstr "nom del camp en el qual ordenar"
-#: builtin/branch.c:686 builtin/for-each-ref.c:41 builtin/notes.c:402
-#: builtin/notes.c:405 builtin/notes.c:565 builtin/notes.c:568
+#: builtin/branch.c:686 builtin/for-each-ref.c:41 builtin/notes.c:404
+#: builtin/notes.c:407 builtin/notes.c:567 builtin/notes.c:570
#: builtin/tag.c:369
msgid "object"
msgstr "objecte"
msgid "Failed to resolve HEAD as a valid ref."
msgstr "S'ha fallat en resoldre HEAD com a referència vàlida."
-#: builtin/branch.c:709 builtin/clone.c:707
+#: builtin/branch.c:709 builtin/clone.c:706
msgid "HEAD not found below refs/heads!"
msgstr "HEAD no trobat sota refs/heads!"
msgid "Need a repository to unbundle."
msgstr "Cal un dipòsit per a desfer un farcell."
-#: builtin/cat-file.c:443
+#: builtin/cat-file.c:513
msgid ""
-"git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|"
-"<type>|--textconv) <object>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
+"p | <type> | --textconv | --filters) [--path=<path>] <object>"
msgstr ""
-"git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|"
-"<tipus>|--textconv) <objecte>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
+"p | <tipus> | --textconv | --filters [--path=<camí>]) <objecte>"
-#: builtin/cat-file.c:444
-msgid "git cat-file (--batch | --batch-check) [--follow-symlinks]"
-msgstr "git cat-file (--batch | --batch-check) [--follow-symlinks]"
+#: builtin/cat-file.c:514
+msgid ""
+"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
+"filters]"
+msgstr ""
+"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
+"filters]"
-#: builtin/cat-file.c:481
+#: builtin/cat-file.c:551
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<tipus> pot ser un de: blob, tree, commit, tag"
-#: builtin/cat-file.c:482
+#: builtin/cat-file.c:552
msgid "show object type"
msgstr "mostra el tipus de l'objecte"
-#: builtin/cat-file.c:483
+#: builtin/cat-file.c:553
msgid "show object size"
msgstr "mostra la mida de l'objecte"
-#: builtin/cat-file.c:485
+#: builtin/cat-file.c:555
msgid "exit with zero when there's no error"
msgstr "surt amb zero quan no hi ha error"
-#: builtin/cat-file.c:486
+#: builtin/cat-file.c:556
msgid "pretty-print object's content"
msgstr "imprimeix bellament el contingut de l'objecte"
-#: builtin/cat-file.c:488
+#: builtin/cat-file.c:558
msgid "for blob objects, run textconv on object's content"
msgstr "en els objectes de blob, executa textconv en el contingut de l'objecte"
-#: builtin/cat-file.c:490
+#: builtin/cat-file.c:560
+msgid "for blob objects, run filters on object's content"
+msgstr ""
+"en els objectes de blob, executa els filtres en el contingut de l'objecte"
+
+#: builtin/cat-file.c:561 git-submodule.sh:923
+msgid "blob"
+msgstr "blob"
+
+#: builtin/cat-file.c:562
+msgid "use a specific path for --textconv/--filters"
+msgstr "usa un camí especìfic per a --textconv/--filters"
+
+#: builtin/cat-file.c:564
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "permet que -s i -t funcionin amb objectes trencats/malmesos"
-#: builtin/cat-file.c:491
+#: builtin/cat-file.c:565
msgid "buffer --batch output"
msgstr "posa la sortida de --batch en memòria intermèdia"
-#: builtin/cat-file.c:493
+#: builtin/cat-file.c:567
msgid "show info and content of objects fed from the standard input"
msgstr ""
"mostra la informació i contingut dels objectes rebuts de l'entrada estàndard"
-#: builtin/cat-file.c:496
+#: builtin/cat-file.c:570
msgid "show info about objects fed from the standard input"
msgstr "mostra informació sobre els objectes rebuts de l'entrada estàndard"
-#: builtin/cat-file.c:499
+#: builtin/cat-file.c:573
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr ""
"segueix els enllaços simbòlics en l'arbre (s'usa amb --batch o --batch-check)"
-#: builtin/cat-file.c:501
+#: builtin/cat-file.c:575
msgid "show all objects with --batch or --batch-check"
msgstr "mostra tots els objectes amb --batch o --batch-check"
msgid "use .gitattributes only from the index"
msgstr "usa .gitattributes només des de l'índex"
-#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:97
+#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:98
msgid "read file names from stdin"
msgstr "llegeix els noms de fitxer d'stdin"
msgid "terminate input and output records by a NUL character"
msgstr "acaba els registres d'entrada i de sortida amb un caràcter NUL"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1138 builtin/gc.c:325
+#: builtin/check-ignore.c:18 builtin/checkout.c:1137 builtin/gc.c:325
msgid "suppress progress reporting"
msgstr "omet el reportatge de progrés"
msgstr "escriu el contingut a fitxers temporals"
#: builtin/checkout-index.c:174 builtin/column.c:30
-#: builtin/submodule--helper.c:488 builtin/submodule--helper.c:491
-#: builtin/submodule--helper.c:494 builtin/submodule--helper.c:497
-#: builtin/submodule--helper.c:830 builtin/worktree.c:469
+#: builtin/submodule--helper.c:595 builtin/submodule--helper.c:598
+#: builtin/submodule--helper.c:604 builtin/submodule--helper.c:951
+#: builtin/worktree.c:469
msgid "string"
msgstr "cadena"
#: builtin/checkout.c:230
#, c-format
msgid "Unable to add merge result for '%s'"
-msgstr "no s'ha pogut afegir el resultat de fusió per a '%s'"
+msgstr "No s'ha pogut afegir el resultat de fusió per a '%s'"
#: builtin/checkout.c:250 builtin/checkout.c:253 builtin/checkout.c:256
#: builtin/checkout.c:259
msgid "path '%s' is unmerged"
msgstr "el camí '%s' està sense fusionar"
-#: builtin/checkout.c:495
+#: builtin/checkout.c:494
msgid "you need to resolve your current index first"
msgstr "heu de primer resoldre el vostre índex actual"
-#: builtin/checkout.c:625
+#: builtin/checkout.c:624
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "No es pot fer reflog per a '%s': %s\n"
-#: builtin/checkout.c:664
+#: builtin/checkout.c:663
msgid "HEAD is now at"
msgstr "HEAD ara és a"
-#: builtin/checkout.c:668 builtin/clone.c:661
+#: builtin/checkout.c:667 builtin/clone.c:660
msgid "unable to update HEAD"
msgstr "no s'ha pogut actualitzar HEAD"
-#: builtin/checkout.c:672
+#: builtin/checkout.c:671
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Restableix la branca '%s'\n"
-#: builtin/checkout.c:675
+#: builtin/checkout.c:674
#, c-format
msgid "Already on '%s'\n"
msgstr "Ja en '%s'\n"
-#: builtin/checkout.c:679
+#: builtin/checkout.c:678
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "S'ha agafat i restablert la branca '%s'\n"
-#: builtin/checkout.c:681 builtin/checkout.c:1070
+#: builtin/checkout.c:680 builtin/checkout.c:1069
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "S'ha agafat la branca nova '%s'\n"
-#: builtin/checkout.c:683
+#: builtin/checkout.c:682
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "S'ha agafat la branca '%s'\n"
-#: builtin/checkout.c:734
+#: builtin/checkout.c:733
#, c-format
msgid " ... and %d more.\n"
msgstr " ... i %d més.\n"
-#: builtin/checkout.c:740
+#: builtin/checkout.c:739
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
"\n"
"%s\n"
-#: builtin/checkout.c:759
+#: builtin/checkout.c:758
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
" git branch <nom-de-branca-nova> %s\n"
"\n"
-#: builtin/checkout.c:795
+#: builtin/checkout.c:794
msgid "internal error in revision walk"
msgstr "error intern en el passeig per revisions"
-#: builtin/checkout.c:799
+#: builtin/checkout.c:798
msgid "Previous HEAD position was"
msgstr "La posició de HEAD anterior era"
-#: builtin/checkout.c:826 builtin/checkout.c:1065
+#: builtin/checkout.c:825 builtin/checkout.c:1064
msgid "You are on a branch yet to be born"
msgstr "Sou en una branca que encara ha de nàixer"
-#: builtin/checkout.c:971
+#: builtin/checkout.c:970
#, c-format
msgid "only one reference expected, %d given."
msgstr "s'esperava només una referència, s'han donat %d."
-#: builtin/checkout.c:1011 builtin/worktree.c:214
+#: builtin/checkout.c:1010 builtin/worktree.c:214
#, c-format
msgid "invalid reference: %s"
msgstr "referència no vàlida: %s"
-#: builtin/checkout.c:1040
+#: builtin/checkout.c:1039
#, c-format
msgid "reference is not a tree: %s"
msgstr "la referència no és un arbre: %s"
-#: builtin/checkout.c:1079
+#: builtin/checkout.c:1078
msgid "paths cannot be used with switching branches"
msgstr "els camins no es poden usar amb canvi de branca"
-#: builtin/checkout.c:1082 builtin/checkout.c:1086
+#: builtin/checkout.c:1081 builtin/checkout.c:1085
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "'%s' no es pot usar amb canvi de branca"
-#: builtin/checkout.c:1090 builtin/checkout.c:1093 builtin/checkout.c:1098
-#: builtin/checkout.c:1101
+#: builtin/checkout.c:1089 builtin/checkout.c:1092 builtin/checkout.c:1097
+#: builtin/checkout.c:1100
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "'%s' no es pot usar amb '%s'"
-#: builtin/checkout.c:1106
+#: builtin/checkout.c:1105
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "No es pot canviar la branca a la no comissió '%s'"
-#: builtin/checkout.c:1139 builtin/checkout.c:1141 builtin/clone.c:88
+#: builtin/checkout.c:1138 builtin/checkout.c:1140 builtin/clone.c:93
#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:324
#: builtin/worktree.c:326
msgid "branch"
msgstr "branca"
-#: builtin/checkout.c:1140
+#: builtin/checkout.c:1139
msgid "create and checkout a new branch"
msgstr "crea i agafa una branca nova"
-#: builtin/checkout.c:1142
+#: builtin/checkout.c:1141
msgid "create/reset and checkout a branch"
msgstr "crea/restableix i agafa una branca"
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1142
msgid "create reflog for new branch"
msgstr "crea un registre de referència per a la branca nova"
-#: builtin/checkout.c:1144 builtin/worktree.c:328
+#: builtin/checkout.c:1143 builtin/worktree.c:328
msgid "detach HEAD at named commit"
msgstr "separa HEAD a la comissió anomenada"
-#: builtin/checkout.c:1145
+#: builtin/checkout.c:1144
msgid "set upstream info for new branch"
msgstr "estableix la informació de font de la branca nova"
-#: builtin/checkout.c:1147
+#: builtin/checkout.c:1146
msgid "new-branch"
msgstr "branca-nova"
-#: builtin/checkout.c:1147
+#: builtin/checkout.c:1146
msgid "new unparented branch"
msgstr "branca òrfena nova"
-#: builtin/checkout.c:1148
+#: builtin/checkout.c:1147
msgid "checkout our version for unmerged files"
msgstr "agafa la versió nostra dels fitxers sense fusionar"
-#: builtin/checkout.c:1150
+#: builtin/checkout.c:1149
msgid "checkout their version for unmerged files"
msgstr "agafa la versió seva dels fitxers sense fusionar"
-#: builtin/checkout.c:1152
+#: builtin/checkout.c:1151
msgid "force checkout (throw away local modifications)"
msgstr "agafa a la força (descarta qualsevulla modificació local)"
-#: builtin/checkout.c:1153
+#: builtin/checkout.c:1152
msgid "perform a 3-way merge with the new branch"
msgstr "realitza una fusió de 3 vies amb la branca nova"
-#: builtin/checkout.c:1154 builtin/merge.c:231
+#: builtin/checkout.c:1153 builtin/merge.c:231
msgid "update ignored files (default)"
msgstr "actualitza els fitxers ignorats (per defecte)"
-#: builtin/checkout.c:1155 builtin/log.c:1459 parse-options.h:250
+#: builtin/checkout.c:1154 builtin/log.c:1466 parse-options.h:251
msgid "style"
msgstr "estil"
-#: builtin/checkout.c:1156
+#: builtin/checkout.c:1155
msgid "conflict style (merge or diff3)"
msgstr "estil de conflicte (fusió o diff3)"
-#: builtin/checkout.c:1159
+#: builtin/checkout.c:1158
msgid "do not limit pathspecs to sparse entries only"
msgstr "no limitis les especificacions de camí només a entrades disperses"
-#: builtin/checkout.c:1161
+#: builtin/checkout.c:1160
msgid "second guess 'git checkout <no-such-branch>'"
msgstr "dubta 'git checkout <cap-branca-així>'"
-#: builtin/checkout.c:1163
+#: builtin/checkout.c:1162
msgid "do not check if another worktree is holding the given ref"
msgstr "no comprovis si altre arbre de treball té la referència donada"
-#: builtin/checkout.c:1164 builtin/clone.c:60 builtin/fetch.c:117
-#: builtin/merge.c:228 builtin/pull.c:116 builtin/push.c:536
+#: builtin/checkout.c:1163 builtin/clone.c:63 builtin/fetch.c:119
+#: builtin/merge.c:228 builtin/pull.c:117 builtin/push.c:536
#: builtin/send-pack.c:168
msgid "force progress reporting"
msgstr "força l'informe de progrés"
-#: builtin/checkout.c:1195
+#: builtin/checkout.c:1194
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "-b, -B i --orphan són mutualment exclusius"
-#: builtin/checkout.c:1212
+#: builtin/checkout.c:1211
msgid "--track needs a branch name"
msgstr "--track necessita un nom de branca"
-#: builtin/checkout.c:1217
+#: builtin/checkout.c:1216
msgid "Missing branch name; try -b"
msgstr "Manca el nom de branca; proveu -b"
-#: builtin/checkout.c:1253
+#: builtin/checkout.c:1252
msgid "invalid path specification"
msgstr "especificació de camí no vàlida"
-#: builtin/checkout.c:1260
+#: builtin/checkout.c:1259
#, c-format
msgid ""
"Cannot update paths and switch to branch '%s' at the same time.\n"
"No es poden actualitzar els camins i canviar a la branca '%s' a la vegada.\n"
"Volíeu agafar '%s', la qual no es pot resoldre com a comissió?"
-#: builtin/checkout.c:1265
+#: builtin/checkout.c:1264
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach no accepta un paràmetre de camí '%s'"
-#: builtin/checkout.c:1269
+#: builtin/checkout.c:1268
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
msgid "remove whole directories"
msgstr "elimina directoris sencers"
-#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:724
-#: builtin/ls-files.c:457 builtin/name-rev.c:314 builtin/show-ref.c:182
+#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:725
+#: builtin/ls-files.c:536 builtin/name-rev.c:313 builtin/show-ref.c:182
msgid "pattern"
msgstr "patró"
msgid "git clone [<options>] [--] <repo> [<dir>]"
msgstr "git clone [<opcions>] [--] <dipòsit> [<directori>]"
-#: builtin/clone.c:62
+#: builtin/clone.c:65
msgid "don't create a checkout"
msgstr "no facis cap agafament"
-#: builtin/clone.c:63 builtin/clone.c:65 builtin/init-db.c:476
+#: builtin/clone.c:66 builtin/clone.c:68 builtin/init-db.c:478
msgid "create a bare repository"
msgstr "crea un dipòsit nu"
-#: builtin/clone.c:67
+#: builtin/clone.c:70
msgid "create a mirror repository (implies bare)"
msgstr "crea un dipòsit reflectit (implica bare)"
-#: builtin/clone.c:69
+#: builtin/clone.c:72
msgid "to clone from a local repository"
msgstr "per a clonar des d'un dipòsit local"
-#: builtin/clone.c:71
+#: builtin/clone.c:74
msgid "don't use local hardlinks, always copy"
msgstr "no usis enllaços durs locals, sempre copia"
-#: builtin/clone.c:73
+#: builtin/clone.c:76
msgid "setup as shared repository"
msgstr "configura com a dipòsit compartit"
-#: builtin/clone.c:75 builtin/clone.c:77
+#: builtin/clone.c:78 builtin/clone.c:80
msgid "initialize submodules in the clone"
msgstr "inicialitza els submòduls en el clon"
-#: builtin/clone.c:79
+#: builtin/clone.c:82
msgid "number of submodules cloned in parallel"
msgstr "nombre de submòduls clonats en paral·lel"
-#: builtin/clone.c:80 builtin/init-db.c:473
+#: builtin/clone.c:83 builtin/init-db.c:475
msgid "template-directory"
msgstr "directori-de-plantilla"
-#: builtin/clone.c:81 builtin/init-db.c:474
+#: builtin/clone.c:84 builtin/init-db.c:476
msgid "directory from which templates will be used"
msgstr "directori del qual les plantilles s'usaran"
-#: builtin/clone.c:83 builtin/submodule--helper.c:495
-#: builtin/submodule--helper.c:833
+#: builtin/clone.c:86 builtin/clone.c:88 builtin/submodule--helper.c:602
+#: builtin/submodule--helper.c:954
msgid "reference repository"
msgstr "dipòsit de referència"
-#: builtin/clone.c:85
+#: builtin/clone.c:90
msgid "use --reference only while cloning"
msgstr "usa --reference només en clonar"
-#: builtin/clone.c:86 builtin/column.c:26 builtin/merge-file.c:44
+#: builtin/clone.c:91 builtin/column.c:26 builtin/merge-file.c:44
msgid "name"
msgstr "nom"
-#: builtin/clone.c:87
+#: builtin/clone.c:92
msgid "use <name> instead of 'origin' to track upstream"
msgstr "usa <nom> en lloc de 'origin' per a seguir la font"
-#: builtin/clone.c:89
+#: builtin/clone.c:94
msgid "checkout <branch> instead of the remote's HEAD"
msgstr "agafa <branca> en lloc del HEAD del remot"
-#: builtin/clone.c:91
+#: builtin/clone.c:96
msgid "path to git-upload-pack on the remote"
msgstr "camí a git-upload-pack en el remot"
-#: builtin/clone.c:92 builtin/fetch.c:118 builtin/grep.c:667 builtin/pull.c:201
+#: builtin/clone.c:97 builtin/fetch.c:120 builtin/grep.c:668 builtin/pull.c:202
msgid "depth"
msgstr "profunditat"
-#: builtin/clone.c:93
+#: builtin/clone.c:98
msgid "create a shallow clone of that depth"
msgstr "crea un clon superficial de tal profunditat"
-#: builtin/clone.c:95
+#: builtin/clone.c:99 builtin/fetch.c:122 builtin/pack-objects.c:2848
+#: parse-options.h:142
+msgid "time"
+msgstr "hora"
+
+#: builtin/clone.c:100
+msgid "create a shallow clone since a specific time"
+msgstr "crea un clon superficial des d'una hora específica"
+
+#: builtin/clone.c:101 builtin/fetch.c:124
+msgid "revision"
+msgstr "revisió"
+
+#: builtin/clone.c:102 builtin/fetch.c:125
+msgid "deepen history of shallow clone by excluding rev"
+msgstr "aprofundeix la història d'un clon superficial excloent una revisió"
+
+#: builtin/clone.c:104
msgid "clone only one branch, HEAD or --branch"
msgstr "clona només una branca, HEAD o --branch"
-#: builtin/clone.c:97
+#: builtin/clone.c:106
msgid "any cloned submodules will be shallow"
msgstr "qualsevol submòdul clonat serà superficial"
-#: builtin/clone.c:98 builtin/init-db.c:482
+#: builtin/clone.c:107 builtin/init-db.c:484
msgid "gitdir"
msgstr "directori de git"
-#: builtin/clone.c:99 builtin/init-db.c:483
+#: builtin/clone.c:108 builtin/init-db.c:485
msgid "separate git dir from working tree"
msgstr "separa el directori de git de l'arbre de treball"
-#: builtin/clone.c:100
+#: builtin/clone.c:109
msgid "key=value"
msgstr "clau=valor"
-#: builtin/clone.c:101
+#: builtin/clone.c:110
msgid "set config inside the new repository"
msgstr "estableix la configuració dins del dipòsit nou"
-#: builtin/clone.c:102 builtin/fetch.c:132 builtin/push.c:547
+#: builtin/clone.c:111 builtin/fetch.c:140 builtin/push.c:547
msgid "use IPv4 addresses only"
msgstr "usa només les adreces IPv4"
-#: builtin/clone.c:104 builtin/fetch.c:134 builtin/push.c:549
+#: builtin/clone.c:113 builtin/fetch.c:142 builtin/push.c:549
msgid "use IPv6 addresses only"
msgstr "usa només les adreces IPv6"
-#: builtin/clone.c:241
+#: builtin/clone.c:250
msgid ""
"No directory name could be guessed.\n"
"Please specify a directory on the command line"
"No s'ha pogut endevinar cap nom de directori.\n"
"Si us plau, especifiqueu un directori en la línia d'ordres"
-#: builtin/clone.c:307
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"Encara no se suporta el dipòsit de referència '%s' com a agafament enllaçat."
-
-#: builtin/clone.c:309
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "el dipòsit de referència '%s' no és un dipòsit local."
-
-#: builtin/clone.c:314
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "el dipòsit de referència '%s' és superficial"
-
-#: builtin/clone.c:317
+#: builtin/clone.c:303
#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "el dipòsit de referència '%s' és empeltat"
+msgid "info: Could not add alternate for '%s': %s\n"
+msgstr "info: No s'ha pogut afegir un alternatiu per a '%s': %s\n"
-#: builtin/clone.c:376
+#: builtin/clone.c:375
#, c-format
msgid "failed to open '%s'"
msgstr "s'ha fallat en obrir '%s'"
-#: builtin/clone.c:384
+#: builtin/clone.c:383
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s existeix i no és directori"
-#: builtin/clone.c:398
+#: builtin/clone.c:397
#, c-format
msgid "failed to stat %s\n"
msgstr "s'ha fallat en fer stat a '%s'\n"
-#: builtin/clone.c:420
+#: builtin/clone.c:419
#, c-format
msgid "failed to create link '%s'"
msgstr "s'ha fallat en crear l'enllaç '%s'"
-#: builtin/clone.c:424
+#: builtin/clone.c:423
#, c-format
msgid "failed to copy file to '%s'"
msgstr "s'ha fallat en copiar el fitxer a '%s'"
-#: builtin/clone.c:449
+#: builtin/clone.c:448
#, c-format
msgid "done.\n"
msgstr "fet.\n"
-#: builtin/clone.c:461
+#: builtin/clone.c:460
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
"'git status' i tornar a intentar l'agafament amb\n"
"'git checkout -f HEAD'\n"
-#: builtin/clone.c:538
+#: builtin/clone.c:537
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "No s'ha pogut trobar la branca remota %s per a clonar."
-#: builtin/clone.c:633
+#: builtin/clone.c:632
msgid "remote did not send all necessary objects"
msgstr "el remot no ha enviat tots els objectes necessaris"
-#: builtin/clone.c:649
+#: builtin/clone.c:648
#, c-format
msgid "unable to update %s"
msgstr "no s'ha pogut actualitzar %s"
-#: builtin/clone.c:698
+#: builtin/clone.c:697
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"el HEAD remot es refereix a una referència que no existeix; no s'ha pogut "
"agafar.\n"
-#: builtin/clone.c:729
+#: builtin/clone.c:728
msgid "unable to checkout working tree"
msgstr "no s'ha pogut agafar l'arbre de treball"
-#: builtin/clone.c:766
+#: builtin/clone.c:768
msgid "unable to write parameters to config file"
msgstr "no s'ha pogut escriure els paràmetres al fitxer de configuració"
-#: builtin/clone.c:829
+#: builtin/clone.c:831
msgid "cannot repack to clean up"
msgstr "no es pot reempaquetar per a netejar"
-#: builtin/clone.c:831
+#: builtin/clone.c:833
msgid "cannot unlink temporary alternates file"
msgstr "no es pot desenllaçar el fitxer d'alternatives temporal"
-#: builtin/clone.c:863 builtin/receive-pack.c:1855
+#: builtin/clone.c:866 builtin/receive-pack.c:1895
msgid "Too many arguments."
msgstr "Hi ha massa paràmetres."
-#: builtin/clone.c:867
+#: builtin/clone.c:870
msgid "You must specify a repository to clone."
msgstr "Heu d'especificar un dipòsit per a clonar."
-#: builtin/clone.c:878
+#: builtin/clone.c:883
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "les opcions --bare i --origin %s són incompatibles."
-#: builtin/clone.c:881
+#: builtin/clone.c:886
msgid "--bare and --separate-git-dir are incompatible."
msgstr "--bare i --separate-git-dir són incompatibles."
-#: builtin/clone.c:894
+#: builtin/clone.c:899
#, c-format
msgid "repository '%s' does not exist"
msgstr "el dipòsit '%s' no existeix"
-#: builtin/clone.c:900 builtin/fetch.c:1293
+#: builtin/clone.c:905 builtin/fetch.c:1338
#, c-format
msgid "depth %s is not a positive number"
msgstr "la profunditat %s no és nombre positiu"
-#: builtin/clone.c:910
+#: builtin/clone.c:915
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "el camí destí '%s' ja existeix i no és un directori buit."
-#: builtin/clone.c:920
+#: builtin/clone.c:925
#, c-format
msgid "working tree '%s' already exists."
msgstr "l'arbre de treball '%s' ja existeix."
-#: builtin/clone.c:935 builtin/clone.c:946 builtin/submodule--helper.c:544
+#: builtin/clone.c:940 builtin/clone.c:951 builtin/submodule--helper.c:657
#: builtin/worktree.c:222 builtin/worktree.c:249
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "no s'ha pogut crear els directoris inicials de '%s'"
-#: builtin/clone.c:938
+#: builtin/clone.c:943
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "no s'ha pogut crear el directori d'arbre de treball '%s'"
-#: builtin/clone.c:956
+#: builtin/clone.c:955
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "S'està clonant al dipòsit nu '%s'...\n"
-#: builtin/clone.c:958
+#: builtin/clone.c:957
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "S'està clonant a '%s'...\n"
-#: builtin/clone.c:997
+#: builtin/clone.c:963
+msgid ""
+"clone --recursive is not compatible with both --reference and --reference-if-"
+"able"
+msgstr ""
+"clone --recursive no és compatible amb ambdòs --reference i --reference-if-"
+"able"
+
+#: builtin/clone.c:1019
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth s'ignora en els clons locals; useu file:// en lloc d'això."
-#: builtin/clone.c:1000
+#: builtin/clone.c:1021
+msgid "--shallow-since is ignored in local clones; use file:// instead."
+msgstr ""
+"--shallow-since s'ignora en els clons locals; useu file:// en lloc d'això."
+
+#: builtin/clone.c:1023
+msgid "--shallow-exclude is ignored in local clones; use file:// instead."
+msgstr ""
+"--shallow-exclude s'ignora en els clons locals; useu file:// en lloc d'això."
+
+#: builtin/clone.c:1026
msgid "source repository is shallow, ignoring --local"
msgstr "el dipòsit font és superficial, s'està ignorant --local"
-#: builtin/clone.c:1005
+#: builtin/clone.c:1031
msgid "--local is ignored"
msgstr "--local s'ignora"
-#: builtin/clone.c:1009
+#: builtin/clone.c:1035
#, c-format
msgid "Don't know how to clone %s"
msgstr "No se sap com clonar %s"
-#: builtin/clone.c:1058 builtin/clone.c:1066
+#: builtin/clone.c:1090 builtin/clone.c:1098
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "La branca remota %s no es troba en la font %s"
-#: builtin/clone.c:1069
+#: builtin/clone.c:1101
msgid "You appear to have cloned an empty repository."
msgstr "Sembla que heu clonat un dipòsit buit."
"Llavors \"git cherry-pick --continue\" reprendrà recollint\n"
"com a cireres les comissions restants.\n"
-#: builtin/commit.c:308
+#: builtin/commit.c:318
msgid "failed to unpack HEAD tree object"
msgstr "s'ha fallat en desempaquetar l'objecte d'arbre HEAD"
-#: builtin/commit.c:349
+#: builtin/commit.c:359
msgid "unable to create temporary index"
msgstr "no s'ha pogut crear un índex temporal"
-#: builtin/commit.c:355
+#: builtin/commit.c:365
msgid "interactive add failed"
msgstr "l'afegiment interactiu ha fallat"
-#: builtin/commit.c:368
+#: builtin/commit.c:378
msgid "unable to update temporary index"
msgstr "no s'ha pogut actualitzar l'índex temporal"
-#: builtin/commit.c:370
+#: builtin/commit.c:380
msgid "Failed to update main cache tree"
msgstr "S'ha fallat en actualitzar l'arbre principal de memòria cau"
-#: builtin/commit.c:394 builtin/commit.c:417 builtin/commit.c:466
+#: builtin/commit.c:404 builtin/commit.c:427 builtin/commit.c:476
msgid "unable to write new_index file"
msgstr "no s'ha pogut escriure el fitxer new_index"
-#: builtin/commit.c:448
+#: builtin/commit.c:458
msgid "cannot do a partial commit during a merge."
msgstr "no es pot fer una comissió parcial durant una fusió."
-#: builtin/commit.c:450
+#: builtin/commit.c:460
msgid "cannot do a partial commit during a cherry-pick."
msgstr "no es pot fer una comissió parcial durant un recull de cireres."
-#: builtin/commit.c:459
+#: builtin/commit.c:469
msgid "cannot read the index"
msgstr "no es pot llegir l'índex"
-#: builtin/commit.c:478
+#: builtin/commit.c:488
msgid "unable to write temporary index file"
msgstr "no s'ha pogut escriure un fitxer d'índex temporal"
-#: builtin/commit.c:583
+#: builtin/commit.c:582
#, c-format
msgid "commit '%s' lacks author header"
msgstr "a la comissió '%s' li manca la capçalera d'autor"
-#: builtin/commit.c:585
+#: builtin/commit.c:584
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "la comissió '%s' té una línia d'autor mal formada"
-#: builtin/commit.c:604
+#: builtin/commit.c:603
msgid "malformed --author parameter"
msgstr "paràmetre --author mal format"
-#: builtin/commit.c:612
+#: builtin/commit.c:611
#, c-format
msgid "invalid date format: %s"
msgstr "format de data no vàlid: %s"
-#: builtin/commit.c:656
+#: builtin/commit.c:655
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
"no es pot seleccionar un caràcter de comentari que\n"
"no sigui usat en el missatge de comissió actual"
-#: builtin/commit.c:693 builtin/commit.c:726 builtin/commit.c:1092
+#: builtin/commit.c:692 builtin/commit.c:725 builtin/commit.c:1096
#, c-format
msgid "could not lookup commit %s"
msgstr "no s'ha pogut trobar la comissió %s"
-#: builtin/commit.c:705 builtin/shortlog.c:286
+#: builtin/commit.c:704 builtin/shortlog.c:286
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(s'està llegint el missatge de registre des de l'entrada estàndard)\n"
-#: builtin/commit.c:707
+#: builtin/commit.c:706
msgid "could not read log from standard input"
msgstr "no s'ha pogut llegir el registre des de l'entrada estàndard"
-#: builtin/commit.c:711
+#: builtin/commit.c:710
#, c-format
msgid "could not read log file '%s'"
msgstr "no s'ha pogut llegir el fitxer de registre '%s'"
-#: builtin/commit.c:738 builtin/commit.c:746
+#: builtin/commit.c:737 builtin/commit.c:745
msgid "could not read SQUASH_MSG"
msgstr "no s'ha pogut llegir SQUASH_MSG"
-#: builtin/commit.c:743
+#: builtin/commit.c:742
msgid "could not read MERGE_MSG"
msgstr "no s'ha pogut llegir MERGE_MSG"
-#: builtin/commit.c:797
+#: builtin/commit.c:796
msgid "could not write commit template"
msgstr "no s'ha pogut escriure la plantilla de comissió"
-#: builtin/commit.c:815
+#: builtin/commit.c:814
#, c-format
msgid ""
"\n"
"\t%s\n"
"i intenteu-ho de nou.\n"
-#: builtin/commit.c:820
+#: builtin/commit.c:819
#, c-format
msgid ""
"\n"
"\t%s\n"
"i intenteu-ho de nou.\n"
-#: builtin/commit.c:833
+#: builtin/commit.c:832
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
"S'ignoraran les línies començant amb '%c', i un missatge de\n"
"comissió buit avorta la comissió.\n"
-#: builtin/commit.c:840
+#: builtin/commit.c:839
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
"Es retindran les línies començants amb '%c'; podeu eliminar-les per vós\n"
"mateix si voleu. Un missatge buit avorta la comissió.\n"
-#: builtin/commit.c:860
+#: builtin/commit.c:859
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sAutor: %.*s <%.*s>"
-#: builtin/commit.c:868
+#: builtin/commit.c:867
#, c-format
msgid "%sDate: %s"
msgstr "%sData: %s"
-#: builtin/commit.c:875
+#: builtin/commit.c:874
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sComitent: %.*s <%.*s>"
-#: builtin/commit.c:893
+#: builtin/commit.c:892
msgid "Cannot read index"
msgstr "No es pot llegir l'índex"
-#: builtin/commit.c:950
+#: builtin/commit.c:954
msgid "Error building trees"
msgstr "Error en construir arbres"
-#: builtin/commit.c:965 builtin/tag.c:266
+#: builtin/commit.c:969 builtin/tag.c:266
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Si us plau, proveïu el missatge per usar o l'opció -m o l'opció -F.\n"
-#: builtin/commit.c:1067
+#: builtin/commit.c:1071
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"--author '%s' no és 'Nom <adreça-de-correu-electrònic>' i no coincideix amb\n"
"cap autor existent"
-#: builtin/commit.c:1082 builtin/commit.c:1322
+#: builtin/commit.c:1086 builtin/commit.c:1327
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Mode de fitxers no seguits no vàlid '%s'"
-#: builtin/commit.c:1119
+#: builtin/commit.c:1124
msgid "--long and -z are incompatible"
msgstr "--long i -z són incompatibles"
-#: builtin/commit.c:1149
+#: builtin/commit.c:1154
msgid "Using both --reset-author and --author does not make sense"
msgstr "Usar ambdós --reset-author i --author no té sentit"
-#: builtin/commit.c:1158
+#: builtin/commit.c:1163
msgid "You have nothing to amend."
msgstr "No teniu res a esmenar."
-#: builtin/commit.c:1161
+#: builtin/commit.c:1166
msgid "You are in the middle of a merge -- cannot amend."
msgstr "Esteu enmig d'una fusió -- no es pot esmenar."
-#: builtin/commit.c:1163
+#: builtin/commit.c:1168
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "Esteu enmig d'un recull de cireres -- no es pot esmenar."
-#: builtin/commit.c:1166
+#: builtin/commit.c:1171
msgid "Options --squash and --fixup cannot be used together"
msgstr "Les opcions --squash i --fixup no es poden usar juntes"
-#: builtin/commit.c:1176
+#: builtin/commit.c:1181
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Només un de -c/-C/-F/--fixup es pot usar."
-#: builtin/commit.c:1178
+#: builtin/commit.c:1183
msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
msgstr "L'opció -m no es pot combinar amb -c/-C/-F/--fixup."
-#: builtin/commit.c:1186
+#: builtin/commit.c:1191
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr "--reset-author només es pot usar amb -C, -c o --amend."
-#: builtin/commit.c:1203
+#: builtin/commit.c:1208
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr "Només un de --include/--only/--all/--interactive/--patch es pot usar."
-#: builtin/commit.c:1205
+#: builtin/commit.c:1210
msgid "No paths with --include/--only does not make sense."
msgstr "--include/--only no té sentit sense camí."
-#: builtin/commit.c:1207
+#: builtin/commit.c:1212
msgid "Clever... amending the last one with dirty index."
msgstr "Intel·ligent... s'està esmenant l'últim amb índex brut."
-#: builtin/commit.c:1209
+#: builtin/commit.c:1214
msgid "Explicit paths specified without -i or -o; assuming --only paths..."
msgstr ""
"S'han especificat camins explícits sense -i o -o; s'està presumint camins --"
"only..."
-#: builtin/commit.c:1221 builtin/tag.c:474
+#: builtin/commit.c:1226 builtin/tag.c:474
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Mode de neteja no vàlid %s"
-#: builtin/commit.c:1226
+#: builtin/commit.c:1231
msgid "Paths with -a does not make sense."
msgstr "-a no té sentit amb camins."
-#: builtin/commit.c:1336 builtin/commit.c:1622
+#: builtin/commit.c:1341 builtin/commit.c:1617
msgid "show status concisely"
msgstr "mostra l'estat concisament"
-#: builtin/commit.c:1338 builtin/commit.c:1624
+#: builtin/commit.c:1343 builtin/commit.c:1619
msgid "show branch information"
msgstr "mostra la informació de branca"
-#: builtin/commit.c:1340 builtin/commit.c:1626 builtin/push.c:522
+#: builtin/commit.c:1345
+msgid "version"
+msgstr "versió"
+
+#: builtin/commit.c:1345 builtin/commit.c:1621 builtin/push.c:522
#: builtin/worktree.c:440
msgid "machine-readable output"
msgstr "sortida llegible per màquina"
-#: builtin/commit.c:1343 builtin/commit.c:1628
+#: builtin/commit.c:1348 builtin/commit.c:1623
msgid "show status in long format (default)"
msgstr "mostra l'estat en format llarg (per defecte)"
-#: builtin/commit.c:1346 builtin/commit.c:1631
+#: builtin/commit.c:1351 builtin/commit.c:1626
msgid "terminate entries with NUL"
msgstr "acaba les entrades amb NUL"
-#: builtin/commit.c:1348 builtin/commit.c:1634 builtin/fast-export.c:981
+#: builtin/commit.c:1353 builtin/commit.c:1629 builtin/fast-export.c:981
#: builtin/fast-export.c:984 builtin/tag.c:353
msgid "mode"
msgstr "mode"
-#: builtin/commit.c:1349 builtin/commit.c:1634
+#: builtin/commit.c:1354 builtin/commit.c:1629
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"mostra els fitxers no seguits, modes opcionals: all, normal, no. (Per "
"defecte: all)"
-#: builtin/commit.c:1352
+#: builtin/commit.c:1357
msgid "show ignored files"
msgstr "mostra els fitxers ignorats"
-#: builtin/commit.c:1353 parse-options.h:155
+#: builtin/commit.c:1358 parse-options.h:155
msgid "when"
msgstr "quan"
-#: builtin/commit.c:1354
+#: builtin/commit.c:1359
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
"ignora els canvis als submòduls, opcional quan: all, dirty, untracked. (Per "
"defecte: all)"
-#: builtin/commit.c:1356
+#: builtin/commit.c:1361
msgid "list untracked files in columns"
msgstr "mostra els fitxers no seguits en columnes"
-#: builtin/commit.c:1442
+#: builtin/commit.c:1437
msgid "couldn't look up newly created commit"
msgstr "no s'ha pogut trobar la comissió novament creada"
-#: builtin/commit.c:1444
+#: builtin/commit.c:1439
msgid "could not parse newly created commit"
msgstr "no s'ha pogut analitzar la comissió novament creada"
-#: builtin/commit.c:1489
+#: builtin/commit.c:1484
msgid "detached HEAD"
msgstr "HEAD separat"
-#: builtin/commit.c:1492
+#: builtin/commit.c:1487
msgid " (root-commit)"
msgstr " (comissió d'arrel)"
-#: builtin/commit.c:1592
+#: builtin/commit.c:1587
msgid "suppress summary after successful commit"
msgstr "omet el resum després d'una comissió reeixida"
-#: builtin/commit.c:1593
+#: builtin/commit.c:1588
msgid "show diff in commit message template"
msgstr "mostra la diferència en la plantilla de missatge de comissió"
-#: builtin/commit.c:1595
+#: builtin/commit.c:1590
msgid "Commit message options"
msgstr "Opcions de missatge de comissió"
-#: builtin/commit.c:1596 builtin/tag.c:351
+#: builtin/commit.c:1591 builtin/tag.c:351
msgid "read message from file"
msgstr "llegiu el missatge des d'un fitxer"
-#: builtin/commit.c:1597
+#: builtin/commit.c:1592
msgid "author"
msgstr "autor"
-#: builtin/commit.c:1597
+#: builtin/commit.c:1592
msgid "override author for commit"
msgstr "autor corregit de la comissió"
-#: builtin/commit.c:1598 builtin/gc.c:326
+#: builtin/commit.c:1593 builtin/gc.c:326
msgid "date"
msgstr "data"
-#: builtin/commit.c:1598
+#: builtin/commit.c:1593
msgid "override date for commit"
msgstr "data corregida de la comissió"
-#: builtin/commit.c:1599 builtin/merge.c:220 builtin/notes.c:396
-#: builtin/notes.c:559 builtin/tag.c:349
+#: builtin/commit.c:1594 builtin/merge.c:220 builtin/notes.c:398
+#: builtin/notes.c:561 builtin/tag.c:349
msgid "message"
msgstr "missatge"
-#: builtin/commit.c:1599
+#: builtin/commit.c:1594
msgid "commit message"
msgstr "missatge de comissió"
-#: builtin/commit.c:1600 builtin/commit.c:1601 builtin/commit.c:1602
-#: builtin/commit.c:1603 parse-options.h:256 ref-filter.h:79
+#: builtin/commit.c:1595 builtin/commit.c:1596 builtin/commit.c:1597
+#: builtin/commit.c:1598 parse-options.h:257 ref-filter.h:79
msgid "commit"
msgstr "comissió"
-#: builtin/commit.c:1600
+#: builtin/commit.c:1595
msgid "reuse and edit message from specified commit"
msgstr "reusa i edita el missatge de la comissió especificada"
-#: builtin/commit.c:1601
+#: builtin/commit.c:1596
msgid "reuse message from specified commit"
msgstr "reusa el missatge de la comissió especificada"
-#: builtin/commit.c:1602
+#: builtin/commit.c:1597
msgid "use autosquash formatted message to fixup specified commit"
msgstr ""
"usa el missatge formatat d'aixafada automàtica per a arreglar la comissió "
"especificada"
-#: builtin/commit.c:1603
+#: builtin/commit.c:1598
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"usa el missatge formatat d'aixafada automàtica per a aixafar la comissió "
"especificada"
-#: builtin/commit.c:1604
+#: builtin/commit.c:1599
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr "l'autor de la comissió ja sóc jo (s'usa amb -C/-c/--amend)"
-#: builtin/commit.c:1605 builtin/log.c:1409 builtin/revert.c:86
+#: builtin/commit.c:1600 builtin/log.c:1413 builtin/revert.c:86
msgid "add Signed-off-by:"
msgstr "afegeix Signed-off-by:"
-#: builtin/commit.c:1606
+#: builtin/commit.c:1601
msgid "use specified template file"
msgstr "usa el fitxer de plantilla especificat"
-#: builtin/commit.c:1607
+#: builtin/commit.c:1602
msgid "force edit of commit"
msgstr "força l'edició de la comissió"
-#: builtin/commit.c:1608
+#: builtin/commit.c:1603
msgid "default"
msgstr "per defecte"
-#: builtin/commit.c:1608 builtin/tag.c:354
+#: builtin/commit.c:1603 builtin/tag.c:354
msgid "how to strip spaces and #comments from message"
msgstr "com despullar els espais i #comentaris del missatge"
-#: builtin/commit.c:1609
+#: builtin/commit.c:1604
msgid "include status in commit message template"
msgstr "inclou l'estat en la plantilla de missatge de comissió"
-#: builtin/commit.c:1611 builtin/merge.c:230 builtin/pull.c:165
+#: builtin/commit.c:1606 builtin/merge.c:230 builtin/pull.c:166
#: builtin/revert.c:93
msgid "GPG sign commit"
msgstr "signa la comissió amb GPG"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1609
msgid "Commit contents options"
msgstr "Opcions dels continguts de les comissions"
-#: builtin/commit.c:1615
+#: builtin/commit.c:1610
msgid "commit all changed files"
msgstr "comet tots els fitxers canviats"
-#: builtin/commit.c:1616
+#: builtin/commit.c:1611
msgid "add specified files to index for commit"
msgstr "afegeix els fitxers especificats a l'índex per a cometre"
-#: builtin/commit.c:1617
+#: builtin/commit.c:1612
msgid "interactively add files"
msgstr "afegeix els fitxers interactivament"
-#: builtin/commit.c:1618
+#: builtin/commit.c:1613
msgid "interactively add changes"
msgstr "afegeix els canvis interactivament"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1614
msgid "commit only specified files"
msgstr "comet només els fitxers especificats"
-#: builtin/commit.c:1620
+#: builtin/commit.c:1615
msgid "bypass pre-commit and commit-msg hooks"
msgstr "evita els ganxos de precomissió i missatge de comissió"
-#: builtin/commit.c:1621
+#: builtin/commit.c:1616
msgid "show what would be committed"
msgstr "mostra què es cometria"
-#: builtin/commit.c:1632
+#: builtin/commit.c:1627
msgid "amend previous commit"
msgstr "esmena la comissió anterior"
-#: builtin/commit.c:1633
+#: builtin/commit.c:1628
msgid "bypass post-rewrite hook"
msgstr "evita el ganxo de postreescriure"
-#: builtin/commit.c:1638
+#: builtin/commit.c:1633
msgid "ok to record an empty change"
msgstr "està bé registrar un canvi buit"
-#: builtin/commit.c:1640
+#: builtin/commit.c:1635
msgid "ok to record a change with an empty message"
msgstr "està bé registrar un canvi amb missatge buit"
-#: builtin/commit.c:1669
+#: builtin/commit.c:1664
msgid "could not parse HEAD commit"
msgstr "no s'ha pogut analitzar la comissió HEAD"
-#: builtin/commit.c:1719
+#: builtin/commit.c:1712
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Fitxer MERGE_HEAD malmès (%s)"
-#: builtin/commit.c:1726
+#: builtin/commit.c:1719
msgid "could not read MERGE_MODE"
msgstr "no s'ha pogut llegir MERGE_MODE"
-#: builtin/commit.c:1745
+#: builtin/commit.c:1738
#, c-format
msgid "could not read commit message: %s"
msgstr "no s'ha pogut llegir el missatge de comissió: %s"
-#: builtin/commit.c:1756
+#: builtin/commit.c:1749
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "S'està avortant la comissió; no heu editat el missatge.\n"
-#: builtin/commit.c:1761
+#: builtin/commit.c:1754
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "S'està avortant la comissió a causa d'un missatge de comissió buit.\n"
-#: builtin/commit.c:1809
+#: builtin/commit.c:1802
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
msgid "cannot create configuration file %s"
msgstr "no es pot crear el fitxer de configuració '%s'"
-#: builtin/count-objects.c:77
+#: builtin/config.c:625
+#, c-format
+msgid ""
+"cannot overwrite multiple values with a single value\n"
+" Use a regexp, --add or --replace-all to change %s."
+msgstr ""
+"no es pot sobreescriure múltiples valors amb un sol valor\n"
+" Useu una expresió regular, --add o --replace-all per a canviar %s."
+
+#: builtin/count-objects.c:86
msgid "git count-objects [-v] [-H | --human-readable]"
msgstr "git count-objects [-v] [-H | --human-readable]"
-#: builtin/count-objects.c:87
+#: builtin/count-objects.c:96
msgid "print sizes in human readable format"
msgstr "imprimeix les mides en un format llegible pels humans"
#: builtin/describe.c:17
msgid "git describe [<options>] [<commit-ish>...]"
-msgstr "git describe [opcions] [<comissió>...]"
+msgstr "git describe [<opcions>] [<comissió>...]"
#: builtin/describe.c:18
msgid "git describe [<options>] --dirty"
msgid "only consider tags matching <pattern>"
msgstr "només considera les etiquetes que coincideixen amb <patró>"
-#: builtin/describe.c:410 builtin/name-rev.c:321
+#: builtin/describe.c:410 builtin/name-rev.c:320
msgid "show abbreviated commit object as fallback"
msgstr "mostra l'objecte de comissió abreviat com a retrocediment"
msgid "invalid option: %s"
msgstr "opció no vàlida: %s"
-#: builtin/diff.c:360
+#: builtin/diff.c:361
msgid "Not a git repository"
msgstr "No és un dipòsit de git"
-#: builtin/diff.c:403
+#: builtin/diff.c:404
#, c-format
msgid "invalid object '%s' given."
msgstr "s'ha donat un objecte no vàlid '%s'."
-#: builtin/diff.c:412
+#: builtin/diff.c:413
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "s'ha donat més de dos blobs: '%s"
-#: builtin/diff.c:419
+#: builtin/diff.c:420
#, c-format
msgid "unhandled object '%s' given."
msgstr "s'ha donat l'objecte no gestionat '%s'."
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<opcions>]"
-#: builtin/fetch.c:93 builtin/pull.c:174
+#: builtin/fetch.c:95 builtin/pull.c:175
msgid "fetch from all remotes"
msgstr "obtén de tots els remots"
-#: builtin/fetch.c:95 builtin/pull.c:177
+#: builtin/fetch.c:97 builtin/pull.c:178
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "annexa a .git/FETCH_HEAD en lloc de sobreescriure"
-#: builtin/fetch.c:97 builtin/pull.c:180
+#: builtin/fetch.c:99 builtin/pull.c:181
msgid "path to upload pack on remote end"
msgstr "camí al qual pujar el paquet al costat remot"
-#: builtin/fetch.c:98 builtin/pull.c:182
+#: builtin/fetch.c:100 builtin/pull.c:183
msgid "force overwrite of local branch"
msgstr "força la sobreescriptura de la branca local"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:102
msgid "fetch from multiple remotes"
msgstr "obtén de múltiples remots"
-#: builtin/fetch.c:102 builtin/pull.c:184
+#: builtin/fetch.c:104 builtin/pull.c:185
msgid "fetch all tags and associated objects"
msgstr "obtén totes les etiquetes i tots els objectes associats"
-#: builtin/fetch.c:104
+#: builtin/fetch.c:106
msgid "do not fetch all tags (--no-tags)"
msgstr "no obtinguis les etiquetes (--no-tags)"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:108
msgid "number of submodules fetched in parallel"
msgstr "nombre de submòduls obtinguts en paral·lel"
-#: builtin/fetch.c:108 builtin/pull.c:187
+#: builtin/fetch.c:110 builtin/pull.c:188
msgid "prune remote-tracking branches no longer on remote"
msgstr "poda les branques amb seguiment remot que ja no estiguin en el remot"
-#: builtin/fetch.c:109 builtin/pull.c:190
+#: builtin/fetch.c:111 builtin/pull.c:191
msgid "on-demand"
msgstr "sota demanda"
-#: builtin/fetch.c:110 builtin/pull.c:191
+#: builtin/fetch.c:112 builtin/pull.c:192
msgid "control recursive fetching of submodules"
msgstr "controla l'obtenció recursiva de submòduls"
-#: builtin/fetch.c:114 builtin/pull.c:199
+#: builtin/fetch.c:116 builtin/pull.c:200
msgid "keep downloaded pack"
msgstr "retén el paquet baixat"
-#: builtin/fetch.c:116
+#: builtin/fetch.c:118
msgid "allow updating of HEAD ref"
msgstr "permet l'actualització de la referència HEAD"
-#: builtin/fetch.c:119 builtin/pull.c:202
+#: builtin/fetch.c:121 builtin/fetch.c:127 builtin/pull.c:203
msgid "deepen history of shallow clone"
msgstr "aprofundeix la història d'un clon superficial"
-#: builtin/fetch.c:121 builtin/pull.c:205
+#: builtin/fetch.c:123
+msgid "deepen history of shallow repository based on time"
+msgstr "aprofundeix la història d'un clon superficial basat en temps"
+
+#: builtin/fetch.c:129 builtin/pull.c:206
msgid "convert to a complete repository"
msgstr "converteix en un dipòsit complet"
-#: builtin/fetch.c:123 builtin/log.c:1426
+#: builtin/fetch.c:131 builtin/log.c:1433
msgid "dir"
msgstr "directori"
-#: builtin/fetch.c:124
+#: builtin/fetch.c:132
msgid "prepend this to submodule path output"
msgstr "anteposa això a la sortida de camí del submòdul"
-#: builtin/fetch.c:127
+#: builtin/fetch.c:135
msgid "default mode for recursion"
msgstr "mode de recursivitat per defecte"
-#: builtin/fetch.c:129 builtin/pull.c:208
+#: builtin/fetch.c:137 builtin/pull.c:209
msgid "accept refs that update .git/shallow"
msgstr "accepta les referències que actualitzin .git/shallow"
-#: builtin/fetch.c:130 builtin/pull.c:210
+#: builtin/fetch.c:138 builtin/pull.c:211
msgid "refmap"
msgstr "mapa de referències"
-#: builtin/fetch.c:131 builtin/pull.c:211
+#: builtin/fetch.c:139 builtin/pull.c:212
msgid "specify fetch refmap"
msgstr "mostra el mapa de referències d'obtenció"
-#: builtin/fetch.c:387
+#: builtin/fetch.c:398
msgid "Couldn't find remote ref HEAD"
msgstr "No s'ha pogut trobar la referència HEAD remota"
-#: builtin/fetch.c:503
+#: builtin/fetch.c:514
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "la configuració fetch.output conté un valor no vàlid %s"
-#: builtin/fetch.c:592
+#: builtin/fetch.c:607
#, c-format
msgid "object %s not found"
msgstr "objecte %s no trobat"
-#: builtin/fetch.c:596
+#: builtin/fetch.c:611
msgid "[up to date]"
msgstr "[al dia]"
-#: builtin/fetch.c:609 builtin/fetch.c:689
+#: builtin/fetch.c:624 builtin/fetch.c:704
msgid "[rejected]"
msgstr "[rebutjat]"
-#: builtin/fetch.c:610
+#: builtin/fetch.c:625
msgid "can't fetch in current branch"
msgstr "no es pot obtenir en la branca actual"
-#: builtin/fetch.c:619
+#: builtin/fetch.c:634
msgid "[tag update]"
msgstr "[actualització d'etiqueta]"
-#: builtin/fetch.c:620 builtin/fetch.c:653 builtin/fetch.c:669
-#: builtin/fetch.c:684
+#: builtin/fetch.c:635 builtin/fetch.c:668 builtin/fetch.c:684
+#: builtin/fetch.c:699
msgid "unable to update local ref"
msgstr "no s'ha pogut actualitzar la referència local"
-#: builtin/fetch.c:639
+#: builtin/fetch.c:654
msgid "[new tag]"
msgstr "[etiqueta nova]"
-#: builtin/fetch.c:642
+#: builtin/fetch.c:657
msgid "[new branch]"
msgstr "[branca nova]"
-#: builtin/fetch.c:645
+#: builtin/fetch.c:660
msgid "[new ref]"
msgstr "[referència nova]"
-#: builtin/fetch.c:684
+#: builtin/fetch.c:699
msgid "forced update"
msgstr "actualització forçada"
-#: builtin/fetch.c:689
+#: builtin/fetch.c:704
msgid "non-fast-forward"
msgstr "sense avanç ràpid"
-#: builtin/fetch.c:733
+#: builtin/fetch.c:749
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s no ha enviat tots els objectes necessaris\n"
-#: builtin/fetch.c:753
+#: builtin/fetch.c:769
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr ""
"rebutja %s perquè no es permet que les arrels superficials s'actualitzin"
-#: builtin/fetch.c:839 builtin/fetch.c:934
+#: builtin/fetch.c:856 builtin/fetch.c:952
#, c-format
msgid "From %.*s\n"
msgstr "De %.*s\n"
-#: builtin/fetch.c:850
+#: builtin/fetch.c:867
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
" intenteu executar 'git remote prune %s' per a eliminar\n"
" qualsevulla branca antiga o conflictiva"
-#: builtin/fetch.c:904
+#: builtin/fetch.c:922
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s es tornarà penjant)"
-#: builtin/fetch.c:905
+#: builtin/fetch.c:923
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s s'ha tornat penjant)"
-#: builtin/fetch.c:937
+#: builtin/fetch.c:955
msgid "[deleted]"
msgstr "[suprimit]"
-#: builtin/fetch.c:938 builtin/remote.c:1020
+#: builtin/fetch.c:956 builtin/remote.c:1020
msgid "(none)"
msgstr "(cap)"
-#: builtin/fetch.c:960
+#: builtin/fetch.c:979
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "S'està refusant obtenir en la branca actual %s d'un dipòsit no nu"
-#: builtin/fetch.c:979
+#: builtin/fetch.c:998
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "L'opció \"%s\" amb valor \"%s\" no és vàlida per a %s"
-#: builtin/fetch.c:982
+#: builtin/fetch.c:1001
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "S'ignora l'opció \"%s\" per a %s\n"
-#: builtin/fetch.c:1039
+#: builtin/fetch.c:1077
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "No se sap com obtenir de %s"
-#: builtin/fetch.c:1199
+#: builtin/fetch.c:1237
#, c-format
msgid "Fetching %s\n"
msgstr "S'està obtenint %s\n"
-#: builtin/fetch.c:1201 builtin/remote.c:96
+#: builtin/fetch.c:1239 builtin/remote.c:96
#, c-format
msgid "Could not fetch %s"
msgstr "No s'ha pogut obtenir %s"
-#: builtin/fetch.c:1219
+#: builtin/fetch.c:1257
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
"Cap dipòsit remot especificat. Si us plau, especifiqueu o un URL o\n"
"un nom remot del qual es deuen obtenir les revisions noves."
-#: builtin/fetch.c:1242
+#: builtin/fetch.c:1280
msgid "You need to specify a tag name."
msgstr "Necessiteu especificar un nom d'etiqueta."
-#: builtin/fetch.c:1284
+#: builtin/fetch.c:1322
+msgid "Negative depth in --deepen is not supported"
+msgstr "No s'admet una profunditat negativa en --deepen"
+
+#: builtin/fetch.c:1324
+msgid "--deepen and --depth are mutually exclusive"
+msgstr "--deepen i --depth són mutualment exclusius"
+
+#: builtin/fetch.c:1329
msgid "--depth and --unshallow cannot be used together"
msgstr "--depth i --unshallow no es poden usar junts"
-#: builtin/fetch.c:1286
+#: builtin/fetch.c:1331
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow en un dipòsit complet no té sentit"
-#: builtin/fetch.c:1306
+#: builtin/fetch.c:1353
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all no accepta un paràmetre de dipòsit"
-#: builtin/fetch.c:1308
+#: builtin/fetch.c:1355
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all no té sentit amb especificacions de referència"
-#: builtin/fetch.c:1319
+#: builtin/fetch.c:1366
#, c-format
msgid "No such remote or remote group: %s"
msgstr "No hi ha tal remot ni tal grup remot: %s"
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1374
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Obtenir un grup i especificar referències no té sentit"
msgstr ""
"git fmt-merge-msg [-m <missatge>] [--log[=<n>] | --no-log] [--file <fitxer>]"
-#: builtin/fmt-merge-msg.c:667
+#: builtin/fmt-merge-msg.c:663
msgid "populate log with at most <n> entries from shortlog"
msgstr "emplena el registre amb <n> entrades del registre curt com a màxim"
-#: builtin/fmt-merge-msg.c:670
+#: builtin/fmt-merge-msg.c:666
msgid "alias for --log (deprecated)"
msgstr "àlies per --log (desaprovat)"
-#: builtin/fmt-merge-msg.c:673
+#: builtin/fmt-merge-msg.c:669
msgid "text"
msgstr "text"
-#: builtin/fmt-merge-msg.c:674
+#: builtin/fmt-merge-msg.c:670
msgid "use <text> as start of message"
msgstr "usa <text> com a inici de missatge"
-#: builtin/fmt-merge-msg.c:675
+#: builtin/fmt-merge-msg.c:671
msgid "file to read from"
msgstr "fitxer del qual llegir"
msgid "show verbose names for reachable objects"
msgstr "mostra els noms detallats dels objectes abastables"
-#: builtin/fsck.c:671
+#: builtin/fsck.c:665
msgid "Checking objects"
msgstr "S'estan comprovant els objectes"
msgid "invalid number of threads specified (%d) for %s"
msgstr "s'ha especificat un nombre de fils no vàlid (%d) per a %s"
-#: builtin/grep.c:452 builtin/grep.c:487
+#: builtin/grep.c:453 builtin/grep.c:488
#, c-format
msgid "unable to read tree (%s)"
msgstr "no s'ha pogut llegir l'arbre (%s)"
-#: builtin/grep.c:502
+#: builtin/grep.c:503
#, c-format
msgid "unable to grep from object of type %s"
msgstr "no es pot fer grep des d'un objecte de tipus %s"
-#: builtin/grep.c:560
+#: builtin/grep.c:561
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "l'opció `%c' espera un valor numèric"
-#: builtin/grep.c:577
-#, c-format
-msgid "cannot open '%s'"
-msgstr "no es pot obrir '%s'"
-
-#: builtin/grep.c:646
+#: builtin/grep.c:647
msgid "search in index instead of in the work tree"
msgstr "cerca en l'índex en lloc de l'arbre de treball"
-#: builtin/grep.c:648
+#: builtin/grep.c:649
msgid "find in contents not managed by git"
msgstr "cerca en continguts no gestionats per git"
-#: builtin/grep.c:650
+#: builtin/grep.c:651
msgid "search in both tracked and untracked files"
msgstr "cerca tant en fitxers seguits com en no seguits"
-#: builtin/grep.c:652
+#: builtin/grep.c:653
msgid "ignore files specified via '.gitignore'"
msgstr "ignora els fitxers especificats mitjançant '.gitignore'"
-#: builtin/grep.c:655
+#: builtin/grep.c:656
msgid "show non-matching lines"
msgstr "mostra les línies no coincidents"
-#: builtin/grep.c:657
+#: builtin/grep.c:658
msgid "case insensitive matching"
msgstr "coincidència insensible a majúscula i minúscula"
-#: builtin/grep.c:659
+#: builtin/grep.c:660
msgid "match patterns only at word boundaries"
msgstr "coincideix amb els patrons només als límits de paraula"
-#: builtin/grep.c:661
+#: builtin/grep.c:662
msgid "process binary files as text"
msgstr "processa els fitxers binaris com a text"
-#: builtin/grep.c:663
+#: builtin/grep.c:664
msgid "don't match patterns in binary files"
msgstr "no coincideixis amb els patrons en els fitxers binaris"
-#: builtin/grep.c:666
+#: builtin/grep.c:667
msgid "process binary files with textconv filters"
msgstr "processa els fitxers binaris amb filtres de textconv"
-#: builtin/grep.c:668
+#: builtin/grep.c:669
msgid "descend at most <depth> levels"
msgstr "descendeix com a màxim <profunditat> nivells"
-#: builtin/grep.c:672
+#: builtin/grep.c:673
msgid "use extended POSIX regular expressions"
msgstr "usa les expressions regulars POSIX esteses"
-#: builtin/grep.c:675
+#: builtin/grep.c:676
msgid "use basic POSIX regular expressions (default)"
msgstr "usa les expressions regulars POSIX bàsiques (per defecte)"
-#: builtin/grep.c:678
+#: builtin/grep.c:679
msgid "interpret patterns as fixed strings"
msgstr "interpreta els patrons com a cadenes fixes"
-#: builtin/grep.c:681
+#: builtin/grep.c:682
msgid "use Perl-compatible regular expressions"
msgstr "usa les expressions regulars compatibles amb Perl"
-#: builtin/grep.c:684
+#: builtin/grep.c:685
msgid "show line numbers"
msgstr "mostra els números de línia"
-#: builtin/grep.c:685
+#: builtin/grep.c:686
msgid "don't show filenames"
msgstr "no mostris els noms de fitxer"
-#: builtin/grep.c:686
+#: builtin/grep.c:687
msgid "show filenames"
msgstr "mostra els noms de fitxer"
-#: builtin/grep.c:688
+#: builtin/grep.c:689
msgid "show filenames relative to top directory"
msgstr "mostra els noms de fitxer relatius al directori superior"
-#: builtin/grep.c:690
+#: builtin/grep.c:691
msgid "show only filenames instead of matching lines"
msgstr "mostra només els noms de fitxer en lloc de les línies coincidents"
-#: builtin/grep.c:692
+#: builtin/grep.c:693
msgid "synonym for --files-with-matches"
msgstr "sinònim de --files-with-matches"
-#: builtin/grep.c:695
+#: builtin/grep.c:696
msgid "show only the names of files without match"
msgstr "mostra només els noms dels fitxers sense coincidència"
-#: builtin/grep.c:697
+#: builtin/grep.c:698
msgid "print NUL after filenames"
msgstr "imprimeix NUL després dels noms de fitxer"
-#: builtin/grep.c:699
+#: builtin/grep.c:700
msgid "show the number of matches instead of matching lines"
msgstr "mostra el nombre de coincidències en lloc de les línies coincidents"
-#: builtin/grep.c:700
+#: builtin/grep.c:701
msgid "highlight matches"
msgstr "ressalta les coincidències"
-#: builtin/grep.c:702
+#: builtin/grep.c:703
msgid "print empty line between matches from different files"
msgstr "imprimeix una línia buida entre coincidències de fitxers distints"
-#: builtin/grep.c:704
+#: builtin/grep.c:705
msgid "show filename only once above matches from same file"
msgstr ""
"mostra el nom de fitxer només una vegada a dalt de les coincidències del "
"mateix fitxer"
-#: builtin/grep.c:707
+#: builtin/grep.c:708
msgid "show <n> context lines before and after matches"
msgstr "mostra <n> línies de context abans i després d'una coincidència"
-#: builtin/grep.c:710
+#: builtin/grep.c:711
msgid "show <n> context lines before matches"
msgstr "mostra <n> línies de context abans d'una coincidència"
-#: builtin/grep.c:712
+#: builtin/grep.c:713
msgid "show <n> context lines after matches"
msgstr "mostra <n> línies de context després d'una coincidència"
-#: builtin/grep.c:714
+#: builtin/grep.c:715
msgid "use <n> worker threads"
msgstr "usa <n> fils obrers"
-#: builtin/grep.c:715
+#: builtin/grep.c:716
msgid "shortcut for -C NUM"
msgstr "drecera per -C NUM"
-#: builtin/grep.c:718
+#: builtin/grep.c:719
msgid "show a line with the function name before matches"
msgstr "mostra una línia amb el nom de funció abans de les coincidències"
-#: builtin/grep.c:720
+#: builtin/grep.c:721
msgid "show the surrounding function"
msgstr "mostra la funció circumdant"
-#: builtin/grep.c:723
+#: builtin/grep.c:724
msgid "read patterns from file"
msgstr "llegeix els patrons des d'un fitxer"
-#: builtin/grep.c:725
+#: builtin/grep.c:726
msgid "match <pattern>"
msgstr "coincideix amb <patró>"
-#: builtin/grep.c:727
+#: builtin/grep.c:728
msgid "combine patterns specified with -e"
msgstr "combina els patrons especificats amb -e"
-#: builtin/grep.c:739
+#: builtin/grep.c:740
msgid "indicate hit with exit status without output"
msgstr "indica coincidència amb estat de sortida sense sortida textual"
-#: builtin/grep.c:741
+#: builtin/grep.c:742
msgid "show only matches from files that match all patterns"
msgstr ""
"mostra només les coincidències dels fitxers que coincideixin amb tots els "
"patrons"
-#: builtin/grep.c:743
+#: builtin/grep.c:744
msgid "show parse tree for grep expression"
msgstr "mostra l'arbre d'anàlisis de l'expressió de grep"
-#: builtin/grep.c:747
+#: builtin/grep.c:748
msgid "pager"
msgstr "paginador"
-#: builtin/grep.c:747
+#: builtin/grep.c:748
msgid "show matching files in the pager"
msgstr "mostra els fitxers coincidents en el paginador"
-#: builtin/grep.c:750
+#: builtin/grep.c:751
msgid "allow calling of grep(1) (ignored by this build)"
msgstr "permet la invocació de grep(1) (ignorat per aquesta compilació)"
-#: builtin/grep.c:813
+#: builtin/grep.c:814
msgid "no pattern given."
msgstr "cap patró donat."
-#: builtin/grep.c:845 builtin/index-pack.c:1479
+#: builtin/grep.c:846 builtin/index-pack.c:1480
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "s'ha especificat un nombre de fils no vàlid (%d)"
-#: builtin/grep.c:875
+#: builtin/grep.c:876
msgid "--open-files-in-pager only works on the worktree"
msgstr "--open-files-in-pager només funciona en l'arbre de treball"
-#: builtin/grep.c:901
+#: builtin/grep.c:902
msgid "--cached or --untracked cannot be used with --no-index."
msgstr "--cached o --untracked no es pot usar amb --no-index."
-#: builtin/grep.c:906
+#: builtin/grep.c:907
msgid "--no-index or --untracked cannot be used with revs."
msgstr "--no-index o --untracked no es pot usar amb revisions."
-#: builtin/grep.c:909
+#: builtin/grep.c:910
msgid "--[no-]exclude-standard cannot be used for tracked contents."
msgstr "--[no-]exclude-standard no es pot usar per als continguts seguits."
-#: builtin/grep.c:917
+#: builtin/grep.c:918
msgid "both --cached and trees are given."
msgstr "s'han donat ambdós --caches i arbres."
msgid "git hash-object --stdin-paths"
msgstr "git hash-object --stdin-paths"
-#: builtin/hash-object.c:93
+#: builtin/hash-object.c:94
msgid "type"
msgstr "tipus"
-#: builtin/hash-object.c:93
+#: builtin/hash-object.c:94
msgid "object type"
msgstr "tipus d'objecte"
-#: builtin/hash-object.c:94
+#: builtin/hash-object.c:95
msgid "write the object into the object database"
msgstr "escriu l'objecte a la base de dades d'objectes"
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
msgid "read the object from stdin"
msgstr "llegeix l'objecte des d'stdin"
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:99
msgid "store file as is without filters"
msgstr "emmagatzema el fitxer tal com és sense filtres"
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
msgid ""
"just hash any random garbage to create corrupt objects for debugging Git"
msgstr ""
"només suma qualsevulla brossa aleatòria per a crear objectes malmesos per a "
"depurar al Git"
-#: builtin/hash-object.c:100
+#: builtin/hash-object.c:101
msgid "process file as it were from this path"
msgstr "processa el fitxer com si fos d'aquest camí"
-#: builtin/help.c:41
+#: builtin/help.c:42
msgid "print all available commands"
msgstr "imprimeix totes les ordres disponibles"
-#: builtin/help.c:42
+#: builtin/help.c:43
+msgid "exclude guides"
+msgstr "exclou guíes"
+
+#: builtin/help.c:44
msgid "print list of useful guides"
msgstr "imprimeix la llista de guies útils"
-#: builtin/help.c:43
+#: builtin/help.c:45
msgid "show man page"
msgstr "mostra la pàgina de manual"
-#: builtin/help.c:44
+#: builtin/help.c:46
msgid "show manual in web browser"
msgstr "mostra la pàgina de manual en el navegador web"
-#: builtin/help.c:46
+#: builtin/help.c:48
msgid "show info page"
msgstr "mostra la pàgina d'informació"
-#: builtin/help.c:52
+#: builtin/help.c:54
msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
msgstr "git help [--all] [--guides] [--man | --web | --info] [<ordre>]"
-#: builtin/help.c:64
+#: builtin/help.c:66
#, c-format
msgid "unrecognized help format '%s'"
msgstr "format d'ajuda no reconegut '%s'"
-#: builtin/help.c:91
+#: builtin/help.c:93
msgid "Failed to start emacsclient."
msgstr "S'ha fallat en iniciar emacsclient."
-#: builtin/help.c:104
+#: builtin/help.c:106
msgid "Failed to parse emacsclient version."
msgstr "S'ha fallat en analitzar la versió d'emacsclient."
-#: builtin/help.c:112
+#: builtin/help.c:114
#, c-format
msgid "emacsclient version '%d' too old (< 22)."
msgstr "la versió d'emacsclient '%d' és massa vella (< 22)."
-#: builtin/help.c:130 builtin/help.c:151 builtin/help.c:160 builtin/help.c:168
+#: builtin/help.c:132 builtin/help.c:153 builtin/help.c:162 builtin/help.c:170
#, c-format
msgid "failed to exec '%s'"
msgstr "s'ha fallat en executar '%s'"
-#: builtin/help.c:205
+#: builtin/help.c:207
#, c-format
msgid ""
"'%s': path for unsupported man viewer.\n"
"'%s': camí a un visualitzador de manuals no compatible.\n"
"Si us plau, considereu usar 'man.<eina>.cmd' en lloc d'això."
-#: builtin/help.c:217
+#: builtin/help.c:219
#, c-format
msgid ""
"'%s': cmd for supported man viewer.\n"
"'%s': ordre per a un visualitzador de manuals compatible.\n"
"Si us plau, considereu usar 'man.<eina>.path' en lloc d'això."
-#: builtin/help.c:334
+#: builtin/help.c:336
#, c-format
msgid "'%s': unknown man viewer."
msgstr "'%s': visualitzador de manuals desconegut."
-#: builtin/help.c:351
+#: builtin/help.c:353
msgid "no man viewer handled the request"
msgstr "cap visualitzador de manuals ha gestionat la sol·licitud"
-#: builtin/help.c:359
+#: builtin/help.c:361
msgid "no info viewer handled the request"
msgstr "cap visualitzador d'informació ha gestionat la sol·licitud"
-#: builtin/help.c:401
+#: builtin/help.c:403
msgid "Defining attributes per path"
msgstr "La definició d'atributs per camí"
-#: builtin/help.c:402
+#: builtin/help.c:404
msgid "Everyday Git With 20 Commands Or So"
msgstr "Git quotidià amb més o menys 20 ordres"
-#: builtin/help.c:403
+#: builtin/help.c:405
msgid "A Git glossary"
msgstr "Un glossari de Git"
-#: builtin/help.c:404
+#: builtin/help.c:406
msgid "Specifies intentionally untracked files to ignore"
msgstr "Especifica els fitxers intencionalment no seguits a ignorar"
-#: builtin/help.c:405
+#: builtin/help.c:407
msgid "Defining submodule properties"
msgstr "La definició de les propietats de submòduls"
-#: builtin/help.c:406
+#: builtin/help.c:408
msgid "Specifying revisions and ranges for Git"
msgstr "L'especificació de revisions i rangs per al Git"
-#: builtin/help.c:407
+#: builtin/help.c:409
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "Una introducció tutorial al Git (per a la versió 1.5.1 o més nou)"
-#: builtin/help.c:408
+#: builtin/help.c:410
msgid "An overview of recommended workflows with Git"
msgstr "Una visió de conjunt de fluxos de treball recomanats amb Git"
-#: builtin/help.c:420
+#: builtin/help.c:422
msgid "The common Git guides are:\n"
msgstr "Les guies de Git comunes són:\n"
-#: builtin/help.c:441 builtin/help.c:458
-#, c-format
-msgid "usage: %s%s"
-msgstr "ús: %s%s"
-
-#: builtin/help.c:474
+#: builtin/help.c:440
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "`git %s' és un àlies de `%s'"
-#: builtin/index-pack.c:153
+#: builtin/help.c:462 builtin/help.c:479
+#, c-format
+msgid "usage: %s%s"
+msgstr "ús: %s%s"
+
+#: builtin/index-pack.c:154
#, c-format
msgid "unable to open %s"
msgstr "no s'ha pogut obrir %s"
-#: builtin/index-pack.c:203
+#: builtin/index-pack.c:204
#, c-format
msgid "object type mismatch at %s"
msgstr "hi ha una discordança de tipus d'objecte a %s"
-#: builtin/index-pack.c:223
+#: builtin/index-pack.c:224
#, c-format
msgid "did not receive expected object %s"
msgstr "no s'ha rebut l'objecte esperat %s"
-#: builtin/index-pack.c:226
+#: builtin/index-pack.c:227
#, c-format
msgid "object %s: expected type %s, found %s"
msgstr "objecte %s: tipus %s esperat, %s trobat"
-#: builtin/index-pack.c:268
+#: builtin/index-pack.c:269
#, c-format
msgid "cannot fill %d byte"
msgid_plural "cannot fill %d bytes"
msgstr[0] "no es pot omplir %d octet"
msgstr[1] "no es pot omplir %d octets"
-#: builtin/index-pack.c:278
+#: builtin/index-pack.c:279
msgid "early EOF"
msgstr "EOF prematur"
-#: builtin/index-pack.c:279
+#: builtin/index-pack.c:280
msgid "read error on input"
msgstr "error de lectura d'entrada"
-#: builtin/index-pack.c:291
+#: builtin/index-pack.c:292
msgid "used more bytes than were available"
msgstr "s'han usat més octets que hi havia disponibles"
-#: builtin/index-pack.c:298
+#: builtin/index-pack.c:299
msgid "pack too large for current definition of off_t"
msgstr "paquet massa gran per a la definició actual d'off_t"
-#: builtin/index-pack.c:314
+#: builtin/index-pack.c:302 builtin/unpack-objects.c:92
+msgid "pack exceeds maximum allowed size"
+msgstr "el paquet supera la mida màxima permesa"
+
+#: builtin/index-pack.c:317
#, c-format
msgid "unable to create '%s'"
-msgstr "no es pot crear '%s'"
+msgstr "no s'ha pogut crear '%s'"
-#: builtin/index-pack.c:319
+#: builtin/index-pack.c:322
#, c-format
msgid "cannot open packfile '%s'"
msgstr "no es pot obrir el fitxer de paquet '%s'"
-#: builtin/index-pack.c:333
+#: builtin/index-pack.c:336
msgid "pack signature mismatch"
msgstr "hi ha una discordança de signatura de paquet"
-#: builtin/index-pack.c:335
+#: builtin/index-pack.c:338
#, c-format
msgid "pack version %<PRIu32> unsupported"
msgstr "la versió de paquet %<PRIu32> no és compatible"
-#: builtin/index-pack.c:353
+#: builtin/index-pack.c:356
#, c-format
msgid "pack has bad object at offset %<PRIuMAX>: %s"
msgstr "el paquet té un objecte dolent a la posició %<PRIuMAX>: %s"
-#: builtin/index-pack.c:475
+#: builtin/index-pack.c:478
#, c-format
msgid "inflate returned %d"
msgstr "la inflació ha retornat %d"
-#: builtin/index-pack.c:524
+#: builtin/index-pack.c:527
msgid "offset value overflow for delta base object"
msgstr "desbordament de valor de desplaçament per a l'objecte base de delta"
-#: builtin/index-pack.c:532
+#: builtin/index-pack.c:535
msgid "delta base offset is out of bound"
msgstr "el desplaçament de base de delta està fora de límits"
-#: builtin/index-pack.c:540
+#: builtin/index-pack.c:543
#, c-format
msgid "unknown object type %d"
msgstr "tipus d'objecte desconegut %d"
-#: builtin/index-pack.c:571
+#: builtin/index-pack.c:574
msgid "cannot pread pack file"
msgstr "no es pot fer pread en el fitxer de paquet"
-#: builtin/index-pack.c:573
+#: builtin/index-pack.c:576
#, c-format
msgid "premature end of pack file, %<PRIuMAX> byte missing"
msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
msgstr[1] ""
"el final del fitxer de paquet és prematur, manquen %<PRIuMAX> octets"
-#: builtin/index-pack.c:599
+#: builtin/index-pack.c:602
msgid "serious inflate inconsistency"
msgstr "hi ha una inconsistència seriosa d'inflació"
-#: builtin/index-pack.c:745 builtin/index-pack.c:751 builtin/index-pack.c:774
-#: builtin/index-pack.c:808 builtin/index-pack.c:817
+#: builtin/index-pack.c:748 builtin/index-pack.c:754 builtin/index-pack.c:777
+#: builtin/index-pack.c:811 builtin/index-pack.c:820
#, c-format
msgid "SHA1 COLLISION FOUND WITH %s !"
msgstr "S'HA TROBAT UNA COL·LISIÓ SHA1 AMB %s !"
-#: builtin/index-pack.c:748 builtin/pack-objects.c:164
-#: builtin/pack-objects.c:256
+#: builtin/index-pack.c:751 builtin/pack-objects.c:166
+#: builtin/pack-objects.c:258
#, c-format
msgid "unable to read %s"
msgstr "no s'ha pogut llegir %s"
-#: builtin/index-pack.c:814
+#: builtin/index-pack.c:817
#, c-format
msgid "cannot read existing object %s"
msgstr "no es pot llegir l'objecte existent %s"
-#: builtin/index-pack.c:828
+#: builtin/index-pack.c:831
#, c-format
msgid "invalid blob object %s"
msgstr "objecte de blob no vàlid %s"
-#: builtin/index-pack.c:842
+#: builtin/index-pack.c:845
#, c-format
msgid "invalid %s"
msgstr "%s no vàlid"
-#: builtin/index-pack.c:845
+#: builtin/index-pack.c:848
msgid "Error in object"
msgstr "Error en objecte"
-#: builtin/index-pack.c:847
+#: builtin/index-pack.c:850
#, c-format
msgid "Not all child objects of %s are reachable"
msgstr "No tots els objectes fills de %s són abastables"
-#: builtin/index-pack.c:919 builtin/index-pack.c:950
+#: builtin/index-pack.c:922 builtin/index-pack.c:953
msgid "failed to apply delta"
msgstr "s'ha fallat en aplicar la delta"
-#: builtin/index-pack.c:1120
+#: builtin/index-pack.c:1123
msgid "Receiving objects"
msgstr "S'estan rebent objectes"
-#: builtin/index-pack.c:1120
+#: builtin/index-pack.c:1123
msgid "Indexing objects"
msgstr "S'estan indexant objectes"
-#: builtin/index-pack.c:1152
+#: builtin/index-pack.c:1155
msgid "pack is corrupted (SHA1 mismatch)"
msgstr "el paquet és malmès (discordança SHA1)"
-#: builtin/index-pack.c:1157
+#: builtin/index-pack.c:1160
msgid "cannot fstat packfile"
msgstr "no es pot fer fstat en el fitxer de paquet"
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1163
msgid "pack has junk at the end"
msgstr "el paquet té brossa al seu final"
-#: builtin/index-pack.c:1171
+#: builtin/index-pack.c:1174
msgid "confusion beyond insanity in parse_pack_objects()"
msgstr "confusió més enllà de la bogeria en parse_pack_objects()"
-#: builtin/index-pack.c:1196
+#: builtin/index-pack.c:1197
msgid "Resolving deltas"
msgstr "S'estan resolent les deltes"
-#: builtin/index-pack.c:1207
+#: builtin/index-pack.c:1208
#, c-format
msgid "unable to create thread: %s"
msgstr "no s'ha pogut crear fil: %s"
-#: builtin/index-pack.c:1249
+#: builtin/index-pack.c:1250
msgid "confusion beyond insanity"
msgstr "confusió més enllà de la bogeria"
-#: builtin/index-pack.c:1255
+#: builtin/index-pack.c:1256
#, c-format
msgid "completed with %d local object"
msgid_plural "completed with %d local objects"
msgstr[0] "s'ha completat amb %d objecte local"
msgstr[1] "s'ha completat amb %d objectes locals"
-#: builtin/index-pack.c:1267
+#: builtin/index-pack.c:1268
#, c-format
msgid "Unexpected tail checksum for %s (disk corruption?)"
msgstr "Suma de verificació final no esperada per a %s (corrupció de disc?)"
-#: builtin/index-pack.c:1271
+#: builtin/index-pack.c:1272
#, c-format
msgid "pack has %d unresolved delta"
msgid_plural "pack has %d unresolved deltas"
msgstr[0] "El paquet té %d delta no resolta"
msgstr[1] "El paquet té %d deltes no resoltes"
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1296
#, c-format
msgid "unable to deflate appended object (%d)"
msgstr "no s'ha pogut desinflar l'objecte annexat (%d)"
-#: builtin/index-pack.c:1371
+#: builtin/index-pack.c:1372
#, c-format
msgid "local object %s is corrupt"
msgstr "l'objecte local %s és malmès"
-#: builtin/index-pack.c:1395
+#: builtin/index-pack.c:1396
msgid "error while closing pack file"
msgstr "error en tancar el fitxer de paquet"
-#: builtin/index-pack.c:1408
+#: builtin/index-pack.c:1409
#, c-format
msgid "cannot write keep file '%s'"
msgstr "no es pot escriure el fitxer a retenir '%s'"
-#: builtin/index-pack.c:1416
+#: builtin/index-pack.c:1417
#, c-format
msgid "cannot close written keep file '%s'"
msgstr "no es pot tancar el fitxer escrit a retenir '%s'"
-#: builtin/index-pack.c:1429
+#: builtin/index-pack.c:1430
msgid "cannot store pack file"
msgstr "no es pot emmagatzemar el fitxer de paquet"
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1441
msgid "cannot store index file"
msgstr "no es pot emmagatzemar el fitxer d'índex"
-#: builtin/index-pack.c:1473
+#: builtin/index-pack.c:1474
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "pack.indexversion=%<PRIu32> dolent"
-#: builtin/index-pack.c:1483 builtin/index-pack.c:1681
+#: builtin/index-pack.c:1484 builtin/index-pack.c:1681
#, c-format
msgid "no threads support, ignoring %s"
msgstr "no hi ha suport de fils, s'està ignorant %s"
msgid "bad %s"
msgstr "%s dolent"
-#: builtin/index-pack.c:1730
+#: builtin/index-pack.c:1732
msgid "--fix-thin cannot be used without --stdin"
msgstr "--fix-thin no es pot usar sense --stdin"
-#: builtin/index-pack.c:1738
+#: builtin/index-pack.c:1740
msgid "--verify with no packfile name given"
msgstr "s'ha donat --verify sense nom de fitxer de paquet"
-#: builtin/init-db.c:55
+#: builtin/init-db.c:54
#, c-format
msgid "cannot stat '%s'"
msgstr "no es pot fer stat en '%s'"
-#: builtin/init-db.c:61
+#: builtin/init-db.c:60
#, c-format
msgid "cannot stat template '%s'"
msgstr "no es pot fer stat en la plantilla '%s'"
-#: builtin/init-db.c:66
+#: builtin/init-db.c:65
#, c-format
msgid "cannot opendir '%s'"
msgstr "no es pot fer opendir en el directori '%s'"
-#: builtin/init-db.c:77
+#: builtin/init-db.c:76
#, c-format
msgid "cannot readlink '%s'"
msgstr "no es pot fer readlink en '%s'"
-#: builtin/init-db.c:79
+#: builtin/init-db.c:78
#, c-format
msgid "cannot symlink '%s' '%s'"
msgstr "no es pot fer symlink en '%s' '%s'"
-#: builtin/init-db.c:85
+#: builtin/init-db.c:84
#, c-format
msgid "cannot copy '%s' to '%s'"
msgstr "no es pot copiar '%s' a '%s'"
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
#, c-format
msgid "ignoring template %s"
msgstr "s'està ignorant la plantilla %s"
-#: builtin/init-db.c:120
+#: builtin/init-db.c:119
#, c-format
msgid "templates not found %s"
msgstr "no s'han trobat les plantilles %s"
-#: builtin/init-db.c:135
+#: builtin/init-db.c:134
#, c-format
msgid "not copying templates from '%s': %s"
msgstr "no s'està copiant plantilles de '%s': %s"
-#: builtin/init-db.c:312 builtin/init-db.c:315
-#, c-format
-msgid "%s already exists"
-msgstr "%s ja existeix"
-
-#: builtin/init-db.c:344
+#: builtin/init-db.c:327
#, c-format
msgid "unable to handle file type %d"
msgstr "no s'ha pogut gestionar el tipus de fitxer %d"
-#: builtin/init-db.c:347
+#: builtin/init-db.c:330
#, c-format
msgid "unable to move %s to %s"
msgstr "no s'ha pogut moure %s a %s"
-#: builtin/init-db.c:402
+#: builtin/init-db.c:347 builtin/init-db.c:350
+#, c-format
+msgid "%s already exists"
+msgstr "%s ja existeix"
+
+#: builtin/init-db.c:403
#, c-format
msgid "Reinitialized existing shared Git repository in %s%s\n"
msgstr "S'ha reinicialitzat el dipòsit compartit existent del Git en %s%s\n"
-#: builtin/init-db.c:403
+#: builtin/init-db.c:404
#, c-format
msgid "Reinitialized existing Git repository in %s%s\n"
msgstr "S'ha reinicialitzat el dipòsit existent del Git en %s%s\n"
-#: builtin/init-db.c:407
+#: builtin/init-db.c:408
#, c-format
msgid "Initialized empty shared Git repository in %s%s\n"
msgstr "S'ha inicialitzat un dipòsit compartit buit del Git en %s%s\n"
-#: builtin/init-db.c:408
+#: builtin/init-db.c:409
#, c-format
msgid "Initialized empty Git repository in %s%s\n"
msgstr "S'ha inicialitzat un dipòsit buit del Git en %s%s\n"
-#: builtin/init-db.c:455
+#: builtin/init-db.c:457
msgid ""
"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
"shared[=<permissions>]] [<directory>]"
"git init [-q | --quiet] [--bare] [--template=<directori-de-plantilla>] [--"
"shared[=<permisos>]] [<directori>]"
-#: builtin/init-db.c:478
+#: builtin/init-db.c:480
msgid "permissions"
msgstr "permisos"
-#: builtin/init-db.c:479
+#: builtin/init-db.c:481
msgid "specify that the git repository is to be shared amongst several users"
msgstr "especifica que el dipòsit de git es compartirà entre diversos usuaris"
-#: builtin/init-db.c:513 builtin/init-db.c:518
+#: builtin/init-db.c:515 builtin/init-db.c:520
#, c-format
msgid "cannot mkdir %s"
msgstr "no es pot mkdir %s"
-#: builtin/init-db.c:522
+#: builtin/init-db.c:524
#, c-format
msgid "cannot chdir to %s"
msgstr "no es pot canviar de directori a %s"
-#: builtin/init-db.c:543
+#: builtin/init-db.c:545
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
"no es permet %s (o --work-tree=<directori>) sense especificar %s (o --git-"
"dir=<directori>)"
-#: builtin/init-db.c:571
+#: builtin/init-db.c:573
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "No es pot accedir a l'arbre de treball '%s'"
msgid "Cover letter needs email format"
msgstr "La carta de presentació necessita el format de correu electrònic"
-#: builtin/log.c:1064
+#: builtin/log.c:1063
#, c-format
msgid "insane in-reply-to: %s"
msgstr "in-reply-to boig: %s"
-#: builtin/log.c:1092
+#: builtin/log.c:1091
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [<opcions>] [<des-de> | <rang-de-revisions>]"
-#: builtin/log.c:1137
+#: builtin/log.c:1141
msgid "Two output directories?"
msgstr "Hi ha dos directoris de sortida?"
-#: builtin/log.c:1244 builtin/log.c:1883 builtin/log.c:1885 builtin/log.c:1897
+#: builtin/log.c:1248 builtin/log.c:1891 builtin/log.c:1893 builtin/log.c:1905
#, c-format
msgid "Unknown commit %s"
msgstr "Comissió desconeguda %s"
-#: builtin/log.c:1254 builtin/notes.c:254 builtin/notes.c:305
-#: builtin/notes.c:307 builtin/notes.c:370 builtin/notes.c:425
-#: builtin/notes.c:511 builtin/notes.c:516 builtin/notes.c:594
-#: builtin/notes.c:657 builtin/notes.c:882 builtin/tag.c:455
+#: builtin/log.c:1258 builtin/notes.c:884 builtin/tag.c:455
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "S'ha fallat en resoldre '%s' com a referència vàlida."
-#: builtin/log.c:1259
+#: builtin/log.c:1263
msgid "Could not find exact merge base."
msgstr "No s'ha pogut trobar la base exacta de fusió."
-#: builtin/log.c:1263
+#: builtin/log.c:1267
msgid ""
"Failed to get upstream, if you want to record base commit automatically,\n"
"please use git branch --set-upstream-to to track a remote branch.\n"
"seguir una branca remot. O podeu especificar la comissió base manualment\n"
"amb --base=<id-de-comissió-base>."
-#: builtin/log.c:1283
+#: builtin/log.c:1287
msgid "Failed to find exact merge base"
msgstr "S'ha fallat en trobar la base exacta de fusió."
-#: builtin/log.c:1294
+#: builtin/log.c:1298
msgid "base commit should be the ancestor of revision list"
msgstr "la comissió base ha de ser l'avantpassat de la llista de revisions"
-#: builtin/log.c:1298
+#: builtin/log.c:1302
msgid "base commit shouldn't be in revision list"
msgstr "la comissió base no ha de ser en la llista de revisions"
-#: builtin/log.c:1347
+#: builtin/log.c:1351
msgid "cannot get patch id"
msgstr "no es pot obtenir l'id del pedaç"
-#: builtin/log.c:1404
+#: builtin/log.c:1408
msgid "use [PATCH n/m] even with a single patch"
msgstr "usa [PATCH n/m] fins i tot amb un sol pedaç"
-#: builtin/log.c:1407
+#: builtin/log.c:1411
msgid "use [PATCH] even with multiple patches"
msgstr "usa [PATCH] fins i tot amb múltiples pedaços"
-#: builtin/log.c:1411
+#: builtin/log.c:1415
msgid "print patches to standard out"
msgstr "imprimeix els pedaços a la sortida estàndard"
-#: builtin/log.c:1413
+#: builtin/log.c:1417
msgid "generate a cover letter"
msgstr "genera una carta de presentació"
-#: builtin/log.c:1415
+#: builtin/log.c:1419
msgid "use simple number sequence for output file names"
msgstr "usa una seqüència de números per als noms dels fitxers de sortida"
-#: builtin/log.c:1416
+#: builtin/log.c:1420
msgid "sfx"
msgstr "sufix"
-#: builtin/log.c:1417
+#: builtin/log.c:1421
msgid "use <sfx> instead of '.patch'"
msgstr "usa <sufix> en lloc de '.patch'"
-#: builtin/log.c:1419
+#: builtin/log.c:1423
msgid "start numbering patches at <n> instead of 1"
msgstr "comença numerant els pedaços a <n> en lloc d'1"
-#: builtin/log.c:1421
+#: builtin/log.c:1425
msgid "mark the series as Nth re-roll"
msgstr "marca la sèrie com a l'enèsima llançada"
-#: builtin/log.c:1423
+#: builtin/log.c:1427
+msgid "Use [RFC PATCH] instead of [PATCH]"
+msgstr "Usa [RFC PATCH] en lloc de [PATCH]"
+
+#: builtin/log.c:1430
msgid "Use [<prefix>] instead of [PATCH]"
msgstr "Usa [<prefix>] en lloc de [PATCH]"
-#: builtin/log.c:1426
+#: builtin/log.c:1433
msgid "store resulting files in <dir>"
msgstr "emmagatzema els fitxers resultants a <directori>"
-#: builtin/log.c:1429
+#: builtin/log.c:1436
msgid "don't strip/add [PATCH]"
msgstr "no despullis/afegeixis [PATCH]"
-#: builtin/log.c:1432
+#: builtin/log.c:1439
msgid "don't output binary diffs"
msgstr "no emetis diferències binàries"
-#: builtin/log.c:1434
+#: builtin/log.c:1441
msgid "output all-zero hash in From header"
msgstr "emet un hash de tots zeros en la capçalera From"
-#: builtin/log.c:1436
+#: builtin/log.c:1443
msgid "don't include a patch matching a commit upstream"
msgstr "no incloguis pedaços que coincideixin amb comissions a la font"
-#: builtin/log.c:1438
+#: builtin/log.c:1445
msgid "show patch format instead of default (patch + stat)"
msgstr ""
"mostra el format de pedaç en lloc del per defecte (pedaç + estadístiques)"
-#: builtin/log.c:1440
+#: builtin/log.c:1447
msgid "Messaging"
msgstr "Missatgeria"
-#: builtin/log.c:1441
+#: builtin/log.c:1448
msgid "header"
msgstr "capçalera"
-#: builtin/log.c:1442
+#: builtin/log.c:1449
msgid "add email header"
msgstr "afegeix una capçalera de correu electrònic"
-#: builtin/log.c:1443 builtin/log.c:1445
+#: builtin/log.c:1450 builtin/log.c:1452
msgid "email"
msgstr "correu electrònic"
-#: builtin/log.c:1443
+#: builtin/log.c:1450
msgid "add To: header"
msgstr "afegeix la capçalera To:"
-#: builtin/log.c:1445
+#: builtin/log.c:1452
msgid "add Cc: header"
msgstr "afegeix la capçalera Cc:"
-#: builtin/log.c:1447
+#: builtin/log.c:1454
msgid "ident"
msgstr "identitat"
-#: builtin/log.c:1448
+#: builtin/log.c:1455
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"estableix l'adreça From a <identitat> (o la identitat del comitent si manca)"
-#: builtin/log.c:1450
+#: builtin/log.c:1457
msgid "message-id"
msgstr "ID de missatge"
-#: builtin/log.c:1451
+#: builtin/log.c:1458
msgid "make first mail a reply to <message-id>"
msgstr "fes que el primer missatge sigui una resposta a <ID de missatge>"
-#: builtin/log.c:1452 builtin/log.c:1455
+#: builtin/log.c:1459 builtin/log.c:1462
msgid "boundary"
msgstr "límit"
-#: builtin/log.c:1453
+#: builtin/log.c:1460
msgid "attach the patch"
msgstr "ajunta el pedaç"
-#: builtin/log.c:1456
+#: builtin/log.c:1463
msgid "inline the patch"
msgstr "posa el pedaç en el cos"
-#: builtin/log.c:1460
+#: builtin/log.c:1467
msgid "enable message threading, styles: shallow, deep"
msgstr "habilita l'enfilada de missatges, estils: shallow, deep"
-#: builtin/log.c:1462
+#: builtin/log.c:1469
msgid "signature"
msgstr "signatura"
-#: builtin/log.c:1463
+#: builtin/log.c:1470
msgid "add a signature"
msgstr "afegeix una signatura"
-#: builtin/log.c:1464
+#: builtin/log.c:1471
msgid "base-commit"
msgstr "comissió base"
-#: builtin/log.c:1465
+#: builtin/log.c:1472
msgid "add prerequisite tree info to the patch series"
msgstr "afegeix la informació d'arbre prerequerida a la sèrie de pedaços"
-#: builtin/log.c:1467
+#: builtin/log.c:1474
msgid "add a signature from a file"
msgstr "afegeix una signatura des d'un fitxer"
-#: builtin/log.c:1468
+#: builtin/log.c:1475
msgid "don't print the patch filenames"
msgstr "no imprimeixis els noms de fitxer del pedaç"
-#: builtin/log.c:1558
+#: builtin/log.c:1565
msgid "-n and -k are mutually exclusive."
msgstr "-n i -k són mutualment exclusius."
-#: builtin/log.c:1560
-msgid "--subject-prefix and -k are mutually exclusive."
-msgstr "--subject-prefix i -k són mutualment exclusius."
+#: builtin/log.c:1567
+msgid "--subject-prefix/--rfc and -k are mutually exclusive."
+msgstr "--subject-prefix/--rfc i -k són mutualment exclusius."
-#: builtin/log.c:1568
+#: builtin/log.c:1575
msgid "--name-only does not make sense"
msgstr "--name-only no té sentit"
-#: builtin/log.c:1570
+#: builtin/log.c:1577
msgid "--name-status does not make sense"
msgstr "--name-status no té sentit"
-#: builtin/log.c:1572
+#: builtin/log.c:1579
msgid "--check does not make sense"
msgstr "--check no té sentit"
-#: builtin/log.c:1602
+#: builtin/log.c:1609
msgid "standard output, or directory, which one?"
msgstr "sortida estàndard o directori, quin dels dos?"
-#: builtin/log.c:1604
+#: builtin/log.c:1611
#, c-format
msgid "Could not create directory '%s'"
msgstr "No s'ha pogut crear el directori '%s'"
-#: builtin/log.c:1698
+#: builtin/log.c:1705
#, c-format
msgid "unable to read signature file '%s'"
msgstr "no s'ha pogut llegir el fitxer de signatura '%s'"
-#: builtin/log.c:1769
+#: builtin/log.c:1777
msgid "Failed to create output files"
msgstr "S'ha fallat en crear els fitxers de sortida"
-#: builtin/log.c:1818
+#: builtin/log.c:1826
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [<font> [<cap> [<límit>]]]"
-#: builtin/log.c:1872
+#: builtin/log.c:1880
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
"No s'ha pogut trobar una branca remota seguida. Si us plau, especifiqueu "
"<font> manualment.\n"
-#: builtin/ls-files.c:379
+#: builtin/ls-files.c:458
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [<opcions>] [<fitxer>...]"
-#: builtin/ls-files.c:428
+#: builtin/ls-files.c:507
msgid "identify the file status with tags"
msgstr "identifica l'estat de fitxer amb etiquetes"
-#: builtin/ls-files.c:430
+#: builtin/ls-files.c:509
msgid "use lowercase letters for 'assume unchanged' files"
msgstr "usa lletres minúscules per als fitxers 'assume unchanged'"
-#: builtin/ls-files.c:432
+#: builtin/ls-files.c:511
msgid "show cached files in the output (default)"
msgstr ""
"mostra en la sortida els fitxers desats en la memòria cau (per defecte)"
-#: builtin/ls-files.c:434
+#: builtin/ls-files.c:513
msgid "show deleted files in the output"
msgstr "mostra en la sortida els fitxers suprimits"
-#: builtin/ls-files.c:436
+#: builtin/ls-files.c:515
msgid "show modified files in the output"
msgstr "mostra en la sortida els fitxers modificats"
-#: builtin/ls-files.c:438
+#: builtin/ls-files.c:517
msgid "show other files in the output"
msgstr "mostra en la sortida els altres fitxers"
-#: builtin/ls-files.c:440
+#: builtin/ls-files.c:519
msgid "show ignored files in the output"
msgstr "mostra en la sortida els fitxers ignorats"
-#: builtin/ls-files.c:443
+#: builtin/ls-files.c:522
msgid "show staged contents' object name in the output"
msgstr "mostra en la sortida el nom d'objecte dels continguts allistats"
-#: builtin/ls-files.c:445
+#: builtin/ls-files.c:524
msgid "show files on the filesystem that need to be removed"
msgstr "mostra els fitxers en el sistema de fitxers que s'han d'eliminar"
-#: builtin/ls-files.c:447
+#: builtin/ls-files.c:526
msgid "show 'other' directories' names only"
msgstr "mostra només els noms dels directoris 'other'"
-#: builtin/ls-files.c:449
+#: builtin/ls-files.c:528
msgid "show line endings of files"
-msgstr "mostra els terminis de línia dels fitxers"
+msgstr "mostra els terminadors de línia dels fitxers"
-#: builtin/ls-files.c:451
+#: builtin/ls-files.c:530
msgid "don't show empty directories"
msgstr "no mostris els directoris buits"
-#: builtin/ls-files.c:454
+#: builtin/ls-files.c:533
msgid "show unmerged files in the output"
msgstr "mostra en la sortida els fitxers sense fusionar"
-#: builtin/ls-files.c:456
+#: builtin/ls-files.c:535
msgid "show resolve-undo information"
msgstr "mostra la informació de resolució de desfet"
-#: builtin/ls-files.c:458
+#: builtin/ls-files.c:537
msgid "skip files matching pattern"
msgstr "salta els fitxers coincidents amb el patró"
-#: builtin/ls-files.c:461
+#: builtin/ls-files.c:540
msgid "exclude patterns are read from <file>"
msgstr "els patrons d'exclusió es llegeixen de <fitxer>"
-#: builtin/ls-files.c:464
+#: builtin/ls-files.c:543
msgid "read additional per-directory exclude patterns in <file>"
msgstr "llegeix els patrons addicionals d'exclusió per directori en <fitxer>"
-#: builtin/ls-files.c:466
+#: builtin/ls-files.c:545
msgid "add the standard git exclusions"
msgstr "afegeix les exclusions estàndards de git"
-#: builtin/ls-files.c:469
+#: builtin/ls-files.c:548
msgid "make the output relative to the project top directory"
msgstr "fes que la sortida sigui relativa al directori superior del projecte"
-#: builtin/ls-files.c:472
+#: builtin/ls-files.c:551
+msgid "recurse through submodules"
+msgstr "recursa als submòduls"
+
+#: builtin/ls-files.c:553
msgid "if any <file> is not in the index, treat this as an error"
msgstr "si qualsevol <fitxer> no és en l'índex, tracta això com a error"
-#: builtin/ls-files.c:473
+#: builtin/ls-files.c:554
msgid "tree-ish"
msgstr "arbre"
-#: builtin/ls-files.c:474
+#: builtin/ls-files.c:555
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"pretén que els camins eliminats després de <arbre> encara siguin presents"
-#: builtin/ls-files.c:476
+#: builtin/ls-files.c:557
msgid "show debugging data"
msgstr "mostra les dades de depuració"
msgid "Available custom strategies are:"
msgstr "Les estratègies personalitzades disponibles són:"
-#: builtin/merge.c:195 builtin/pull.c:126
+#: builtin/merge.c:195 builtin/pull.c:127
msgid "do not show a diffstat at the end of the merge"
msgstr "no mostris les estadístiques de diferència al final de la fusió"
-#: builtin/merge.c:198 builtin/pull.c:129
+#: builtin/merge.c:198 builtin/pull.c:130
msgid "show a diffstat at the end of the merge"
msgstr "mostra les estadístiques de diferència al final de la fusió"
-#: builtin/merge.c:199 builtin/pull.c:132
+#: builtin/merge.c:199 builtin/pull.c:133
msgid "(synonym to --stat)"
msgstr "(sinònim de --stat)"
-#: builtin/merge.c:201 builtin/pull.c:135
+#: builtin/merge.c:201 builtin/pull.c:136
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"afegeix (com a màxim <n>) entrades del registre curt al missatge de comissió "
"de fusió"
-#: builtin/merge.c:204 builtin/pull.c:138
+#: builtin/merge.c:204 builtin/pull.c:139
msgid "create a single commit instead of doing a merge"
msgstr "crea una única comissió en lloc de fusionar"
-#: builtin/merge.c:206 builtin/pull.c:141
+#: builtin/merge.c:206 builtin/pull.c:142
msgid "perform a commit if the merge succeeds (default)"
msgstr "realitza una comissió si la fusió té èxit (per defecte)"
-#: builtin/merge.c:208 builtin/pull.c:144
+#: builtin/merge.c:208 builtin/pull.c:145
msgid "edit message before committing"
msgstr "edita el missatge abans de cometre"
msgid "allow fast-forward (default)"
msgstr "permet l'avanç ràpid (per defecte)"
-#: builtin/merge.c:211 builtin/pull.c:150
+#: builtin/merge.c:211 builtin/pull.c:151
msgid "abort if fast-forward is not possible"
msgstr "avorta si l'avanç ràpid no és possible"
-#: builtin/merge.c:215 builtin/pull.c:153
+#: builtin/merge.c:215 builtin/pull.c:154
msgid "verify that the named commit has a valid GPG signature"
msgstr "verifica que la comissió anomenada tingui una signatura GPG vàlida"
-#: builtin/merge.c:216 builtin/notes.c:772 builtin/pull.c:157
+#: builtin/merge.c:216 builtin/notes.c:774 builtin/pull.c:158
#: builtin/revert.c:89
msgid "strategy"
msgstr "estratègia"
-#: builtin/merge.c:217 builtin/pull.c:158
+#: builtin/merge.c:217 builtin/pull.c:159
msgid "merge strategy to use"
msgstr "estratègia de fusió a usar"
-#: builtin/merge.c:218 builtin/pull.c:161
+#: builtin/merge.c:218 builtin/pull.c:162
msgid "option=value"
msgstr "opció=valor"
-#: builtin/merge.c:219 builtin/pull.c:162
+#: builtin/merge.c:219 builtin/pull.c:163
msgid "option for selected merge strategy"
msgstr "opció per a l'estratègia de fusió seleccionada"
msgid "abort the current in-progress merge"
msgstr "avorta la fusió en curs actual"
-#: builtin/merge.c:227 builtin/pull.c:169
+#: builtin/merge.c:227 builtin/pull.c:170
msgid "allow merging unrelated histories"
msgstr "permet fusionar històries no relacionades"
msgid "Already up-to-date."
msgstr "Ja està al dia."
-#: builtin/merge.c:1382
+#: builtin/merge.c:1377
#, c-format
msgid "Updating %s..%s\n"
msgstr "S'estan actualitzant %s..%s\n"
-#: builtin/merge.c:1419
+#: builtin/merge.c:1418
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "S'està intentant una fusió molt trivial en l'índex...\n"
-#: builtin/merge.c:1426
+#: builtin/merge.c:1425
#, c-format
msgid "Nope.\n"
msgstr "No.\n"
-#: builtin/merge.c:1451
+#: builtin/merge.c:1450
msgid "Already up-to-date. Yeeah!"
msgstr "Ja està al dia. Estupend!"
-#: builtin/merge.c:1457
+#: builtin/merge.c:1456
msgid "Not possible to fast-forward, aborting."
msgstr "No és possible avançar ràpidament, s'està avortant."
-#: builtin/merge.c:1480 builtin/merge.c:1559
+#: builtin/merge.c:1479 builtin/merge.c:1558
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "S'està rebobinant l'arbre a la pristina...\n"
-#: builtin/merge.c:1484
+#: builtin/merge.c:1483
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "S'està intentant l'estratègia de fusió %s...\n"
-#: builtin/merge.c:1550
+#: builtin/merge.c:1549
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Cap estratègia de fusió ha gestionat la fusió.\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1551
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "L'estratègia de fusió %s ha fallat.\n"
-#: builtin/merge.c:1561
+#: builtin/merge.c:1560
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "S'està usant el %s per a preparar la resolució a mà.\n"
-#: builtin/merge.c:1573
+#: builtin/merge.c:1572
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
msgid "git merge-base --fork-point <ref> [<commit>]"
msgstr "git merge-base --fork-point <referència> [<comissió>]"
-#: builtin/merge-base.c:214
+#: builtin/merge-base.c:217
msgid "output all common ancestors"
msgstr "emet tots els avantpassats comuns"
-#: builtin/merge-base.c:216
+#: builtin/merge-base.c:219
msgid "find ancestors for a single n-way merge"
msgstr "troba els avantpassats per a una sola fusió d'n vies"
-#: builtin/merge-base.c:218
+#: builtin/merge-base.c:221
msgid "list revs not reachable from others"
msgstr "llista les revisions no abastables d'altres"
-#: builtin/merge-base.c:220
+#: builtin/merge-base.c:223
msgid "is the first one ancestor of the other?"
msgstr "és la primera un avantpassat de l'altre?"
-#: builtin/merge-base.c:222
+#: builtin/merge-base.c:225
msgid "find where <commit> forked from reflog of <ref>"
msgstr ""
"troba on <comissió> s'ha bifurcat del registre de referències de <referència>"
msgid "set labels for file1/orig-file/file2"
msgstr "estableix les etiquetes per a fitxer1/fitxer-original/fitxer2"
+#: builtin/merge-recursive.c:45
+#, c-format
+msgid "unknown option %s"
+msgstr "opció desconeguda %s"
+
+#: builtin/merge-recursive.c:51
+#, c-format
+msgid "could not parse object '%s'"
+msgstr "no s'ha pogut analitzar l'objecte '%s'"
+
+#: builtin/merge-recursive.c:55
+#, c-format
+msgid "cannot handle more than %d base. Ignoring %s."
+msgid_plural "cannot handle more than %d bases. Ignoring %s."
+msgstr[0] "no es pot gestionar més d'%d base. S'està ignorant %s."
+msgstr[1] "no es poden gestionar més de %d bases. S'està ignorant %s."
+
+#: builtin/merge-recursive.c:63
+msgid "not handling anything other than two heads merge."
+msgstr "no s'està gestionant res a part de la fusió de dos caps."
+
+#: builtin/merge-recursive.c:69 builtin/merge-recursive.c:71
+#, c-format
+msgid "could not resolve ref '%s'"
+msgstr "no s'ha pogut resoldre la referència '%s'"
+
+#: builtin/merge-recursive.c:77
+#, c-format
+msgid "Merging %s with %s\n"
+msgstr "S'està fusionant %s amb %s\n"
+
#: builtin/mktree.c:65
msgid "git mktree [-z] [--missing] [--batch]"
msgstr "git mktree [-z] [--missing] [--batch]"
msgid "renaming '%s' failed"
msgstr "el canvi del nom de '%s' ha fallat"
-#: builtin/name-rev.c:258
+#: builtin/name-rev.c:257
msgid "git name-rev [<options>] <commit>..."
msgstr "git name-rev [<opcions>] <comissió>..."
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [<options>] --all"
msgstr "git name-rev [<opcions>] --all"
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [<options>] --stdin"
msgstr "git name-rev [<opcions>] --stdin"
-#: builtin/name-rev.c:312
+#: builtin/name-rev.c:311
msgid "print only names (no SHA-1)"
msgstr "imprimeix només els noms (sense SHA-1)"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "only use tags to name the commits"
msgstr "només usa les etiquetes per a anomenar les comissions"
-#: builtin/name-rev.c:315
+#: builtin/name-rev.c:314
msgid "only use refs matching <pattern>"
msgstr "només usa les referències que coincideixin amb <patró>"
-#: builtin/name-rev.c:317
+#: builtin/name-rev.c:316
msgid "list all commits reachable from all refs"
msgstr "llista totes les comissions abastables de totes les referències"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "read from stdin"
msgstr "llegeix d'stdin"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "allow to print `undefined` names (default)"
msgstr "permet imprimir els noms `undefined` (per defecte)"
-#: builtin/name-rev.c:325
+#: builtin/name-rev.c:324
msgid "dereference tags in the input (internal use)"
msgstr "dereferencia les etiquetes en l'entrada (ús intern)"
msgstr "s'ha fallat en finalitzar 'show' per a l'objecte '%s'"
#: builtin/notes.c:194
-msgid "Please supply the note contents using either -m or -F option"
+msgid "please supply the note contents using either -m or -F option"
msgstr ""
-"Si us plau, proveïu els continguts de la nota fent servir l'opció -m o "
+"si us plau, proveïu els continguts de la nota fent servir l'opció -m o "
"l'opció -F"
#: builtin/notes.c:203
#: builtin/notes.c:205
#, c-format
-msgid "The note contents have been left in %s"
-msgstr "Els continguts de la nota s'han deixat en %s"
+msgid "the note contents have been left in %s"
+msgstr "s'han deixat els continguts de la nota en %s"
#: builtin/notes.c:233 builtin/tag.c:439
#, c-format
msgid "could not open or read '%s'"
msgstr "no s'ha pogut obrir o llegir '%s'"
+#: builtin/notes.c:254 builtin/notes.c:305 builtin/notes.c:307
+#: builtin/notes.c:372 builtin/notes.c:427 builtin/notes.c:513
+#: builtin/notes.c:518 builtin/notes.c:596 builtin/notes.c:659
+#, c-format
+msgid "failed to resolve '%s' as a valid ref."
+msgstr "s'ha fallat en resoldre '%s' com a referència vàlida."
+
#: builtin/notes.c:257
#, c-format
-msgid "Failed to read object '%s'."
-msgstr "S'ha fallat en llegir l'objecte '%s'."
+msgid "failed to read object '%s'."
+msgstr "s'ha fallat en llegir l'objecte '%s'."
#: builtin/notes.c:261
#, c-format
-msgid "Cannot read note data from non-blob object '%s'."
-msgstr "No es pot llegir les dades de node de l'objecte no de blob '%s'."
+msgid "cannot read note data from non-blob object '%s'."
+msgstr "no es pot llegir les dades de node de l'objecte no de blob '%s'."
+
+#: builtin/notes.c:301
+#, c-format
+msgid "malformed input line: '%s'."
+msgstr "línia d'entrada mal formada: '%s'."
+
+#: builtin/notes.c:316
+#, c-format
+msgid "failed to copy notes from '%s' to '%s'"
+msgstr "s'ha fallat en copiar les notes de '%s' a '%s'"
+
+#. TRANSLATORS: the first %s will be replaced by a
+#. git notes command: 'add', 'merge', 'remove', etc.
+#: builtin/notes.c:345
+#, c-format
+msgid "refusing to %s notes in %s (outside of refs/notes/)"
+msgstr "s'està refusant %s les notes en %s (fora de refs/notes/)"
-#: builtin/notes.c:363 builtin/notes.c:418 builtin/notes.c:494
-#: builtin/notes.c:506 builtin/notes.c:582 builtin/notes.c:650
-#: builtin/notes.c:800 builtin/notes.c:947 builtin/notes.c:968
+#: builtin/notes.c:365 builtin/notes.c:420 builtin/notes.c:496
+#: builtin/notes.c:508 builtin/notes.c:584 builtin/notes.c:652
+#: builtin/notes.c:802 builtin/notes.c:949 builtin/notes.c:970
msgid "too many parameters"
msgstr "massa paràmetres"
-#: builtin/notes.c:376 builtin/notes.c:663
+#: builtin/notes.c:378 builtin/notes.c:665
#, c-format
-msgid "No note found for object %s."
-msgstr "No s'ha trobat cap nota per a l'objecte %s."
+msgid "no note found for object %s."
+msgstr "no s'ha trobat cap nota per a l'objecte %s."
-#: builtin/notes.c:397 builtin/notes.c:560
+#: builtin/notes.c:399 builtin/notes.c:562
msgid "note contents as a string"
msgstr "anota els continguts com a cadena"
-#: builtin/notes.c:400 builtin/notes.c:563
+#: builtin/notes.c:402 builtin/notes.c:565
msgid "note contents in a file"
msgstr "anota els continguts en un fitxer"
-#: builtin/notes.c:403 builtin/notes.c:566
+#: builtin/notes.c:405 builtin/notes.c:568
msgid "reuse and edit specified note object"
msgstr "reusa i edita l'objecte de nota especificat"
-#: builtin/notes.c:406 builtin/notes.c:569
+#: builtin/notes.c:408 builtin/notes.c:571
msgid "reuse specified note object"
msgstr "reusa l'objecte de nota especificat"
-#: builtin/notes.c:409 builtin/notes.c:572
+#: builtin/notes.c:411 builtin/notes.c:574
msgid "allow storing empty note"
msgstr "permet l'emmagatzematge d'una nota buida"
-#: builtin/notes.c:410 builtin/notes.c:481
+#: builtin/notes.c:412 builtin/notes.c:483
msgid "replace existing notes"
msgstr "reemplaça les notes existents"
-#: builtin/notes.c:435
+#: builtin/notes.c:437
#, c-format
msgid ""
"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
"No es pot afegir les notes. S'han trobat notes existents de l'objecte %s. "
"Useu '-f' per a sobreescriure les notes existents."
-#: builtin/notes.c:450 builtin/notes.c:529
+#: builtin/notes.c:452 builtin/notes.c:531
#, c-format
msgid "Overwriting existing notes for object %s\n"
msgstr "S'estan sobreescrivint les notes existents de l'objecte %s\n"
-#: builtin/notes.c:461 builtin/notes.c:622 builtin/notes.c:887
+#: builtin/notes.c:463 builtin/notes.c:624 builtin/notes.c:889
#, c-format
msgid "Removing note for object %s\n"
msgstr "S'està eliminant la nota de l'objecte %s\n"
-#: builtin/notes.c:482
+#: builtin/notes.c:484
msgid "read objects from stdin"
msgstr "llegeix els objectes des d'stdin"
-#: builtin/notes.c:484
+#: builtin/notes.c:486
msgid "load rewriting config for <command> (implies --stdin)"
msgstr ""
"carrega la configuració de reescriptura per a <ordre> (implica --stdin)"
-#: builtin/notes.c:502
+#: builtin/notes.c:504
msgid "too few parameters"
msgstr "hi ha massa pocs paràmetres"
-#: builtin/notes.c:523
+#: builtin/notes.c:525
#, c-format
msgid ""
"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
"No es pot copiar les notes. S'han trobat notes existents de l'objecte %s. "
"Useu '-f' per a sobreescriure les notes existents."
-#: builtin/notes.c:535
+#: builtin/notes.c:537
#, c-format
-msgid "Missing notes on source object %s. Cannot copy."
-msgstr "Manquen notes a l'objecte font %s. No es pot copiar."
+msgid "missing notes on source object %s. Cannot copy."
+msgstr "manquen notes a l'objecte font %s. No es pot copiar."
-#: builtin/notes.c:587
+#: builtin/notes.c:589
#, c-format
msgid ""
"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
"S'han desaprovat les opcions -m/-F/-c/-C en favor de la subordre 'edit'.\n"
"Si us plau, useu 'git notes add -f -m/-F/-c/-C' en lloc d'això.\n"
-#: builtin/notes.c:753
+#: builtin/notes.c:685
+msgid "failed to delete ref NOTES_MERGE_PARTIAL"
+msgstr "s'ha fallat en suprimir la referència NOTES_MERGE_PARTIAL"
+
+#: builtin/notes.c:687
+msgid "failed to delete ref NOTES_MERGE_REF"
+msgstr "s'ha fallat en suprimir la referència NOTES_MERGE_REF"
+
+#: builtin/notes.c:689
+msgid "failed to remove 'git notes merge' worktree"
+msgstr "s'ha fallat en eliminar l'arbre de treball de 'git notes merge'"
+
+#: builtin/notes.c:709
+msgid "failed to read ref NOTES_MERGE_PARTIAL"
+msgstr "s'ha fallat en llegir la referència NOTES_MERGE_PARTIAL"
+
+#: builtin/notes.c:711
+msgid "could not find commit from NOTES_MERGE_PARTIAL."
+msgstr "no s'ha pogut trobar cap comissió de NOTES_MERGE_PARTIAL."
+
+#: builtin/notes.c:713
+msgid "could not parse commit from NOTES_MERGE_PARTIAL."
+msgstr "no s'ha pogut analitzar la comissió de NOTES_MERGE_PARTIAL."
+
+#: builtin/notes.c:726
+msgid "failed to resolve NOTES_MERGE_REF"
+msgstr "s'ha fallat en resoldre NOTES_MERGE_REF"
+
+#: builtin/notes.c:729
+msgid "failed to finalize notes merge"
+msgstr "s'ha fallat en finalitzar la fusió de notes"
+
+#: builtin/notes.c:755
#, c-format
msgid "unknown notes merge strategy %s"
msgstr "estratègia de fusió de notes desconeguda %s"
-#: builtin/notes.c:769
+#: builtin/notes.c:771
msgid "General options"
msgstr "Opcions generals"
-#: builtin/notes.c:771
+#: builtin/notes.c:773
msgid "Merge options"
msgstr "Opcions de fusió"
-#: builtin/notes.c:773
+#: builtin/notes.c:775
msgid ""
"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
"cat_sort_uniq)"
"resol els conflictes de nota usant l'estratègia donada (manual/ours/theirs/"
"union/cat_sort_uniq)"
-#: builtin/notes.c:775
+#: builtin/notes.c:777
msgid "Committing unmerged notes"
msgstr "S'estan cometent les notes sense fusionar"
-#: builtin/notes.c:777
+#: builtin/notes.c:779
msgid "finalize notes merge by committing unmerged notes"
msgstr "finalitza la fusió de notes cometent les notes sense fusionar"
-#: builtin/notes.c:779
+#: builtin/notes.c:781
msgid "Aborting notes merge resolution"
msgstr "S'està avortant la resolució de fusió de notes"
-#: builtin/notes.c:781
+#: builtin/notes.c:783
msgid "abort notes merge"
msgstr "avorta la fusió de notes"
-#: builtin/notes.c:792
+#: builtin/notes.c:794
msgid "cannot mix --commit, --abort or -s/--strategy"
msgstr "no es pot combinar --commit, --abort i -s/--strategy"
-#: builtin/notes.c:797
-msgid "Must specify a notes ref to merge"
-msgstr "Cal especificar una referència de notes a fusionar"
+#: builtin/notes.c:799
+msgid "must specify a notes ref to merge"
+msgstr "cal especificar una referència de notes a fusionar"
-#: builtin/notes.c:821
+#: builtin/notes.c:823
#, c-format
-msgid "Unknown -s/--strategy: %s"
+msgid "unknown -s/--strategy: %s"
msgstr "-s/--strategy desconeguda: %s"
-#: builtin/notes.c:858
+#: builtin/notes.c:860
#, c-format
-msgid "A notes merge into %s is already in-progress at %s"
-msgstr "Una fusió de notes a %s ja està en curs a %s"
+msgid "a notes merge into %s is already in-progress at %s"
+msgstr "una fusió de notes a %s ja està en curs a %s"
-#: builtin/notes.c:861
+#: builtin/notes.c:863
#, c-format
-msgid "Failed to store link to current notes ref (%s)"
+msgid "failed to store link to current notes ref (%s)"
msgstr ""
-"S'ha fallat en emmagatzemar l'enllaç a la referència de notes actual (%s)"
+"s'ha fallat en emmagatzemar l'enllaç a la referència de notes actual (%s)"
-#: builtin/notes.c:863
+#: builtin/notes.c:865
#, c-format
msgid ""
"Automatic notes merge failed. Fix conflicts in %s and commit the result with "
"cometeu el resultat amb 'git notes merge --commit', o avorteu la fusió amb "
"'git notes merge --abort'.\n"
-#: builtin/notes.c:885
+#: builtin/notes.c:887
#, c-format
msgid "Object %s has no note\n"
msgstr "L'objecte %s no té cap nota\n"
-#: builtin/notes.c:897
+#: builtin/notes.c:899
msgid "attempt to remove non-existent note is not an error"
msgstr "l'intent d'eliminar una nota no existent no és un error"
-#: builtin/notes.c:900
+#: builtin/notes.c:902
msgid "read object names from the standard input"
msgstr "llegeix els noms d'objecte des de l'entrada estàndard"
-#: builtin/notes.c:938 builtin/prune.c:105 builtin/worktree.c:127
+#: builtin/notes.c:940 builtin/prune.c:105 builtin/worktree.c:127
msgid "do not remove, show only"
msgstr "no eliminis, només mostra"
-#: builtin/notes.c:939
+#: builtin/notes.c:941
msgid "report pruned notes"
msgstr "informa de notes podades"
-#: builtin/notes.c:981
+#: builtin/notes.c:983
msgid "notes-ref"
msgstr "referència de notes"
-#: builtin/notes.c:982
+#: builtin/notes.c:984
msgid "use notes from <notes-ref>"
msgstr "usa les notes de <referència-de-notes>"
-#: builtin/notes.c:1017 builtin/remote.c:1623
+#: builtin/notes.c:1019
#, c-format
-msgid "Unknown subcommand: %s"
-msgstr "Subordre desconeguda: %s"
+msgid "unknown subcommand: %s"
+msgstr "subordre desconeguda: %s"
-#: builtin/pack-objects.c:28
+#: builtin/pack-objects.c:29
msgid ""
"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects --stdout [<opcions>...] [< <llista-de-referències> | < "
"<llista-de-objectes>]"
-#: builtin/pack-objects.c:29
+#: builtin/pack-objects.c:30
msgid ""
"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects [<opcions>...] <nom-base> [< <llista-de-referències> | < "
"<llista-de-objectes>]"
-#: builtin/pack-objects.c:177 builtin/pack-objects.c:180
+#: builtin/pack-objects.c:179 builtin/pack-objects.c:182
#, c-format
msgid "deflate error (%d)"
msgstr "error de deflació (%d)"
-#: builtin/pack-objects.c:766
+#: builtin/pack-objects.c:768
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
"s'està inhabilitant l'escriptura de mapes de bits, es divideixen els paquets "
"a causa de pack.packSizeLimit"
-#: builtin/pack-objects.c:779
+#: builtin/pack-objects.c:781
msgid "Writing objects"
msgstr "S'estan escrivint els objectes"
-#: builtin/pack-objects.c:1037
+#: builtin/pack-objects.c:1070
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"s'està inhabilitant l'escriptura de mapes de bits, perquè alguns objectes no "
"s'empaqueten"
-#: builtin/pack-objects.c:2197
+#: builtin/pack-objects.c:2346
msgid "Compressing objects"
msgstr "S'estan comprimint objectes"
-#: builtin/pack-objects.c:2611
+#: builtin/pack-objects.c:2759
#, c-format
msgid "unsupported index version %s"
msgstr "versió d'índex no compatible %s"
-#: builtin/pack-objects.c:2615
+#: builtin/pack-objects.c:2763
#, c-format
msgid "bad index version '%s'"
msgstr "versió d'índex dolenta '%s'"
-#: builtin/pack-objects.c:2645
+#: builtin/pack-objects.c:2793
msgid "do not show progress meter"
msgstr "no mostris l'indicador de progrés"
-#: builtin/pack-objects.c:2647
+#: builtin/pack-objects.c:2795
msgid "show progress meter"
msgstr "mostra l'indicador de progrés"
-#: builtin/pack-objects.c:2649
+#: builtin/pack-objects.c:2797
msgid "show progress meter during object writing phase"
msgstr "mostra l'indicador de progrés durant la fase d'escriptura d'objectes"
-#: builtin/pack-objects.c:2652
+#: builtin/pack-objects.c:2800
msgid "similar to --all-progress when progress meter is shown"
msgstr "similar a --all-progress quan l'indicador de progrés es mostra"
-#: builtin/pack-objects.c:2653
+#: builtin/pack-objects.c:2801
msgid "version[,offset]"
msgstr "versió[,desplaçament]"
-#: builtin/pack-objects.c:2654
+#: builtin/pack-objects.c:2802
msgid "write the pack index file in the specified idx format version"
msgstr ""
"escriu el fitxer d'índex de paquet en la versió de format d'índex "
"especificada"
-#: builtin/pack-objects.c:2657
+#: builtin/pack-objects.c:2805
msgid "maximum size of each output pack file"
msgstr "mida màxima de cada fitxer de paquet de sortida"
-#: builtin/pack-objects.c:2659
+#: builtin/pack-objects.c:2807
msgid "ignore borrowed objects from alternate object store"
msgstr ""
"ignora els objectes prestats d'un emmagatzemament d'objectes alternatiu"
-#: builtin/pack-objects.c:2661
+#: builtin/pack-objects.c:2809
msgid "ignore packed objects"
msgstr "ignora els objectes empaquetats"
-#: builtin/pack-objects.c:2663
+#: builtin/pack-objects.c:2811
msgid "limit pack window by objects"
msgstr "limita la finestra d'empaquetament per objectes"
-#: builtin/pack-objects.c:2665
+#: builtin/pack-objects.c:2813
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"limita la finestra d'empaquetament per memòria a més del límit d'objectes"
-#: builtin/pack-objects.c:2667
+#: builtin/pack-objects.c:2815
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr "longitud màxima de la cadena de deltes permesa en el paquet resultant"
-#: builtin/pack-objects.c:2669
+#: builtin/pack-objects.c:2817
msgid "reuse existing deltas"
msgstr "reusa les deltes existents"
-#: builtin/pack-objects.c:2671
+#: builtin/pack-objects.c:2819
msgid "reuse existing objects"
msgstr "reusa els objectes existents"
-#: builtin/pack-objects.c:2673
+#: builtin/pack-objects.c:2821
msgid "use OFS_DELTA objects"
msgstr "usa objectes OFS_DELTA"
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2823
msgid "use threads when searching for best delta matches"
msgstr "usa fils en cercar les millores coincidències de delta"
-#: builtin/pack-objects.c:2677
+#: builtin/pack-objects.c:2825
msgid "do not create an empty pack output"
msgstr "no creïs una emissió de paquet buida"
-#: builtin/pack-objects.c:2679
+#: builtin/pack-objects.c:2827
msgid "read revision arguments from standard input"
msgstr "llegeix els paràmetres de revisió des de l'entrada estàndard"
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2829
msgid "limit the objects to those that are not yet packed"
msgstr "limita els objectes als quals encara no s'hagin empaquetat"
-#: builtin/pack-objects.c:2684
+#: builtin/pack-objects.c:2832
msgid "include objects reachable from any reference"
msgstr "inclou els objectes abastables de qualsevulla referència"
-#: builtin/pack-objects.c:2687
+#: builtin/pack-objects.c:2835
msgid "include objects referred by reflog entries"
msgstr ""
"inclou els objectes als quals facin referència les entrades del registre de "
"referències"
-#: builtin/pack-objects.c:2690
+#: builtin/pack-objects.c:2838
msgid "include objects referred to by the index"
msgstr "inclou els objectes als quals faci referència l'índex"
-#: builtin/pack-objects.c:2693
+#: builtin/pack-objects.c:2841
msgid "output pack to stdout"
msgstr "emet el paquet a stdout"
-#: builtin/pack-objects.c:2695
+#: builtin/pack-objects.c:2843
msgid "include tag objects that refer to objects to be packed"
msgstr ""
"inclou els objectes d'etiqueta que facin referència als objectes a empaquetar"
-#: builtin/pack-objects.c:2697
+#: builtin/pack-objects.c:2845
msgid "keep unreachable objects"
msgstr "retén els objectes inabastables"
-#: builtin/pack-objects.c:2699
+#: builtin/pack-objects.c:2847
msgid "pack loose unreachable objects"
msgstr "empaqueta els objectes inabastables solts"
-#: builtin/pack-objects.c:2700 parse-options.h:142
-msgid "time"
-msgstr "hora"
-
-#: builtin/pack-objects.c:2701
+#: builtin/pack-objects.c:2849
msgid "unpack unreachable objects newer than <time>"
msgstr "desempaqueta els objectes inabastables més nous que <hora>"
-#: builtin/pack-objects.c:2704
+#: builtin/pack-objects.c:2852
msgid "create thin packs"
msgstr "crea paquets prims"
-#: builtin/pack-objects.c:2706
+#: builtin/pack-objects.c:2854
msgid "create packs suitable for shallow fetches"
msgstr "crea paquets adequats per a les obtencions superficials"
-#: builtin/pack-objects.c:2708
+#: builtin/pack-objects.c:2856
msgid "ignore packs that have companion .keep file"
msgstr "ignora els paquets que tinguin un fitxer .keep corresponent"
-#: builtin/pack-objects.c:2710
+#: builtin/pack-objects.c:2858
msgid "pack compression level"
msgstr "nivell de compressió de paquet"
-#: builtin/pack-objects.c:2712
+#: builtin/pack-objects.c:2860
msgid "do not hide commits by grafts"
msgstr "no amaguis les comissions per empelt"
-#: builtin/pack-objects.c:2714
+#: builtin/pack-objects.c:2862
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"usa un índex de mapa de bits, si està disponible, per a accelerar el "
"recompte d'objectes"
-#: builtin/pack-objects.c:2716
+#: builtin/pack-objects.c:2864
msgid "write a bitmap index together with the pack index"
msgstr "escriu un índex de mapa de bits junt amb l'índex de paquet"
-#: builtin/pack-objects.c:2829
+#: builtin/pack-objects.c:2993
msgid "Counting objects"
msgstr "S'estan comptant els objectes"
msgid "cannot prune in a precious-objects repo"
msgstr "no es pot podar en un dipòsit d'objectes preciosos"
-#: builtin/pull.c:72
+#: builtin/pull.c:51 builtin/pull.c:53
+#, c-format
+msgid "Invalid value for %s: %s"
+msgstr "Valor no vàlid per a %s: %s"
+
+#: builtin/pull.c:73
msgid "git pull [<options>] [<repository> [<refspec>...]]"
-msgstr "git pull [opcions] [<dipòsit> [<especificació-de-referència>...]]"
+msgstr "git pull [<opcions>] [<dipòsit> [<especificació-de-referència>...]]"
-#: builtin/pull.c:120
+#: builtin/pull.c:121
msgid "Options related to merging"
msgstr "Opcions relacionades amb fusionar"
-#: builtin/pull.c:123
+#: builtin/pull.c:124
msgid "incorporate changes by rebasing rather than merging"
msgstr "incorpora els canvis per rebasar en lloc de fusionar"
-#: builtin/pull.c:147 builtin/revert.c:101
+#: builtin/pull.c:148 builtin/revert.c:101
msgid "allow fast-forward"
msgstr "permet l'avanç ràpid"
-#: builtin/pull.c:156
+#: builtin/pull.c:157
msgid "automatically stash/stash pop before and after rebase"
msgstr "automàticament emmagatzema/desempila abans i després de rebasament"
-#: builtin/pull.c:172
+#: builtin/pull.c:173
msgid "Options related to fetching"
msgstr "Opcions relacionades amb obtenir"
-#: builtin/pull.c:194
+#: builtin/pull.c:195
msgid "number of submodules pulled in parallel"
msgstr "nombre de submòduls baixats en paral·lel"
-#: builtin/pull.c:283
+#: builtin/pull.c:284
#, c-format
msgid "Invalid value for pull.ff: %s"
msgstr "Valor no vàlid per a pull.ff: %s"
-#: builtin/pull.c:379 git-sh-setup.sh:226
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr "No es pot baixar amb rebasament: Teniu canvis no allistats."
-
-#: builtin/pull.c:385 git-sh-setup.sh:252
-msgid "Additionally, your index contains uncommitted changes."
-msgstr "Addicionalment, el vostre índex conté canvis sense cometre."
-
-#: builtin/pull.c:387 git-sh-setup.sh:245
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"No es pot baixar amb rebasament: El vostre índex conté canvis sense cometre."
-
-#: builtin/pull.c:463
+#: builtin/pull.c:397
msgid ""
"There is no candidate for rebasing against among the refs that you just "
"fetched."
"No hi ha cap candidat sobre el qual rebasar entre les referències que acabeu "
"d'obtenir."
-#: builtin/pull.c:465
+#: builtin/pull.c:399
msgid ""
"There are no candidates for merging among the refs that you just fetched."
msgstr ""
"No hi ha candidats per a fusionar entre les referències que acabeu d'obtenir."
-#: builtin/pull.c:466
+#: builtin/pull.c:400
msgid ""
"Generally this means that you provided a wildcard refspec which had no\n"
"matches on the remote end."
"Generalment això vol dir que heu proveït una especificació de\n"
"referència de comodí que no tenia cap coincidència en el costat remot."
-#: builtin/pull.c:469
+#: builtin/pull.c:403
#, c-format
msgid ""
"You asked to pull from the remote '%s', but did not specify\n"
"Perquè aquest no és el remot configurat per defecte per a la vostra\n"
"branca actual, heu d'especificar una branca en la línia d'ordres."
-#: builtin/pull.c:474 git-parse-remote.sh:73
+#: builtin/pull.c:408 git-parse-remote.sh:73
msgid "You are not currently on a branch."
msgstr "Actualment no sou en cap branca."
-#: builtin/pull.c:476 builtin/pull.c:491 git-parse-remote.sh:79
+#: builtin/pull.c:410 builtin/pull.c:425 git-parse-remote.sh:79
msgid "Please specify which branch you want to rebase against."
msgstr "Si us plau, especifiqueu sobre què branca voleu rebasar."
-#: builtin/pull.c:478 builtin/pull.c:493 git-parse-remote.sh:82
+#: builtin/pull.c:412 builtin/pull.c:427 git-parse-remote.sh:82
msgid "Please specify which branch you want to merge with."
msgstr "Si us plau, especifiqueu amb què branca voleu fusionar."
-#: builtin/pull.c:479 builtin/pull.c:494
+#: builtin/pull.c:413 builtin/pull.c:428
msgid "See git-pull(1) for details."
msgstr "Vegeu git-pull(1) per detalls."
-#: builtin/pull.c:481 builtin/pull.c:487 builtin/pull.c:496
+#: builtin/pull.c:415 builtin/pull.c:421 builtin/pull.c:430
#: git-parse-remote.sh:64
msgid "<remote>"
msgstr "<remot>"
-#: builtin/pull.c:481 builtin/pull.c:496 builtin/pull.c:501 git-rebase.sh:451
+#: builtin/pull.c:415 builtin/pull.c:430 builtin/pull.c:435 git-rebase.sh:451
#: git-parse-remote.sh:65
msgid "<branch>"
msgstr "<branca>"
-#: builtin/pull.c:489 git-parse-remote.sh:75
+#: builtin/pull.c:423 git-parse-remote.sh:75
msgid "There is no tracking information for the current branch."
msgstr "No hi ha cap informació de seguiment per a la branca actual."
-#: builtin/pull.c:498 git-parse-remote.sh:95
+#: builtin/pull.c:432 git-parse-remote.sh:95
msgid ""
"If you wish to set tracking information for this branch you can do so with:"
msgstr ""
"Si voleu establir informació de seguiment per a aquesta branca, podeu fer-ho "
"amb:"
-#: builtin/pull.c:503
+#: builtin/pull.c:437
#, c-format
msgid ""
"Your configuration specifies to merge with the ref '%s'\n"
"La vostra configuració especifica fusionar amb la referència '%s'\n"
"del remot, però no s'ha obtingut tal referència."
-#: builtin/pull.c:820
+#: builtin/pull.c:754
msgid "ignoring --verify-signatures for rebase"
msgstr "s'està ignorant --verify-signatures per a rebasar"
-#: builtin/pull.c:867
+#: builtin/pull.c:801
msgid "--[no-]autostash option is only valid with --rebase."
msgstr "l'opció --[no-]-autostash és vàlid només amb --rebase."
-#: builtin/pull.c:875
+#: builtin/pull.c:809
msgid "Updating an unborn branch with changes added to the index."
msgstr ""
"S'està actualitzant una branca no nascuda amb canvis afegits a l'índex."
-#: builtin/pull.c:903
+#: builtin/pull.c:812
+msgid "pull with rebase"
+msgstr "baixar amb rebasament"
+
+#: builtin/pull.c:813
+msgid "please commit or stash them."
+msgstr "si us plau, cometeu-los o emmagatzemeu-los."
+
+#: builtin/pull.c:838
#, c-format
msgid ""
"fetch updated the current branch head.\n"
"s'està avançant ràpidament el vostre arbre de treball des de\n"
"la comissió %s."
-#: builtin/pull.c:908
+#: builtin/pull.c:843
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
"$ git reset --hard\n"
"per a recuperar."
-#: builtin/pull.c:923
+#: builtin/pull.c:858
msgid "Cannot merge multiple branches into empty head."
msgstr "No es pot fusionar múltiples branques a un cap buit."
-#: builtin/pull.c:927
+#: builtin/pull.c:862
msgid "Cannot rebase onto multiple branches."
msgstr "No es pot rebasar sobre múltiples branques."
msgid "debug unpack-trees"
msgstr "depura unpack-trees"
-#: builtin/receive-pack.c:25
+#: builtin/receive-pack.c:26
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack <git-dir>"
-#: builtin/receive-pack.c:1843
+#: builtin/receive-pack.c:793
+msgid ""
+"By default, updating the current branch in a non-bare repository\n"
+"is denied, because it will make the index and work tree inconsistent\n"
+"with what you pushed, and will require 'git reset --hard' to match\n"
+"the work tree to HEAD.\n"
+"\n"
+"You can set 'receive.denyCurrentBranch' configuration variable to\n"
+"'ignore' or 'warn' in the remote repository to allow pushing into\n"
+"its current branch; however, this is not recommended unless you\n"
+"arranged to update its work tree to match what you pushed in some\n"
+"other way.\n"
+"\n"
+"To squelch this message and still keep the default behaviour, set\n"
+"'receive.denyCurrentBranch' configuration variable to 'refuse'."
+msgstr ""
+"Per defecte, es denega actualizar la branca actual en un dipòsit no\n"
+"nu, perquè feria l'índex i l'arbre de treball inconsistents amb el\n"
+"que hàgiu pujat, i requerria 'git reset --hard' per a fer que\n"
+"l'arbre de treball coincideixi amb HEAD.\n"
+"\n"
+"Podeu establir la variable de configuració\n"
+"'receive.denyCurrentBranch' a 'ignore' o 'warn' en el dipòsit remot\n"
+"per a permetre pujar a la seva branca actual; no obstant, no es\n"
+"recomana això a menys que hàgiu decidit actualitzar el seu arbre en\n"
+"alguna altra manera per a coincidar amb el que hàgiu pujat.\n"
+"\n"
+"Per a silenciar aquest missatge i encara retenir el comportament\n"
+"predeterminat, establiu la variable de configuració\n"
+"'receive.denyCurrentBranch' a 'refuse'."
+
+#: builtin/receive-pack.c:813
+msgid ""
+"By default, deleting the current branch is denied, because the next\n"
+"'git clone' won't result in any file checked out, causing confusion.\n"
+"\n"
+"You can set 'receive.denyDeleteCurrent' configuration variable to\n"
+"'warn' or 'ignore' in the remote repository to allow deleting the\n"
+"current branch, with or without a warning message.\n"
+"\n"
+"To squelch this message, you can set it to 'refuse'."
+msgstr ""
+"Per defecte, es denega suprimir la branca actual, perquè el\n"
+"'git clone' següent no resultarà en cap fitxer agafat, causant\n"
+"confusió.\n"
+"\n"
+"Podeu establir la variable de configuració\n"
+"'receive.denyDeleteCurrent' a 'warn' o 'ignore' en el dipòsit remot\n"
+"per a permetre suprimir la branca actual, amb o sense un missatge\n"
+"d'advertència.\n"
+"\n"
+"Per a silenciar aquest missatge, podeu establir-la a 'refuse'."
+
+#: builtin/receive-pack.c:1883
msgid "quiet"
msgstr "callat"
-#: builtin/receive-pack.c:1857
+#: builtin/receive-pack.c:1897
msgid "You must specify a directory."
msgstr "Heu d'especificar un directori."
msgid " Fetch URL: %s"
msgstr " URL d'obtenció: %s"
-#: builtin/remote.c:1143 builtin/remote.c:1156 builtin/remote.c:1296
+#: builtin/remote.c:1143 builtin/remote.c:1156 builtin/remote.c:1295
msgid "(no URL)"
msgstr "(sense URL)"
msgstr[0] " Branca remota:%s"
msgstr[1] " Branques remotes:%s"
-#: builtin/remote.c:1179 builtin/remote.c:1206
+#: builtin/remote.c:1179 builtin/remote.c:1205
msgid " (status not queried)"
msgstr " (estat no consultat)"
msgid " Local refs will be mirrored by 'git push'"
msgstr " 'git push' reflectirà les referències locals"
-#: builtin/remote.c:1203
+#: builtin/remote.c:1202
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Referència local configurada per a 'git push'%s:"
msgstr[1] " Referències locals configurades per a 'git push'%s:"
-#: builtin/remote.c:1224
+#: builtin/remote.c:1223
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "estableix refs/remotes/<name>/HEAD segons el remot"
-#: builtin/remote.c:1226
+#: builtin/remote.c:1225
msgid "delete refs/remotes/<name>/HEAD"
msgstr "suprimeix refs/remotes/<name>/HEAD"
-#: builtin/remote.c:1241
+#: builtin/remote.c:1240
msgid "Cannot determine remote HEAD"
msgstr "No es pot determinar el HEAD remot"
-#: builtin/remote.c:1243
+#: builtin/remote.c:1242
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr ""
"Múltiples branques de HEAD remotes. Si us plau, trieu-ne una explícitament "
"amb:"
-#: builtin/remote.c:1253
+#: builtin/remote.c:1252
#, c-format
msgid "Could not delete %s"
msgstr "No s'ha pogut suprimir %s"
-#: builtin/remote.c:1261
+#: builtin/remote.c:1260
#, c-format
msgid "Not a valid ref: %s"
msgstr "No és una referència vàlida: %s"
-#: builtin/remote.c:1263
+#: builtin/remote.c:1262
#, c-format
msgid "Could not setup %s"
msgstr "No s'ha pogut configurar %s"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1280
#, c-format
msgid " %s will become dangling!"
msgstr " %s es tornarà penjant!"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1281
#, c-format
msgid " %s has become dangling!"
msgstr " %s s'ha tornat penjant!"
-#: builtin/remote.c:1292
+#: builtin/remote.c:1291
#, c-format
msgid "Pruning %s"
msgstr "S'està podant %s"
-#: builtin/remote.c:1293
+#: builtin/remote.c:1292
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1309
+#: builtin/remote.c:1308
#, c-format
msgid " * [would prune] %s"
msgstr " * [podaria] %s"
-#: builtin/remote.c:1312
+#: builtin/remote.c:1311
#, c-format
msgid " * [pruned] %s"
msgstr " * [podat] %s"
-#: builtin/remote.c:1357
+#: builtin/remote.c:1356
msgid "prune remotes after fetching"
msgstr "poda els remots després d'obtenir-los"
-#: builtin/remote.c:1420 builtin/remote.c:1474 builtin/remote.c:1542
+#: builtin/remote.c:1419 builtin/remote.c:1473 builtin/remote.c:1541
#, c-format
msgid "No such remote '%s'"
msgstr "No hi ha tal remot '%s'"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1435
msgid "add branch"
msgstr "afegeix branca"
-#: builtin/remote.c:1443
+#: builtin/remote.c:1442
msgid "no remote specified"
msgstr "cap remot especificat"
-#: builtin/remote.c:1460
+#: builtin/remote.c:1459
msgid "query push URLs rather than fetch URLs"
-msgstr "consulta els URL de pujada en lloc dels URL d'obteniment"
+msgstr "consulta els URL de pujada en lloc dels URL d'obtenció"
-#: builtin/remote.c:1462
+#: builtin/remote.c:1461
msgid "return all URLs"
msgstr "retorna tots els URL"
-#: builtin/remote.c:1490
+#: builtin/remote.c:1489
#, c-format
msgid "no URLs configured for remote '%s'"
msgstr "cap URL configurat per al remot '%s'"
-#: builtin/remote.c:1516
+#: builtin/remote.c:1515
msgid "manipulate push URLs"
msgstr "manipula els URL de pujada"
-#: builtin/remote.c:1518
+#: builtin/remote.c:1517
msgid "add URL"
msgstr "afegeix URL"
-#: builtin/remote.c:1520
+#: builtin/remote.c:1519
msgid "delete URLs"
msgstr "suprimeix URLs"
-#: builtin/remote.c:1527
+#: builtin/remote.c:1526
msgid "--add --delete doesn't make sense"
msgstr "--add --delete no té sentit"
-#: builtin/remote.c:1568
+#: builtin/remote.c:1567
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Patró d'URL antic no vàlid: %s"
-#: builtin/remote.c:1576
+#: builtin/remote.c:1575
#, c-format
msgid "No such URL found: %s"
msgstr "No s'ha trobat tal URL: %s"
-#: builtin/remote.c:1578
+#: builtin/remote.c:1577
msgid "Will not delete all non-push URLs"
msgstr "No se suprimiran tots els URL no de pujada"
-#: builtin/remote.c:1592
+#: builtin/remote.c:1591
msgid "be verbose; must be placed before a subcommand"
msgstr "sigues detallat; s'ha de col·locar abans d'una subordre"
+#: builtin/remote.c:1622
+#, c-format
+msgid "Unknown subcommand: %s"
+msgstr "Subordre desconeguda: %s"
+
#: builtin/repack.c:17
msgid "git repack [<options>]"
msgstr "git repack [<opcions>]"
"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<comissió>]"
#: builtin/reset.c:27
-msgid "git reset [-q] <tree-ish> [--] <paths>..."
-msgstr "git reset [-q] <arbre> [--] <camins>..."
+msgid "git reset [-q] [<tree-ish>] [--] <paths>..."
+msgstr "git reset [-q] [<arbre>] [--] <camins>..."
#: builtin/reset.c:28
msgid "git reset --patch [<tree-ish>] [--] [<paths>...]"
msgid "Could not write new index file."
msgstr "No s'ha pogut escriure el fitxer d'índex nou."
-#: builtin/rev-list.c:362
+#: builtin/rev-list.c:354
msgid "rev-list does not support display of notes"
msgstr "el rev-list no permet mostrar notes"
-#: builtin/rev-parse.c:358
+#: builtin/rev-parse.c:386
msgid "git rev-parse --parseopt [<options>] -- [<args>...]"
msgstr "git rev-parse --parseopt [<opcions>] -- [<paràmetres>...]"
-#: builtin/rev-parse.c:363
+#: builtin/rev-parse.c:391
msgid "keep the `--` passed as an arg"
msgstr "retén el `--` passat com a paràmetre"
-#: builtin/rev-parse.c:365
+#: builtin/rev-parse.c:393
msgid "stop parsing after the first non-option argument"
msgstr "deixa d'analitzar després del primer paràmetre no d'opció"
-#: builtin/rev-parse.c:368
+#: builtin/rev-parse.c:396
msgid "output in stuck long form"
msgstr "emet en forma llarga enganxada"
-#: builtin/rev-parse.c:499
+#: builtin/rev-parse.c:527
msgid ""
"git rev-parse --parseopt [<options>] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
msgid "revert failed"
msgstr "la reversió ha fallat"
-#: builtin/revert.c:207
+#: builtin/revert.c:205
msgid "cherry-pick failed"
msgstr "el recull de cireres ha fallat"
msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<referència>]"
-#: builtin/show-branch.c:640
+#: builtin/show-branch.c:375
+#, c-format
+msgid "ignoring %s; cannot handle more than %d ref"
+msgid_plural "ignoring %s; cannot handle more than %d refs"
+msgstr[0] "s'està ignorant %s; no es pot gestionar més de %d referència"
+msgstr[1] "s'està ignorant %s; no es poden gestionar més de %d referències"
+
+#: builtin/show-branch.c:541
+#, c-format
+msgid "no matching refs with %s"
+msgstr "no hi ha referències coincidents amb %s"
+
+#: builtin/show-branch.c:639
msgid "show remote-tracking and local branches"
msgstr "mostra les branques amb seguiment remot i les locals"
-#: builtin/show-branch.c:642
+#: builtin/show-branch.c:641
msgid "show remote-tracking branches"
msgstr "mostra les branques amb seguiment remot"
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:643
msgid "color '*!+-' corresponding to the branch"
msgstr "colora '*!+-' corresponent a la branca"
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:645
msgid "show <n> more commits after the common ancestor"
msgstr "mostra <n> comissions després de l'avantpassat comú"
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:647
msgid "synonym to more=-1"
msgstr "sinònim de more=-1"
-#: builtin/show-branch.c:649
+#: builtin/show-branch.c:648
msgid "suppress naming strings"
msgstr "omet l'anomenament de cadenes"
-#: builtin/show-branch.c:651
+#: builtin/show-branch.c:650
msgid "include the current branch"
msgstr "inclou la branca actual"
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:652
msgid "name commits with their object names"
msgstr "anomena les comissions amb els seus noms d'objecte"
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:654
msgid "show possible merge bases"
msgstr "mostra les bases de fusió possibles"
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:656
msgid "show refs unreachable from any other ref"
msgstr "mostra les referències inabastables de qualsevulla altra referència"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "show commits in topological order"
msgstr "mostra les comissions en ordre topològic"
-#: builtin/show-branch.c:662
+#: builtin/show-branch.c:661
msgid "show only commits not on the first branch"
msgstr "mostra només les comissions que no siguin en la primera branca"
-#: builtin/show-branch.c:664
+#: builtin/show-branch.c:663
msgid "show merges reachable from only one tip"
msgstr "mostra les fusions abastables de només una punta"
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:665
msgid "topologically sort, maintaining date order where possible"
msgstr "ordena topològicament, mantenint l'ordre de dates on sigui possible"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "<n>[,<base>]"
msgstr "<n>[,<base>]"
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:669
msgid "show <n> most recent ref-log entries starting at base"
msgstr "mostra les <n> entrades més recents començant a la base"
+#: builtin/show-branch.c:703
+msgid ""
+"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
+msgstr ""
+"--reflog és incompatible amb --all, --remotes, --independent o --merge-base"
+
+#: builtin/show-branch.c:727
+msgid "no branches given, and HEAD is not valid"
+msgstr "no s'ha donat cap branca, i HEAD no és vàlid"
+
+#: builtin/show-branch.c:730
+msgid "--reflog option needs one branch name"
+msgstr "l'opció --reflog necessita un nom de branca"
+
+#: builtin/show-branch.c:733
+#, c-format
+msgid "only %d entry can be shown at one time."
+msgid_plural "only %d entries can be shown at one time."
+msgstr[0] "es pot mostrar només %d entrada a la vegada."
+msgstr[1] "es poden mostrar només %d entrades a la vegada."
+
+#: builtin/show-branch.c:737
+#, c-format
+msgid "no such ref %s"
+msgstr "no hi ha tal referència %s"
+
+#: builtin/show-branch.c:829
+#, c-format
+msgid "cannot handle more than %d rev."
+msgid_plural "cannot handle more than %d revs."
+msgstr[0] "no es pot gestionar més d'%d revisió."
+msgstr[1] "no es poden gestionar més de %d revisions."
+
+#: builtin/show-branch.c:833
+#, c-format
+msgid "'%s' is not a valid ref."
+msgstr "'%s' no és una referència vàlida."
+
+#: builtin/show-branch.c:836
+#, c-format
+msgid "cannot find commit %s (%s)"
+msgstr "no es pot trobar la comissió %s (%s)"
+
#: builtin/show-ref.c:10
msgid ""
"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --"
msgid "prepend comment character and space to each line"
msgstr "anteposa el caràcter de comentari i un espai a cada línia"
-#: builtin/submodule--helper.c:24 builtin/submodule--helper.c:923
+#: builtin/submodule--helper.c:24 builtin/submodule--helper.c:1046
#, c-format
msgid "No such ref: %s"
msgstr "No hi ha tal referència: %s"
-#: builtin/submodule--helper.c:31 builtin/submodule--helper.c:932
+#: builtin/submodule--helper.c:31 builtin/submodule--helper.c:1055
#, c-format
msgid "Expecting a full ref name, got %s"
msgstr "S'espera un nom de referència ple, s'ha rebut %s"
msgid "cannot strip one component off url '%s'"
msgstr "no es pot despullar un component de l'url '%s'"
-#: builtin/submodule--helper.c:278 builtin/submodule--helper.c:403
-#: builtin/submodule--helper.c:483
+#: builtin/submodule--helper.c:282 builtin/submodule--helper.c:408
+#: builtin/submodule--helper.c:590
msgid "alternative anchor for relative paths"
msgstr "àncora alternativa per als camins relatius"
-#: builtin/submodule--helper.c:283
+#: builtin/submodule--helper.c:287
msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper list [--prefix=<camí>] [<camí>...]"
-#: builtin/submodule--helper.c:324 builtin/submodule--helper.c:338
+#: builtin/submodule--helper.c:329 builtin/submodule--helper.c:343
#, c-format
msgid "No url found for submodule path '%s' in .gitmodules"
msgstr "No s'ha trobat cap url per al camí de submòdul '%s' a .gitmodules"
-#: builtin/submodule--helper.c:364
+#: builtin/submodule--helper.c:369
#, c-format
msgid "Failed to register url for submodule path '%s'"
msgstr "S'ha fallat en registrar l'url per al camí de submòdul '%s'"
-#: builtin/submodule--helper.c:368
+#: builtin/submodule--helper.c:373
#, c-format
msgid "Submodule '%s' (%s) registered for path '%s'\n"
msgstr "S'ha registrat el submòdul '%s' (%s) per al camí '%s'\n"
-#: builtin/submodule--helper.c:378
+#: builtin/submodule--helper.c:383
#, c-format
msgid "warning: command update mode suggested for submodule '%s'\n"
msgstr ""
"advertència: se suggereix el mode d'actualització per ordre per al submòdul "
"'%s'\n"
-#: builtin/submodule--helper.c:385
+#: builtin/submodule--helper.c:390
#, c-format
msgid "Failed to register update mode for submodule path '%s'"
msgstr ""
"S'ha fallat en registrar el mode d'actualització per al camí de submòdul '%s'"
-#: builtin/submodule--helper.c:404
+#: builtin/submodule--helper.c:409
msgid "Suppress output for initializing a submodule"
msgstr "Omet la sortida d'inicialitzar un submòdul"
-#: builtin/submodule--helper.c:409
+#: builtin/submodule--helper.c:414
msgid "git submodule--helper init [<path>]"
msgstr "git submodule--helper init [<camí>]"
-#: builtin/submodule--helper.c:430
+#: builtin/submodule--helper.c:435
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name <camí>"
-#: builtin/submodule--helper.c:436
+#: builtin/submodule--helper.c:441
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr "No s'ha trobat cap mapatge de submòdul a .gitmodules per al camí '%s'"
-#: builtin/submodule--helper.c:486
+#: builtin/submodule--helper.c:524 builtin/submodule--helper.c:527
+#, c-format
+msgid "submodule '%s' cannot add alternate: %s"
+msgstr "el submòdul '%s' no pot afegir un alternatiu: %s"
+
+#: builtin/submodule--helper.c:563
+#, c-format
+msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
+msgstr "No es reconeix el valor '%s' per a submodule.alternateErrorStrategy"
+
+#: builtin/submodule--helper.c:570
+#, c-format
+msgid "Value '%s' for submodule.alternateLocation is not recognized"
+msgstr "No es reconeix el valor '%s' per a submodule.alternateLocation"
+
+#: builtin/submodule--helper.c:593
msgid "where the new submodule will be cloned to"
msgstr "a on es clonarà el submòdul nou"
-#: builtin/submodule--helper.c:489
+#: builtin/submodule--helper.c:596
msgid "name of the new submodule"
msgstr "nom del submòdul nou"
-#: builtin/submodule--helper.c:492
+#: builtin/submodule--helper.c:599
msgid "url where to clone the submodule from"
msgstr "url del qual clonar el submòdul"
-#: builtin/submodule--helper.c:498
+#: builtin/submodule--helper.c:605
msgid "depth for shallow clones"
msgstr "profunditat dels clons superficials"
-#: builtin/submodule--helper.c:504
+#: builtin/submodule--helper.c:608 builtin/submodule--helper.c:964
+msgid "force cloning progress"
+msgstr "força el progrés del clonatge"
+
+#: builtin/submodule--helper.c:613
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
"<repository>] [--name <name>] [--depth <depth>] --url <url> --path <path>"
"git submodule--helper clone [--prefix=<camí>] [--quiet] [--reference "
"<dipòsit>] [--name <nom>] [--depth <profunditat>] --url <url> --path <camí>"
-#: builtin/submodule--helper.c:529 builtin/submodule--helper.c:535
+#: builtin/submodule--helper.c:638 builtin/submodule--helper.c:648
#, c-format
msgid "could not create directory '%s'"
msgstr "no s'ha pogut crear el directori '%s'"
-#: builtin/submodule--helper.c:531
+#: builtin/submodule--helper.c:644
#, c-format
msgid "clone of '%s' into submodule path '%s' failed"
msgstr "el clonatge de '%s' al camí de submòdul '%s' ha fallat"
-#: builtin/submodule--helper.c:547
+#: builtin/submodule--helper.c:660
#, c-format
msgid "cannot open file '%s'"
msgstr "no es pot obrir el fitxer '%s'"
-#: builtin/submodule--helper.c:552
+#: builtin/submodule--helper.c:665
#, c-format
msgid "could not close file %s"
msgstr "no s'ha pogut tancar el fitxer %s"
-#: builtin/submodule--helper.c:559
+#: builtin/submodule--helper.c:672
#, c-format
msgid "could not get submodule directory for '%s'"
msgstr "no s'ha pogut obtenir el directori de submòdul per a '%s'"
-#: builtin/submodule--helper.c:611
+#: builtin/submodule--helper.c:726
#, c-format
msgid "Submodule path '%s' not initialized"
msgstr "El camí de submòdul '%s' no està inicialitzat"
-#: builtin/submodule--helper.c:615
+#: builtin/submodule--helper.c:730
msgid "Maybe you want to use 'update --init'?"
msgstr "Potser voleu usar 'update --init'?"
-#: builtin/submodule--helper.c:641
+#: builtin/submodule--helper.c:756
#, c-format
msgid "Skipping unmerged submodule %s"
msgstr "S'està saltant el submòdul no fusionat %s"
-#: builtin/submodule--helper.c:662
+#: builtin/submodule--helper.c:777
#, c-format
msgid "Skipping submodule '%s'"
msgstr "S'està saltant el submòdul '%s'"
-#: builtin/submodule--helper.c:792
+#: builtin/submodule--helper.c:913
#, c-format
msgid "Failed to clone '%s'. Retry scheduled"
msgstr "S'ha fallat en clonar '%s'. S'ha programat un reintent"
-#: builtin/submodule--helper.c:803
+#: builtin/submodule--helper.c:924
#, c-format
msgid "Failed to clone '%s' a second time, aborting"
msgstr "S'ha fallat una segona vegada en clonar '%s', s'està avortant"
-#: builtin/submodule--helper.c:824
+#: builtin/submodule--helper.c:945
msgid "path into the working tree"
msgstr "camí a l'arbre de treball"
-#: builtin/submodule--helper.c:827
+#: builtin/submodule--helper.c:948
msgid "path into the working tree, across nested submodule boundaries"
msgstr "camí a l'arbre de treball, a través de fronteres de submòduls niats"
-#: builtin/submodule--helper.c:831
+#: builtin/submodule--helper.c:952
msgid "rebase, merge, checkout or none"
msgstr "rebase, merge, checkout o none"
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:956
msgid "Create a shallow clone truncated to the specified number of revisions"
msgstr "Crea un clon superficial truncat al nombre de revisions especificat"
-#: builtin/submodule--helper.c:838
+#: builtin/submodule--helper.c:959
msgid "parallel jobs"
msgstr "tasques paral·leles"
-#: builtin/submodule--helper.c:840
+#: builtin/submodule--helper.c:961
msgid "whether the initial clone should follow the shallow recommendation"
msgstr "si el clonatge inicial ha de seguir la recomanació de superficialitat"
-#: builtin/submodule--helper.c:841
+#: builtin/submodule--helper.c:962
msgid "don't print cloning progress"
msgstr "no imprimeixis el progrés del clonatge"
-#: builtin/submodule--helper.c:846
+#: builtin/submodule--helper.c:969
msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper update_clone [--prefix=<camí>] [<camí>...]"
-#: builtin/submodule--helper.c:856
+#: builtin/submodule--helper.c:979
msgid "bad value for update parameter"
msgstr "valor dolent per al paràmetre update"
-#: builtin/submodule--helper.c:927
+#: builtin/submodule--helper.c:1050
#, c-format
msgid ""
"Submodule (%s) branch configured to inherit branch from superproject, but "
"La branca de submòdul (%s) està configurada per a heretar la branca del "
"superprojecte, però el superprojecte no és en cap branca"
-#: builtin/submodule--helper.c:977
+#: builtin/submodule--helper.c:1100
msgid "submodule--helper subcommand must be called with a subcommand"
msgstr "s'ha d'executar la subordre submodule--helper amb una subordre"
-#: builtin/submodule--helper.c:984
+#: builtin/submodule--helper.c:1107
#, c-format
msgid "'%s' is not a valid submodule--helper subcommand"
msgstr "'%s' no és una subordre vàlida de submodule--helper"
msgid "Updated tag '%s' (was %s)\n"
msgstr "Etiqueta '%s' actualitzada (era %s)\n"
-#: builtin/unpack-objects.c:490
+#: builtin/unpack-objects.c:493
msgid "Unpacking objects"
msgstr "S'estan desempaquetant els objectes"
msgid " OK"
msgstr " D'acord"
-#: builtin/update-index.c:575
+#: builtin/update-index.c:564
msgid "git update-index [<options>] [--] [<file>...]"
msgstr "git update-index [<opcions>] [--] [<fitxer>...]"
-#: builtin/update-index.c:930
+#: builtin/update-index.c:919
msgid "continue refresh even when index needs update"
msgstr ""
"continua l'actualització encara que l'índex necessiti una actualització"
-#: builtin/update-index.c:933
+#: builtin/update-index.c:922
msgid "refresh: ignore submodules"
msgstr "actualitza: ignora els submòduls"
-#: builtin/update-index.c:936
+#: builtin/update-index.c:925
msgid "do not ignore new files"
msgstr "no ignoris els fitxers nous"
-#: builtin/update-index.c:938
+#: builtin/update-index.c:927
msgid "let files replace directories and vice-versa"
msgstr "deixa que els fitxers reemplacin els directoris i viceversa"
-#: builtin/update-index.c:940
+#: builtin/update-index.c:929
msgid "notice files missing from worktree"
msgstr "tingues en compte els fitxers absents de l'arbre de treball"
-#: builtin/update-index.c:942
+#: builtin/update-index.c:931
msgid "refresh even if index contains unmerged entries"
msgstr "actualitza encara que l'índex contingui entrades no fusionades"
-#: builtin/update-index.c:945
+#: builtin/update-index.c:934
msgid "refresh stat information"
msgstr "actualitza la informació d'estadístiques"
-#: builtin/update-index.c:949
+#: builtin/update-index.c:938
msgid "like --refresh, but ignore assume-unchanged setting"
msgstr "com --refresh, però ignora l'ajust assume-unchanged"
-#: builtin/update-index.c:953
+#: builtin/update-index.c:942
msgid "<mode>,<object>,<path>"
msgstr "<mode>,<objecte>,<camí>"
-#: builtin/update-index.c:954
+#: builtin/update-index.c:943
msgid "add the specified entry to the index"
msgstr "afegeix l'entrada especificada a l'índex"
-#: builtin/update-index.c:963
+#: builtin/update-index.c:952
msgid "mark files as \"not changing\""
msgstr "marca els fitxers com a \"no canviant\""
-#: builtin/update-index.c:966
+#: builtin/update-index.c:955
msgid "clear assumed-unchanged bit"
msgstr "neteja el bit assumed-unchanged"
-#: builtin/update-index.c:969
+#: builtin/update-index.c:958
msgid "mark files as \"index-only\""
msgstr "marca els fitxers com a \"només índex\""
-#: builtin/update-index.c:972
+#: builtin/update-index.c:961
msgid "clear skip-worktree bit"
msgstr "neteja el bit skip-worktree"
-#: builtin/update-index.c:975
+#: builtin/update-index.c:964
msgid "add to index only; do not add content to object database"
msgstr ""
"només afegeix a l'índex; no afegeixis el contingut a la base de dades "
"d'objectes"
-#: builtin/update-index.c:977
+#: builtin/update-index.c:966
msgid "remove named paths even if present in worktree"
msgstr ""
"elimina els camins anomenats encara que estiguin presents en l'arbre de "
"treball"
-#: builtin/update-index.c:979
+#: builtin/update-index.c:968
msgid "with --stdin: input lines are terminated by null bytes"
msgstr "amb --stdin: les línies d'entrada acaben amb octets nuls"
-#: builtin/update-index.c:981
+#: builtin/update-index.c:970
msgid "read list of paths to be updated from standard input"
msgstr "llegeix la llista de camins a actualitzar des de l'entrada estàndard"
-#: builtin/update-index.c:985
+#: builtin/update-index.c:974
msgid "add entries from standard input to the index"
msgstr "afegeix les entrades de l'entrada estàndard a l'índex"
-#: builtin/update-index.c:989
+#: builtin/update-index.c:978
msgid "repopulate stages #2 and #3 for the listed paths"
msgstr "reemplena les etapes #2 i #3 per als camins llistats"
-#: builtin/update-index.c:993
+#: builtin/update-index.c:982
msgid "only update entries that differ from HEAD"
msgstr "només actualitza les entrades que difereixin de HEAD"
-#: builtin/update-index.c:997
+#: builtin/update-index.c:986
msgid "ignore files missing from worktree"
msgstr "ignora els fitxers absents de l'arbre de treball"
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:989
msgid "report actions to standard output"
msgstr "informa de les accions en la sortida estàndard"
-#: builtin/update-index.c:1002
+#: builtin/update-index.c:991
msgid "(for porcelains) forget saved unresolved conflicts"
msgstr "(per a porcellanes) oblida't dels conflictes no resolts ni desats"
-#: builtin/update-index.c:1006
+#: builtin/update-index.c:995
msgid "write index in this format"
msgstr "escriu l'índex en aquest format"
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:997
msgid "enable or disable split index"
msgstr "habilita o inhabilita l'índex dividit"
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:999
msgid "enable/disable untracked cache"
msgstr "habilita/inhabilita la memòria cau no seguida"
-#: builtin/update-index.c:1012
+#: builtin/update-index.c:1001
msgid "test if the filesystem supports untracked cache"
msgstr "prova si el sistema de fitxers admet la memòria cau no seguida"
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1003
msgid "enable untracked cache without testing the filesystem"
msgstr "habilita la memòria cau no seguida sense provar el sistema de fitxers"
-#: builtin/update-index.c:1134
+#: builtin/update-index.c:1119
+msgid ""
+"core.untrackedCache is set to true; remove or change it, if you really want "
+"to disable the untracked cache"
+msgstr ""
+"core.untrackedCache està establert a veritable; elimineu-lo o canvieu-lo, si "
+"realment voleu inhabilitar el cau no seguit"
+
+#: builtin/update-index.c:1123
msgid "Untracked cache disabled"
msgstr "La memòria cau no seguida està inhabilitada"
-#: builtin/update-index.c:1146
+#: builtin/update-index.c:1131
+msgid ""
+"core.untrackedCache is set to false; remove or change it, if you really want "
+"to enable the untracked cache"
+msgstr ""
+"core.untrackedCache està establert a fals; elimineu-lo o canviar-lo, si "
+"realment voleu habilitar el cau no seguit"
+
+#: builtin/update-index.c:1135
#, c-format
msgid "Untracked cache enabled for '%s'"
msgstr "La memòria cau no seguida està habilitada per a '%s'"
msgid "only useful for debugging"
msgstr "només útil per a la depuració"
-#: upload-pack.c:20
+#: upload-pack.c:22
msgid "git upload-pack [<options>] <dir>"
msgstr "git upload-pack [<opcions>] <directori>"
-#: upload-pack.c:837
+#: upload-pack.c:1028
msgid "quit after a single request/response exchange"
msgstr "surt després d'un sol intercanvi de sol·licitud/resposta"
-#: upload-pack.c:839
+#: upload-pack.c:1030
msgid "exit immediately after initial ref advertisement"
msgstr "surt immediatament després del anunci inicial de referència"
-#: upload-pack.c:841
+#: upload-pack.c:1032
msgid "do not try <directory>/.git/ if <directory> is no Git directory"
msgstr ""
"no intentis <directori>/.git/ si <directori> no és cap directori del Git"
-#: upload-pack.c:843
+#: upload-pack.c:1034
msgid "interrupt transfer after <n> seconds of inactivity"
msgstr "interromp la transferència després de <n> segons d'inactivitat"
+#: credential-cache--daemon.c:223
+#, c-format
+msgid ""
+"The permissions on your socket directory are too loose; other\n"
+"users may be able to read your cached credentials. Consider running:\n"
+"\n"
+"\tchmod 0700 %s"
+msgstr ""
+"Els permisos en el vostre directori de sòcol són massa liberals;\n"
+"potser que altres usuaris poden llegir els vostres credencials.\n"
+"Considereu executar:\n"
+"\n"
+"\tchmod 0700 %s"
+
#: credential-cache--daemon.c:271
msgid "print debugging messages to stderr"
msgstr "imprimeix els missatges de depuració a stderr"
"'git help <concepte>' per a llegir sobre una subordre o concepte\n"
"específic."
-#: http.c:323
+#: http.c:342
+msgid "Delegation control is not supported with cURL < 7.22.0"
+msgstr "No s'admet el control de delegació amb el cURL < 7.22.0"
+
+#: http.c:351
msgid "Public key pinning not supported with cURL < 7.44.0"
msgstr "No s'admet l'enganx de clau pública amb cURL < 7.44.0"
msgid "no-op (backward compatibility)"
msgstr "operació nul·la (per a compatibilitat amb versions anteriors)"
-#: parse-options.h:237
+#: parse-options.h:238
msgid "be more verbose"
msgstr "sigues més detallat"
-#: parse-options.h:239
+#: parse-options.h:240
msgid "be more quiet"
msgstr "sigues més callat"
-#: parse-options.h:245
+#: parse-options.h:246
msgid "use <n> digits to display SHA-1s"
msgstr "usa <n> xifres per presentar els SHA-1"
msgstr "La fusió automàtica no ha funcionat."
#: git-merge-octopus.sh:62
-msgid "Should not be doing an Octopus."
+msgid "Should not be doing an octopus."
msgstr "No s'ha de fer un pop."
#: git-merge-octopus.sh:73
msgid "Cannot save the current index state"
msgstr "No es pot desar l'estat d'índex actual"
+#: git-stash.sh:103
+msgid "Cannot save the untracked files"
+msgstr "No es pot desar els fitxers no seguits"
+
#: git-stash.sh:123 git-stash.sh:136
msgid "Cannot save the current worktree state"
msgstr "No es pot desar l'estat d'arbre de treball actual"
"error: opció desconeguda de 'stash save': $option\n"
" Per a proveir un missatge, useu git stash save -- '$option'"
+#: git-stash.sh:251
+msgid "Can't use --patch and --include-untracked or --all at the same time"
+msgstr "No es poden usar --patch i --include-untracked o --all a la vegada."
+
#: git-stash.sh:259
msgid "No local changes to save"
msgstr "No hi ha canvis locals a desar"
msgid "Cannot remove worktree changes"
msgstr "No es pot eliminar els canvis de l'arbre de treball"
-#: git-stash.sh:404
+#: git-stash.sh:403
#, sh-format
msgid "unknown option: $opt"
msgstr "opció desconeguda: $opt"
-#: git-stash.sh:414
+#: git-stash.sh:416
msgid "No stash found."
msgstr "No s'ha trobat cap magatzem."
-#: git-stash.sh:421
+#: git-stash.sh:423
#, sh-format
msgid "Too many revisions specified: $REV"
msgstr "S'han especificat massa revisions: $REV"
-#: git-stash.sh:427
+#: git-stash.sh:438
#, sh-format
msgid "$reference is not a valid reference"
msgstr "$reference no és una referència vàlida"
-#: git-stash.sh:455
+#: git-stash.sh:466
#, sh-format
msgid "'$args' is not a stash-like commit"
msgstr "'$args' no és una comissió de tipus magatzem"
-#: git-stash.sh:466
+#: git-stash.sh:477
#, sh-format
msgid "'$args' is not a stash reference"
msgstr "'$args' no és una referència de magatzem"
-#: git-stash.sh:474
+#: git-stash.sh:485
msgid "unable to refresh index"
msgstr "no s'ha pogut actualitzar l'índex"
-#: git-stash.sh:478
+#: git-stash.sh:489
msgid "Cannot apply a stash in the middle of a merge"
msgstr "No es pot aplicar un magatzem enmig d'una fusió"
-#: git-stash.sh:486
+#: git-stash.sh:497
msgid "Conflicts in index. Try without --index."
msgstr "Hi ha conflictes en l'índex. Proveu-ho sense --index."
-#: git-stash.sh:488
+#: git-stash.sh:499
msgid "Could not save index tree"
msgstr "No s'ha pogut desar l'arbre d'índex"
-#: git-stash.sh:522
+#: git-stash.sh:508
+msgid "Could not restore untracked files from stash"
+msgstr "No s'ha pogut restaurar els fitxers no seguits des d'emmagatzematge"
+
+#: git-stash.sh:533
msgid "Cannot unstage modified files"
msgstr "No es pot desallistar fitxers modificats"
-#: git-stash.sh:537
+#: git-stash.sh:548
msgid "Index was not unstashed."
msgstr "L'índex no estava sense emmagatzemar."
-#: git-stash.sh:551
+#: git-stash.sh:562
msgid "The stash is kept in case you need it again."
msgstr "Es conserva el magatzem en cas de que el necessiteu altra vegada."
-#: git-stash.sh:560
+#: git-stash.sh:571
#, sh-format
msgid "Dropped ${REV} ($s)"
msgstr "${REV} ($s) descartada"
-#: git-stash.sh:561
+#: git-stash.sh:572
#, sh-format
msgid "${REV}: Could not drop stash entry"
msgstr "${REV}: No s'ha pogut descartar l'entrada de magatzem"
-#: git-stash.sh:569
+#: git-stash.sh:580
msgid "No branch name specified"
msgstr "Cap nom de branca especificat"
-#: git-stash.sh:641
+#: git-stash.sh:652
msgid "(To restore them type \"git stash apply\")"
msgstr "(Per restaurar-les teclegeu \"git stash apply\")"
-#: git-submodule.sh:183
+#: git-submodule.sh:184
msgid "Relative path can only be used from the toplevel of the working tree"
msgstr ""
"El camí relatiu només es pot usar des del nivell superior de l'arbre de "
"treball"
-#: git-submodule.sh:193
+#: git-submodule.sh:194
#, sh-format
msgid "repo URL: '$repo' must be absolute or begin with ./|../"
msgstr "URL de dipòsit: '$repo' ha de ser absolut o començar amb ./|../"
-#: git-submodule.sh:210
+#: git-submodule.sh:211
#, sh-format
msgid "'$sm_path' already exists in the index"
msgstr "'$sm_path' ja existeix en l'índex"
-#: git-submodule.sh:214
+#: git-submodule.sh:215
#, sh-format
msgid ""
"The following path is ignored by one of your .gitignore files:\n"
"$sm_path\n"
"Useu -f si realment voleu afegir-lo."
-#: git-submodule.sh:232
+#: git-submodule.sh:233
#, sh-format
msgid "Adding existing repo at '$sm_path' to the index"
msgstr "S'està afegint el dipòsit existent a '$sm_path' a l'índex"
-#: git-submodule.sh:234
+#: git-submodule.sh:235
#, sh-format
msgid "'$sm_path' already exists and is not a valid git repo"
msgstr "'$sm_path' ja existeix i no és un dipòsit de git vàlid"
-#: git-submodule.sh:242
+#: git-submodule.sh:243
#, sh-format
msgid "A git directory for '$sm_name' is found locally with remote(s):"
msgstr ""
"Es troba un directori de git per a '$sm_name' localment amb els remots:"
-#: git-submodule.sh:244
+#: git-submodule.sh:245
#, sh-format
msgid ""
"If you want to reuse this local git directory instead of cloning again from\n"
"o no esteu segur de què vol dir això, trieu un altre nom amb l'opció '--"
"name'."
-#: git-submodule.sh:250
+#: git-submodule.sh:251
#, sh-format
msgid "Reactivating local git directory for submodule '$sm_name'."
msgstr ""
"S'està reactivant el directori de git local per al submòdul '$sm_name'."
-#: git-submodule.sh:262
+#: git-submodule.sh:263
#, sh-format
msgid "Unable to checkout submodule '$sm_path'"
msgstr "no s'ha pogut agafar el submòdul '$sm_path'"
-#: git-submodule.sh:267
+#: git-submodule.sh:268
#, sh-format
msgid "Failed to add submodule '$sm_path'"
msgstr "S'ha fallat en afegir el submòdul '$sm_path'"
-#: git-submodule.sh:276
+#: git-submodule.sh:277
#, sh-format
msgid "Failed to register submodule '$sm_path'"
msgstr "S'ha fallat en registrar el submòdul '$sm_path'"
-#: git-submodule.sh:323
+#: git-submodule.sh:324
#, sh-format
msgid "Entering '$displaypath'"
msgstr "S'està entrant '$displaypath'"
-#: git-submodule.sh:343
+#: git-submodule.sh:344
#, sh-format
msgid "Stopping at '$displaypath'; script returned non-zero status."
msgstr ""
"S'està aturant a '$displaypath'; l'script ha retornat un estat no zero."
-#: git-submodule.sh:414
+#: git-submodule.sh:415
#, sh-format
msgid "pathspec and --all are incompatible"
msgstr "--pathspec i --all són incompatibles"
-#: git-submodule.sh:419
+#: git-submodule.sh:420
#, sh-format
msgid "Use '--all' if you really want to deinitialize all submodules"
msgstr "Useu '--all' si realment voleu desinicialitzar tots els submòduls"
-#: git-submodule.sh:439
+#: git-submodule.sh:440
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains a .git directory\n"
"L'arbre de treball de submòdul '$displaypath' conté un directori .git\n"
"(useu 'rm -rf' si realment voleu eliminar-lo, incloent tota la seva història)"
-#: git-submodule.sh:447
+#: git-submodule.sh:448
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
"L'arbre de treball de submòdul '$displaypath' conté modificacions locals; "
"useu '-f' per a descartar-les"
-#: git-submodule.sh:450
+#: git-submodule.sh:451
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "S'ha netejat el directori '$displaypath'"
-#: git-submodule.sh:451
+#: git-submodule.sh:452
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr "No s'ha pogut eliminar l'arbre de treball de submòdul '$displaypath'"
-#: git-submodule.sh:454
+#: git-submodule.sh:455
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr "No s'ha pogut crear el directori de submòdul buit '$displaypath'"
-#: git-submodule.sh:463
+#: git-submodule.sh:464
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr "Submòdul '$name' ($url) no registrat per al camí '$displaypath'"
-#: git-submodule.sh:612
+#: git-submodule.sh:617
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr ""
"No s'ha pogut trobar la revisió actual en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:622
+#: git-submodule.sh:627
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "No s'ha pogut obtenir en el camí de submòdul '$sm_path'"
-#: git-submodule.sh:627
+#: git-submodule.sh:632
#, sh-format
msgid ""
"Unable to find current ${remote_name}/${branch} revision in submodule path "
"No s'ha pogut trobar la revisió actual de ${remote_name}/${branch} en el "
"camí de submòdul '$sm_path'"
-#: git-submodule.sh:645
+#: git-submodule.sh:650
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "No s'ha pogut obtenir en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:651
+#: git-submodule.sh:656
#, sh-format
msgid ""
"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
"Direct fetching of that commit failed."
msgstr ""
"S'ha obtingut en el camí de submòdul '$displaypath', però no contenia $sha1. "
-"L'obteniment directe d'aquella comissió ha fallat."
+"L'obtenció directa d'aquella comissió ha fallat."
-#: git-submodule.sh:658
+#: git-submodule.sh:663
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "No s'ha pogut agafar '$sha1' en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:659
+#: git-submodule.sh:664
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Camí de submòdul '$displaypath': s'ha agafat '$sha1'"
-#: git-submodule.sh:663
+#: git-submodule.sh:668
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr "no s'ha pogut rebasar '$sha1' en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:664
+#: git-submodule.sh:669
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Camí de submòdul '$displaypath': s'ha rebasat en '$sha1'"
-#: git-submodule.sh:669
+#: git-submodule.sh:674
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr "No s'ha pogut fusionar '$sha1' en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:670
+#: git-submodule.sh:675
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Camí de submòdul '$displaypath': s'ha fusionat en '$sha1'"
-#: git-submodule.sh:675
+#: git-submodule.sh:680
#, sh-format
msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
msgstr ""
"L'execució de '$command $sha1' ha fallat en el camí de submòdul "
"'$displaypath'"
-#: git-submodule.sh:676
+#: git-submodule.sh:681
#, sh-format
msgid "Submodule path '$displaypath': '$command $sha1'"
msgstr "Camí de submòdul '$displaypath': '$command $sha1'"
-#: git-submodule.sh:707
+#: git-submodule.sh:712
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "S'ha fallat en recursar al camí de submòdul '$displaypath'"
-#: git-submodule.sh:815
+#: git-submodule.sh:820
msgid "The --cached option cannot be used with the --files option"
msgstr "L'opció --cached no es pot usar amb l'opció --files"
-#: git-submodule.sh:867
+#: git-submodule.sh:872
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "mode inesperat $mod_dst"
-#: git-submodule.sh:887
+#: git-submodule.sh:892
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " Avís: $display_name no conté la comissió $sha1_src"
-#: git-submodule.sh:890
+#: git-submodule.sh:895
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " Avís: $display_name no conté la comissió $sha1_dst"
-#: git-submodule.sh:893
+#: git-submodule.sh:898
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr " Avís: $display_name no conté les comissions $sha1_src i $sha1_dst"
-#: git-submodule.sh:918
-msgid "blob"
-msgstr "blob"
-
-#: git-submodule.sh:1040
+#: git-submodule.sh:1045
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "S'ha fallat en recursar al camí de submòdul '$sm_path'"
-#: git-submodule.sh:1107
+#: git-submodule.sh:1112
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "S'està sincronitzant l'url de submòdul per a '$displaypath'"
msgid "See git-${cmd}(1) for details."
msgstr "Vegeu git-${cmd}(1) per detalls."
-#: git-rebase--interactive.sh:131
+#: git-rebase--interactive.sh:140
#, sh-format
msgid "Rebasing ($new_count/$total)"
msgstr "S'està rebasant ($new_count/$total)"
-#: git-rebase--interactive.sh:147
+#: git-rebase--interactive.sh:156
msgid ""
"\n"
"Commands:\n"
"\n"
"Es pot canviar l'ordre d'aquestes línies; s'executen de dalt a baix.\n"
-#: git-rebase--interactive.sh:162
+#: git-rebase--interactive.sh:171
msgid ""
"\n"
"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
"No elimineu cap línia. Useu 'drop' explícitament per a eliminar una "
"comissió.\n"
-#: git-rebase--interactive.sh:166
+#: git-rebase--interactive.sh:175
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
"\n"
"Si elimineu una línia aquí, ES PERDRÀ AQUELLA COMISSIÓ.\n"
-#: git-rebase--interactive.sh:202
+#: git-rebase--interactive.sh:211
#, sh-format
msgid ""
"You can amend the commit now, with\n"
"\n"
"\tgit rebase --continue"
-#: git-rebase--interactive.sh:227
+#: git-rebase--interactive.sh:236
#, sh-format
msgid "$sha1: not a commit that can be picked"
msgstr "$sha1: no és una comissió que es pugi escollir"
-#: git-rebase--interactive.sh:266
+#: git-rebase--interactive.sh:275
#, sh-format
msgid "Invalid commit name: $sha1"
msgstr "Nom de comissió no vàlid: $sha1"
-#: git-rebase--interactive.sh:308
+#: git-rebase--interactive.sh:317
msgid "Cannot write current commit's replacement sha1"
msgstr "No es pot escriure el sha1 reemplaçant de la comissió actual"
-#: git-rebase--interactive.sh:360
+#: git-rebase--interactive.sh:369
#, sh-format
msgid "Fast-forward to $sha1"
msgstr "Avanç ràpid a $sha1"
-#: git-rebase--interactive.sh:362
+#: git-rebase--interactive.sh:371
#, sh-format
msgid "Cannot fast-forward to $sha1"
msgstr "No es pot avançar ràpidament a $sha1"
-#: git-rebase--interactive.sh:371
+#: git-rebase--interactive.sh:380
#, sh-format
msgid "Cannot move HEAD to $first_parent"
msgstr "No es pot moure HEAD a $first_parent"
-#: git-rebase--interactive.sh:376
+#: git-rebase--interactive.sh:385
#, sh-format
msgid "Refusing to squash a merge: $sha1"
msgstr "S'està refusant aixafar una fusió: $sha1"
-#: git-rebase--interactive.sh:390
+#: git-rebase--interactive.sh:399
#, sh-format
msgid "Error redoing merge $sha1"
msgstr "Error en refer la fusió $sha1"
-#: git-rebase--interactive.sh:398
+#: git-rebase--interactive.sh:407
#, sh-format
msgid "Could not pick $sha1"
msgstr "No s'ha pogut escollir $sha1"
-#: git-rebase--interactive.sh:407
+#: git-rebase--interactive.sh:416
#, sh-format
msgid "This is the commit message #${n}:"
msgstr "Aquest és el missatge de comissió núm. ${n}:"
-#: git-rebase--interactive.sh:412
+#: git-rebase--interactive.sh:421
#, sh-format
msgid "The commit message #${n} will be skipped:"
msgstr "El missatge de comissió núm. ${n} se saltarà:"
-#: git-rebase--interactive.sh:423
+#: git-rebase--interactive.sh:432
#, sh-format
msgid "This is a combination of $count commit."
msgid_plural "This is a combination of $count commits."
msgstr[0] "Això és una combinació de $count comissió."
msgstr[1] "Això és una combinació de $count comissions."
-#: git-rebase--interactive.sh:431
+#: git-rebase--interactive.sh:440
#, sh-format
msgid "Cannot write $fixup_msg"
msgstr "No es pot escriure $fixup_msg"
-#: git-rebase--interactive.sh:434
+#: git-rebase--interactive.sh:443
msgid "This is a combination of 2 commits."
msgstr "Això és una combinació de 2 comissions."
-#: git-rebase--interactive.sh:435
+#: git-rebase--interactive.sh:444
msgid "This is the 1st commit message:"
msgstr "Aquest és el 1er missatge de comissió:"
-#: git-rebase--interactive.sh:475 git-rebase--interactive.sh:518
-#: git-rebase--interactive.sh:521
+#: git-rebase--interactive.sh:484 git-rebase--interactive.sh:527
+#: git-rebase--interactive.sh:530
#, sh-format
msgid "Could not apply $sha1... $rest"
msgstr "No s'ha pogut aplicar $sha1... $rest"
-#: git-rebase--interactive.sh:549
+#: git-rebase--interactive.sh:558
#, sh-format
msgid ""
"Could not amend commit after successfully picking $sha1... $rest\n"
"necessiteu resoldre el problema abans que pugueu canviar el missatge de\n"
"comissió."
-#: git-rebase--interactive.sh:564
+#: git-rebase--interactive.sh:573
#, sh-format
msgid "Stopped at $sha1_abbrev... $rest"
msgstr "S'ha aturat a $sha1_abbrev... $rest"
-#: git-rebase--interactive.sh:579
+#: git-rebase--interactive.sh:588
#, sh-format
msgid "Cannot '$squash_style' without a previous commit"
msgstr "No es pot '$squash_style' sense una comissió prèvia"
-#: git-rebase--interactive.sh:621
+#: git-rebase--interactive.sh:630
#, sh-format
msgid "Executing: $rest"
msgstr "S'està executant: $rest"
-#: git-rebase--interactive.sh:629
+#: git-rebase--interactive.sh:638
#, sh-format
msgid "Execution failed: $rest"
msgstr "L'execució ha fallat: $rest"
-#: git-rebase--interactive.sh:631
+#: git-rebase--interactive.sh:640
msgid "and made changes to the index and/or the working tree"
msgstr "i ha fet canvis a l'índex o l'arbre de treball"
-#: git-rebase--interactive.sh:633
+#: git-rebase--interactive.sh:642
msgid ""
"You can fix the problem, and then run\n"
"\n"
"\tgit rebase --continue"
#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--interactive.sh:646
+#: git-rebase--interactive.sh:655
#, sh-format
msgid ""
"Execution succeeded: $rest\n"
"\n"
"\tgit rebase --continue"
-#: git-rebase--interactive.sh:657
+#: git-rebase--interactive.sh:666
#, sh-format
msgid "Unknown command: $command $sha1 $rest"
msgstr "Ordre desconeguda: $command $sha1 $rest"
-#: git-rebase--interactive.sh:658
+#: git-rebase--interactive.sh:667
msgid "Please fix this using 'git rebase --edit-todo'."
msgstr "Si us plau, arregleu això usant 'git rebase --edit-todo'."
-#: git-rebase--interactive.sh:693
+#: git-rebase--interactive.sh:702
#, sh-format
msgid "Successfully rebased and updated $head_name."
msgstr "S'ha rebasat i actualitzat $head_name amb èxit."
-#: git-rebase--interactive.sh:740
+#: git-rebase--interactive.sh:749
msgid "Could not skip unnecessary pick commands"
msgstr "No s'ha pogut saltar ordres innecessaris d'elecció"
-#: git-rebase--interactive.sh:898
+#: git-rebase--interactive.sh:907
#, sh-format
msgid ""
"Warning: the SHA-1 is missing or isn't a commit in the following line:\n"
"Advertència: manca el SHA-1 o no és una comissió en la línia següent:\n"
" - $line"
-#: git-rebase--interactive.sh:931
+#: git-rebase--interactive.sh:940
#, sh-format
msgid ""
"Warning: the command isn't recognized in the following line:\n"
"Advertència: no es reconeix l'ordre en la línia següent:\n"
" - $line"
-#: git-rebase--interactive.sh:970
+#: git-rebase--interactive.sh:979
msgid "could not detach HEAD"
msgstr "no s'ha pogut separar HEAD"
-#: git-rebase--interactive.sh:1008
+#: git-rebase--interactive.sh:1017
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
"Dropped commits (newer to older):"
"accidentalment.\n"
"Les comissions descartades (més nova a més vella):"
-#: git-rebase--interactive.sh:1016
+#: git-rebase--interactive.sh:1025
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
"\n"
"d'advertències.\n"
"Els comportaments possibles són: ignore, warn, error."
-#: git-rebase--interactive.sh:1027
+#: git-rebase--interactive.sh:1036
#, sh-format
msgid ""
"Unrecognized setting $check_level for option rebase.missingCommitsCheck. "
"No s'ha reconegut l'ajust $check_level per a l'opció rebase."
"missingCommitsCheck. S'està ignorant."
-#: git-rebase--interactive.sh:1044
-msgid "You can fix this with 'git rebase --edit-todo'."
-msgstr "Podeu arreglar això amb 'git rebase --edit-todo'."
+#: git-rebase--interactive.sh:1053
+msgid ""
+"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
+"continue'."
+msgstr ""
+"Podeu arreglar això amb 'git rebase --edit-todo' i desprès 'git rebase --"
+"continue'."
-#: git-rebase--interactive.sh:1045
+#: git-rebase--interactive.sh:1054
msgid "Or you can abort the rebase with 'git rebase --abort'."
msgstr "O podeu avortar el rebasament amb 'git rebase --abort'."
-#: git-rebase--interactive.sh:1069
+#: git-rebase--interactive.sh:1078
msgid "Could not remove CHERRY_PICK_HEAD"
msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
-#: git-rebase--interactive.sh:1074
+#: git-rebase--interactive.sh:1083
#, sh-format
msgid ""
"You have staged changes in your working tree.\n"
"\n"
" git commit $gpg_sign_opt_quoted\n"
"\n"
-"In both case, once you're done, continue with:\n"
+"In both cases, once you're done, continue with:\n"
"\n"
" git rebase --continue\n"
msgstr ""
"\n"
" git rebase --continue\n"
-#: git-rebase--interactive.sh:1091
+#: git-rebase--interactive.sh:1100
msgid "Error trying to find the author identity to amend commit"
msgstr ""
"Ha hagut un error en intentar trobar la identitat d'autor per a esmenar la "
"comissió"
-#: git-rebase--interactive.sh:1096
+#: git-rebase--interactive.sh:1105
msgid ""
"You have uncommitted changes in your working tree. Please commit them\n"
"first and then run 'git rebase --continue' again."
"Teniu canvis no comessos en el vostre arbre de treball. Si us plau,\n"
"primer cometeu-los i després executeu 'git rebase --continue' de nou."
-#: git-rebase--interactive.sh:1101 git-rebase--interactive.sh:1105
+#: git-rebase--interactive.sh:1110 git-rebase--interactive.sh:1114
msgid "Could not commit staged changes."
msgstr "No s'ha pogut cometre els canvis emmagatzemats."
-#: git-rebase--interactive.sh:1129
+#: git-rebase--interactive.sh:1138
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
"\n"
msgstr ""
"\n"
-"Esteu editant el fitxer de cosses a fer d'un rebasament interactiu en "
-"marxa.\n"
+"Esteu editant el fitxer de coses a fer d'un rebasament interactiu en marxa.\n"
"Per a continuar el rebasament després d'editar, executeu:\n"
" git rebase --continue\n"
"\n"
-#: git-rebase--interactive.sh:1137 git-rebase--interactive.sh:1298
+#: git-rebase--interactive.sh:1146 git-rebase--interactive.sh:1304
msgid "Could not execute editor"
msgstr "No s'ha pogut executar l'editor"
-#: git-rebase--interactive.sh:1145
-msgid "You need to set your committer info first"
-msgstr "Heu de primer establir la vostra informació de cometent"
-
-#: git-rebase--interactive.sh:1153
+#: git-rebase--interactive.sh:1159
#, sh-format
msgid "Could not checkout $switch_to"
msgstr "No s'ha pogut agafar $switch_to"
-#: git-rebase--interactive.sh:1158
+#: git-rebase--interactive.sh:1164
msgid "No HEAD?"
msgstr "No hi ha cap HEAD?"
-#: git-rebase--interactive.sh:1159
+#: git-rebase--interactive.sh:1165
#, sh-format
msgid "Could not create temporary $state_dir"
msgstr "No s'ha pogut crear el $state_dir temporal"
-#: git-rebase--interactive.sh:1161
+#: git-rebase--interactive.sh:1167
msgid "Could not mark as interactive"
msgstr "No s'ha pogut marcar com a interactiu"
-#: git-rebase--interactive.sh:1171 git-rebase--interactive.sh:1176
+#: git-rebase--interactive.sh:1177 git-rebase--interactive.sh:1182
msgid "Could not init rewritten commits"
msgstr "No s'ha pogut iniciar les comissions reescrites"
-#: git-rebase--interactive.sh:1276
+#: git-rebase--interactive.sh:1282
#, sh-format
msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
msgstr[0] "Rebasa $shortrevisions sobre $shortonto ($todocount ordre)"
msgstr[1] "Rebasa $shortrevisions sobre $shortonto ($todocount ordres)"
-#: git-rebase--interactive.sh:1281
+#: git-rebase--interactive.sh:1287
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
"No obstant, si elimineu tot, s'avortarà el rebasament.\n"
"\n"
-#: git-rebase--interactive.sh:1288
+#: git-rebase--interactive.sh:1294
msgid "Note that empty commits are commented out"
msgstr "Nota que les comissions buides estan comentades"
msgid "Cannot rewrite branches: You have unstaged changes."
msgstr "No es pot reescriure branques: Teniu canvis no allistats."
+#: git-sh-setup.sh:226
+msgid "Cannot pull with rebase: You have unstaged changes."
+msgstr "No es pot baixar amb rebasament: Teniu canvis no allistats."
+
#: git-sh-setup.sh:229
#, sh-format
msgid "Cannot $action: You have unstaged changes."
msgid "Cannot rebase: Your index contains uncommitted changes."
msgstr "No es pot rebasar: El vostre índex conté canvis sense cometre."
+#: git-sh-setup.sh:245
+msgid "Cannot pull with rebase: Your index contains uncommitted changes."
+msgstr ""
+"No es pot baixar amb rebasament: El vostre índex conté canvis sense cometre."
+
#: git-sh-setup.sh:248
#, sh-format
msgid "Cannot $action: Your index contains uncommitted changes."
msgstr "No es pot $action: El vostre índex conté canvis sense cometre."
+#: git-sh-setup.sh:252
+msgid "Additionally, your index contains uncommitted changes."
+msgstr "Addicionalment, el vostre índex conté canvis sense cometre."
+
#: git-sh-setup.sh:372
msgid "You need to run this command from the toplevel of the working tree."
msgstr ""
-"Heu d'executar aquesta ordre des del nivell superior de l'arbre de treball"
+"Heu d'executar aquesta ordre des del nivell superior de l'arbre de treball."
#: git-sh-setup.sh:377
msgid "Unable to determine absolute path of git directory"
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-08-27 23:21+0800\n"
-"PO-Revision-Date: 2015-01-21 15:01+0800\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-28 18:10+0100\n"
"Last-Translator: Ralf Thielow <ralf.thielow@gmail.com>\n"
"Language-Team: German <>\n"
"Language: de\n"
#: advice.c:83
msgid "Cherry-picking is not possible because you have unmerged files."
-msgstr "Cherry-Picken ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
+msgstr ""
+"Cherry-Picken ist nicht möglich, weil Sie nicht zusammengeführte Dateien "
+"haben."
#: advice.c:85
msgid "Committing is not possible because you have unmerged files."
-msgstr "Committen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
+msgstr ""
+"Committen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
#: advice.c:87
msgid "Merging is not possible because you have unmerged files."
-msgstr "Mergen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
+msgstr ""
+"Mergen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
#: advice.c:89
msgid "Pulling is not possible because you have unmerged files."
-msgstr "Pullen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
+msgstr ""
+"Pullen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
#: advice.c:91
msgid "Reverting is not possible because you have unmerged files."
-msgstr "Reverten ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
+msgstr ""
+"Reverten ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
#: advice.c:93
#, c-format
"weiteren Checkout durchführen.\n"
"\n"
"Wenn Sie einen neuen Branch erstellen möchten, um Ihre erstellten Commits\n"
-"zu behalten, können Sie das (jetzt oder später) durch einen weiteren Checkout\n"
+"zu behalten, können Sie das (jetzt oder später) durch einen weiteren "
+"Checkout\n"
"mit der Option -b tun. Beispiel:\n"
"\n"
" git checkout -b <neuer-Branchname>\n"
"\n"
-#: archive.c:12
-msgid "git archive [<options>] <tree-ish> [<path>...]"
-msgstr "git archive [<Optionen>] <Commit-Referenz> [<Pfad>...]"
+#: apply.c:57
+#, c-format
+msgid "unrecognized whitespace option '%s'"
+msgstr "nicht erkannte Whitespace-Option: '%s'"
-#: archive.c:13
-msgid "git archive --list"
-msgstr "git archive --list"
+#: apply.c:73
+#, c-format
+msgid "unrecognized whitespace ignore option '%s'"
+msgstr "nicht erkannte Option zum Ignorieren von Whitespace: '%s'"
-#: archive.c:14
-msgid ""
-"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
-msgstr ""
-"git archive --remote <Repository> [--exec <Programm>] [<Optionen>] <Commit-"
-"Referenz> [<Pfad>...]"
+#: apply.c:125
+msgid "--reject and --3way cannot be used together."
+msgstr "--reject und --3way können nicht gemeinsam verwendet werden."
-#: archive.c:15
-msgid "git archive --remote <repo> [--exec <cmd>] --list"
-msgstr "git archive --remote <Repository> [--exec <Programm>] --list"
+#: apply.c:127
+msgid "--cached and --3way cannot be used together."
+msgstr "--cached und --3way können nicht gemeinsam verwendet werden."
-#: archive.c:344 builtin/add.c:139 builtin/add.c:435 builtin/rm.c:327
-#, c-format
-msgid "pathspec '%s' did not match any files"
-msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
+#: apply.c:130
+msgid "--3way outside a repository"
+msgstr ""
+"Die Option --3way kann nicht außerhalb eines Repositories verwendet werden."
-#: archive.c:429
-msgid "fmt"
-msgstr "Format"
+#: apply.c:141
+msgid "--index outside a repository"
+msgstr ""
+"Die Option --index kann nicht außerhalb eines Repositories verwendet werden."
-#: archive.c:429
-msgid "archive format"
-msgstr "Archivformat"
+#: apply.c:144
+msgid "--cached outside a repository"
+msgstr ""
+"Die Option --cached kann nicht außerhalb eines Repositories verwendet werden."
-#: archive.c:430 builtin/log.c:1422
-msgid "prefix"
-msgstr "Präfix"
+#: apply.c:845
+#, c-format
+msgid "Cannot prepare timestamp regexp %s"
+msgstr "Kann regulären Ausdruck für Zeitstempel %s nicht verarbeiten"
-#: archive.c:431
-msgid "prepend prefix to each pathname in the archive"
-msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
+#: apply.c:854
+#, c-format
+msgid "regexec returned %d for input: %s"
+msgstr "Ausführung des regulären Ausdrucks gab %d zurück. Eingabe: %s"
-#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2553 builtin/blame.c:2554
-#: builtin/config.c:59 builtin/fast-export.c:987 builtin/fast-export.c:989
-#: builtin/grep.c:722 builtin/hash-object.c:100 builtin/ls-files.c:460
-#: builtin/ls-files.c:463 builtin/notes.c:399 builtin/notes.c:562
-#: builtin/read-tree.c:109 parse-options.h:153
-msgid "file"
-msgstr "Datei"
+#: apply.c:938
+#, c-format
+msgid "unable to find filename in patch at line %d"
+msgstr "Konnte keinen Dateinamen in Zeile %d des Patches finden."
-#: archive.c:433 builtin/archive.c:89
-msgid "write the archive to this file"
-msgstr "das Archiv in diese Datei schreiben"
+#: apply.c:977
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
+msgstr ""
+"git apply: ungültiges 'git-diff' - erwartete /dev/null, erhielt %s in Zeile "
+"%d"
-#: archive.c:435
-msgid "read .gitattributes in working directory"
-msgstr ".gitattributes aus dem Arbeitsverzeichnis lesen"
+#: apply.c:983
+#, c-format
+msgid "git apply: bad git-diff - inconsistent new filename on line %d"
+msgstr ""
+"git apply: ungültiges 'git-diff' - Inkonsistenter neuer Dateiname in Zeile %d"
-#: archive.c:436
-msgid "report archived files on stderr"
-msgstr "archivierte Dateien in der Standard-Fehlerausgabe ausgeben"
+#: apply.c:984
+#, c-format
+msgid "git apply: bad git-diff - inconsistent old filename on line %d"
+msgstr ""
+"git apply: ungültiges 'git-diff' - Inkonsistenter alter Dateiname in Zeile %d"
-#: archive.c:437
-msgid "store only"
-msgstr "nur speichern"
+#: apply.c:990
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null on line %d"
+msgstr "git apply: ungültiges 'git-diff' - erwartete /dev/null in Zeile %d"
-#: archive.c:438
-msgid "compress faster"
-msgstr "schneller komprimieren"
+#: apply.c:1488
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount: unerwartete Zeile: %.*s"
-#: archive.c:446
-msgid "compress better"
-msgstr "besser komprimieren"
+#: apply.c:1557
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "Patch-Fragment ohne Kopfbereich bei Zeile %d: %.*s"
-#: archive.c:449
-msgid "list supported archive formats"
-msgstr "unterstützte Archivformate auflisten"
+#: apply.c:1577
+#, 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] ""
+"Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen, wenn "
+"%d vorangestellter Teil des Pfades entfernt wird (Zeile %d)"
+msgstr[1] ""
+"Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen, wenn "
+"%d vorangestellte Teile des Pfades entfernt werden (Zeile %d)"
-#: archive.c:451 builtin/archive.c:90 builtin/clone.c:82
-#: builtin/submodule--helper.c:832
-msgid "repo"
-msgstr "Repository"
+#: apply.c:1589
+#, c-format
+msgid "git diff header lacks filename information (line %d)"
+msgstr "Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen (Zeile %d)"
-#: archive.c:452 builtin/archive.c:91
-msgid "retrieve the archive from remote repository <repo>"
-msgstr "Archiv vom Remote-Repository <Repository> abrufen"
+#: apply.c:1759
+msgid "new file depends on old contents"
+msgstr "neue Datei hängt von alten Inhalten ab"
-#: archive.c:453 builtin/archive.c:92 builtin/notes.c:483
-msgid "command"
-msgstr "Programm"
+#: apply.c:1761
+msgid "deleted file still has contents"
+msgstr "entfernte Datei hat noch Inhalte"
-#: archive.c:454 builtin/archive.c:93
-msgid "path to the remote git-upload-archive command"
-msgstr "Pfad zum externen \"git-upload-archive\"-Programm"
+#: apply.c:1795
+#, c-format
+msgid "corrupt patch at line %d"
+msgstr "fehlerhafter Patch bei Zeile %d"
-#: archive.c:461
-msgid "Unexpected option --remote"
-msgstr "Unerwartete Option --remote"
+#: apply.c:1832
+#, c-format
+msgid "new file %s depends on old contents"
+msgstr "neue Datei %s hängt von alten Inhalten ab"
-#: archive.c:463
-msgid "Option --exec can only be used together with --remote"
-msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden."
+#: apply.c:1834
+#, c-format
+msgid "deleted file %s still has contents"
+msgstr "entfernte Datei %s hat noch Inhalte"
-#: archive.c:465
-msgid "Unexpected option --output"
-msgstr "Unerwartete Option --output"
+#: apply.c:1837
+#, c-format
+msgid "** warning: file %s becomes empty but is not deleted"
+msgstr "** Warnung: Datei %s wird leer, aber nicht entfernt."
-#: archive.c:487
+#: apply.c:1984
#, c-format
-msgid "Unknown archive format '%s'"
-msgstr "Unbekanntes Archivformat '%s'"
+msgid "corrupt binary patch at line %d: %.*s"
+msgstr "fehlerhafter Binär-Patch bei Zeile %d: %.*s"
-#: archive.c:494
+#: apply.c:2021
#, c-format
-msgid "Argument not supported for format '%s': -%d"
-msgstr "Argument für Format '%s' nicht unterstützt: -%d"
+msgid "unrecognized binary patch at line %d"
+msgstr "nicht erkannter Binär-Patch bei Zeile %d"
-#: attr.c:263
-msgid ""
-"Negative patterns are ignored in git attributes\n"
-"Use '\\!' for literal leading exclamation."
-msgstr ""
-"Verneinende Muster werden in Git-Attributen ignoriert.\n"
-"Benutzen Sie '\\!' für führende Ausrufezeichen."
+#: apply.c:2182
+#, c-format
+msgid "patch with only garbage at line %d"
+msgstr "Patch mit nutzlosen Informationen bei Zeile %d"
-#: bisect.c:441
+#: apply.c:2274
#, c-format
-msgid "Could not open file '%s'"
-msgstr "Konnte Datei '%s' nicht öffnen"
+msgid "unable to read symlink %s"
+msgstr "konnte symbolische Verknüpfung %s nicht lesen"
-#: bisect.c:446
+#: apply.c:2278
#, c-format
-msgid "Badly quoted content in file '%s': %s"
-msgstr "Ungültiger Inhalt bzgl. Anführungsstriche in Datei '%s': %s"
+msgid "unable to open or read %s"
+msgstr "konnte %s nicht öffnen oder lesen"
-#: bisect.c:655
+#: apply.c:2931
#, c-format
-msgid "We cannot bisect more!\n"
-msgstr "Keine binäre Suche mehr möglich!\n"
+msgid "invalid start of line: '%c'"
+msgstr "Ungültiger Zeilenanfang: '%c'"
-#: bisect.c:708
+#: apply.c:3050
#, c-format
-msgid "Not a valid commit name %s"
-msgstr "%s ist kein gültiger Commit-Name"
+msgid "Hunk #%d succeeded at %d (offset %d line)."
+msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
+msgstr[0] "Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeile versetzt)"
+msgstr[1] ""
+"Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeilen versetzt)"
-#: bisect.c:732
+#: apply.c:3062
#, c-format
-msgid ""
-"The merge base %s is bad.\n"
-"This means the bug has been fixed between %s and [%s].\n"
-msgstr ""
-"Die Merge-Basis %s ist fehlerhaft.\n"
-"Das bedeutet, der Fehler wurde zwischen %s und [%s] behoben.\n"
+msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
+msgstr "Kontext reduziert zu (%ld/%ld), um Patch-Bereich bei %d anzuwenden"
-#: bisect.c:737
+#: apply.c:3068
#, c-format
msgid ""
-"The merge base %s is new.\n"
-"The property has changed between %s and [%s].\n"
+"while searching for:\n"
+"%.*s"
msgstr ""
-"Die Merge-Basis %s ist neu.\n"
-"Das bedeutet, die Eigenschaft hat sich zwischen %s und [%s] geändert.\n"
+"bei der Suche nach:\n"
+"%.*s"
-#: bisect.c:742
+#: apply.c:3090
#, c-format
-msgid ""
-"The merge base %s is %s.\n"
-"This means the first '%s' commit is between %s and [%s].\n"
-msgstr ""
-"Die Merge-Basis %s ist %s.\n"
-"Das bedeutet, der erste '%s' Commit befindet sich zwischen %s und [%s]\n"
+msgid "missing binary patch data for '%s'"
+msgstr "keine Daten in Binär-Patch für '%s'"
-#: bisect.c:750
+#: apply.c:3098
#, c-format
-msgid ""
-"Some %s revs are not ancestor of the %s rev.\n"
-"git bisect cannot work properly in this case.\n"
-"Maybe you mistook %s and %s revs?\n"
+msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
msgstr ""
-"Manche %s Commits sind keine Vorgänger des %s Commits.\n"
-"git bisect kann in diesem Fall nicht richtig arbeiten.\n"
-"Vielleicht verwechselten Sie %s und %s Commits?\n"
+"kann binären Patch nicht in umgekehrter Reihenfolge anwenden ohne einen\n"
+"umgekehrten Patch-Block auf '%s'"
-#: bisect.c:763
+#: apply.c:3144
+#, c-format
+msgid "cannot apply binary patch to '%s' without full index line"
+msgstr "kann binären Patch auf '%s' nicht ohne eine vollständige Index-Zeile anwenden"
+
+#: apply.c:3154
#, c-format
msgid ""
-"the merge base between %s and [%s] must be skipped.\n"
-"So we cannot be sure the first %s commit is between %s and %s.\n"
-"We continue anyway."
+"the patch applies to '%s' (%s), which does not match the current contents."
msgstr ""
-"Die Merge-Basis zwischen %s und [%s] muss ausgelassen werden.\n"
-"Es kann daher nicht sichergestellt werden, dass sich der\n"
-"erste %s Commit zwischen %s und %s befindet.\n"
-"Es wird dennoch fortgesetzt."
+"der Patch wird angewendet auf '%s' (%s), was nicht den aktuellen Inhalten\n"
+"entspricht"
-#: bisect.c:798
+#: apply.c:3162
#, c-format
-msgid "Bisecting: a merge base must be tested\n"
-msgstr "binäre Suche: eine Merge-Basis muss geprüft werden\n"
+msgid "the patch applies to an empty '%s' but it is not empty"
+msgstr "der Patch wird auf ein leeres '%s' angewendet, was aber nicht leer ist"
-#: bisect.c:849
+#: apply.c:3180
#, c-format
-msgid "a %s revision is needed"
-msgstr "ein %s Commit wird benötigt"
+msgid "the necessary postimage %s for '%s' cannot be read"
+msgstr "das erforderliche Postimage %s für '%s' kann nicht gelesen werden"
-#: bisect.c:866 builtin/notes.c:174 builtin/tag.c:248
+#: apply.c:3193
#, c-format
-msgid "could not create file '%s'"
-msgstr "konnte Datei '%s' nicht erstellen"
+msgid "binary patch does not apply to '%s'"
+msgstr "Konnte Binär-Patch nicht auf '%s' anwenden"
-#: bisect.c:917
+#: apply.c:3199
#, c-format
-msgid "could not read file '%s'"
-msgstr "Konnte Datei '%s' nicht lesen"
-
-#: bisect.c:947
-msgid "reading bisect refs failed"
-msgstr "Lesen von Referenzen für binäre Suche fehlgeschlagen"
+msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
+msgstr ""
+"Binär-Patch für '%s' erzeugt falsches Ergebnis (erwartete %s, bekam %s)"
-#: bisect.c:967
+#: apply.c:3220
#, c-format
-msgid "%s was both %s and %s\n"
-msgstr "%s war sowohl %s als auch %s\n"
+msgid "patch failed: %s:%ld"
+msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
-#: bisect.c:975
+#: apply.c:3342
#, c-format
-msgid ""
-"No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
-msgstr ""
-"Kein testbarer Commit gefunden.\n"
-"Vielleicht starteten Sie mit falschen Pfad-Parametern?\n"
+msgid "cannot checkout %s"
+msgstr "kann %s nicht auschecken"
-#: bisect.c:994
+#: apply.c:3390 apply.c:3401 apply.c:3447 setup.c:248
#, c-format
-msgid "(roughly %d step)"
-msgid_plural "(roughly %d steps)"
-msgstr[0] "(ungefähr %d Schritt)"
-msgstr[1] "(ungefähr %d Schritte)"
+msgid "failed to read %s"
+msgstr "Fehler beim Lesen von %s"
-#. TRANSLATORS: the last %s will be replaced with
-#. "(roughly %d steps)" translation
-#: bisect.c:998
+#: apply.c:3398
#, c-format
-msgid "Bisecting: %d revision left to test after this %s\n"
-msgid_plural "Bisecting: %d revisions left to test after this %s\n"
-msgstr[0] "binäre Suche: danach noch %d Commit zum Testen übrig %s\n"
-msgstr[1] "binäre Suche: danach noch %d Commits zum Testen übrig %s\n"
+msgid "reading from '%s' beyond a symbolic link"
+msgstr "'%s' ist hinter einer symbolischen Verknüpfung"
-#: branch.c:53
+#: apply.c:3427 apply.c:3667
#, c-format
-msgid ""
-"\n"
-"After fixing the error cause you may try to fix up\n"
-"the remote tracking information by invoking\n"
-"\"git branch --set-upstream-to=%s%s%s\"."
-msgstr ""
-"\n"
-"Nachdem Sie die Fehlerursache behoben haben, können Sie\n"
-"die Tracking-Informationen mit\n"
-"\"git branch --set-upstream-to=%s%s%s\"\n"
-"erneut setzen."
+msgid "path %s has been renamed/deleted"
+msgstr "Pfad %s wurde umbenannt/gelöscht"
-#: branch.c:67
+#: apply.c:3510 apply.c:3681
#, c-format
-msgid "Not setting branch %s as its own upstream."
-msgstr "Branch %s kann nicht sein eigener Upstream-Branch sein."
+msgid "%s: does not exist in index"
+msgstr "%s ist nicht im Index"
-#: branch.c:93
+#: apply.c:3519 apply.c:3689
#, c-format
-msgid "Branch %s set up to track remote branch %s from %s by rebasing."
+msgid "%s: does not match index"
+msgstr "%s entspricht nicht der Version im Index"
+
+#: apply.c:3554
+msgid "repository lacks the necessary blob to fall back on 3-way merge."
msgstr ""
-"Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s durch Rebase."
+"Dem Repository fehlt der notwendige Blob, um auf einen 3-Wege-Merge\n"
+"zurückzufallen."
-#: branch.c:94
+#: apply.c:3557
#, c-format
-msgid "Branch %s set up to track remote branch %s from %s."
-msgstr "Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s."
+msgid "Falling back to three-way merge...\n"
+msgstr "Falle zurück auf 3-Wege-Merge ...\n"
-#: branch.c:98
+#: apply.c:3573 apply.c:3577
#, c-format
-msgid "Branch %s set up to track local branch %s by rebasing."
-msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s durch Rebase."
+msgid "cannot read the current contents of '%s'"
+msgstr "kann aktuelle Inhalte von '%s' nicht lesen"
-#: branch.c:99
+#: apply.c:3589
#, c-format
-msgid "Branch %s set up to track local branch %s."
-msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s."
+msgid "Failed to fall back on three-way merge...\n"
+msgstr "Fehler beim Zurückfallen auf 3-Wege-Merge...\n"
-#: branch.c:104
+#: apply.c:3603
#, c-format
-msgid "Branch %s set up to track remote ref %s by rebasing."
-msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s durch Rebase."
+msgid "Applied patch to '%s' with conflicts.\n"
+msgstr "Patch auf '%s' mit Konflikten angewendet.\n"
-#: branch.c:105
+#: apply.c:3608
#, c-format
-msgid "Branch %s set up to track remote ref %s."
-msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s."
+msgid "Applied patch to '%s' cleanly.\n"
+msgstr "Patch auf '%s' sauber angewendet.\n"
-#: branch.c:109
+#: apply.c:3634
+msgid "removal patch leaves file contents"
+msgstr "Lösch-Patch hinterlässt Dateiinhalte"
+
+#: apply.c:3706
#, c-format
-msgid "Branch %s set up to track local ref %s by rebasing."
-msgstr ""
-"Branch %s konfiguriert zum Folgen von lokaler Referenz %s durch Rebase."
+msgid "%s: wrong type"
+msgstr "%s: falscher Typ"
-#: branch.c:110
+#: apply.c:3708
#, c-format
-msgid "Branch %s set up to track local ref %s."
-msgstr "Branch %s konfiguriert zum Folgen von lokaler Referenz %s."
+msgid "%s has type %o, expected %o"
+msgstr "%s ist vom Typ %o, erwartete %o"
-#: branch.c:119
-msgid "Unable to write upstream branch configuration"
-msgstr "Konnte Konfiguration zu Upstream-Branch nicht schreiben."
+#: apply.c:3859 apply.c:3861
+#, c-format
+msgid "invalid path '%s'"
+msgstr "Ungültiger Pfad '%s'"
-#: branch.c:156
+#: apply.c:3917
#, c-format
-msgid "Not tracking: ambiguous information for ref %s"
-msgstr ""
-"Konfiguration zum Folgen von Branch nicht eingerichtet. Referenz %s ist "
-"mehrdeutig."
+msgid "%s: already exists in index"
+msgstr "%s ist bereits bereitgestellt"
-#: branch.c:185
+#: apply.c:3920
#, c-format
-msgid "'%s' is not a valid branch name."
-msgstr "'%s' ist kein gültiger Branchname."
+msgid "%s: already exists in working directory"
+msgstr "%s existiert bereits im Arbeitsverzeichnis"
-#: branch.c:190
+#: apply.c:3940
#, c-format
-msgid "A branch named '%s' already exists."
-msgstr "Branch '%s' existiert bereits."
+msgid "new mode (%o) of %s does not match old mode (%o)"
+msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o)"
-#: branch.c:198
-msgid "Cannot force update the current branch."
-msgstr "Kann Aktualisierung des aktuellen Branches nicht erzwingen."
+#: apply.c:3945
+#, c-format
+msgid "new mode (%o) of %s does not match old mode (%o) of %s"
+msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o) von %s"
-#: branch.c:218
+#: apply.c:3965
#, c-format
-msgid "Cannot setup tracking information; starting point '%s' is not a branch."
-msgstr ""
-"Kann Tracking-Informationen nicht einrichten; Startpunkt '%s' ist kein "
-"Branch."
+msgid "affected file '%s' is beyond a symbolic link"
+msgstr "betroffene Datei '%s' ist hinter einer symbolischen Verknüpfung"
-#: branch.c:220
+#: apply.c:3969
#, c-format
-msgid "the requested upstream branch '%s' does not exist"
-msgstr "der angeforderte Upstream-Branch '%s' existiert nicht"
+msgid "%s: patch does not apply"
+msgstr "%s: Patch konnte nicht angewendet werden"
-#: branch.c:222
-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 ""
-"\n"
-"Falls Sie vorhaben, Ihre Arbeit auf einem bereits existierenden\n"
-"Upstream-Branch aufzubauen, sollten Sie \"git fetch\"\n"
-"ausführen, um diesen abzurufen.\n"
-"\n"
-"Falls Sie vorhaben, einen neuen lokalen Branch zu versenden\n"
-"der seinem externen Gegenstück folgen soll, können Sie\n"
-"\"git push -u\" verwenden, um den Upstream-Branch beim \"push\"\n"
-"zu konfigurieren."
+#: apply.c:3984
+#, c-format
+msgid "Checking patch %s..."
+msgstr "Prüfe Patch %s ..."
-#: branch.c:266
+#: apply.c:4075
#, c-format
-msgid "Not a valid object name: '%s'."
-msgstr "Ungültiger Objekt-Name: '%s'"
+msgid "sha1 information is lacking or useless for submodule %s"
+msgstr "SHA-1 Information fehlt oder ist unbrauchbar für Submodul %s"
-#: branch.c:286
+#: apply.c:4082
#, c-format
-msgid "Ambiguous object name: '%s'."
-msgstr "mehrdeutiger Objekt-Name: '%s'"
+msgid "mode change for %s, which is not in current HEAD"
+msgstr "Modusänderung für %s, was sich nicht im aktuellen HEAD befindet"
-#: branch.c:291
+#: apply.c:4085
#, c-format
-msgid "Not a valid branch point: '%s'."
-msgstr "Ungültiger Branchpunkt: '%s'"
+msgid "sha1 information is lacking or useless (%s)."
+msgstr "SHA-1 Information fehlt oder ist unbrauchbar (%s)."
-#: branch.c:345
+#: apply.c:4090 builtin/checkout.c:233 builtin/reset.c:135
#, c-format
-msgid "'%s' is already checked out at '%s'"
-msgstr "'%s' ist bereits in '%s' ausgecheckt"
+msgid "make_cache_entry failed for path '%s'"
+msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen"
-#: branch.c:364
+#: apply.c:4094
#, c-format
-msgid "HEAD of working tree %s is not updated"
-msgstr "HEAD des Arbeitsverzeichnisses %s ist nicht aktualisiert."
+msgid "could not add %s to temporary index"
+msgstr "konnte %s nicht zum temporären Index hinzufügen"
-#: bundle.c:34
+#: apply.c:4104
#, c-format
-msgid "'%s' does not look like a v2 bundle file"
-msgstr "'%s' sieht nicht wie eine v2 Paketdatei aus"
+msgid "could not write temporary index to %s"
+msgstr "konnte temporären Index nicht nach %s schreiben"
-#: bundle.c:61
+#: apply.c:4242
#, c-format
-msgid "unrecognized header: %s%s (%d)"
-msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
+msgid "unable to remove %s from index"
+msgstr "konnte %s nicht aus dem Index entfernen"
-#: bundle.c:87 builtin/commit.c:778
+#: apply.c:4277
#, c-format
-msgid "could not open '%s'"
-msgstr "Konnte '%s' nicht öffnen"
+msgid "corrupt patch for submodule %s"
+msgstr "fehlerhafter Patch für Submodul %s"
-#: bundle.c:139
-msgid "Repository lacks these prerequisite commits:"
-msgstr "Dem Repository fehlen folgende vorausgesetzte Commits:"
+#: apply.c:4283
+#, c-format
+msgid "unable to stat newly created file '%s'"
+msgstr "konnte neu erstellte Datei '%s' nicht lesen"
-#: bundle.c:163 ref-filter.c:1462 sequencer.c:630 sequencer.c:1085
-#: builtin/blame.c:2763 builtin/commit.c:1057 builtin/log.c:348
-#: builtin/log.c:890 builtin/log.c:1336 builtin/log.c:1659 builtin/log.c:1901
-#: builtin/merge.c:356 builtin/shortlog.c:170
-msgid "revision walk setup failed"
-msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
+#: apply.c:4291
+#, c-format
+msgid "unable to create backing store for newly created file %s"
+msgstr "kann internen Speicher für eben erstellte Datei %s nicht erzeugen"
-#: bundle.c:185
+#: apply.c:4297 apply.c:4441
#, 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:"
+msgid "unable to add cache entry for %s"
+msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
-#: bundle.c:192
-msgid "The bundle records a complete history."
-msgstr "Das Paket speichert eine komplette Historie."
+#: apply.c:4338
+#, c-format
+msgid "failed to write to '%s'"
+msgstr "Fehler beim Schreiben nach '%s'"
-#: bundle.c:194
+#: apply.c:4342
#, 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:"
+msgid "closing file '%s'"
+msgstr "schließe Datei '%s'"
-#: bundle.c:253
-msgid "Could not spawn pack-objects"
-msgstr "Konnte Paketobjekte nicht erstellen"
+#: apply.c:4412
+#, c-format
+msgid "unable to write file '%s' mode %o"
+msgstr "konnte Datei '%s' mit Modus %o nicht schreiben"
-#: bundle.c:264
-msgid "pack-objects died"
-msgstr "Erstellung der Paketobjekte abgebrochen"
+#: apply.c:4510
+#, c-format
+msgid "Applied patch %s cleanly."
+msgstr "Patch %s sauber angewendet"
-#: bundle.c:304
-msgid "rev-list died"
-msgstr "\"rev-list\" abgebrochen"
+#: apply.c:4518
+msgid "internal error"
+msgstr "interner Fehler"
-#: bundle.c:353
+#: apply.c:4521
#, c-format
-msgid "ref '%s' is excluded by the rev-list options"
-msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
+msgid "Applying patch %%s with %d reject..."
+msgid_plural "Applying patch %%s with %d rejects..."
+msgstr[0] "Wende Patch %%s mit %d Zurückweisung an..."
+msgstr[1] "Wende Patch %%s mit %d Zurückweisungen an..."
-#: bundle.c:443 builtin/log.c:165 builtin/log.c:1565 builtin/shortlog.c:273
+#: apply.c:4532
#, c-format
-msgid "unrecognized argument: %s"
-msgstr "nicht erkanntes Argument: %s"
-
-#: bundle.c:451
-msgid "Refusing to create empty bundle."
-msgstr "Erstellung eines leeren Pakets zurückgewiesen."
+msgid "truncating .rej filename to %.*s.rej"
+msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
-#: bundle.c:463
+#: apply.c:4540 builtin/fetch.c:740 builtin/fetch.c:989
#, c-format
-msgid "cannot create '%s'"
-msgstr "kann '%s' nicht erstellen"
+msgid "cannot open %s"
+msgstr "kann '%s' nicht öffnen"
-#: bundle.c:491
-msgid "index-pack died"
-msgstr "Erstellung der Paketindexdatei abgebrochen"
+#: apply.c:4554
+#, c-format
+msgid "Hunk #%d applied cleanly."
+msgstr "Patch-Bereich #%d sauber angewendet."
-#: color.c:290
+#: apply.c:4558
#, c-format
-msgid "invalid color value: %.*s"
-msgstr "Ungültiger Farbwert: %.*s"
+msgid "Rejected hunk #%d."
+msgstr "Patch-Block #%d zurückgewiesen."
-#: commit.c:40 builtin/am.c:433 builtin/am.c:469 builtin/am.c:1505
-#: builtin/am.c:2119
+#: apply.c:4668
#, c-format
-msgid "could not parse %s"
-msgstr "konnte %s nicht parsen"
-
-#: commit.c:42
-#, c-format
-msgid "%s %s is not a commit!"
-msgstr "%s %s ist kein Commit!"
+msgid "Skipped patch '%s'."
+msgstr "Patch '%s' ausgelassen."
-#: compat/obstack.c:406 compat/obstack.c:408
-msgid "memory exhausted"
-msgstr "Speicher verbraucht"
+#: apply.c:4676
+msgid "unrecognized input"
+msgstr "nicht erkannte Eingabe"
-#: config.c:516
-#, c-format
-msgid "bad config line %d in blob %s"
-msgstr "Ungültige Konfigurationszeile %d in Blob %s"
+#: apply.c:4695
+msgid "unable to read index file"
+msgstr "Konnte Index-Datei nicht lesen"
-#: config.c:520
+#: apply.c:4833
#, c-format
-msgid "bad config line %d in file %s"
-msgstr "Ungültige Konfigurationszeile %d in Datei %s"
+msgid "can't open patch '%s': %s"
+msgstr "kann Patch '%s' nicht öffnen: %s"
-#: config.c:524
+#: apply.c:4858
#, c-format
-msgid "bad config line %d in standard input"
-msgstr "Ungültige Konfigurationszeile %d in Standard-Eingabe"
+msgid "squelched %d whitespace error"
+msgid_plural "squelched %d whitespace errors"
+msgstr[0] "unterdrückte %d Whitespace-Fehler"
+msgstr[1] "unterdrückte %d Whitespace-Fehler"
-#: config.c:528
+#: apply.c:4864 apply.c:4879
#, c-format
-msgid "bad config line %d in submodule-blob %s"
-msgstr "Ungültige Konfigurationszeile %d in Submodul-Blob %s"
+msgid "%d line adds whitespace errors."
+msgid_plural "%d lines add whitespace errors."
+msgstr[0] "%d Zeile fügt Whitespace-Fehler hinzu."
+msgstr[1] "%d Zeilen fügen Whitespace-Fehler hinzu."
-#: config.c:532
+#: apply.c:4872
#, c-format
-msgid "bad config line %d in command line %s"
-msgstr "Ungültige Konfigurationszeile %d in Kommandozeile %s"
+msgid "%d line applied after fixing whitespace errors."
+msgid_plural "%d lines applied after fixing whitespace errors."
+msgstr[0] "%d Zeile nach Behebung von Whitespace-Fehlern angewendet."
+msgstr[1] "%d Zeilen nach Behebung von Whitespace-Fehlern angewendet."
-#: config.c:536
-#, c-format
-msgid "bad config line %d in %s"
-msgstr "Ungültige Konfigurationszeile %d in %s"
+#: apply.c:4888 builtin/add.c:463 builtin/mv.c:286 builtin/rm.c:431
+msgid "Unable to write new index file"
+msgstr "Konnte neue Index-Datei nicht schreiben."
-#: config.c:655
-msgid "out of range"
-msgstr "Außerhalb des Bereichs"
+#: apply.c:4919 apply.c:4922 builtin/am.c:2277 builtin/am.c:2280
+#: builtin/clone.c:95 builtin/fetch.c:98 builtin/pull.c:180
+#: builtin/submodule--helper.c:281 builtin/submodule--helper.c:407
+#: builtin/submodule--helper.c:589 builtin/submodule--helper.c:592
+#: builtin/submodule--helper.c:944 builtin/submodule--helper.c:947
+msgid "path"
+msgstr "Pfad"
-#: config.c:655
-msgid "invalid unit"
-msgstr "Ungültige Einheit"
+#: apply.c:4920
+msgid "don't apply changes matching the given path"
+msgstr "keine Änderungen im angegebenen Pfad anwenden"
-#: config.c:661
-#, c-format
-msgid "bad numeric config value '%s' for '%s': %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s': %s"
+#: apply.c:4923
+msgid "apply changes matching the given path"
+msgstr "Änderungen nur im angegebenen Pfad anwenden"
-#: config.c:666
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Blob %s: %s"
+#: apply.c:4925 builtin/am.c:2286
+msgid "num"
+msgstr "Anzahl"
-#: config.c:669
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in file %s: %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Datei %s: %s"
+#: apply.c:4926
+msgid "remove <num> leading slashes from traditional diff paths"
+msgstr ""
+"<Anzahl> vorangestellte Schrägstriche von herkömmlichen Differenzpfaden "
+"entfernen"
-#: config.c:672
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in standard input: %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Standard-Eingabe: %s"
+#: apply.c:4929
+msgid "ignore additions made by the patch"
+msgstr "hinzugefügte Zeilen des Patches ignorieren"
-#: config.c:675
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Submodul-Blob %s: %s"
+#: apply.c:4931
+msgid "instead of applying the patch, output diffstat for the input"
+msgstr ""
+"anstatt der Anwendung des Patches, den \"diffstat\" für die Eingabe "
+"ausgegeben"
-#: config.c:678
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Befehlszeile %s: %s"
+#: apply.c:4935
+msgid "show number of added and deleted lines in decimal notation"
+msgstr ""
+"die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation anzeigen"
-#: config.c:681
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in %s: %s"
+#: apply.c:4937
+msgid "instead of applying the patch, output a summary for the input"
+msgstr ""
+"anstatt der Anwendung des Patches, eine Zusammenfassung für die Eingabe "
+"ausgeben"
-#: config.c:768
-#, c-format
-msgid "failed to expand user dir in: '%s'"
-msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
+#: apply.c:4939
+msgid "instead of applying the patch, see if the patch is applicable"
+msgstr ""
+"anstatt der Anwendung des Patches, zeige ob Patch angewendet werden kann"
-#: config.c:849 config.c:860
-#, c-format
-msgid "bad zlib compression level %d"
-msgstr "ungültiger zlib Komprimierungsgrad %d"
+#: apply.c:4941
+msgid "make sure the patch is applicable to the current index"
+msgstr ""
+"sicherstellen, dass der Patch mit dem aktuellen Index angewendet werden kann"
-#: config.c:978
-#, c-format
-msgid "invalid mode for object creation: %s"
-msgstr "Ungültiger Modus für Objekterstellung: %s"
+#: apply.c:4943
+msgid "apply a patch without touching the working tree"
+msgstr "Patch anwenden, ohne Änderungen im Arbeitsverzeichnis vorzunehmen"
-#: config.c:1312
-msgid "unable to parse command-line config"
+#: apply.c:4945
+msgid "accept a patch that touches outside the working area"
msgstr ""
-"Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
+"Patch anwenden, der Änderungen außerhalb des Arbeitsverzeichnisses vornimmt"
-#: config.c:1362
-msgid "unknown error occurred while reading the configuration files"
+#: apply.c:4947
+msgid "also apply the patch (use with --stat/--summary/--check)"
+msgstr "Patch anwenden (Benutzung mit --stat/--summary/--check)"
+
+#: apply.c:4949
+msgid "attempt three-way merge if a patch does not apply"
+msgstr "versuche 3-Wege-Merge, wenn der Patch nicht angewendet werden konnte"
+
+#: apply.c:4951
+msgid "build a temporary index based on embedded index information"
msgstr ""
-"Es trat ein unbekannter Fehler beim Lesen der Konfigurationsdateien auf."
+"einen temporären Index, basierend auf den integrierten Index-Informationen, "
+"erstellen"
-#: config.c:1716
-#, c-format
-msgid "unable to parse '%s' from command-line config"
+#: apply.c:4954 builtin/checkout-index.c:169 builtin/ls-files.c:505
+msgid "paths are separated with NUL character"
+msgstr "Pfade sind getrennt durch NUL Zeichen"
+
+#: apply.c:4956
+msgid "ensure at least <n> lines of context match"
msgstr ""
-"Konnte Wert '%s' aus der über die Befehlszeile angegebenen Konfiguration\n"
-"nicht parsen."
+"sicher stellen, dass mindestens <n> Zeilen des Kontextes übereinstimmen"
-#: config.c:1718
-#, c-format
-msgid "bad config variable '%s' in file '%s' at line %d"
-msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
+#: apply.c:4957 builtin/am.c:2265
+msgid "action"
+msgstr "Aktion"
-#: config.c:1777
-#, c-format
-msgid "%s has multiple values"
-msgstr "%s hat mehrere Werte"
+#: apply.c:4958
+msgid "detect new or modified lines that have whitespace errors"
+msgstr "neue oder geänderte Zeilen, die Whitespace-Fehler haben, ermitteln"
-#: config.c:2311
-#, c-format
-msgid "could not set '%s' to '%s'"
-msgstr "Konnte '%s' nicht zu '%s' setzen."
+#: apply.c:4961 apply.c:4964
+msgid "ignore changes in whitespace when finding context"
+msgstr "Änderungen im Whitespace bei der Suche des Kontextes ignorieren"
-#: config.c:2313
-#, c-format
-msgid "could not unset '%s'"
-msgstr "Konnte '%s' nicht aufheben."
+#: apply.c:4967
+msgid "apply the patch in reverse"
+msgstr "den Patch in umgekehrter Reihenfolge anwenden"
-#: connected.c:63 builtin/fsck.c:173 builtin/prune.c:140
-msgid "Checking connectivity"
-msgstr "Prüfe Konnektivität"
+#: apply.c:4969
+msgid "don't expect at least one line of context"
+msgstr "keinen Kontext erwarten"
-#: connected.c:74
-msgid "Could not run 'git rev-list'"
-msgstr "Konnte 'git rev-list' nicht ausführen"
+#: apply.c:4971
+msgid "leave the rejected hunks in corresponding *.rej files"
+msgstr ""
+"zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien hinterlassen"
-#: connected.c:94
-msgid "failed write to rev-list"
-msgstr "Fehler beim Schreiben nach rev-list"
+#: apply.c:4973
+msgid "allow overlapping hunks"
+msgstr "sich überlappende Patch-Blöcke erlauben"
-#: connected.c:101
-msgid "failed to close rev-list's stdin"
-msgstr "Fehler beim Schließen von rev-list's Standard-Eingabe"
+#: apply.c:4974 builtin/add.c:267 builtin/check-ignore.c:19
+#: builtin/commit.c:1339 builtin/count-objects.c:94 builtin/fsck.c:593
+#: builtin/log.c:1860 builtin/mv.c:110 builtin/read-tree.c:114
+msgid "be verbose"
+msgstr "erweiterte Ausgaben"
-#: date.c:97
-msgid "in the future"
-msgstr "in der Zukunft"
+#: apply.c:4976
+msgid "tolerate incorrectly detected missing new-line at the end of file"
+msgstr "fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende tolerieren"
-#: date.c:103
-#, c-format
-msgid "%lu second ago"
-msgid_plural "%lu seconds ago"
-msgstr[0] "vor %lu Sekunde"
-msgstr[1] "vor %lu Sekunden"
+#: apply.c:4979
+msgid "do not trust the line counts in the hunk headers"
+msgstr "den Zeilennummern im Kopf des Patch-Blocks nicht vertrauen"
-#: date.c:110
-#, c-format
-msgid "%lu minute ago"
-msgid_plural "%lu minutes ago"
-msgstr[0] "vor %lu Minute"
-msgstr[1] "vor %lu Minuten"
+#: apply.c:4981 builtin/am.c:2274
+msgid "root"
+msgstr "Wurzelverzeichnis"
-#: date.c:117
-#, c-format
-msgid "%lu hour ago"
-msgid_plural "%lu hours ago"
-msgstr[0] "vor %lu Stunde"
-msgstr[1] "vor %lu Stunden"
+#: apply.c:4982
+msgid "prepend <root> to all filenames"
+msgstr "<Wurzelverzeichnis> vor alle Dateinamen stellen"
-#: date.c:124
-#, c-format
-msgid "%lu day ago"
-msgid_plural "%lu days ago"
-msgstr[0] "vor %lu Tag"
-msgstr[1] "vor %lu Tagen"
+#: archive.c:12
+msgid "git archive [<options>] <tree-ish> [<path>...]"
+msgstr "git archive [<Optionen>] <Commit-Referenz> [<Pfad>...]"
-#: date.c:130
-#, c-format
-msgid "%lu week ago"
-msgid_plural "%lu weeks ago"
-msgstr[0] "vor %lu Woche"
-msgstr[1] "vor %lu Wochen"
+#: archive.c:13
+msgid "git archive --list"
+msgstr "git archive --list"
-#: date.c:137
-#, c-format
-msgid "%lu month ago"
-msgid_plural "%lu months ago"
-msgstr[0] "vor %lu Monat"
-msgstr[1] "vor %lu Monaten"
+#: archive.c:14
+msgid ""
+"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
+msgstr ""
+"git archive --remote <Repository> [--exec <Programm>] [<Optionen>] <Commit-"
+"Referenz> [<Pfad>...]"
-#: date.c:148
+#: archive.c:15
+msgid "git archive --remote <repo> [--exec <cmd>] --list"
+msgstr "git archive --remote <Repository> [--exec <Programm>] --list"
+
+#: archive.c:344 builtin/add.c:152 builtin/add.c:442 builtin/rm.c:327
#, c-format
-msgid "%lu year"
-msgid_plural "%lu years"
-msgstr[0] "vor %lu Jahr"
-msgstr[1] "vor %lu Jahren"
+msgid "pathspec '%s' did not match any files"
+msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
-#. TRANSLATORS: "%s" is "<n> years"
-#: date.c:151
-#, c-format
-msgid "%s, %lu month ago"
-msgid_plural "%s, %lu months ago"
-msgstr[0] "%s, und %lu Monat"
-msgstr[1] "%s, und %lu Monaten"
+#: archive.c:429
+msgid "fmt"
+msgstr "Format"
-#: date.c:156 date.c:161
-#, c-format
-msgid "%lu year ago"
-msgid_plural "%lu years ago"
-msgstr[0] "vor %lu Jahr"
-msgstr[1] "vor %lu Jahren"
+#: archive.c:429
+msgid "archive format"
+msgstr "Archivformat"
-#: diffcore-order.c:24
-#, c-format
-msgid "failed to read orderfile '%s'"
-msgstr "Fehler beim Lesen der Reihenfolgedatei '%s'."
+#: archive.c:430 builtin/log.c:1429
+msgid "prefix"
+msgstr "Präfix"
-#: diffcore-rename.c:540
-msgid "Performing inexact rename detection"
-msgstr "Führe Erkennung für ungenaue Umbenennung aus"
+#: archive.c:431
+msgid "prepend prefix to each pathname in the archive"
+msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
-#: diff.c:116
-#, c-format
-msgid " Failed to parse dirstat cut-off percentage '%s'\n"
-msgstr ""
-" Fehler beim Parsen des abgeschnittenen \"dirstat\" Prozentsatzes '%s'\n"
+#: archive.c:432 builtin/blame.c:2603 builtin/blame.c:2604 builtin/config.c:59
+#: builtin/fast-export.c:987 builtin/fast-export.c:989 builtin/grep.c:723
+#: builtin/hash-object.c:101 builtin/ls-files.c:539 builtin/ls-files.c:542
+#: builtin/notes.c:401 builtin/notes.c:564 builtin/read-tree.c:109
+#: parse-options.h:153
+msgid "file"
+msgstr "Datei"
-#: diff.c:121
-#, c-format
-msgid " Unknown dirstat parameter '%s'\n"
-msgstr " Unbekannter \"dirstat\" Parameter '%s'\n"
+#: archive.c:433 builtin/archive.c:89
+msgid "write the archive to this file"
+msgstr "das Archiv in diese Datei schreiben"
-#: diff.c:225
-#, c-format
-msgid "Unknown value for 'diff.submodule' config variable: '%s'"
-msgstr "Unbekannter Wert in Konfigurationsvariable 'diff.dirstat': '%s'"
+#: archive.c:435
+msgid "read .gitattributes in working directory"
+msgstr ".gitattributes aus dem Arbeitsverzeichnis lesen"
-#: diff.c:277
-#, c-format
-msgid ""
-"Found errors in 'diff.dirstat' config variable:\n"
-"%s"
-msgstr ""
-"Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n"
-"%s"
+#: archive.c:436
+msgid "report archived files on stderr"
+msgstr "archivierte Dateien in der Standard-Fehlerausgabe ausgeben"
-#: diff.c:3017
-#, c-format
-msgid "external diff died, stopping at %s"
-msgstr "externes Diff-Programm unerwartet beendet, angehalten bei %s"
+#: archive.c:437
+msgid "store only"
+msgstr "nur speichern"
-#: diff.c:3415
-msgid "--follow requires exactly one pathspec"
-msgstr "--follow erfordert genau eine Pfadspezifikation"
+#: archive.c:438
+msgid "compress faster"
+msgstr "schneller komprimieren"
-#: diff.c:3578
-#, c-format
-msgid ""
-"Failed to parse --dirstat/-X option parameter:\n"
-"%s"
-msgstr ""
-"Fehler beim Parsen des --dirstat/-X Optionsparameters:\n"
-"%s"
+#: archive.c:446
+msgid "compress better"
+msgstr "besser komprimieren"
-#: diff.c:3592
-#, c-format
-msgid "Failed to parse --submodule option parameter: '%s'"
-msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'"
+#: archive.c:449
+msgid "list supported archive formats"
+msgstr "unterstützte Archivformate auflisten"
-#: dir.c:1823
-msgid "failed to get kernel name and information"
-msgstr "Fehler beim Sammeln von Namen und Informationen zum Kernel"
+#: archive.c:451 builtin/archive.c:90 builtin/clone.c:85 builtin/clone.c:88
+#: builtin/submodule--helper.c:601 builtin/submodule--helper.c:953
+msgid "repo"
+msgstr "Repository"
-#: dir.c:1942
-msgid "Untracked cache is disabled on this system or location."
-msgstr ""
-"Cache für unversionierte Dateien ist auf diesem System oder\n"
-"für dieses Verzeichnis deaktiviert."
+#: archive.c:452 builtin/archive.c:91
+msgid "retrieve the archive from remote repository <repo>"
+msgstr "Archiv vom Remote-Repository <Repository> abrufen"
-#: gpg-interface.c:178
-msgid "gpg failed to sign the data"
-msgstr "gpg beim Signieren der Daten fehlgeschlagen"
+#: archive.c:453 builtin/archive.c:92 builtin/notes.c:485
+msgid "command"
+msgstr "Programm"
-#: gpg-interface.c:208
-msgid "could not create temporary file"
-msgstr "konnte temporäre Datei nicht erstellen"
+#: archive.c:454 builtin/archive.c:93
+msgid "path to the remote git-upload-archive command"
+msgstr "Pfad zum externen \"git-upload-archive\"-Programm"
-#: gpg-interface.c:210
-#, c-format
-msgid "failed writing detached signature to '%s'"
-msgstr "Fehler beim Schreiben der losgelösten Signatur nach '%s'"
+#: archive.c:461
+msgid "Unexpected option --remote"
+msgstr "Unerwartete Option --remote"
+
+#: archive.c:463
+msgid "Option --exec can only be used together with --remote"
+msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden."
+
+#: archive.c:465
+msgid "Unexpected option --output"
+msgstr "Unerwartete Option --output"
-#: grep.c:1792
+#: archive.c:487
#, c-format
-msgid "'%s': unable to read %s"
-msgstr "'%s': konnte %s nicht lesen"
+msgid "Unknown archive format '%s'"
+msgstr "Unbekanntes Archivformat '%s'"
-#: grep.c:1809 builtin/clone.c:382 builtin/diff.c:84 builtin/rm.c:155
+#: archive.c:494
#, c-format
-msgid "failed to stat '%s'"
-msgstr "Konnte '%s' nicht lesen"
+msgid "Argument not supported for format '%s': -%d"
+msgstr "Argument für Format '%s' nicht unterstützt: -%d"
+
+#: attr.c:263
+msgid ""
+"Negative patterns are ignored in git attributes\n"
+"Use '\\!' for literal leading exclamation."
+msgstr ""
+"Verneinende Muster werden in Git-Attributen ignoriert.\n"
+"Benutzen Sie '\\!' für führende Ausrufezeichen."
-#: grep.c:1820
+#: bisect.c:441
#, c-format
-msgid "'%s': short read"
-msgstr "'%s': read() zu kurz"
+msgid "Could not open file '%s'"
+msgstr "Konnte Datei '%s' nicht öffnen"
-#: help.c:205
+#: bisect.c:446
#, c-format
-msgid "available git commands in '%s'"
-msgstr "Vorhandene Git-Befehle in '%s'"
+msgid "Badly quoted content in file '%s': %s"
+msgstr "Ungültiger Inhalt bzgl. Anführungsstriche in Datei '%s': %s"
-#: help.c:212
-msgid "git commands available from elsewhere on your $PATH"
-msgstr "Vorhandene Git-Befehle anderswo in Ihrem $PATH"
+#: bisect.c:655
+#, c-format
+msgid "We cannot bisect more!\n"
+msgstr "Keine binäre Suche mehr möglich!\n"
-#: help.c:244
-msgid "These are common Git commands used in various situations:"
-msgstr "Allgemeine Git-Befehle, verwendet in verschiedenen Situationen:"
+#: bisect.c:708
+#, c-format
+msgid "Not a valid commit name %s"
+msgstr "%s ist kein gültiger Commit-Name"
-#: help.c:309
+#: bisect.c:732
#, c-format
msgid ""
-"'%s' appears to be a git command, but we were not\n"
-"able to execute it. Maybe git-%s is broken?"
+"The merge base %s is bad.\n"
+"This means the bug has been fixed between %s and [%s].\n"
msgstr ""
-"'%s' scheint ein git-Befehl zu sein, konnte aber\n"
-"nicht ausgeführt werden. Vielleicht ist git-%s fehlerhaft?"
-
-#: help.c:366
-msgid "Uh oh. Your system reports no Git commands at all."
-msgstr "Uh oh. Keine Git-Befehle auf Ihrem System vorhanden."
+"Die Merge-Basis %s ist fehlerhaft.\n"
+"Das bedeutet, der Fehler wurde zwischen %s und [%s] behoben.\n"
-#: help.c:388
+#: bisect.c:737
#, c-format
msgid ""
-"WARNING: You called a Git command named '%s', which does not exist.\n"
-"Continuing under the assumption that you meant '%s'"
+"The merge base %s is new.\n"
+"The property has changed between %s and [%s].\n"
msgstr ""
-"Warnung: Sie haben den nicht existierenden Git-Befehl '%s' ausgeführt.\n"
-"Setze fort unter der Annahme, dass Sie '%s' gemeint haben."
-
-#: help.c:393
-#, c-format
-msgid "in %0.1f seconds automatically..."
-msgstr "Automatische Ausführung in %0.1f Sekunden ..."
+"Die Merge-Basis %s ist neu.\n"
+"Das bedeutet, die Eigenschaft hat sich zwischen %s und [%s] geändert.\n"
-#: help.c:400
+#: bisect.c:742
#, c-format
-msgid "git: '%s' is not a git command. See 'git --help'."
-msgstr "git: '%s' ist kein Git-Befehl. Siehe 'git --help'."
-
-#: help.c:404 help.c:470
msgid ""
-"\n"
-"Did you mean this?"
-msgid_plural ""
-"\n"
-"Did you mean one of these?"
-msgstr[0] ""
-"\n"
-"Haben Sie das gemeint?"
-msgstr[1] ""
-"\n"
-"Haben Sie eines von diesen gemeint?"
+"The merge base %s is %s.\n"
+"This means the first '%s' commit is between %s and [%s].\n"
+msgstr ""
+"Die Merge-Basis %s ist %s.\n"
+"Das bedeutet, der erste '%s' Commit befindet sich zwischen %s und [%s]\n"
-#: help.c:466
+#: bisect.c:750
#, c-format
-msgid "%s: %s - %s"
-msgstr "%s: %s - %s"
+msgid ""
+"Some %s revs are not ancestor of the %s rev.\n"
+"git bisect cannot work properly in this case.\n"
+"Maybe you mistook %s and %s revs?\n"
+msgstr ""
+"Manche %s Commits sind keine Vorgänger des %s Commits.\n"
+"git bisect kann in diesem Fall nicht richtig arbeiten.\n"
+"Vielleicht verwechselten Sie %s und %s Commits?\n"
-#: lockfile.c:152
+#: bisect.c:763
#, c-format
msgid ""
-"Unable to create '%s.lock': %s.\n"
-"\n"
-"Another git process seems to be running in this repository, e.g.\n"
-"an editor opened by 'git commit'. Please make sure all processes\n"
-"are terminated then try again. If it still fails, a git process\n"
-"may have crashed in this repository earlier:\n"
-"remove the file manually to continue."
+"the merge base between %s and [%s] must be skipped.\n"
+"So we cannot be sure the first %s commit is between %s and %s.\n"
+"We continue anyway."
msgstr ""
-"Konnte '%s.lock' nicht erstellen: %s.\n"
-"\n"
-"Ein anderer Git-Prozess scheint in diesem Repository ausgeführt\n"
-"zu werden, zum Beispiel ein noch offener Editor von 'git commit'.\n"
-"Bitte stellen Sie sicher, dass alle Prozesse beendet wurden und\n"
-"versuchen Sie es erneut. Falls es immer noch fehlschlägt, könnte\n"
-"ein früherer Git-Prozess in diesem Repository abgestürzt sein:\n"
-"Löschen Sie die Datei manuell um fortzufahren."
+"Die Merge-Basis zwischen %s und [%s] muss ausgelassen werden.\n"
+"Es kann daher nicht sichergestellt werden, dass sich der\n"
+"erste %s Commit zwischen %s und %s befindet.\n"
+"Es wird dennoch fortgesetzt."
-#: lockfile.c:160
+#: bisect.c:798
#, c-format
-msgid "Unable to create '%s.lock': %s"
-msgstr "Konnte '%s.lock' nicht erstellen: %s"
+msgid "Bisecting: a merge base must be tested\n"
+msgstr "binäre Suche: eine Merge-Basis muss geprüft werden\n"
-#: merge.c:41
-msgid "failed to read the cache"
-msgstr "Lesen des Zwischenspeichers fehlgeschlagen"
+#: bisect.c:849
+#, c-format
+msgid "a %s revision is needed"
+msgstr "ein %s Commit wird benötigt"
-#: merge.c:94 builtin/am.c:1992 builtin/am.c:2027 builtin/checkout.c:375
-#: builtin/checkout.c:589 builtin/clone.c:732
-msgid "unable to write new index file"
-msgstr "Konnte neue Index-Datei nicht schreiben."
-
-#: merge-recursive.c:209
-msgid "(bad commit)\n"
-msgstr "(ungültiger Commit)\n"
+#: bisect.c:866 builtin/notes.c:174 builtin/tag.c:248
+#, c-format
+msgid "could not create file '%s'"
+msgstr "konnte Datei '%s' nicht erstellen"
-#: merge-recursive.c:231
+#: bisect.c:917
#, c-format
-msgid "addinfo_cache failed for path '%s'"
-msgstr "addinfo_cache für Pfad '%s' fehlgeschlagen"
+msgid "could not read file '%s'"
+msgstr "Konnte Datei '%s' nicht lesen"
-#: merge-recursive.c:301
-msgid "error building trees"
-msgstr "Fehler beim Erstellen der \"Tree\"-Objekte"
+#: bisect.c:947
+msgid "reading bisect refs failed"
+msgstr "Lesen von Referenzen für binäre Suche fehlgeschlagen"
-#: merge-recursive.c:720
+#: bisect.c:967
#, c-format
-msgid "failed to create path '%s'%s"
-msgstr "Fehler beim Erstellen des Pfades '%s'%s"
+msgid "%s was both %s and %s\n"
+msgstr "%s war sowohl %s als auch %s\n"
-#: merge-recursive.c:731
+#: bisect.c:975
#, c-format
-msgid "Removing %s to make room for subdirectory\n"
-msgstr "Entferne %s, um Platz für Unterverzeichnis zu schaffen\n"
+msgid ""
+"No testable commit found.\n"
+"Maybe you started with bad path parameters?\n"
+msgstr ""
+"Kein testbarer Commit gefunden.\n"
+"Vielleicht starteten Sie mit falschen Pfad-Parametern?\n"
-#: merge-recursive.c:745 merge-recursive.c:764
-msgid ": perhaps a D/F conflict?"
-msgstr ": vielleicht ein Verzeichnis/Datei-Konflikt?"
+#: bisect.c:994
+#, c-format
+msgid "(roughly %d step)"
+msgid_plural "(roughly %d steps)"
+msgstr[0] "(ungefähr %d Schritt)"
+msgstr[1] "(ungefähr %d Schritte)"
-#: merge-recursive.c:754
+#. TRANSLATORS: the last %s will be replaced with
+#. "(roughly %d steps)" translation
+#: bisect.c:998
#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "verweigere, da unversionierte Dateien in '%s' verloren gehen würden"
+msgid "Bisecting: %d revision left to test after this %s\n"
+msgid_plural "Bisecting: %d revisions left to test after this %s\n"
+msgstr[0] "binäre Suche: danach noch %d Commit zum Testen übrig %s\n"
+msgstr[1] "binäre Suche: danach noch %d Commits zum Testen übrig %s\n"
-#: merge-recursive.c:796
+#: branch.c:53
#, c-format
-msgid "cannot read object %s '%s'"
-msgstr "kann Objekt %s '%s' nicht lesen"
+msgid ""
+"\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking\n"
+"\"git branch --set-upstream-to=%s%s%s\"."
+msgstr ""
+"\n"
+"Nachdem Sie die Fehlerursache behoben haben, können Sie\n"
+"die Tracking-Informationen mit\n"
+"\"git branch --set-upstream-to=%s%s%s\"\n"
+"erneut setzen."
-#: merge-recursive.c:798
+#: branch.c:67
#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "Blob erwartet für %s '%s'"
+msgid "Not setting branch %s as its own upstream."
+msgstr "Branch %s kann nicht sein eigener Upstream-Branch sein."
-#: merge-recursive.c:822
+#: branch.c:93
#, c-format
-msgid "failed to open '%s': %s"
-msgstr "Fehler beim Öffnen von '%s': %s"
+msgid "Branch %s set up to track remote branch %s from %s by rebasing."
+msgstr ""
+"Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s durch Rebase."
-#: merge-recursive.c:833
+#: branch.c:94
#, c-format
-msgid "failed to symlink '%s': %s"
-msgstr "Fehler beim Erstellen einer symbolischen Verknüpfung für '%s': %s"
+msgid "Branch %s set up to track remote branch %s from %s."
+msgstr "Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s."
-#: merge-recursive.c:838
+#: branch.c:98
#, c-format
-msgid "do not know what to do with %06o %s '%s'"
-msgstr "weiß nicht was mit %06o %s '%s' zu machen ist"
+msgid "Branch %s set up to track local branch %s by rebasing."
+msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s durch Rebase."
-#: merge-recursive.c:978
-msgid "Failed to execute internal merge"
-msgstr "Fehler bei Ausführung des internen Merges"
+#: branch.c:99
+#, c-format
+msgid "Branch %s set up to track local branch %s."
+msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s."
-#: merge-recursive.c:982
+#: branch.c:104
#, c-format
-msgid "Unable to add %s to database"
-msgstr "Konnte %s nicht zur Datenbank hinzufügen"
+msgid "Branch %s set up to track remote ref %s by rebasing."
+msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s durch Rebase."
-#: merge-recursive.c:1081 merge-recursive.c:1095
+#: branch.c:105
#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree."
-msgstr ""
-"KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
-"im Arbeitsbereich gelassen."
+msgid "Branch %s set up to track remote ref %s."
+msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s."
-#: merge-recursive.c:1087 merge-recursive.c:1100
+#: branch.c:109
#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree at %s."
+msgid "Branch %s set up to track local ref %s by rebasing."
msgstr ""
-"KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
-"im Arbeitsbereich bei %s gelassen."
+"Branch %s konfiguriert zum Folgen von lokaler Referenz %s durch Rebase."
-#: merge-recursive.c:1143
-msgid "rename"
-msgstr "umbenennen"
+#: branch.c:110
+#, c-format
+msgid "Branch %s set up to track local ref %s."
+msgstr "Branch %s konfiguriert zum Folgen von lokaler Referenz %s."
-#: merge-recursive.c:1143
-msgid "renamed"
-msgstr "umbenannt"
+#: branch.c:119
+msgid "Unable to write upstream branch configuration"
+msgstr "Konnte Konfiguration zu Upstream-Branch nicht schreiben."
-#: merge-recursive.c:1200
+#: branch.c:156
#, c-format
-msgid "%s is a directory in %s adding as %s instead"
-msgstr "%s ist ein Verzeichnis in %s, füge es stattdessen als %s hinzu"
+msgid "Not tracking: ambiguous information for ref %s"
+msgstr ""
+"Konfiguration zum Folgen von Branch nicht eingerichtet. Referenz %s ist "
+"mehrdeutig."
-#: merge-recursive.c:1225
+#: branch.c:185
#, c-format
-msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
-"\"->\"%s\" in \"%s\"%s"
-msgstr ""
-"KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Branch \"%s\" "
-"und \"%s\"->\"%s\" in Branch \"%s\"%s"
+msgid "'%s' is not a valid branch name."
+msgstr "'%s' ist kein gültiger Branchname."
-#: merge-recursive.c:1230
-msgid " (left unresolved)"
-msgstr " (bleibt unaufgelöst)"
+#: branch.c:190
+#, c-format
+msgid "A branch named '%s' already exists."
+msgstr "Branch '%s' existiert bereits."
-#: merge-recursive.c:1292
+#: branch.c:198
+msgid "Cannot force update the current branch."
+msgstr "Kann Aktualisierung des aktuellen Branches nicht erzwingen."
+
+#: branch.c:218
#, c-format
-msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
+msgid "Cannot setup tracking information; starting point '%s' is not a branch."
msgstr ""
-"KONFLIKT (umbenennen/umbenennen): Benenne um %s->%s in %s. Benenne um %s->%s "
-"in %s"
+"Kann Tracking-Informationen nicht einrichten; Startpunkt '%s' ist kein "
+"Branch."
-#: merge-recursive.c:1325
+#: branch.c:220
#, c-format
-msgid "Renaming %s to %s and %s to %s instead"
-msgstr "Benenne stattdessen %s nach %s und %s nach %s um"
+msgid "the requested upstream branch '%s' does not exist"
+msgstr "der angeforderte Upstream-Branch '%s' existiert nicht"
-#: merge-recursive.c:1531
-#, c-format
-msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
+#: branch.c:222
+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 ""
-"KONFLIKT (umbenennen/hinzufügen): Benenne um %s->%s in %s. %s hinzugefügt in "
-"%s"
+"\n"
+"Falls Sie vorhaben, Ihre Arbeit auf einem bereits existierenden\n"
+"Upstream-Branch aufzubauen, sollten Sie \"git fetch\"\n"
+"ausführen, um diesen abzurufen.\n"
+"\n"
+"Falls Sie vorhaben, einen neuen lokalen Branch zu versenden\n"
+"der seinem externen Gegenstück folgen soll, können Sie\n"
+"\"git push -u\" verwenden, um den Upstream-Branch beim \"push\"\n"
+"zu konfigurieren."
-#: merge-recursive.c:1546
+#: branch.c:265
#, c-format
-msgid "Adding merged %s"
-msgstr "Füge zusammengeführte Datei %s hinzu"
+msgid "Not a valid object name: '%s'."
+msgstr "Ungültiger Objekt-Name: '%s'"
-#: merge-recursive.c:1553 merge-recursive.c:1766
+#: branch.c:285
#, c-format
-msgid "Adding as %s instead"
-msgstr "Füge stattdessen als %s hinzu"
+msgid "Ambiguous object name: '%s'."
+msgstr "mehrdeutiger Objekt-Name: '%s'"
-#: merge-recursive.c:1610
+#: branch.c:290
#, c-format
-msgid "cannot read object %s"
-msgstr "kann Objekt %s nicht lesen"
+msgid "Not a valid branch point: '%s'."
+msgstr "Ungültiger Branchpunkt: '%s'"
-#: merge-recursive.c:1613
+#: branch.c:344
#, c-format
-msgid "object %s is not a blob"
-msgstr "Objekt %s ist kein Blob"
-
-#: merge-recursive.c:1666
-msgid "modify"
-msgstr "ändern"
-
-#: merge-recursive.c:1666
-msgid "modified"
-msgstr "geändert"
+msgid "'%s' is already checked out at '%s'"
+msgstr "'%s' ist bereits in '%s' ausgecheckt"
-#: merge-recursive.c:1676
-msgid "content"
-msgstr "Inhalt"
+#: branch.c:363
+#, c-format
+msgid "HEAD of working tree %s is not updated"
+msgstr "HEAD des Arbeitsverzeichnisses %s ist nicht aktualisiert."
-#: merge-recursive.c:1683
-msgid "add/add"
-msgstr "hinzufügen/hinzufügen"
+#: bundle.c:34
+#, c-format
+msgid "'%s' does not look like a v2 bundle file"
+msgstr "'%s' sieht nicht wie eine v2 Paketdatei aus"
-#: merge-recursive.c:1718
+#: bundle.c:61
#, c-format
-msgid "Skipped %s (merged same as existing)"
-msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)"
+msgid "unrecognized header: %s%s (%d)"
+msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
-#: merge-recursive.c:1732
+#: bundle.c:87 sequencer.c:963 builtin/commit.c:777
#, c-format
-msgid "Auto-merging %s"
-msgstr "automatischer Merge von %s"
+msgid "could not open '%s'"
+msgstr "Konnte '%s' nicht öffnen"
-#: merge-recursive.c:1736 git-submodule.sh:919
-msgid "submodule"
-msgstr "Submodul"
+#: bundle.c:139
+msgid "Repository lacks these prerequisite commits:"
+msgstr "Dem Repository fehlen folgende vorausgesetzte Commits:"
-#: merge-recursive.c:1737
+#: bundle.c:163 ref-filter.c:1462 sequencer.c:830 sequencer.c:1374
+#: builtin/blame.c:2814 builtin/commit.c:1061 builtin/log.c:348
+#: builtin/log.c:890 builtin/log.c:1340 builtin/log.c:1666 builtin/log.c:1909
+#: builtin/merge.c:356 builtin/shortlog.c:170
+msgid "revision walk setup failed"
+msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
+
+#: bundle.c:185
#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
+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:"
-#: merge-recursive.c:1831
+#: bundle.c:192
+msgid "The bundle records a complete history."
+msgstr "Das Paket speichert eine komplette Historie."
+
+#: bundle.c:194
#, c-format
-msgid "Removing %s"
-msgstr "Entferne %s"
+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:"
-#: merge-recursive.c:1857
-msgid "file/directory"
-msgstr "Datei/Verzeichnis"
+#: bundle.c:253
+msgid "Could not spawn pack-objects"
+msgstr "Konnte Paketobjekte nicht erstellen"
-#: merge-recursive.c:1863
-msgid "directory/file"
-msgstr "Verzeichnis/Datei"
+#: bundle.c:264
+msgid "pack-objects died"
+msgstr "Erstellung der Paketobjekte abgebrochen"
-#: merge-recursive.c:1868
+#: bundle.c:304
+msgid "rev-list died"
+msgstr "\"rev-list\" abgebrochen"
+
+#: bundle.c:353
#, c-format
-msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
-msgstr ""
-"KONFLIKT (%s): Es existiert bereits ein Verzeichnis %s in %s. Füge %s als %s "
-"hinzu."
+msgid "ref '%s' is excluded by the rev-list options"
+msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
-#: merge-recursive.c:1877
+#: bundle.c:443 builtin/log.c:165 builtin/log.c:1572 builtin/shortlog.c:273
#, c-format
-msgid "Adding %s"
-msgstr "Füge %s hinzu"
+msgid "unrecognized argument: %s"
+msgstr "nicht erkanntes Argument: %s"
-#: merge-recursive.c:1914
-msgid "Already up-to-date!"
-msgstr "Bereits aktuell!"
+#: bundle.c:451
+msgid "Refusing to create empty bundle."
+msgstr "Erstellung eines leeren Pakets zurückgewiesen."
-#: merge-recursive.c:1923
+#: bundle.c:463
#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen"
+msgid "cannot create '%s'"
+msgstr "kann '%s' nicht erstellen"
-#: merge-recursive.c:2006
-msgid "Merging:"
-msgstr "Merge:"
+#: bundle.c:491
+msgid "index-pack died"
+msgstr "Erstellung der Paketindexdatei abgebrochen"
-#: merge-recursive.c:2019
+#: color.c:290
#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden"
-msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden"
-
-#: merge-recursive.c:2058
-msgid "merge returned no commit"
-msgstr "Merge hat keinen Commit zurückgegeben"
+msgid "invalid color value: %.*s"
+msgstr "Ungültiger Farbwert: %.*s"
-#: merge-recursive.c:2121
+#: commit.c:40 builtin/am.c:421 builtin/am.c:457 builtin/am.c:1493
+#: builtin/am.c:2127
#, c-format
-msgid "Could not parse object '%s'"
-msgstr "Konnte Objekt '%s' nicht parsen."
+msgid "could not parse %s"
+msgstr "konnte %s nicht parsen"
-#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788
-msgid "Unable to write index."
-msgstr "Konnte Index nicht schreiben."
+#: commit.c:42
+#, c-format
+msgid "%s %s is not a commit!"
+msgstr "%s %s ist kein Commit!"
-#: notes-utils.c:41
-msgid "Cannot commit uninitialized/unreferenced notes tree"
+#: commit.c:1514
+msgid ""
+"Warning: commit message did not conform to UTF-8.\n"
+"You may want to amend it after fixing the message, or set the config\n"
+"variable i18n.commitencoding to the encoding your project uses.\n"
msgstr ""
-"Kann uninitialisiertes/unreferenzierte Notiz-Verzeichnis nicht committen."
+"Warnung: Die Commit-Beschreibung ist nicht UTF-8 konform.\n"
+"Sie können das Nachbessern, nachdem Sie die Beschreibung korrigiert haben,\n"
+"oder Sie setzen die Konfigurationsvariable i18n.commitencoding auf das Encoding,\n"
+"welches von ihrem Projekt verwendet wird.\n"
-#: notes-utils.c:100
-#, c-format
-msgid "Bad notes.rewriteMode value: '%s'"
-msgstr "Ungültiger notes.rewriteMode Wert: '%s'"
+#: compat/obstack.c:406 compat/obstack.c:408
+msgid "memory exhausted"
+msgstr "Speicher verbraucht"
-#: notes-utils.c:110
+#: config.c:516
#, c-format
-msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
-msgstr ""
-"Umschreiben der Notizen in %s zurückgewiesen (außerhalb von refs/notes/)"
+msgid "bad config line %d in blob %s"
+msgstr "Ungültige Konfigurationszeile %d in Blob %s"
-#. TRANSLATORS: The first %s is the name of the
-#. environment variable, the second %s is its value
-#: notes-utils.c:137
+#: config.c:520
#, c-format
-msgid "Bad %s value: '%s'"
-msgstr "Ungültiger %s Wert: '%s'"
+msgid "bad config line %d in file %s"
+msgstr "Ungültige Konfigurationszeile %d in Datei %s"
-#: object.c:242
+#: config.c:524
#, c-format
-msgid "unable to parse object: %s"
-msgstr "Konnte Objekt '%s' nicht parsen."
-
-#: parse-options.c:572
-msgid "..."
-msgstr "..."
+msgid "bad config line %d in standard input"
+msgstr "Ungültige Konfigurationszeile %d in Standard-Eingabe"
-#: parse-options.c:590
+#: config.c:528
#, c-format
-msgid "usage: %s"
-msgstr "Verwendung: %s"
+msgid "bad config line %d in submodule-blob %s"
+msgstr "Ungültige Konfigurationszeile %d in Submodul-Blob %s"
-#. TRANSLATORS: the colon here should align with the
-#. one in "usage: %s" translation
-#: parse-options.c:594
+#: config.c:532
#, c-format
-msgid " or: %s"
-msgstr " oder: %s"
+msgid "bad config line %d in command line %s"
+msgstr "Ungültige Konfigurationszeile %d in Kommandozeile %s"
-#: parse-options.c:597
+#: config.c:536
#, c-format
-msgid " %s"
-msgstr " %s"
+msgid "bad config line %d in %s"
+msgstr "Ungültige Konfigurationszeile %d in %s"
-#: parse-options.c:631
-msgid "-NUM"
-msgstr "-NUM"
+#: config.c:655
+msgid "out of range"
+msgstr "Außerhalb des Bereichs"
-#: parse-options-cb.c:108
+#: config.c:655
+msgid "invalid unit"
+msgstr "Ungültige Einheit"
+
+#: config.c:661
#, c-format
-msgid "malformed object name '%s'"
-msgstr "fehlerhafter Objekt-Name '%s'"
+msgid "bad numeric config value '%s' for '%s': %s"
+msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s': %s"
-#: path.c:798
+#: config.c:666
#, c-format
-msgid "Could not make %s writable by group"
-msgstr "Konnte Gruppenschreibrecht für %s nicht setzen."
+msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
+msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Blob %s: %s"
-#: pathspec.c:133
-msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
+#: config.c:669
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in file %s: %s"
msgstr ""
-"Globale Einstellungen zur Pfadspezifikation 'glob' und 'noglob' sind "
-"inkompatibel."
+"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Datei %s: %s"
-#: pathspec.c:143
-msgid ""
-"global 'literal' pathspec setting is incompatible with all other global "
-"pathspec settings"
+#: config.c:672
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in standard input: %s"
msgstr ""
-"Globale Einstellung zur Pfadspezifikation 'literal' ist inkompatibel\n"
-"mit allen anderen Optionen."
-
-#: pathspec.c:177
-msgid "invalid parameter for pathspec magic 'prefix'"
-msgstr "ungültiger Parameter für Pfadspezifikationsangabe 'prefix'"
+"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Standard-Eingabe: "
+"%s"
-#: pathspec.c:183
+#: config.c:675
#, c-format
-msgid "Invalid pathspec magic '%.*s' in '%s'"
-msgstr "ungültige Pfadspezifikationsangabe '%.*s' in '%s'"
+msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
+msgstr ""
+"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Submodul-Blob %s: "
+"%s"
-#: pathspec.c:187
+#: config.c:678
#, c-format
-msgid "Missing ')' at the end of pathspec magic in '%s'"
-msgstr "Fehlendes ')' am Ende der Pfadspezifikationsangabe in '%s'"
+msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
+msgstr ""
+"Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Befehlszeile %s: "
+"%s"
-#: pathspec.c:205
+#: config.c:681
#, c-format
-msgid "Unimplemented pathspec magic '%c' in '%s'"
-msgstr "nicht unterstützte Pfadspezifikationsangabe '%c' in '%s'"
+msgid "bad numeric config value '%s' for '%s' in %s: %s"
+msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in %s: %s"
-#: pathspec.c:230
+#: config.c:768
#, c-format
-msgid "%s: 'literal' and 'glob' are incompatible"
-msgstr "%s: 'literal' und 'glob' sind inkompatibel"
+msgid "failed to expand user dir in: '%s'"
+msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
-#: pathspec.c:241
+#: config.c:852 config.c:863
#, c-format
-msgid "%s: '%s' is outside repository"
-msgstr "%s: '%s' liegt außerhalb des Repositories"
+msgid "bad zlib compression level %d"
+msgstr "ungültiger zlib Komprimierungsgrad %d"
-#: pathspec.c:291
+#: config.c:978
#, c-format
-msgid "Pathspec '%s' is in submodule '%.*s'"
-msgstr "Pfadspezifikation '%s' befindet sich in Submodul '%.*s'"
+msgid "invalid mode for object creation: %s"
+msgstr "Ungültiger Modus für Objekterstellung: %s"
-#: pathspec.c:353
-#, c-format
-msgid "%s: pathspec magic not supported by this command: %s"
+#: config.c:1312
+msgid "unable to parse command-line config"
msgstr ""
-"%s: Pfadspezifikationsangabe wird von diesem Befehl nicht unterstützt: %s"
-
-#: pathspec.c:433
-#, c-format
-msgid "pathspec '%s' is beyond a symbolic link"
-msgstr "Pfadspezifikation '%s' ist hinter einer symbolischen Verknüpfung"
+"Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
-#: pathspec.c:442
-msgid ""
-"There is nothing to exclude from by :(exclude) patterns.\n"
-"Perhaps you forgot to add either ':/' or '.' ?"
+#: config.c:1362
+msgid "unknown error occurred while reading the configuration files"
msgstr ""
-":(exclude) Muster, aber keine anderen Pfadspezifikationen angegeben.\n"
-"Vielleicht haben Sie vergessen entweder ':/' oder '.' hinzuzufügen?"
+"Es trat ein unbekannter Fehler beim Lesen der Konfigurationsdateien auf."
-#: pretty.c:973
-msgid "unable to parse --pretty format"
-msgstr "Konnte --pretty Format nicht parsen."
+#: config.c:1716
+#, c-format
+msgid "unable to parse '%s' from command-line config"
+msgstr ""
+"Konnte Wert '%s' aus der über die Befehlszeile angegebenen Konfiguration\n"
+"nicht parsen."
-#: progress.c:235
-msgid "done"
-msgstr "Fertig"
+#: config.c:1718
+#, c-format
+msgid "bad config variable '%s' in file '%s' at line %d"
+msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
-#: read-cache.c:1281
+#: config.c:1777
+#, c-format
+msgid "%s has multiple values"
+msgstr "%s hat mehrere Werte"
+
+#: config.c:2311
+#, c-format
+msgid "could not set '%s' to '%s'"
+msgstr "Konnte '%s' nicht zu '%s' setzen."
+
+#: config.c:2313
#, c-format
+msgid "could not unset '%s'"
+msgstr "Konnte '%s' nicht aufheben."
+
+#: connect.c:49
+msgid "The remote end hung up upon initial contact"
+msgstr "Die Gegenseite hat sich nach dem erstmaligen Kontakt aufgehangen."
+
+#: connect.c:51
msgid ""
-"index.version set, but the value is invalid.\n"
-"Using version %i"
+"Could not read from remote repository.\n"
+"\n"
+"Please make sure you have the correct access rights\n"
+"and the repository exists."
msgstr ""
-"index.version gesetzt, aber Wert ungültig.\n"
-"Verwende Version %i"
+"Konnte nicht vom Remote-Repository lesen.\n"
+"\n"
+"Bitte stellen Sie sicher, dass die korrekten Zugriffsberechtigungen bestehen\n"
+"und das Repository existiert."
+
+#: connected.c:63 builtin/fsck.c:173 builtin/prune.c:140
+msgid "Checking connectivity"
+msgstr "Prüfe Konnektivität"
+
+#: connected.c:75
+msgid "Could not run 'git rev-list'"
+msgstr "Konnte 'git rev-list' nicht ausführen"
+
+#: connected.c:95
+msgid "failed write to rev-list"
+msgstr "Fehler beim Schreiben nach rev-list"
+
+#: connected.c:102
+msgid "failed to close rev-list's stdin"
+msgstr "Fehler beim Schließen von rev-list's Standard-Eingabe"
-#: read-cache.c:1291
+#: convert.c:201
#, c-format
msgid ""
-"GIT_INDEX_VERSION set, but the value is invalid.\n"
-"Using version %i"
+"CRLF will be replaced by LF in %s.\n"
+"The file will have its original line endings in your working directory."
msgstr ""
-"GIT_INDEX_VERSION gesetzt, aber Wert ungültig.\n"
-"Verwende Version %i"
+"CRLF wird in %s durch LF ersetzt.\n"
+"Die Datei wird ihre ursprünglichen Zeilenenden im Arbeitsverzeichnis behalten."
-#: refs.c:551 builtin/merge.c:840
+#: convert.c:205
#, c-format
-msgid "Could not open '%s' for writing"
-msgstr "Konnte '%s' nicht zum Schreiben öffnen."
+msgid "CRLF would be replaced by LF in %s."
+msgstr "CRLF würde in %s durch LF ersetzt werden."
-#: refs/files-backend.c:2534
+#: convert.c:211
#, c-format
-msgid "could not delete reference %s: %s"
-msgstr "Konnte Referenz %s nicht entfernen: %s"
+msgid ""
+"LF will be replaced by CRLF in %s.\n"
+"The file will have its original line endings in your working directory."
+msgstr ""
+"LF wird in %s durch CRLF ersetzt.\n"
+"Die Datei wird ihre ursprünglichen Zeilenenden im Arbeitsverzeichnis behalten."
-#: refs/files-backend.c:2537
+#: convert.c:215
#, c-format
-msgid "could not delete references: %s"
-msgstr "Konnte Referenzen nicht entfernen: %s"
+msgid "LF would be replaced by CRLF in %s"
+msgstr "LF würde in %s durch CRLF ersetzt werden."
+
+#: date.c:97
+msgid "in the future"
+msgstr "in der Zukunft"
-#: refs/files-backend.c:2546
+#: date.c:103
#, c-format
-msgid "could not remove reference %s"
-msgstr "Konnte Referenz %s nicht löschen"
+msgid "%lu second ago"
+msgid_plural "%lu seconds ago"
+msgstr[0] "vor %lu Sekunde"
+msgstr[1] "vor %lu Sekunden"
-#: ref-filter.c:55
+#: date.c:110
#, c-format
-msgid "expected format: %%(color:<color>)"
-msgstr "Erwartetes Format: %%(color:<Farbe>)"
+msgid "%lu minute ago"
+msgid_plural "%lu minutes ago"
+msgstr[0] "vor %lu Minute"
+msgstr[1] "vor %lu Minuten"
-#: ref-filter.c:57
+#: date.c:117
#, c-format
-msgid "unrecognized color: %%(color:%s)"
-msgstr "nicht erkannte Farbe: %%(color:%s)"
+msgid "%lu hour ago"
+msgid_plural "%lu hours ago"
+msgstr[0] "vor %lu Stunde"
+msgstr[1] "vor %lu Stunden"
-#: ref-filter.c:71
+#: date.c:124
#, c-format
-msgid "unrecognized format: %%(%s)"
-msgstr "nicht erkanntes Format: %%(%s)"
+msgid "%lu day ago"
+msgid_plural "%lu days ago"
+msgstr[0] "vor %lu Tag"
+msgstr[1] "vor %lu Tagen"
-#: ref-filter.c:77
+#: date.c:130
#, c-format
-msgid "%%(body) does not take arguments"
-msgstr "%%(body) akzeptiert keine Argumente"
+msgid "%lu week ago"
+msgid_plural "%lu weeks ago"
+msgstr[0] "vor %lu Woche"
+msgstr[1] "vor %lu Wochen"
-#: ref-filter.c:84
+#: date.c:137
#, c-format
-msgid "%%(subject) does not take arguments"
-msgstr "%%(subject) akzeptiert keine Argumente"
+msgid "%lu month ago"
+msgid_plural "%lu months ago"
+msgstr[0] "vor %lu Monat"
+msgstr[1] "vor %lu Monaten"
-#: ref-filter.c:101
+#: date.c:148
#, c-format
-msgid "positive value expected contents:lines=%s"
-msgstr "Positiver Wert erwartet contents:lines=%s"
+msgid "%lu year"
+msgid_plural "%lu years"
+msgstr[0] "vor %lu Jahr"
+msgstr[1] "vor %lu Jahren"
-#: ref-filter.c:103
+#. TRANSLATORS: "%s" is "<n> years"
+#: date.c:151
#, c-format
-msgid "unrecognized %%(contents) argument: %s"
-msgstr "nicht erkanntes %%(contents) Argument: %s"
+msgid "%s, %lu month ago"
+msgid_plural "%s, %lu months ago"
+msgstr[0] "%s, und %lu Monat"
+msgstr[1] "%s, und %lu Monaten"
-#: ref-filter.c:113
+#: date.c:156 date.c:161
#, c-format
-msgid "unrecognized %%(objectname) argument: %s"
-msgstr "nicht erkanntes %%(objectname) Argument: %s"
+msgid "%lu year ago"
+msgid_plural "%lu years ago"
+msgstr[0] "vor %lu Jahr"
+msgstr[1] "vor %lu Jahren"
-#: ref-filter.c:135
+#: diffcore-order.c:24
#, c-format
-msgid "expected format: %%(align:<width>,<position>)"
-msgstr "Erwartetes Format: %%(align:<Breite>,<Position>)"
+msgid "failed to read orderfile '%s'"
+msgstr "Fehler beim Lesen der Reihenfolgedatei '%s'."
-#: ref-filter.c:147
+#: diffcore-rename.c:536
+msgid "Performing inexact rename detection"
+msgstr "Führe Erkennung für ungenaue Umbenennung aus"
+
+#: diff.c:62
#, c-format
-msgid "unrecognized position:%s"
-msgstr "nicht erkannte Position:%s"
+msgid "option '%s' requires a value"
+msgstr "Option '%s' erfordert einen Wert."
-#: ref-filter.c:151
+#: diff.c:124
#, c-format
-msgid "unrecognized width:%s"
-msgstr "nicht erkannte Breite:%s"
+msgid " Failed to parse dirstat cut-off percentage '%s'\n"
+msgstr ""
+" Fehler beim Parsen des abgeschnittenen \"dirstat\" Prozentsatzes '%s'\n"
-#: ref-filter.c:157
+#: diff.c:129
#, c-format
-msgid "unrecognized %%(align) argument: %s"
-msgstr "nicht erkanntes %%(align) Argument: %s"
+msgid " Unknown dirstat parameter '%s'\n"
+msgstr " Unbekannter \"dirstat\" Parameter '%s'\n"
-#: ref-filter.c:161
+#: diff.c:283
#, c-format
-msgid "positive width expected with the %%(align) atom"
-msgstr "Positive Breitenangabe für %%(align) erwartet"
+msgid "Unknown value for 'diff.submodule' config variable: '%s'"
+msgstr "Unbekannter Wert in Konfigurationsvariable 'diff.dirstat': '%s'"
-#: ref-filter.c:244
+#: diff.c:346
#, c-format
-msgid "malformed field name: %.*s"
-msgstr "Fehlerhafter Feldname: %.*s"
+msgid ""
+"Found errors in 'diff.dirstat' config variable:\n"
+"%s"
+msgstr ""
+"Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n"
+"%s"
-#: ref-filter.c:270
+#: diff.c:3087
#, c-format
-msgid "unknown field name: %.*s"
-msgstr "Unbekannter Feldname: %.*s"
+msgid "external diff died, stopping at %s"
+msgstr "externes Diff-Programm unerwartet beendet, angehalten bei %s"
-#: ref-filter.c:372
+#: diff.c:3412
+msgid "--name-only, --name-status, --check and -s are mutually exclusive"
+msgstr "--name-only, --name-status, --check und -s schließen sich gegenseitig aus"
+
+#: diff.c:3502
+msgid "--follow requires exactly one pathspec"
+msgstr "--follow erfordert genau eine Pfadspezifikation"
+
+#: diff.c:3665
#, c-format
-msgid "format: %%(end) atom used without corresponding atom"
-msgstr "Format: %%(end) Atom ohne zugehöriges Atom verwendet"
+msgid ""
+"Failed to parse --dirstat/-X option parameter:\n"
+"%s"
+msgstr ""
+"Fehler beim Parsen des --dirstat/-X Optionsparameters:\n"
+"%s"
-#: ref-filter.c:424
+#: diff.c:3679
#, c-format
-msgid "malformed format string %s"
-msgstr "Fehlerhafter Formatierungsstring %s"
+msgid "Failed to parse --submodule option parameter: '%s'"
+msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'"
-#: ref-filter.c:878
-msgid ":strip= requires a positive integer argument"
-msgstr ":strip= erfordert eine positive Ganzzahl als Argument"
+#: diff.c:4700
+msgid "inexact rename detection was skipped due to too many files."
+msgstr ""
+"Ungenaue Erkennung für Umbenennungen wurde aufgrund zu vieler Dateien\n"
+"übersprungen."
-#: ref-filter.c:883
+#: diff.c:4703
+msgid "only found copies from modified paths due to too many files."
+msgstr "nur Kopien von geänderten Pfaden, aufgrund zu vieler Dateien, gefunden"
+
+#: diff.c:4706
#, c-format
-msgid "ref '%s' does not have %ld components to :strip"
-msgstr "Referenz '%s' hat keine %ld Komponenten für :strip"
+msgid ""
+"you may want to set your %s variable to at least %d and retry the command."
+msgstr ""
+"Sie könnten die Variable %s auf mindestens %d setzen und den Befehl\n"
+"erneut versuchen."
-#: ref-filter.c:1046
+#: dir.c:1866
+msgid "failed to get kernel name and information"
+msgstr "Fehler beim Sammeln von Namen und Informationen zum Kernel"
+
+#: dir.c:1985
+msgid "Untracked cache is disabled on this system or location."
+msgstr ""
+"Cache für unversionierte Dateien ist auf diesem System oder\n"
+"für dieses Verzeichnis deaktiviert."
+
+#: fetch-pack.c:213
+msgid "git fetch-pack: expected shallow list"
+msgstr "git fetch-pack: erwartete shallow-Liste"
+
+#: fetch-pack.c:225
+msgid "git fetch-pack: expected ACK/NAK, got EOF"
+msgstr "git fetch-pack: ACK/NAK erwartet, EOF bekommen"
+
+#: fetch-pack.c:243
#, c-format
-msgid "unknown %.*s format %s"
-msgstr "Unbekanntes %.*s Format %s"
+msgid "git fetch-pack: expected ACK/NAK, got '%s'"
+msgstr "git fetch-pack: ACK/NAK erwartet, '%s' bekommen"
-#: ref-filter.c:1066 ref-filter.c:1097
+#: fetch-pack.c:295
+msgid "--stateless-rpc requires multi_ack_detailed"
+msgstr "--stateless-rpc benötigt multi_ack_detailed"
+
+#: fetch-pack.c:381
#, c-format
-msgid "missing object %s for %s"
-msgstr "Objekt %s fehlt für %s"
+msgid "invalid shallow line: %s"
+msgstr "Ungültige shallow-Zeile: %s"
-#: ref-filter.c:1069 ref-filter.c:1100
+#: fetch-pack.c:387
#, c-format
-msgid "parse_object_buffer failed on %s for %s"
-msgstr "parse_object_buffer bei %s für %s fehlgeschlagen"
+msgid "invalid unshallow line: %s"
+msgstr "Ungültige unshallow-Zeile: %s"
-#: ref-filter.c:1311
+#: fetch-pack.c:389
#, c-format
-msgid "malformed object at '%s'"
-msgstr "fehlerhaftes Objekt bei '%s'"
+msgid "object not found: %s"
+msgstr "Objekt nicht gefunden: %s"
-#: ref-filter.c:1373
+#: fetch-pack.c:392
#, c-format
-msgid "ignoring ref with broken name %s"
-msgstr "Ignoriere Referenz mit fehlerhaftem Namen %s"
+msgid "error in object: %s"
+msgstr "Fehler in Objekt: %s"
-#: ref-filter.c:1378
+#: fetch-pack.c:394
#, c-format
-msgid "ignoring broken ref %s"
-msgstr "Ignoriere fehlerhafte Referenz %s"
+msgid "no shallow found: %s"
+msgstr "Kein shallow-Objekt gefunden: %s"
-#: ref-filter.c:1651
+#: fetch-pack.c:397
#, c-format
-msgid "format: %%(end) atom missing"
-msgstr "Format: %%(end) Atom fehlt"
+msgid "expected shallow/unshallow, got %s"
+msgstr "shallow/unshallow erwartet, %s bekommen"
-#: ref-filter.c:1705
+#: fetch-pack.c:436
#, c-format
-msgid "malformed object name %s"
-msgstr "Missgebildeter Objektname %s"
+msgid "got %s %d %s"
+msgstr "%s %d %s bekommen"
-#: remote.c:746
+#: fetch-pack.c:450
#, 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."
+msgid "invalid commit %s"
+msgstr "Ungültiger Commit %s"
-#: remote.c:750
+#: fetch-pack.c:483
+msgid "giving up"
+msgstr "Gebe auf"
+
+#: fetch-pack.c:493 progress.c:235
+msgid "done"
+msgstr "Fertig"
+
+#: fetch-pack.c:505
#, c-format
-msgid "%s usually tracks %s, not %s"
-msgstr "%s folgt üblicherweise %s, nicht %s"
+msgid "got %s (%d) %s"
+msgstr "%s (%d) %s bekommen"
-#: remote.c:754
+#: fetch-pack.c:551
#, c-format
-msgid "%s tracks both %s and %s"
-msgstr "%s folgt sowohl %s als auch %s"
+msgid "Marking %s as complete"
+msgstr "Markiere %s als vollständig"
-#: remote.c:762
-msgid "Internal error"
-msgstr "Interner Fehler"
+#: fetch-pack.c:697
+#, c-format
+msgid "already have %s (%s)"
+msgstr "habe %s (%s) bereits"
-#: remote.c:1677 remote.c:1720
-msgid "HEAD does not point to a branch"
-msgstr "HEAD zeigt auf keinen Branch"
+#: fetch-pack.c:735
+msgid "fetch-pack: unable to fork off sideband demultiplexer"
+msgstr "fetch-pack: Fehler beim Starten des sideband demultiplexer"
-#: remote.c:1686
-#, c-format
-msgid "no such branch: '%s'"
-msgstr "Kein solcher Branch: '%s'"
+#: fetch-pack.c:743
+msgid "protocol error: bad pack header"
+msgstr "Protokollfehler: ungültiger Pack-Header"
-#: remote.c:1689
+#: fetch-pack.c:799
#, c-format
-msgid "no upstream configured for branch '%s'"
-msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert."
+msgid "fetch-pack: unable to fork off %s"
+msgstr "fetch-pack: konnte %s nicht starten"
-#: remote.c:1695
+#: fetch-pack.c:815
#, c-format
-msgid "upstream branch '%s' not stored as a remote-tracking branch"
-msgstr "Upstream-Branch '%s' nicht als Remote-Tracking-Branch gespeichert"
+msgid "%s failed"
+msgstr "%s fehlgeschlagen"
-#: remote.c:1710
-#, c-format
-msgid "push destination '%s' on remote '%s' has no local tracking branch"
-msgstr ""
-"Ziel für \"push\" '%s' auf Remote-Repository '%s' hat keinen lokal gefolgten "
-"Branch"
+#: fetch-pack.c:817
+msgid "error in sideband demultiplexer"
+msgstr "Fehler in sideband demultiplexer"
-#: remote.c:1725
-#, c-format
-msgid "branch '%s' has no remote for pushing"
-msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
+#: fetch-pack.c:844
+msgid "Server does not support shallow clients"
+msgstr "Server unterstützt keine shallow-Clients"
-#: remote.c:1736
-#, c-format
-msgid "push refspecs for '%s' do not include '%s'"
-msgstr "Push-Refspecs für '%s' beinhalten nicht '%s'"
+#: fetch-pack.c:848
+msgid "Server supports multi_ack_detailed"
+msgstr "Server unterstützt multi_ack_detailed"
-#: remote.c:1749
-msgid "push has no destination (push.default is 'nothing')"
-msgstr "kein Ziel für \"push\" (push.default ist 'nothing')"
+#: fetch-pack.c:851
+msgid "Server supports no-done"
+msgstr "Server unterstützt no-done"
-#: remote.c:1771
-msgid "cannot resolve 'simple' push to a single destination"
-msgstr "kann einzelnes Ziel für \"push\" im Modus 'simple' nicht auflösen"
+#: fetch-pack.c:857
+msgid "Server supports multi_ack"
+msgstr "Server unterstützt multi_ack"
-#: remote.c:2073
-#, c-format
-msgid "Your branch is based on '%s', but the upstream is gone.\n"
-msgstr ""
-"Ihr Branch basiert auf '%s', aber der Upstream-Branch wurde entfernt.\n"
+#: fetch-pack.c:861
+msgid "Server supports side-band-64k"
+msgstr "Server unterstützt side-band-64k"
-#: remote.c:2077
-msgid " (use \"git branch --unset-upstream\" to fixup)\n"
-msgstr " (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
+#: fetch-pack.c:865
+msgid "Server supports side-band"
+msgstr "Server unterstützt side-band"
-#: remote.c:2080
-#, c-format
-msgid "Your branch is up-to-date with '%s'.\n"
-msgstr "Ihr Branch ist auf dem selben Stand wie '%s'.\n"
+#: fetch-pack.c:869
+msgid "Server supports allow-tip-sha1-in-want"
+msgstr "Server unterstützt allow-tip-sha1-in-want"
-#: remote.c:2084
-#, 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"
+#: fetch-pack.c:873
+msgid "Server supports allow-reachable-sha1-in-want"
+msgstr "Server unterstützt allow-reachable-sha1-in-want"
-#: remote.c:2090
-msgid " (use \"git push\" to publish your local commits)\n"
-msgstr " (benutzen Sie \"git push\", um lokale Commits zu publizieren)\n"
+#: fetch-pack.c:883
+msgid "Server supports ofs-delta"
+msgstr "Server unterstützt ofs-delta"
-#: remote.c:2093
+#: fetch-pack.c:890
#, 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] ""
-"Ihr Branch ist zu '%s' um %d Commit hinterher, und kann vorgespult werden.\n"
-msgstr[1] ""
-"Ihr Branch ist zu '%s' um %d Commits hinterher, und kann vorgespult werden.\n"
+msgid "Server version is %.*s"
+msgstr "Server-Version ist %.*s"
-#: remote.c:2101
-msgid " (use \"git pull\" to update your local branch)\n"
-msgstr ""
-" (benutzen Sie \"git pull\", um Ihren lokalen Branch zu aktualisieren)\n"
+#: fetch-pack.c:896
+msgid "Server does not support --shallow-since"
+msgstr "Server unterstützt kein --shallow-since"
-#: remote.c:2104
-#, 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] ""
-"Ihr Branch und '%s' sind divergiert,\n"
-"und haben jeweils %d und %d unterschiedliche Commits.\n"
-msgstr[1] ""
-"Ihr Branch und '%s' sind divergiert,\n"
-"und haben jeweils %d und %d unterschiedliche Commits.\n"
+#: fetch-pack.c:900
+msgid "Server does not support --shallow-exclude"
+msgstr "Server unterstützt kein --shallow-exclude"
-#: remote.c:2114
-msgid " (use \"git pull\" to merge the remote branch into yours)\n"
-msgstr ""
-" (benutzen Sie \"git pull\", um Ihren Branch mit dem Remote-Branch "
-"zusammenzuführen)\n"
+#: fetch-pack.c:902
+msgid "Server does not support --deepen"
+msgstr "Server unterstützt kein --deepen"
-#: revision.c:2132
-msgid "your current branch appears to be broken"
-msgstr "Ihr aktueller Branch scheint fehlerhaft zu sein."
+#: fetch-pack.c:913
+msgid "no common commits"
+msgstr "keine gemeinsamen Commits"
-#: revision.c:2135
-#, c-format
-msgid "your current branch '%s' does not have any commits yet"
-msgstr "Ihr aktueller Branch '%s' hat noch keine Commits."
+#: fetch-pack.c:925
+msgid "git fetch-pack: fetch failed."
+msgstr "git fetch-pack: Abholen fehlgeschlagen."
-#: revision.c:2329
-msgid "--first-parent is incompatible with --bisect"
-msgstr "Die Optionen --first-parent und --bisect sind inkompatibel."
+#: fetch-pack.c:1087
+msgid "no matching remote head"
+msgstr "kein übereinstimmender Remote-Branch"
-#: run-command.c:92
-msgid "open /dev/null failed"
-msgstr "Öffnen von /dev/null fehlgeschlagen"
+#: gpg-interface.c:185
+msgid "gpg failed to sign the data"
+msgstr "gpg beim Signieren der Daten fehlgeschlagen"
+
+#: gpg-interface.c:215
+msgid "could not create temporary file"
+msgstr "konnte temporäre Datei nicht erstellen"
-#: run-command.c:94
+#: gpg-interface.c:217
#, c-format
-msgid "dup2(%d,%d) failed"
-msgstr "dup2(%d,%d) fehlgeschlagen"
+msgid "failed writing detached signature to '%s'"
+msgstr "Fehler beim Schreiben der losgelösten Signatur nach '%s'"
-#: send-pack.c:298
-msgid "failed to sign the push certificate"
-msgstr "Fehler beim Signieren des \"push\"-Zertifikates"
+#: grep.c:1782
+#, c-format
+msgid "'%s': unable to read %s"
+msgstr "'%s': konnte %s nicht lesen"
-#: send-pack.c:411
-msgid "the receiving end does not support --signed push"
-msgstr ""
-"die Gegenseite unterstützt keinen signierten Versand (\"--signed push\")"
+#: grep.c:1799 builtin/clone.c:381 builtin/diff.c:84 builtin/rm.c:155
+#, c-format
+msgid "failed to stat '%s'"
+msgstr "Konnte '%s' nicht lesen"
-#: send-pack.c:413
-msgid ""
-"not sending a push certificate since the receiving end does not support --"
-"signed push"
-msgstr ""
-"kein Versand des \"push\"-Zertifikates, da die Gegenseite keinen signierten\n"
-"Versand (\"--signed push\") unterstützt"
+#: grep.c:1810
+#, c-format
+msgid "'%s': short read"
+msgstr "'%s': read() zu kurz"
-#: send-pack.c:425
-msgid "the receiving end does not support --atomic push"
-msgstr "die Gegenseite unterstützt keinen atomaren Versand (\"--atomic push\")"
+#: help.c:203
+#, c-format
+msgid "available git commands in '%s'"
+msgstr "Vorhandene Git-Befehle in '%s'"
-#: send-pack.c:430
-msgid "the receiving end does not support push options"
-msgstr "die Gegenseite unterstützt keine Push-Optionen"
+#: help.c:210
+msgid "git commands available from elsewhere on your $PATH"
+msgstr "Vorhandene Git-Befehle anderswo in Ihrem $PATH"
+
+#: help.c:241
+msgid "These are common Git commands used in various situations:"
+msgstr "Allgemeine Git-Befehle, verwendet in verschiedenen Situationen:"
-#: sequencer.c:174
+#: help.c:306
+#, c-format
msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'"
+"'%s' appears to be a git command, but we were not\n"
+"able to execute it. Maybe git-%s is broken?"
msgstr ""
-"nach Auflösung der Konflikte, markieren Sie die korrigierten Pfade\n"
-"mit 'git add <Pfade>' oder 'git rm <Pfade>'"
+"'%s' scheint ein git-Befehl zu sein, konnte aber\n"
+"nicht ausgeführt werden. Vielleicht ist git-%s fehlerhaft?"
+
+#: help.c:361
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr "Uh oh. Keine Git-Befehle auf Ihrem System vorhanden."
-#: sequencer.c:177
+#: help.c:383
+#, c-format
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'"
+"WARNING: You called a Git command named '%s', which does not exist.\n"
+"Continuing under the assumption that you meant '%s'"
msgstr ""
-"nach Auflösung der Konflikte, markieren Sie die korrigierten Pfade\n"
-"mit 'git add <Pfade>' oder 'git rm <Pfade>'und tragen Sie das Ergebnis mit\n"
-"'git commit' ein"
+"Warnung: Sie haben den nicht existierenden Git-Befehl '%s' ausgeführt.\n"
+"Setze fort unter der Annahme, dass Sie '%s' gemeint haben."
-#: sequencer.c:190 sequencer.c:841 sequencer.c:924
+#: help.c:388
#, c-format
-msgid "Could not write to %s"
-msgstr "Konnte nicht nach %s schreiben"
+msgid "in %0.1f seconds automatically..."
+msgstr "Automatische Ausführung in %0.1f Sekunden ..."
-#: sequencer.c:193 sequencer.c:843 sequencer.c:928
+#: help.c:395
#, c-format
-msgid "Error wrapping up %s."
-msgstr "Fehler beim Einpacken von %s."
+msgid "git: '%s' is not a git command. See 'git --help'."
+msgstr "git: '%s' ist kein Git-Befehl. Siehe 'git --help'."
-#: sequencer.c:208
-msgid "Your local changes would be overwritten by cherry-pick."
-msgstr ""
-"Ihre lokalen Änderungen würden durch den Cherry-Pick überschrieben werden."
+#: help.c:399 help.c:465
+msgid ""
+"\n"
+"Did you mean this?"
+msgid_plural ""
+"\n"
+"Did you mean one of these?"
+msgstr[0] ""
+"\n"
+"Haben Sie das gemeint?"
+msgstr[1] ""
+"\n"
+"Haben Sie eines von diesen gemeint?"
-#: sequencer.c:210
-msgid "Your local changes would be overwritten by revert."
-msgstr "Ihre lokalen Änderungen würden durch den Revert überschrieben werden."
+#: help.c:461
+#, c-format
+msgid "%s: %s - %s"
+msgstr "%s: %s - %s"
-#: sequencer.c:213
-msgid "Commit your changes or stash them to proceed."
+#: ident.c:334
+msgid ""
+"\n"
+"*** Please tell me who you are.\n"
+"\n"
+"Run\n"
+"\n"
+" git config --global user.email \"you@example.com\"\n"
+" git config --global user.name \"Your Name\"\n"
+"\n"
+"to set your account's default identity.\n"
+"Omit --global to set the identity only in this repository.\n"
+"\n"
msgstr ""
-"Committen Sie Ihre Änderungen oder benutzen Sie \"stash\", um fortzufahren."
+"\n"
+"*** Bitte geben Sie an, wer Sie sind.\n"
+"\n"
+"Führen Sie\n"
+"\n"
+" git config --global user.email \"you@example.com\"\n"
+" git config --global user.name \"Your Name\"\n"
+"\n"
+"aus, um das als Ihre standardmäßige Identität zu setzen.\n"
+"Lassen Sie die Option \"--global\" weg, um die Identität nur\n"
+"für dieses Repository zu setzen.\n"
-#: sequencer.c:228
+#: lockfile.c:152
#, c-format
-msgid "%s: fast-forward"
-msgstr "%s: Vorspulen"
+msgid ""
+"Unable to create '%s.lock': %s.\n"
+"\n"
+"Another git process seems to be running in this repository, e.g.\n"
+"an editor opened by 'git commit'. Please make sure all processes\n"
+"are terminated then try again. If it still fails, a git process\n"
+"may have crashed in this repository earlier:\n"
+"remove the file manually to continue."
+msgstr ""
+"Konnte '%s.lock' nicht erstellen: %s.\n"
+"\n"
+"Ein anderer Git-Prozess scheint in diesem Repository ausgeführt\n"
+"zu werden, zum Beispiel ein noch offener Editor von 'git commit'.\n"
+"Bitte stellen Sie sicher, dass alle Prozesse beendet wurden und\n"
+"versuchen Sie es erneut. Falls es immer noch fehlschlägt, könnte\n"
+"ein früherer Git-Prozess in diesem Repository abgestürzt sein:\n"
+"Löschen Sie die Datei manuell um fortzufahren."
-#. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:303
+#: lockfile.c:160
#, c-format
-msgid "%s: Unable to write new index file"
-msgstr "%s: Konnte neue Index-Datei nicht schreiben"
+msgid "Unable to create '%s.lock': %s"
+msgstr "Konnte '%s.lock' nicht erstellen: %s"
-#: sequencer.c:321
-msgid "Could not resolve HEAD commit\n"
-msgstr "Konnte Commit von HEAD nicht auflösen\n"
+#: merge.c:41
+msgid "failed to read the cache"
+msgstr "Lesen des Zwischenspeichers fehlgeschlagen"
-#: sequencer.c:341
-msgid "Unable to update cache tree\n"
-msgstr "Konnte Cache-Verzeichnis nicht aktualisieren\n"
+#: merge.c:96 builtin/am.c:2000 builtin/am.c:2035 builtin/checkout.c:374
+#: builtin/checkout.c:588 builtin/clone.c:731
+msgid "unable to write new index file"
+msgstr "Konnte neue Index-Datei nicht schreiben."
-#: sequencer.c:393
-#, c-format
-msgid "Could not parse commit %s\n"
-msgstr "Konnte Commit %s nicht parsen\n"
+#: merge-recursive.c:209
+msgid "(bad commit)\n"
+msgstr "(ungültiger Commit)\n"
-#: sequencer.c:398
+#: merge-recursive.c:231
#, c-format
-msgid "Could not parse parent commit %s\n"
-msgstr "Konnte Eltern-Commit %s nicht parsen\n"
+msgid "addinfo_cache failed for path '%s'"
+msgstr "addinfo_cache für Pfad '%s' fehlgeschlagen"
-#: sequencer.c:463
-msgid "Your index file is unmerged."
-msgstr "Ihre Index-Datei ist nicht zusammengeführt."
+#: merge-recursive.c:301
+msgid "error building trees"
+msgstr "Fehler beim Erstellen der \"Tree\"-Objekte"
-#: sequencer.c:482
+#: merge-recursive.c:720
#, c-format
-msgid "Commit %s is a merge but no -m option was given."
-msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben."
+msgid "failed to create path '%s'%s"
+msgstr "Fehler beim Erstellen des Pfades '%s'%s"
-#: sequencer.c:490
+#: merge-recursive.c:731
#, c-format
-msgid "Commit %s does not have parent %d"
-msgstr "Commit %s hat keinen Elternteil %d"
+msgid "Removing %s to make room for subdirectory\n"
+msgstr "Entferne %s, um Platz für Unterverzeichnis zu schaffen\n"
-#: sequencer.c:494
-#, c-format
-msgid "Mainline was specified but commit %s is not a merge."
-msgstr "Hauptlinie wurde spezifiziert, aber Commit %s ist kein Merge."
+#: merge-recursive.c:745 merge-recursive.c:764
+msgid ": perhaps a D/F conflict?"
+msgstr ": vielleicht ein Verzeichnis/Datei-Konflikt?"
-#. TRANSLATORS: The first %s will be "revert" or
-#. "cherry-pick", the second %s a SHA1
-#: sequencer.c:507
+#: merge-recursive.c:754
#, c-format
-msgid "%s: cannot parse parent commit %s"
-msgstr "%s: kann Eltern-Commit %s nicht parsen"
+msgid "refusing to lose untracked file at '%s'"
+msgstr "verweigere, da unversionierte Dateien in '%s' verloren gehen würden"
-#: sequencer.c:511
+#: merge-recursive.c:796 builtin/cat-file.c:34
#, c-format
-msgid "Cannot get commit message for %s"
-msgstr "Kann keine Commit-Beschreibung für %s bekommen"
-
-#: sequencer.c:597
-#, c-format
-msgid "could not revert %s... %s"
-msgstr "Konnte \"revert\" nicht auf %s... (%s) ausführen"
+msgid "cannot read object %s '%s'"
+msgstr "kann Objekt %s '%s' nicht lesen"
-#: sequencer.c:598
+#: merge-recursive.c:798
#, c-format
-msgid "could not apply %s... %s"
-msgstr "Konnte %s... (%s) nicht anwenden"
-
-#: sequencer.c:633
-msgid "empty commit set passed"
-msgstr "leere Menge von Commits übergeben"
+msgid "blob expected for %s '%s'"
+msgstr "Blob erwartet für %s '%s'"
-#: sequencer.c:641
+#: merge-recursive.c:822
#, c-format
-msgid "git %s: failed to read the index"
-msgstr "git %s: Fehler beim Lesen des Index"
+msgid "failed to open '%s': %s"
+msgstr "Fehler beim Öffnen von '%s': %s"
-#: sequencer.c:645
+#: merge-recursive.c:833
#, c-format
-msgid "git %s: failed to refresh the index"
-msgstr "git %s: Fehler beim Aktualisieren des Index"
+msgid "failed to symlink '%s': %s"
+msgstr "Fehler beim Erstellen einer symbolischen Verknüpfung für '%s': %s"
-#: sequencer.c:705
-msgid "Cannot revert during another revert."
-msgstr "Kann Revert nicht während eines anderen Reverts ausführen."
+#: merge-recursive.c:838
+#, c-format
+msgid "do not know what to do with %06o %s '%s'"
+msgstr "weiß nicht was mit %06o %s '%s' zu machen ist"
-#: sequencer.c:706
-msgid "Cannot revert during a cherry-pick."
-msgstr "Kann Revert nicht während eines Cherry-Picks ausführen."
+#: merge-recursive.c:978
+msgid "Failed to execute internal merge"
+msgstr "Fehler bei Ausführung des internen Merges"
-#: sequencer.c:709
-msgid "Cannot cherry-pick during a revert."
-msgstr "Kann Cherry-Pick nicht während eines Reverts ausführen."
+#: merge-recursive.c:982
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "Konnte %s nicht zur Datenbank hinzufügen"
-#: sequencer.c:710
-msgid "Cannot cherry-pick during another cherry-pick."
-msgstr "Kann Cherry-Pick nicht während eines anderen Cherry-Picks ausführen."
+#: merge-recursive.c:1081 merge-recursive.c:1095
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree."
+msgstr ""
+"KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
+"im Arbeitsbereich gelassen."
-#: sequencer.c:732
+#: merge-recursive.c:1087 merge-recursive.c:1100
#, c-format
-msgid "Could not parse line %d."
-msgstr "Konnte Zeile %d nicht parsen."
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree at %s."
+msgstr ""
+"KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
+"im Arbeitsbereich bei %s gelassen."
-#: sequencer.c:737
-msgid "No commits parsed."
-msgstr "Keine Commits geparst."
+#: merge-recursive.c:1143
+msgid "rename"
+msgstr "umbenennen"
-#: sequencer.c:749
+#: merge-recursive.c:1143
+msgid "renamed"
+msgstr "umbenannt"
+
+#: merge-recursive.c:1200
#, c-format
-msgid "Could not open %s"
-msgstr "Konnte %s nicht öffnen"
+msgid "%s is a directory in %s adding as %s instead"
+msgstr "%s ist ein Verzeichnis in %s, füge es stattdessen als %s hinzu"
-#: sequencer.c:753
+#: merge-recursive.c:1225
#, c-format
-msgid "Could not read %s."
-msgstr "Konnte %s nicht lesen."
+msgid ""
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
+"\"->\"%s\" in \"%s\"%s"
+msgstr ""
+"KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Branch \"%s\" "
+"und \"%s\"->\"%s\" in Branch \"%s\"%s"
+
+#: merge-recursive.c:1230
+msgid " (left unresolved)"
+msgstr " (bleibt unaufgelöst)"
-#: sequencer.c:760
+#: merge-recursive.c:1292
#, c-format
-msgid "Unusable instruction sheet: %s"
-msgstr "Unbenutzbares Instruktionsblatt: %s"
+msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
+msgstr ""
+"KONFLIKT (umbenennen/umbenennen): Benenne um %s->%s in %s. Benenne um %s->%s "
+"in %s"
-#: sequencer.c:790
+#: merge-recursive.c:1325
#, c-format
-msgid "Invalid key: %s"
-msgstr "Ungültiger Schlüssel: %s"
+msgid "Renaming %s to %s and %s to %s instead"
+msgstr "Benenne stattdessen %s nach %s und %s nach %s um"
-#: sequencer.c:793 builtin/pull.c:50 builtin/pull.c:52
+#: merge-recursive.c:1531
#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Ungültiger Wert für %s: %s"
+msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
+msgstr ""
+"KONFLIKT (umbenennen/hinzufügen): Benenne um %s->%s in %s. %s hinzugefügt in "
+"%s"
-#: sequencer.c:803
+#: merge-recursive.c:1546
#, c-format
-msgid "Malformed options sheet: %s"
-msgstr "Fehlerhaftes Optionsblatt: %s"
+msgid "Adding merged %s"
+msgstr "Füge zusammengeführte Datei %s hinzu"
-#: sequencer.c:822
-msgid "a cherry-pick or revert is already in progress"
-msgstr "\"cherry-pick\" oder \"revert\" ist bereits im Gang"
+#: merge-recursive.c:1553 merge-recursive.c:1766
+#, c-format
+msgid "Adding as %s instead"
+msgstr "Füge stattdessen als %s hinzu"
-#: sequencer.c:823
-msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
-msgstr "versuchen Sie \"git cherry-pick (--continue | --quit | --abort)\""
+#: merge-recursive.c:1610
+#, c-format
+msgid "cannot read object %s"
+msgstr "kann Objekt %s nicht lesen"
-#: sequencer.c:827
+#: merge-recursive.c:1613
#, c-format
-msgid "Could not create sequencer directory %s"
-msgstr "Konnte \"sequencer\"-Verzeichnis %s nicht erstellen"
+msgid "object %s is not a blob"
+msgstr "Objekt %s ist kein Blob"
-#: sequencer.c:862 sequencer.c:998
-msgid "no cherry-pick or revert in progress"
-msgstr "kein \"cherry-pick\" oder \"revert\" im Gang"
+#: merge-recursive.c:1666
+msgid "modify"
+msgstr "ändern"
-#: sequencer.c:864
-msgid "cannot resolve HEAD"
-msgstr "kann HEAD nicht auflösen"
+#: merge-recursive.c:1666
+msgid "modified"
+msgstr "geändert"
-#: sequencer.c:866 sequencer.c:900
-msgid "cannot abort from a branch yet to be born"
-msgstr "kann nicht abbrechen: bin auf einem Branch, der noch geboren wird"
+#: merge-recursive.c:1676
+msgid "content"
+msgstr "Inhalt"
-#: sequencer.c:886 builtin/fetch.c:724 builtin/fetch.c:970
-#, c-format
-msgid "cannot open %s"
-msgstr "kann '%s' nicht öffnen"
+#: merge-recursive.c:1683
+msgid "add/add"
+msgstr "hinzufügen/hinzufügen"
-#: sequencer.c:888
+#: merge-recursive.c:1718
#, c-format
-msgid "cannot read %s: %s"
-msgstr "Kann %s nicht lesen: %s"
-
-#: sequencer.c:889
-msgid "unexpected end of file"
-msgstr "Unerwartetes Dateiende"
+msgid "Skipped %s (merged same as existing)"
+msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)"
-#: sequencer.c:895
+#: merge-recursive.c:1732
#, c-format
-msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
-msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt"
+msgid "Auto-merging %s"
+msgstr "automatischer Merge von %s"
-#: sequencer.c:921
-#, c-format
-msgid "Could not format %s."
-msgstr "Konnte %s nicht formatieren."
+#: merge-recursive.c:1736 git-submodule.sh:924
+msgid "submodule"
+msgstr "Submodul"
-#: sequencer.c:1066
+#: merge-recursive.c:1737
#, c-format
-msgid "%s: can't cherry-pick a %s"
-msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden"
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
-#: sequencer.c:1069
+#: merge-recursive.c:1831
#, c-format
-msgid "%s: bad revision"
-msgstr "%s: ungültiger Commit"
+msgid "Removing %s"
+msgstr "Entferne %s"
-#: sequencer.c:1102
-msgid "Can't revert as initial commit"
-msgstr "Kann nicht als allerersten Commit einen Revert ausführen."
+#: merge-recursive.c:1857
+msgid "file/directory"
+msgstr "Datei/Verzeichnis"
-#: setup.c:160
-#, c-format
-msgid ""
-"%s: no such path in the working tree.\n"
-"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
-msgstr ""
-"%s: kein solcher Pfad im Arbeitsverzeichnis.\n"
-"Benutzen Sie 'git <Befehl> -- <Pfad>...' zur Angabe von Pfaden, die lokal\n"
-"nicht existieren."
+#: merge-recursive.c:1863
+msgid "directory/file"
+msgstr "Verzeichnis/Datei"
-#: setup.c:173
+#: merge-recursive.c:1868
#, c-format
-msgid ""
-"ambiguous argument '%s': unknown revision or path not in the working tree.\n"
-"Use '--' to separate paths from revisions, like this:\n"
-"'git <command> [<revision>...] -- [<file>...]'"
+msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
msgstr ""
-"mehrdeutiges Argument '%s': unbekannter Commit oder Pfad existiert nicht\n"
-"im Arbeitsverzeichnis\n"
-"Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
-"'git <Befehl> [<Commit>...] -- [<Datei>...]'"
+"KONFLIKT (%s): Es existiert bereits ein Verzeichnis %s in %s. Füge %s als %s "
+"hinzu."
-#: setup.c:223
+#: merge-recursive.c:1877
#, c-format
-msgid ""
-"ambiguous argument '%s': both revision and filename\n"
-"Use '--' to separate paths from revisions, like this:\n"
-"'git <command> [<revision>...] -- [<file>...]'"
-msgstr ""
-"mehrdeutiges Argument '%s': sowohl Commit als auch Dateiname\n"
-"Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
-"'git <Befehl> [<Commit>...] -- [<Datei>...]'"
+msgid "Adding %s"
+msgstr "Füge %s hinzu"
-#: setup.c:248 builtin/apply.c:3362 builtin/apply.c:3373 builtin/apply.c:3419
-#, c-format
-msgid "failed to read %s"
-msgstr "Fehler beim Lesen von %s"
+#: merge-recursive.c:1914
+msgid "Already up-to-date!"
+msgstr "Bereits aktuell!"
-#: setup.c:468
+#: merge-recursive.c:1923
#, c-format
-msgid "Expected git repo version <= %d, found %d"
-msgstr "Erwartete Git-Repository-Version <= %d, %d gefunden"
+msgid "merging of trees %s and %s failed"
+msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen"
-#: setup.c:476
-msgid "unknown repository extensions found:"
-msgstr "Unbekannte Repository-Erweiterungen gefunden:"
+#: merge-recursive.c:2006
+msgid "Merging:"
+msgstr "Merge:"
-#: setup.c:762
+#: merge-recursive.c:2019
#, c-format
-msgid "Not a git repository (or any of the parent directories): %s"
-msgstr "Kein Git-Repository (oder irgendein Elternverzeichnis): %s"
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden"
+msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden"
-#: setup.c:764 setup.c:915 builtin/index-pack.c:1641
-msgid "Cannot come back to cwd"
-msgstr "Kann nicht zurück zu Arbeitsverzeichnis wechseln"
+#: merge-recursive.c:2058
+msgid "merge returned no commit"
+msgstr "Merge hat keinen Commit zurückgegeben"
-#: setup.c:845
-msgid "Unable to read current working directory"
-msgstr "Konnte aktuelles Arbeitsverzeichnis nicht lesen."
+#: merge-recursive.c:2121
+#, c-format
+msgid "Could not parse object '%s'"
+msgstr "Konnte Objekt '%s' nicht parsen."
-#: setup.c:920
+#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788
+msgid "Unable to write index."
+msgstr "Konnte Index nicht schreiben."
+
+#: notes-merge.c:273
#, c-format
msgid ""
-"Not a git repository (or any parent up to mount point %s)\n"
-"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
+"You have not concluded your previous notes merge (%s exists).\n"
+"Please, use 'git notes merge --commit' or 'git notes merge --abort' to "
+"commit/abort the previous merge before you start a new notes merge."
msgstr ""
-"Kein Git-Repository (oder irgendein Elternverzeichnis bis zum Einhängepunkt %s)\n"
-"Stoppe bei Dateisystemgrenze (GIT_DISCOVERY_ACROSS_FILESYSTEM nicht gesetzt)."
+"Sie haben Ihren vorherigen Merge von Notizen nicht abgeschlossen (%s existiert).\n"
+"Bitte benutzen Sie 'git notes merge --commit' oder 'git notes merge --abort', um\n"
+"den vorherigen Merge zu committen bzw. abzubrechen, bevor Sie einen neuen Merge\n"
+"von Notizen beginnen."
-#: setup.c:927
+#: notes-merge.c:280
#, c-format
-msgid "Cannot change to '%s/..'"
-msgstr "Kann nicht in Verzeichnis '%s/..' wechseln"
+msgid "You have not concluded your notes merge (%s exists)."
+msgstr "Sie haben Ihren Merge von Notizen nicht abgeschlossen (%s existiert)."
-#: setup.c:989
-#, c-format
-msgid ""
-"Problem with core.sharedRepository filemode value (0%.3o).\n"
-"The owner of files must always have read and write permissions."
+#: notes-utils.c:41
+msgid "Cannot commit uninitialized/unreferenced notes tree"
msgstr ""
-"Problem mit Wert für Dateimodus (0%.3o) von core.sharedRepository.\n"
-"Der Besitzer der Dateien muss immer Lese- und Schreibrechte haben."
+"Kann uninitialisiertes/unreferenzierte Notiz-Verzeichnis nicht committen."
-#: sha1_file.c:1046
-msgid "offset before end of packfile (broken .idx?)"
-msgstr "Offset vor Ende der Packdatei (fehlerhafte Indexdatei?)"
-
-#: sha1_file.c:2434
+#: notes-utils.c:100
#, c-format
-msgid "offset before start of pack index for %s (corrupt index?)"
-msgstr "Offset vor Beginn des Pack-Index für %s (beschädigter Index?)"
+msgid "Bad notes.rewriteMode value: '%s'"
+msgstr "Ungültiger notes.rewriteMode Wert: '%s'"
-#: sha1_file.c:2438
+#: notes-utils.c:110
#, c-format
-msgid "offset beyond end of pack index for %s (truncated index?)"
-msgstr "Offset hinter Ende des Pack-Index für %s (abgeschnittener Index?)"
-
-#: sha1_name.c:462
-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 ""
-"Git erzeugt normalerweise keine Referenzen die mit\n"
-"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n"
-"Sie diese angeben. Diese Referenzen könnten aus Versehen\n"
-"erzeugt worden sein. Zum Beispiel,\n"
-"\n"
-" git checkout -b $br $(git rev-parse ...)\n"
-"\n"
-"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n"
-"wurde. Bitte prüfen Sie diese Referenzen und löschen\n"
-"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n"
-"indem Sie \"git config advice.objectNameWarning false\"\n"
-"ausführen."
-
-#: submodule.c:64 submodule.c:98
-msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
+msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
msgstr ""
-"Kann nicht zusammengeführte .gitmodules-Datei nicht ändern, lösen\n"
-"Sie zuerst die Konflikte auf"
-
-#: submodule.c:68 submodule.c:102
-#, c-format
-msgid "Could not find section in .gitmodules where path=%s"
-msgstr "Konnte keine Sektion in .gitmodules mit Pfad \"%s\" finden"
+"Umschreiben der Notizen in %s zurückgewiesen (außerhalb von refs/notes/)"
-#: submodule.c:76
+#. TRANSLATORS: The first %s is the name of the
+#. environment variable, the second %s is its value
+#: notes-utils.c:137
#, c-format
-msgid "Could not update .gitmodules entry %s"
-msgstr "Konnte Eintrag '%s' in .gitmodules nicht aktualisieren"
+msgid "Bad %s value: '%s'"
+msgstr "Ungültiger %s Wert: '%s'"
-#: submodule.c:109
+#: object.c:242
#, c-format
-msgid "Could not remove .gitmodules entry for %s"
-msgstr "Konnte Eintrag '%s' nicht aus .gitmodules entfernen"
-
-#: submodule.c:120
-msgid "staging updated .gitmodules failed"
-msgstr "Konnte aktualisierte .gitmodules-Datei nicht zum Commit vormerken"
+msgid "unable to parse object: %s"
+msgstr "Konnte Objekt '%s' nicht parsen."
-#: submodule.c:177
-msgid "negative values not allowed for submodule.fetchJobs"
-msgstr "Negative Werte für submodule.fetchJobs nicht erlaubt"
+#: parse-options.c:572
+msgid "..."
+msgstr "..."
-#: submodule-config.c:358
+#: parse-options.c:590
#, c-format
-msgid "invalid value for %s"
-msgstr "Ungültiger Wert für %s"
+msgid "usage: %s"
+msgstr "Verwendung: %s"
-#: trailer.c:237
+#. TRANSLATORS: the colon here should align with the
+#. one in "usage: %s" translation
+#: parse-options.c:594
#, c-format
-msgid "running trailer command '%s' failed"
-msgstr "Ausführen des Anhang-Befehls '%s' fehlgeschlagen"
+msgid " or: %s"
+msgstr " oder: %s"
-#: trailer.c:492 trailer.c:496 trailer.c:500 trailer.c:554 trailer.c:558
-#: trailer.c:562
+#: parse-options.c:597
#, c-format
-msgid "unknown value '%s' for key '%s'"
-msgstr "unbekannter Wert '%s' für Schlüssel %s"
+msgid " %s"
+msgstr " %s"
-#: trailer.c:544 trailer.c:549 builtin/remote.c:289
-#, c-format
-msgid "more than one %s"
-msgstr "mehr als ein %s"
+#: parse-options.c:631
+msgid "-NUM"
+msgstr "-NUM"
-#: trailer.c:582
+#: parse-options-cb.c:108
#, c-format
-msgid "empty trailer token in trailer '%.*s'"
-msgstr "leerer Anhang-Token in Anhang '%.*s'"
+msgid "malformed object name '%s'"
+msgstr "fehlerhafter Objekt-Name '%s'"
-#: trailer.c:702
+#: path.c:826
#, c-format
-msgid "could not read input file '%s'"
-msgstr "Konnte Eingabe-Datei '%s' nicht lesen"
+msgid "Could not make %s writable by group"
+msgstr "Konnte Gruppenschreibrecht für %s nicht setzen."
-#: trailer.c:705
-msgid "could not read from stdin"
-msgstr "konnte nicht von der Standard-Eingabe lesen"
+#: pathspec.c:133
+msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
+msgstr ""
+"Globale Einstellungen zur Pfadspezifikation 'glob' und 'noglob' sind "
+"inkompatibel."
-#: trailer.c:857 builtin/am.c:42
-#, c-format
-msgid "could not stat %s"
-msgstr "Konnte '%s' nicht lesen"
+#: 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"
+"mit allen anderen Optionen."
+
+#: pathspec.c:177
+msgid "invalid parameter for pathspec magic 'prefix'"
+msgstr "ungültiger Parameter für Pfadspezifikationsangabe 'prefix'"
-#: trailer.c:859
+#: pathspec.c:183
#, c-format
-msgid "file %s is not a regular file"
-msgstr "Datei '%s' ist keine reguläre Datei"
+msgid "Invalid pathspec magic '%.*s' in '%s'"
+msgstr "ungültige Pfadspezifikationsangabe '%.*s' in '%s'"
-#: trailer.c:861
+#: pathspec.c:187
#, c-format
-msgid "file %s is not writable by user"
-msgstr "Datei %s ist vom Benutzer nicht beschreibbar."
+msgid "Missing ')' at the end of pathspec magic in '%s'"
+msgstr "Fehlendes ')' am Ende der Pfadspezifikationsangabe in '%s'"
-#: trailer.c:873
-msgid "could not open temporary file"
-msgstr "konnte temporäre Datei '%s' nicht öffnen"
+#: pathspec.c:205
+#, c-format
+msgid "Unimplemented pathspec magic '%c' in '%s'"
+msgstr "nicht unterstützte Pfadspezifikationsangabe '%c' in '%s'"
-#: trailer.c:912
+#: pathspec.c:230
#, c-format
-msgid "could not rename temporary file to %s"
-msgstr "konnte temporäre Datei nicht zu %s umbenennen"
+msgid "%s: 'literal' and 'glob' are incompatible"
+msgstr "%s: 'literal' und 'glob' sind inkompatibel"
-#: transport.c:62
+#: pathspec.c:241
#, c-format
-msgid "Would set upstream of '%s' to '%s' of '%s'\n"
-msgstr "Würde Upstream-Branch von '%s' zu '%s' von '%s' setzen\n"
+msgid "%s: '%s' is outside repository"
+msgstr "%s: '%s' liegt außerhalb des Repositories"
-#: transport.c:151
+#: pathspec.c:291
#, c-format
-msgid "transport: invalid depth option '%s'"
-msgstr "transport: ungültige --depth Option '%s'"
+msgid "Pathspec '%s' is in submodule '%.*s'"
+msgstr "Pfadspezifikation '%s' befindet sich in Submodul '%.*s'"
-#: transport.c:771
+#: pathspec.c:353
#, c-format
-msgid ""
-"The following submodule paths contain changes that can\n"
-"not be found on any remote:\n"
+msgid "%s: pathspec magic not supported by this command: %s"
msgstr ""
-"Die folgenden Submodul-Pfade enthalten Änderungen, die in keinem\n"
-"Remote-Repository gefunden wurden:\n"
+"%s: Pfadspezifikationsangabe wird von diesem Befehl nicht unterstützt: %s"
-#: transport.c:775
-#, c-format
+#: pathspec.c:408
msgid ""
-"\n"
-"Please try\n"
-"\n"
-"\tgit push --recurse-submodules=on-demand\n"
-"\n"
-"or cd to the path and use\n"
-"\n"
-"\tgit push\n"
-"\n"
-"to push them to a remote.\n"
-"\n"
+"empty strings as pathspecs will be made invalid in upcoming releases. please "
+"use . instead if you meant to match all paths"
msgstr ""
-"\n"
-"Bitte versuchen Sie\n"
-"\n"
-"\tgit push --recurse-submodules=on-demand\n"
-"\n"
-"oder wechseln Sie in das Verzeichnis und benutzen Sie\n"
-"\n"
-"\tgit push\n"
-"\n"
-"zum Versenden zu einem Remote-Repository.\n"
-"\n"
-
-#: transport.c:783
-msgid "Aborting."
-msgstr "Abbruch."
+"Leere Strings als Pfadspezifikationen werden in kommenden Releases ungültig.\n"
+"Bitte benutzen Sie stattdessen . wenn Sie alle Pfade meinen."
-#: transport-helper.c:1041
+#: pathspec.c:440
#, c-format
-msgid "Could not read ref %s"
-msgstr "Konnte Referenz %s nicht lesen."
+msgid "pathspec '%s' is beyond a symbolic link"
+msgstr "Pfadspezifikation '%s' ist hinter einer symbolischen Verknüpfung"
-#: unpack-trees.c:64
-#, c-format
+#: pathspec.c:449
msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%sPlease commit your changes or stash them before you switch branches."
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
msgstr ""
-"Ihre lokalen Änderungen in den folgenden Dateien würden beim Auschecken\n"
-"überschrieben werden:\n"
-"%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie Branches\n"
-"wechseln."
+":(exclude) Muster, aber keine anderen Pfadspezifikationen angegeben.\n"
+"Vielleicht haben Sie vergessen entweder ':/' oder '.' hinzuzufügen?"
-#: unpack-trees.c:66
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%s"
-msgstr ""
-"Ihre lokalen Änderungen in den folgenden Dateien würden beim Auschecken\n"
-"überschrieben werden:\n"
-"%%s"
+#: pretty.c:971
+msgid "unable to parse --pretty format"
+msgstr "Konnte --pretty Format nicht parsen."
-#: unpack-trees.c:69
+#: read-cache.c:1315
#, c-format
msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%sPlease commit your changes or stash them before you merge."
+"index.version set, but the value is invalid.\n"
+"Using version %i"
msgstr ""
-"Ihre lokalen Änderungen in den folgenden Dateien würden durch den Merge\n"
-"überschrieben werden:\n"
-"%%sBitte committen oder stashen Sie Ihre Änderungen, bevor sie mergen."
+"index.version gesetzt, aber Wert ungültig.\n"
+"Verwende Version %i"
-#: unpack-trees.c:71
+#: read-cache.c:1325
#, c-format
msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%s"
+"GIT_INDEX_VERSION set, but the value is invalid.\n"
+"Using version %i"
msgstr ""
-"Ihre lokalen Änderungen in den folgenden Dateien würden durch den Merge\n"
-"überschrieben werden:\n"
-"%%s"
+"GIT_INDEX_VERSION gesetzt, aber Wert ungültig.\n"
+"Verwende Version %i"
-#: unpack-trees.c:74
+#: refs.c:576 builtin/merge.c:840
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by %s:\n"
-"%%sPlease commit your changes or stash them before you %s."
-msgstr ""
-"Ihre lokalen Änderungen in den folgenden Dateien würden durch %s\n"
-"überschrieben werden:\n"
-"%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie %s ausführen."
+msgid "Could not open '%s' for writing"
+msgstr "Konnte '%s' nicht zum Schreiben öffnen."
-#: unpack-trees.c:76
+#: refs/files-backend.c:2481
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by %s:\n"
-"%%s"
-msgstr ""
-"Ihre lokalen Änderungen würden durch %s überschrieben werden.\n"
-"%%s"
+msgid "could not delete reference %s: %s"
+msgstr "Konnte Referenz %s nicht entfernen: %s"
-#: unpack-trees.c:81
+#: refs/files-backend.c:2484
#, c-format
-msgid ""
-"Updating the following directories would lose untracked files in it:\n"
-"%s"
-msgstr ""
-"Durch die Aktualisierung der folgenden Verzeichnisse würden unversionierte\n"
-"Dateien in diesen Verzeichnissen verloren gehen:\n"
-"%s"
+msgid "could not delete references: %s"
+msgstr "Konnte Referenzen nicht entfernen: %s"
-#: unpack-trees.c:85
+#: refs/files-backend.c:2493
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by checkout:\n"
-"%%sPlease move or remove them before you switch branches."
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den Checkout entfernt werden:\n"
-"%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
+msgid "could not remove reference %s"
+msgstr "Konnte Referenz %s nicht löschen"
-#: unpack-trees.c:87
+#: ref-filter.c:55
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by checkout:\n"
-"%%s"
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
-"den\n"
-"Checkout entfernt werden:\n"
-"%%s"
+msgid "expected format: %%(color:<color>)"
+msgstr "Erwartetes Format: %%(color:<Farbe>)"
-#: unpack-trees.c:90
+#: ref-filter.c:57
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by merge:\n"
-"%%sPlease move or remove them before you merge."
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den Merge entfernt werden:\n"
-"%%sBitte verschieben oder entfernen Sie diese, bevor sie mergen."
+msgid "unrecognized color: %%(color:%s)"
+msgstr "nicht erkannte Farbe: %%(color:%s)"
-#: unpack-trees.c:92
+#: ref-filter.c:71
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by merge:\n"
-"%%s"
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
-"den\n"
-"Merge entfernt werden:\n"
-"%%s"
+msgid "unrecognized format: %%(%s)"
+msgstr "nicht erkanntes Format: %%(%s)"
-#: unpack-trees.c:95
+#: ref-filter.c:77
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%sPlease move or remove them before you %s."
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den %s entfernt werden:\n"
-"%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
+msgid "%%(body) does not take arguments"
+msgstr "%%(body) akzeptiert keine Argumente"
-#: unpack-trees.c:97
+#: ref-filter.c:84
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%s"
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den %s entfernt werden:\n"
-"%%s"
+msgid "%%(subject) does not take arguments"
+msgstr "%%(subject) akzeptiert keine Argumente"
-#: unpack-trees.c:102
+#: ref-filter.c:101
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%sPlease move or remove them before you switch branches."
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den Checkout überschrieben werden:\n"
-"%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
+msgid "positive value expected contents:lines=%s"
+msgstr "Positiver Wert erwartet contents:lines=%s"
-#: unpack-trees.c:104
+#: ref-filter.c:103
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%s"
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
-"den\n"
-"Checkout überschrieben werden:\n"
-"%%s"
+msgid "unrecognized %%(contents) argument: %s"
+msgstr "nicht erkanntes %%(contents) Argument: %s"
-#: unpack-trees.c:107
+#: ref-filter.c:113
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%sPlease move or remove them before you merge."
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den Merge überschrieben werden:\n"
-"%%sBitte verschieben oder entfernen Sie diese, bevor Sie mergen."
+msgid "unrecognized %%(objectname) argument: %s"
+msgstr "nicht erkanntes %%(objectname) Argument: %s"
-#: unpack-trees.c:109
+#: ref-filter.c:135
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%s"
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den Merge überschrieben werden:\n"
-"%%s"
+msgid "expected format: %%(align:<width>,<position>)"
+msgstr "Erwartetes Format: %%(align:<Breite>,<Position>)"
-#: unpack-trees.c:112
+#: ref-filter.c:147
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%sPlease move or remove them before you %s."
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
-"den %s überschrieben werden:\n"
-"%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
+msgid "unrecognized position:%s"
+msgstr "nicht erkannte Position:%s"
-#: unpack-trees.c:114
+#: ref-filter.c:151
#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%s"
-msgstr ""
-"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
-"den\n"
-"%s überschrieben werden:\n"
-"%%s"
+msgid "unrecognized width:%s"
+msgstr "nicht erkannte Breite:%s"
-#: unpack-trees.c:121
+#: ref-filter.c:157
#, c-format
-msgid "Entry '%s' overlaps with '%s'. Cannot bind."
-msgstr "Eintrag '%s' überschneidet sich mit '%s'. Kann nicht verbinden."
+msgid "unrecognized %%(align) argument: %s"
+msgstr "nicht erkanntes %%(align) Argument: %s"
-#: unpack-trees.c:124
+#: ref-filter.c:161
#, c-format
-msgid ""
-"Cannot update sparse checkout: the following entries are not up-to-date:\n"
-"%s"
-msgstr ""
-"Kann partiellen Checkout nicht aktualisieren: die folgenden Einträge sind "
-"nicht\n"
-"aktuell:\n"
-"%s"
+msgid "positive width expected with the %%(align) atom"
+msgstr "Positive Breitenangabe für %%(align) erwartet"
-#: unpack-trees.c:126
+#: ref-filter.c:244
#, c-format
-msgid ""
-"The following Working tree files would be overwritten by sparse checkout "
-"update:\n"
-"%s"
-msgstr ""
-"Die folgenden Dateien im Arbeitsbereich würden durch die Aktualisierung\n"
-"des partiellen Checkouts überschrieben werden:\n"
-"%s"
+msgid "malformed field name: %.*s"
+msgstr "Fehlerhafter Feldname: %.*s"
-#: unpack-trees.c:128
+#: ref-filter.c:270
#, c-format
-msgid ""
-"The following Working tree files would be removed by sparse checkout "
-"update:\n"
-"%s"
-msgstr ""
-"Die folgenden Dateien im Arbeitsbereich würden durch die Aktualisierung\n"
-"des partiellen Checkouts entfernt werden:\n"
-"%s"
+msgid "unknown field name: %.*s"
+msgstr "Unbekannter Feldname: %.*s"
-#: unpack-trees.c:205
+#: ref-filter.c:372
#, c-format
-msgid "Aborting\n"
-msgstr "Abbruch\n"
+msgid "format: %%(end) atom used without corresponding atom"
+msgstr "Format: %%(end) Atom ohne zugehöriges Atom verwendet"
-#: unpack-trees.c:237
-msgid "Checking out files"
-msgstr "Checke Dateien aus"
+#: ref-filter.c:424
+#, c-format
+msgid "malformed format string %s"
+msgstr "Fehlerhafter Formatierungsstring %s"
-#: urlmatch.c:120
-msgid "invalid URL scheme name or missing '://' suffix"
-msgstr "Ungültiges URL-Schema oder Suffix '://' fehlt"
+#: ref-filter.c:878
+msgid ":strip= requires a positive integer argument"
+msgstr ":strip= erfordert eine positive Ganzzahl als Argument"
-#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
+#: ref-filter.c:883
#, c-format
-msgid "invalid %XX escape sequence"
-msgstr "ungültige Escape-Sequenz %XX"
-
-#: urlmatch.c:172
-msgid "missing host and scheme is not 'file:'"
-msgstr "fehlender Host und Schema ist nicht 'file:'"
+msgid "ref '%s' does not have %ld components to :strip"
+msgstr "Referenz '%s' hat keine %ld Komponenten für :strip"
-#: urlmatch.c:189
-msgid "a 'file:' URL may not have a port number"
-msgstr "eine 'file:' URL darf keine Portnummer enthalten"
+#: ref-filter.c:1046
+#, c-format
+msgid "unknown %.*s format %s"
+msgstr "Unbekanntes %.*s Format %s"
-#: urlmatch.c:199
-msgid "invalid characters in host name"
-msgstr "Hostname enthält ungültige Zeichen"
+#: ref-filter.c:1066 ref-filter.c:1097
+#, c-format
+msgid "missing object %s for %s"
+msgstr "Objekt %s fehlt für %s"
-#: urlmatch.c:244 urlmatch.c:255
-msgid "invalid port number"
-msgstr "ungültige Portnummer"
+#: ref-filter.c:1069 ref-filter.c:1100
+#, c-format
+msgid "parse_object_buffer failed on %s for %s"
+msgstr "parse_object_buffer bei %s für %s fehlgeschlagen"
-#: urlmatch.c:322
-msgid "invalid '..' path segment"
-msgstr "ungültiges '..' Pfadsegment"
+#: ref-filter.c:1311
+#, c-format
+msgid "malformed object at '%s'"
+msgstr "fehlerhaftes Objekt bei '%s'"
-#: worktree.c:282
+#: ref-filter.c:1373
#, c-format
-msgid "failed to read '%s'"
-msgstr "Fehler beim Lesen von '%s'"
+msgid "ignoring ref with broken name %s"
+msgstr "Ignoriere Referenz mit fehlerhaftem Namen %s"
-#: wrapper.c:222 wrapper.c:392
+#: ref-filter.c:1378
#, c-format
-msgid "could not open '%s' for reading and writing"
-msgstr "Konnte '%s' nicht zum Lesen und Schreiben öffnen."
+msgid "ignoring broken ref %s"
+msgstr "Ignoriere fehlerhafte Referenz %s"
-#: wrapper.c:224 wrapper.c:394 builtin/am.c:778
+#: ref-filter.c:1633
#, c-format
-msgid "could not open '%s' for writing"
-msgstr "Konnte '%s' nicht zum Schreiben öffnen."
+msgid "format: %%(end) atom missing"
+msgstr "Format: %%(end) Atom fehlt"
-#: wrapper.c:226 wrapper.c:396 builtin/am.c:324 builtin/am.c:771
-#: builtin/am.c:859 builtin/commit.c:1712 builtin/merge.c:1029
-#: builtin/pull.c:407
+#: ref-filter.c:1687
#, c-format
-msgid "could not open '%s' for reading"
-msgstr "Konnte '%s' nicht zum Lesen öffnen."
+msgid "malformed object name %s"
+msgstr "Missgebildeter Objektname %s"
-#: wrapper.c:605 wrapper.c:626
+#: remote.c:746
#, c-format
-msgid "unable to access '%s'"
-msgstr "konnte nicht auf '%s' zugreifen"
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "Kann 'fetch' nicht für sowohl %s als auch %s nach %s ausführen."
-#: wrapper.c:634
-msgid "unable to get current working directory"
-msgstr "Konnte aktuelles Arbeitsverzeichnis nicht bekommen."
+#: remote.c:750
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s folgt üblicherweise %s, nicht %s"
-#: wrapper.c:658
+#: remote.c:754
#, c-format
-msgid "could not write to %s"
-msgstr "Konnte nicht nach '%s' schreiben."
+msgid "%s tracks both %s and %s"
+msgstr "%s folgt sowohl %s als auch %s"
-#: wrapper.c:660
+#: remote.c:762
+msgid "Internal error"
+msgstr "Interner Fehler"
+
+#: remote.c:1677 remote.c:1720
+msgid "HEAD does not point to a branch"
+msgstr "HEAD zeigt auf keinen Branch"
+
+#: remote.c:1686
#, c-format
-msgid "could not close %s"
-msgstr "Konnte '%s' nicht schließen."
+msgid "no such branch: '%s'"
+msgstr "Kein solcher Branch: '%s'"
-#: wt-status.c:150
-msgid "Unmerged paths:"
-msgstr "Nicht zusammengeführte Pfade:"
+#: remote.c:1689
+#, c-format
+msgid "no upstream configured for branch '%s'"
+msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert."
-#: wt-status.c:177 wt-status.c:204
+#: remote.c:1695
#, c-format
-msgid " (use \"git reset %s <file>...\" to unstage)"
-msgstr ""
-" (benutzen Sie \"git reset %s <Datei>...\" zum Entfernen aus der Staging-"
-"Area)"
+msgid "upstream branch '%s' not stored as a remote-tracking branch"
+msgstr "Upstream-Branch '%s' nicht als Remote-Tracking-Branch gespeichert"
-#: wt-status.c:179 wt-status.c:206
-msgid " (use \"git rm --cached <file>...\" to unstage)"
+#: remote.c:1710
+#, c-format
+msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
-" (benutzen Sie \"git rm --cached <Datei>...\" zum Entfernen aus der Staging-"
-"Area)"
+"Ziel für \"push\" '%s' auf Remote-Repository '%s' hat keinen lokal gefolgten "
+"Branch"
-#: 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)"
+#: remote.c:1725
+#, c-format
+msgid "branch '%s' has no remote for pushing"
+msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
-#: 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)"
+#: remote.c:1736
+#, c-format
+msgid "push refspecs for '%s' do not include '%s'"
+msgstr "Push-Refspecs für '%s' beinhalten nicht '%s'"
-#: wt-status.c:187
-msgid " (use \"git rm <file>...\" to mark resolution)"
+#: remote.c:1749
+msgid "push has no destination (push.default is 'nothing')"
+msgstr "kein Ziel für \"push\" (push.default ist 'nothing')"
+
+#: remote.c:1771
+msgid "cannot resolve 'simple' push to a single destination"
+msgstr "kann einzelnes Ziel für \"push\" im Modus 'simple' nicht auflösen"
+
+#: remote.c:2073
+#, c-format
+msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr ""
-" (benutzen Sie \"git add/rm <Datei>...\", um die Auflösung zu markieren)"
+"Ihr Branch basiert auf '%s', aber der Upstream-Branch wurde entfernt.\n"
-#: wt-status.c:198 wt-status.c:882
-msgid "Changes to be committed:"
-msgstr "zum Commit vorgemerkte Änderungen:"
+#: remote.c:2077
+msgid " (use \"git branch --unset-upstream\" to fixup)\n"
+msgstr " (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
-#: wt-status.c:216 wt-status.c:891
-msgid "Changes not staged for commit:"
-msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:"
+#: remote.c:2080
+#, c-format
+msgid "Your branch is up-to-date with '%s'.\n"
+msgstr "Ihr Branch ist auf dem selben Stand wie '%s'.\n"
-#: 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)"
+#: remote.c:2084
+#, 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"
-#: 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)"
+#: remote.c:2090
+msgid " (use \"git push\" to publish your local commits)\n"
+msgstr " (benutzen Sie \"git push\", um lokale Commits zu publizieren)\n"
-#: 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)"
+#: remote.c:2093
+#, 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] ""
+"Ihr Branch ist zu '%s' um %d Commit hinterher, und kann vorgespult werden.\n"
+msgstr[1] ""
+"Ihr Branch ist zu '%s' um %d Commits hinterher, und kann vorgespult werden.\n"
-#: wt-status.c:225
-msgid " (commit or discard the untracked or modified content in submodules)"
+#: remote.c:2101
+msgid " (use \"git pull\" to update your local branch)\n"
msgstr ""
-" (committen oder verwerfen Sie den unversionierten oder geänderten Inhalt "
-"in den Submodulen)"
+" (benutzen Sie \"git pull\", um Ihren lokalen Branch zu aktualisieren)\n"
-#: wt-status.c:237
+#: remote.c:2104
#, c-format
-msgid " (use \"git %s <file>...\" to include in what will be committed)"
+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] ""
+"Ihr Branch und '%s' sind divergiert,\n"
+"und haben jeweils %d und %d unterschiedliche Commits.\n"
+msgstr[1] ""
+"Ihr Branch und '%s' sind divergiert,\n"
+"und haben jeweils %d und %d unterschiedliche Commits.\n"
+
+#: remote.c:2114
+msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr ""
-" (benutzen Sie \"git %s <Datei>...\", um die Änderungen zum Commit "
-"vorzumerken)"
+" (benutzen Sie \"git pull\", um Ihren Branch mit dem Remote-Branch "
+"zusammenzuführen)\n"
-#: wt-status.c:252
-msgid "both deleted:"
-msgstr "beide gelöscht:"
+#: revision.c:2158
+msgid "your current branch appears to be broken"
+msgstr "Ihr aktueller Branch scheint fehlerhaft zu sein."
-#: wt-status.c:254
-msgid "added by us:"
-msgstr "von uns hinzugefügt:"
+#: revision.c:2161
+#, c-format
+msgid "your current branch '%s' does not have any commits yet"
+msgstr "Ihr aktueller Branch '%s' hat noch keine Commits."
-#: wt-status.c:256
-msgid "deleted by them:"
-msgstr "von denen gelöscht:"
+#: revision.c:2355
+msgid "--first-parent is incompatible with --bisect"
+msgstr "Die Optionen --first-parent und --bisect sind inkompatibel."
-#: wt-status.c:258
-msgid "added by them:"
-msgstr "von denen hinzugefügt:"
+#: run-command.c:106
+msgid "open /dev/null failed"
+msgstr "Öffnen von /dev/null fehlgeschlagen"
-#: wt-status.c:260
-msgid "deleted by us:"
-msgstr "von uns gelöscht:"
+#: run-command.c:108
+#, c-format
+msgid "dup2(%d,%d) failed"
+msgstr "dup2(%d,%d) fehlgeschlagen"
-#: wt-status.c:262
-msgid "both added:"
-msgstr "von beiden hinzugefügt:"
+#: send-pack.c:297
+msgid "failed to sign the push certificate"
+msgstr "Fehler beim Signieren des \"push\"-Zertifikates"
-#: wt-status.c:264
-msgid "both modified:"
-msgstr "von beiden geändert:"
+#: send-pack.c:410
+msgid "the receiving end does not support --signed push"
+msgstr ""
+"die Gegenseite unterstützt keinen signierten Versand (\"--signed push\")"
-#: wt-status.c:274
-msgid "new file:"
-msgstr "neue Datei:"
+#: send-pack.c:412
+msgid ""
+"not sending a push certificate since the receiving end does not support --"
+"signed push"
+msgstr ""
+"kein Versand des \"push\"-Zertifikates, da die Gegenseite keinen signierten\n"
+"Versand (\"--signed push\") unterstützt"
-#: wt-status.c:276
-msgid "copied:"
-msgstr "kopiert:"
+#: send-pack.c:424
+msgid "the receiving end does not support --atomic push"
+msgstr "die Gegenseite unterstützt keinen atomaren Versand (\"--atomic push\")"
-#: wt-status.c:278
-msgid "deleted:"
-msgstr "gelöscht:"
+#: send-pack.c:429
+msgid "the receiving end does not support push options"
+msgstr "die Gegenseite unterstützt keine Push-Optionen"
-#: wt-status.c:280
-msgid "modified:"
-msgstr "geändert:"
+#: sequencer.c:171
+msgid "revert"
+msgstr "Revert"
-#: wt-status.c:282
-msgid "renamed:"
-msgstr "umbenannt:"
+#: sequencer.c:171
+msgid "cherry-pick"
+msgstr "Cherry-Pick"
-#: wt-status.c:284
-msgid "typechange:"
-msgstr "Typänderung:"
+#: sequencer.c:228
+msgid ""
+"after resolving the conflicts, mark the corrected paths\n"
+"with 'git add <paths>' or 'git rm <paths>'"
+msgstr ""
+"nach Auflösung der Konflikte, markieren Sie die korrigierten Pfade\n"
+"mit 'git add <Pfade>' oder 'git rm <Pfade>'"
-#: wt-status.c:286
-msgid "unknown:"
-msgstr "unbekannt:"
+#: sequencer.c:231
+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 ""
+"nach Auflösung der Konflikte, markieren Sie die korrigierten Pfade\n"
+"mit 'git add <Pfade>' oder 'git rm <Pfade>'und tragen Sie das Ergebnis mit\n"
+"'git commit' ein"
-#: wt-status.c:288
-msgid "unmerged:"
-msgstr "nicht gemerged:"
+#: sequencer.c:244 sequencer.c:1209
+#, c-format
+msgid "could not lock '%s'"
+msgstr "Konnte '%s' nicht sperren"
-#: wt-status.c:370
-msgid "new commits, "
-msgstr "neue Commits, "
+#: sequencer.c:247 sequencer.c:1125 sequencer.c:1214
+#, c-format
+msgid "could not write to '%s'"
+msgstr "Konnte nicht nach '%s' schreiben."
-#: wt-status.c:372
-msgid "modified content, "
-msgstr "geänderter Inhalt, "
+#: sequencer.c:251
+#, c-format
+msgid "could not write eol to '%s'"
+msgstr "Konnte EOL nicht nach '%s' schreiben."
-#: wt-status.c:374
-msgid "untracked content, "
-msgstr "unversionierter Inhalt, "
+#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
+#, c-format
+msgid "failed to finalize '%s'."
+msgstr "Fehler beim Fertigstellen von '%s'."
-#: wt-status.c:756
-msgid "Submodules changed but not updated:"
-msgstr "Submodule geändert, aber nicht aktualisiert:"
+#: sequencer.c:279 builtin/am.c:259 builtin/commit.c:749 builtin/merge.c:1032
+#, c-format
+msgid "could not read '%s'"
+msgstr "Konnte '%s' nicht lesen"
-#: wt-status.c:758
-msgid "Submodule changes to be committed:"
-msgstr "Änderungen in Submodul zum Committen:"
+#: sequencer.c:305
+#, c-format
+msgid "your local changes would be overwritten by %s."
+msgstr "Ihre lokalen Änderungen würden durch den %s überschrieben werden."
-#: wt-status.c:839
-msgid ""
-"Do not touch the line above.\n"
-"Everything below will be removed."
+#: sequencer.c:309
+msgid "commit your changes or stash them to proceed."
msgstr ""
-"Ändern Sie nicht die obige Zeile.\n"
-"Alles unterhalb von ihr wird entfernt."
+"Committen Sie Ihre Änderungen oder benutzen Sie \"stash\", um fortzufahren."
-#: wt-status.c:950
-msgid "You have unmerged paths."
-msgstr "Sie haben nicht zusammengeführte Pfade."
-
-#: wt-status.c:953
-msgid " (fix conflicts and run \"git commit\")"
-msgstr " (beheben Sie die Konflikte und führen Sie \"git commit\" aus)"
-
-#: wt-status.c:955
-msgid " (use \"git merge --abort\" to abort the merge)"
-msgstr " (benutzen Sie \"git merge --abort\", um den Merge abzubrechen)"
-
-#: wt-status.c:960
-msgid "All conflicts fixed but you are still merging."
-msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge."
+#: sequencer.c:324
+#, c-format
+msgid "%s: fast-forward"
+msgstr "%s: Vorspulen"
-#: wt-status.c:963
-msgid " (use \"git commit\" to conclude merge)"
-msgstr " (benutzen Sie \"git commit\", um den Merge abzuschließen)"
+#. TRANSLATORS: %s will be "revert" or "cherry-pick"
+#: sequencer.c:399
+#, c-format
+msgid "%s: Unable to write new index file"
+msgstr "%s: Konnte neue Index-Datei nicht schreiben"
-#: wt-status.c:973
-msgid "You are in the middle of an am session."
-msgstr "Eine \"am\"-Sitzung ist im Gange."
+#: sequencer.c:418
+msgid "could not resolve HEAD commit\n"
+msgstr "Konnte HEAD-Commit nicht auflösen\n"
-#: wt-status.c:976
-msgid "The current patch is empty."
-msgstr "Der aktuelle Patch ist leer."
+#: sequencer.c:438
+msgid "unable to update cache tree\n"
+msgstr "Konnte Cache-Verzeichnis nicht aktualisieren\n"
-#: wt-status.c:980
-msgid " (fix conflicts and then run \"git am --continue\")"
+#: sequencer.c:483
+#, c-format
+msgid ""
+"you have staged changes in your working tree\n"
+"If these changes are meant to be squashed into the previous commit, run:\n"
+"\n"
+" git commit --amend %s\n"
+"\n"
+"If they are meant to go into a new commit, run:\n"
+"\n"
+" git commit %s\n"
+"\n"
+"In both cases, once you're done, continue with:\n"
+"\n"
+" git rebase --continue\n"
msgstr ""
-" (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)"
+"Es befinden sich zum Commit vorgemerkte Änderungen in Ihrem Arbeitsverzeichnis.\n"
+"Wenn diese Änderungen in den vorherigen Commit aufgenommen werden sollen,\n"
+"führen Sie aus:\n"
+"\n"
+" git commit --amend %s\n"
+"\n"
+"Wenn daraus ein neuer Commit erzeugt werden soll, führen Sie aus:\n"
+"\n"
+" git commit %s\n"
+"\n"
+"Im Anschluss führen Sie zum Fortfahren aus:\n"
+"\n"
+" git rebase --continue\n"
-#: wt-status.c:982
-msgid " (use \"git am --skip\" to skip this patch)"
-msgstr " (benutzen Sie \"git am --skip\", um diesen Patch auszulassen)"
+#: sequencer.c:567
+#, c-format
+msgid "could not parse commit %s\n"
+msgstr "Konnte Commit %s nicht parsen\n"
-#: wt-status.c:984
-msgid " (use \"git am --abort\" to restore the original branch)"
-msgstr ""
-" (benutzen Sie \"git am --abort\", um den ursprünglichen Branch "
-"wiederherzustellen)"
+#: sequencer.c:572
+#, c-format
+msgid "could not parse parent commit %s\n"
+msgstr "Konnte Eltern-Commit %s nicht parsen\n"
-#: wt-status.c:1109
-msgid "No commands done."
-msgstr "Keine Befehle ausgeführt."
+#: sequencer.c:656
+msgid "your index file is unmerged."
+msgstr "Ihre Index-Datei ist nicht zusammengeführt."
-#: wt-status.c:1112
+#: sequencer.c:675
#, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Zuletzt ausgeführter Befehl (%d Befehl ausgeführt):"
-msgstr[1] "Zuletzt ausgeführte Befehle (%d Befehle ausgeführt):"
+msgid "commit %s is a merge but no -m option was given."
+msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben."
-#: wt-status.c:1123
+#: sequencer.c:683
#, c-format
-msgid " (see more in file %s)"
-msgstr " (mehr Informationen in Datei %s)"
-
-#: wt-status.c:1128
-msgid "No commands remaining."
-msgstr "Keine Befehle verbleibend."
+msgid "commit %s does not have parent %d"
+msgstr "Commit %s hat keinen Eltern-Commit %d"
-#: wt-status.c:1131
+#: sequencer.c:687
#, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Nächster auszuführender Befehl (%d Befehle verbleibend):"
-msgstr[1] "Nächste auszuführende Befehle (%d Befehle verbleibend):"
+msgid "mainline was specified but commit %s is not a merge."
+msgstr "Hauptlinie wurde spezifiziert, aber Commit %s ist kein Merge."
-#: wt-status.c:1139
-msgid " (use \"git rebase --edit-todo\" to view and edit)"
-msgstr " (benutzen Sie \"git rebase --edit-todo\" zum Ansehen und Bearbeiten)"
+#. TRANSLATORS: The first %s will be a "todo" command like
+#. "revert" or "pick", the second %s a SHA1.
+#: sequencer.c:700
+#, c-format
+msgid "%s: cannot parse parent commit %s"
+msgstr "%s: kann Eltern-Commit %s nicht parsen"
-#: wt-status.c:1152
+#: sequencer.c:705
#, c-format
-msgid "You are currently rebasing branch '%s' on '%s'."
-msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'."
+msgid "cannot get commit message for %s"
+msgstr "Kann keine Commit-Beschreibung für %s bekommen."
-#: wt-status.c:1157
-msgid "You are currently rebasing."
-msgstr "Sie sind gerade beim Rebase."
+#: sequencer.c:797
+#, c-format
+msgid "could not revert %s... %s"
+msgstr "Konnte \"revert\" nicht auf %s... (%s) ausführen"
-#: wt-status.c:1171
-msgid " (fix conflicts and then run \"git rebase --continue\")"
-msgstr ""
-" (beheben Sie die Konflikte und führen Sie dann \"git rebase --continue\" "
-"aus)"
+#: sequencer.c:798
+#, c-format
+msgid "could not apply %s... %s"
+msgstr "Konnte %s... (%s) nicht anwenden"
-#: wt-status.c:1173
-msgid " (use \"git rebase --skip\" to skip this patch)"
-msgstr " (benutzen Sie \"git rebase --skip\", um diesen Patch auszulassen)"
+#: sequencer.c:833
+msgid "empty commit set passed"
+msgstr "leere Menge von Commits übergeben"
-#: wt-status.c:1175
-msgid " (use \"git rebase --abort\" to check out the original branch)"
-msgstr ""
-" (benutzen Sie \"git rebase --abort\", um den ursprünglichen Branch "
-"auszuchecken)"
+#: sequencer.c:843
+#, c-format
+msgid "git %s: failed to read the index"
+msgstr "git %s: Fehler beim Lesen des Index"
-#: wt-status.c:1181
-msgid " (all conflicts fixed: run \"git rebase --continue\")"
-msgstr " (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)"
+#: sequencer.c:850
+#, c-format
+msgid "git %s: failed to refresh the index"
+msgstr "git %s: Fehler beim Aktualisieren des Index"
-#: wt-status.c:1185
+#: sequencer.c:944
#, c-format
-msgid ""
-"You are currently splitting a commit while rebasing branch '%s' on '%s'."
-msgstr ""
-"Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf "
-"'%s' im Gange ist."
+msgid "invalid line %d: %.*s"
+msgstr "Ungültige Zeile %d: %.*s"
-#: wt-status.c:1190
-msgid "You are currently splitting a commit during a rebase."
-msgstr "Sie teilen gerade einen Commit während eines Rebase auf."
+#: sequencer.c:950
+msgid "no commits parsed."
+msgstr "Keine Commits geparst."
-#: wt-status.c:1193
-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)"
+#: sequencer.c:966
+#, c-format
+msgid "could not read '%s'."
+msgstr "Konnte '%s' nicht lesen."
-#: wt-status.c:1197
+#: sequencer.c:972
#, 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'."
+msgid "unusable instruction sheet: '%s'"
+msgstr "Unbenutzbares Instruktionsblatt: '%s'"
-#: wt-status.c:1202
-msgid "You are currently editing a commit during a rebase."
-msgstr "Sie editieren gerade einen Commit während eines Rebase."
+#: sequencer.c:983
+msgid "cannot cherry-pick during a revert."
+msgstr "Kann Cherry-Pick nicht während eines Reverts ausführen."
-#: wt-status.c:1205
-msgid " (use \"git commit --amend\" to amend the current commit)"
-msgstr ""
-" (benutzen Sie \"git commit --amend\", um den aktuellen Commit "
-"nachzubessern)"
+#: sequencer.c:985
+msgid "cannot revert during a cherry-pick."
+msgstr "Kann Revert nicht während eines Cherry-Picks ausführen."
-#: wt-status.c:1207
-msgid ""
-" (use \"git rebase --continue\" once you are satisfied with your changes)"
-msgstr ""
-" (benutzen Sie \"git rebase --continue\" sobald Ihre Änderungen "
-"abgeschlossen sind)"
+#: sequencer.c:1028
+#, c-format
+msgid "invalid key: %s"
+msgstr "Ungültiger Schlüssel: %s"
-#: wt-status.c:1217
+#: sequencer.c:1031
#, c-format
-msgid "You are currently cherry-picking commit %s."
-msgstr "Sie führen gerade \"cherry-pick\" von Commit %s aus."
+msgid "invalid value for %s: %s"
+msgstr "Ungültiger Wert für %s: %s"
-#: wt-status.c:1222
-msgid " (fix conflicts and run \"git cherry-pick --continue\")"
-msgstr ""
-" (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue"
-"\" aus)"
+#: sequencer.c:1063
+#, c-format
+msgid "malformed options sheet: '%s'"
+msgstr "Fehlerhaftes Optionsblatt: '%s'"
-#: wt-status.c:1225
-msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
-msgstr ""
-" (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)"
+#: sequencer.c:1101
+msgid "a cherry-pick or revert is already in progress"
+msgstr "\"cherry-pick\" oder \"revert\" ist bereits im Gang"
-#: wt-status.c:1227
-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)"
+#: sequencer.c:1102
+msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
+msgstr "versuchen Sie \"git cherry-pick (--continue | --quit | --abort)\""
-#: wt-status.c:1236
+#: sequencer.c:1106
#, c-format
-msgid "You are currently reverting commit %s."
-msgstr "Sie sind gerade an einem Revert von Commit '%s'."
+msgid "could not create sequencer directory '%s'"
+msgstr "Konnte \"sequencer\"-Verzeichnis '%s' nicht erstellen."
-#: wt-status.c:1241
-msgid " (fix conflicts and run \"git revert --continue\")"
-msgstr ""
-" (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" "
-"aus)"
+#: sequencer.c:1120
+msgid "could not lock HEAD"
+msgstr "Konnte HEAD nicht sperren"
-#: wt-status.c:1244
-msgid " (all conflicts fixed: run \"git revert --continue\")"
-msgstr " (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)"
+#: sequencer.c:1151 sequencer.c:1289
+msgid "no cherry-pick or revert in progress"
+msgstr "kein \"cherry-pick\" oder \"revert\" im Gang"
-#: wt-status.c:1246
-msgid " (use \"git revert --abort\" to cancel the revert operation)"
-msgstr ""
-" (benutzen Sie \"git revert --abort\", um die Revert-Operation abzubrechen)"
+#: sequencer.c:1153
+msgid "cannot resolve HEAD"
+msgstr "kann HEAD nicht auflösen"
-#: wt-status.c:1257
+#: sequencer.c:1155 sequencer.c:1189
+msgid "cannot abort from a branch yet to be born"
+msgstr "kann nicht abbrechen: bin auf einem Branch, der noch geboren wird"
+
+#: sequencer.c:1175 builtin/grep.c:578
#, c-format
-msgid "You are currently bisecting, started from branch '%s'."
-msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'."
+msgid "cannot open '%s'"
+msgstr "kann '%s' nicht öffnen"
-#: wt-status.c:1261
-msgid "You are currently bisecting."
-msgstr "Sie sind gerade bei einer binären Suche."
+#: sequencer.c:1177
+#, c-format
+msgid "cannot read '%s': %s"
+msgstr "Kann '%s' nicht lesen: %s"
-#: wt-status.c:1264
-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)"
+#: sequencer.c:1178
+msgid "unexpected end of file"
+msgstr "Unerwartetes Dateiende"
-#: wt-status.c:1464
-msgid "On branch "
-msgstr "Auf Branch "
+#: sequencer.c:1184
+#, c-format
+msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
+msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt"
-#: wt-status.c:1470
-msgid "interactive rebase in progress; onto "
-msgstr "interaktives Rebase im Gange; auf "
+#: sequencer.c:1354
+#, c-format
+msgid "%s: can't cherry-pick a %s"
+msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden"
-#: wt-status.c:1472
-msgid "rebase in progress; onto "
-msgstr "Rebase im Gange; auf "
+#: sequencer.c:1358
+#, c-format
+msgid "%s: bad revision"
+msgstr "%s: ungültiger Commit"
-#: wt-status.c:1477
-msgid "HEAD detached at "
-msgstr "HEAD losgelöst bei "
+#: sequencer.c:1391
+msgid "can't revert as initial commit"
+msgstr "Kann nicht als allerersten Commit einen Revert ausführen."
-#: wt-status.c:1479
-msgid "HEAD detached from "
-msgstr "HEAD losgelöst von "
+#: setup.c:160
+#, c-format
+msgid ""
+"%s: no such path in the working tree.\n"
+"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
+msgstr ""
+"%s: kein solcher Pfad im Arbeitsverzeichnis.\n"
+"Benutzen Sie 'git <Befehl> -- <Pfad>...' zur Angabe von Pfaden, die lokal\n"
+"nicht existieren."
-#: wt-status.c:1482
-msgid "Not currently on any branch."
-msgstr "Im Moment auf keinem Branch."
+#: setup.c:173
+#, c-format
+msgid ""
+"ambiguous argument '%s': unknown revision or path not in the working tree.\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
+msgstr ""
+"mehrdeutiges Argument '%s': unbekannter Commit oder Pfad existiert nicht\n"
+"im Arbeitsverzeichnis\n"
+"Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
+"'git <Befehl> [<Commit>...] -- [<Datei>...]'"
-#: wt-status.c:1500
-msgid "Initial commit"
-msgstr "Initialer Commit"
+#: setup.c:223
+#, c-format
+msgid ""
+"ambiguous argument '%s': both revision and filename\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
+msgstr ""
+"mehrdeutiges Argument '%s': sowohl Commit als auch Dateiname\n"
+"Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
+"'git <Befehl> [<Commit>...] -- [<Datei>...]'"
-#: wt-status.c:1514
-msgid "Untracked files"
-msgstr "Unversionierte Dateien"
+#: setup.c:468
+#, c-format
+msgid "Expected git repo version <= %d, found %d"
+msgstr "Erwartete Git-Repository-Version <= %d, %d gefunden"
-#: wt-status.c:1516
-msgid "Ignored files"
-msgstr "Ignorierte Dateien"
+#: setup.c:476
+msgid "unknown repository extensions found:"
+msgstr "Unbekannte Repository-Erweiterungen gefunden:"
+
+#: setup.c:762
+#, c-format
+msgid "Not a git repository (or any of the parent directories): %s"
+msgstr "Kein Git-Repository (oder irgendein Elternverzeichnis): %s"
+
+#: setup.c:764 setup.c:915 builtin/index-pack.c:1641
+msgid "Cannot come back to cwd"
+msgstr "Kann nicht zurück zu Arbeitsverzeichnis wechseln"
+
+#: setup.c:845
+msgid "Unable to read current working directory"
+msgstr "Konnte aktuelles Arbeitsverzeichnis nicht lesen."
+
+#: setup.c:920
+#, c-format
+msgid ""
+"Not a git repository (or any parent up to mount point %s)\n"
+"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
+msgstr ""
+"Kein Git-Repository (oder irgendein Elternverzeichnis bis zum Einhängepunkt "
+"%s)\n"
+"Stoppe bei Dateisystemgrenze (GIT_DISCOVERY_ACROSS_FILESYSTEM nicht gesetzt)."
+
+#: setup.c:927
+#, c-format
+msgid "Cannot change to '%s/..'"
+msgstr "Kann nicht in Verzeichnis '%s/..' wechseln"
+
+#: setup.c:989
+#, c-format
+msgid ""
+"Problem with core.sharedRepository filemode value (0%.3o).\n"
+"The owner of files must always have read and write permissions."
+msgstr ""
+"Problem mit Wert für Dateimodus (0%.3o) von core.sharedRepository.\n"
+"Der Besitzer der Dateien muss immer Lese- und Schreibrechte haben."
+
+#: sha1_file.c:473
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "Pfad '%s' existiert nicht"
+
+#: sha1_file.c:499
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
+"Arbeitsverzeichnis unterstützt."
+
+#: sha1_file.c:505
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
+
+#: sha1_file.c:511
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr ""
+"Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
+
+#: sha1_file.c:519
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr ""
+"Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
+"eingehängt."
+
+#: sha1_file.c:1159
+msgid "offset before end of packfile (broken .idx?)"
+msgstr "Offset vor Ende der Packdatei (fehlerhafte Indexdatei?)"
+
+#: sha1_file.c:2592
+#, c-format
+msgid "offset before start of pack index for %s (corrupt index?)"
+msgstr "Offset vor Beginn des Pack-Index für %s (beschädigter Index?)"
+
+#: sha1_file.c:2596
+#, c-format
+msgid "offset beyond end of pack index for %s (truncated index?)"
+msgstr "Offset hinter Ende des Pack-Index für %s (abgeschnittener Index?)"
+
+#: sha1_name.c:407
+#, c-format
+msgid "short SHA1 %s is ambiguous"
+msgstr "Kurzer SHA-1 %s ist mehrdeutig."
+
+#: sha1_name.c:418
+msgid "The candidates are:"
+msgstr "Die Kandidaten sind:"
+
+#: sha1_name.c:578
+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 ""
+"Git erzeugt normalerweise keine Referenzen die mit\n"
+"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n"
+"Sie diese angeben. Diese Referenzen könnten aus Versehen\n"
+"erzeugt worden sein. Zum Beispiel,\n"
+"\n"
+" git checkout -b $br $(git rev-parse ...)\n"
+"\n"
+"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n"
+"wurde. Bitte prüfen Sie diese Referenzen und löschen\n"
+"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n"
+"indem Sie \"git config advice.objectNameWarning false\"\n"
+"ausführen."
+
+#: 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"
+"Sie zuerst die Konflikte auf"
+
+#: submodule.c:68 submodule.c:102
+#, c-format
+msgid "Could not find section in .gitmodules where path=%s"
+msgstr "Konnte keine Sektion in .gitmodules mit Pfad \"%s\" finden"
+
+#: submodule.c:76
+#, c-format
+msgid "Could not update .gitmodules entry %s"
+msgstr "Konnte Eintrag '%s' in .gitmodules nicht aktualisieren"
+
+#: submodule.c:109
+#, c-format
+msgid "Could not remove .gitmodules entry for %s"
+msgstr "Konnte Eintrag '%s' nicht aus .gitmodules entfernen"
+
+#: submodule.c:120
+msgid "staging updated .gitmodules failed"
+msgstr "Konnte aktualisierte .gitmodules-Datei nicht zum Commit vormerken"
+
+#: submodule.c:158
+msgid "negative values not allowed for submodule.fetchJobs"
+msgstr "Negative Werte für submodule.fetchJobs nicht erlaubt"
+
+#: submodule-config.c:358
+#, c-format
+msgid "invalid value for %s"
+msgstr "Ungültiger Wert für %s"
+
+#: trailer.c:238
+#, c-format
+msgid "running trailer command '%s' failed"
+msgstr "Ausführen des Anhang-Befehls '%s' fehlgeschlagen"
+
+#: trailer.c:471 trailer.c:475 trailer.c:479 trailer.c:533 trailer.c:537
+#: trailer.c:541
+#, c-format
+msgid "unknown value '%s' for key '%s'"
+msgstr "unbekannter Wert '%s' für Schlüssel %s"
+
+#: trailer.c:523 trailer.c:528 builtin/remote.c:289
+#, c-format
+msgid "more than one %s"
+msgstr "mehr als ein %s"
+
+#: trailer.c:672
+#, c-format
+msgid "empty trailer token in trailer '%.*s'"
+msgstr "leerer Anhang-Token in Anhang '%.*s'"
+
+#: trailer.c:695
+#, c-format
+msgid "could not read input file '%s'"
+msgstr "Konnte Eingabe-Datei '%s' nicht lesen"
+
+#: trailer.c:698
+msgid "could not read from stdin"
+msgstr "konnte nicht von der Standard-Eingabe lesen"
+
+#: trailer.c:929 builtin/am.c:44
+#, c-format
+msgid "could not stat %s"
+msgstr "Konnte '%s' nicht lesen"
+
+#: trailer.c:931
+#, c-format
+msgid "file %s is not a regular file"
+msgstr "Datei '%s' ist keine reguläre Datei"
+
+#: trailer.c:933
+#, c-format
+msgid "file %s is not writable by user"
+msgstr "Datei %s ist vom Benutzer nicht beschreibbar."
+
+#: trailer.c:945
+msgid "could not open temporary file"
+msgstr "konnte temporäre Datei '%s' nicht öffnen"
+
+#: trailer.c:983
+#, c-format
+msgid "could not rename temporary file to %s"
+msgstr "konnte temporäre Datei nicht zu %s umbenennen"
+
+#: transport.c:62
+#, c-format
+msgid "Would set upstream of '%s' to '%s' of '%s'\n"
+msgstr "Würde Upstream-Branch von '%s' zu '%s' von '%s' setzen\n"
+
+#: transport.c:151
+#, c-format
+msgid "transport: invalid depth option '%s'"
+msgstr "transport: ungültige --depth Option '%s'"
+
+#: transport.c:817
+#, c-format
+msgid ""
+"The following submodule paths contain changes that can\n"
+"not be found on any remote:\n"
+msgstr ""
+"Die folgenden Submodul-Pfade enthalten Änderungen, die in keinem\n"
+"Remote-Repository gefunden wurden:\n"
+
+#: transport.c:821
+#, c-format
+msgid ""
+"\n"
+"Please try\n"
+"\n"
+"\tgit push --recurse-submodules=on-demand\n"
+"\n"
+"or cd to the path and use\n"
+"\n"
+"\tgit push\n"
+"\n"
+"to push them to a remote.\n"
+"\n"
+msgstr ""
+"\n"
+"Bitte versuchen Sie\n"
+"\n"
+"\tgit push --recurse-submodules=on-demand\n"
+"\n"
+"oder wechseln Sie in das Verzeichnis und benutzen Sie\n"
+"\n"
+"\tgit push\n"
+"\n"
+"zum Versenden zu einem Remote-Repository.\n"
+"\n"
+
+#: transport.c:829
+msgid "Aborting."
+msgstr "Abbruch."
+
+#: transport-helper.c:1075
+#, c-format
+msgid "Could not read ref %s"
+msgstr "Konnte Referenz %s nicht lesen."
+
+#: tree-walk.c:31
+msgid "too-short tree object"
+msgstr "zu kurzes Tree-Objekt"
+
+#: tree-walk.c:37
+msgid "malformed mode in tree entry"
+msgstr "fehlerhafter Modus in Tree-Eintrag"
+
+#: tree-walk.c:41
+msgid "empty filename in tree entry"
+msgstr "leerer Dateiname in Tree-Eintrag"
+
+#: tree-walk.c:113
+msgid "too-short tree file"
+msgstr "zu kurze Tree-Datei"
+
+#: unpack-trees.c:64
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%sPlease commit your changes or stash them before you switch branches."
+msgstr ""
+"Ihre lokalen Änderungen in den folgenden Dateien würden beim Auschecken\n"
+"überschrieben werden:\n"
+"%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie Branches\n"
+"wechseln."
+
+#: unpack-trees.c:66
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%s"
+msgstr ""
+"Ihre lokalen Änderungen in den folgenden Dateien würden beim Auschecken\n"
+"überschrieben werden:\n"
+"%%s"
+
+#: unpack-trees.c:69
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%sPlease commit your changes or stash them before you merge."
+msgstr ""
+"Ihre lokalen Änderungen in den folgenden Dateien würden durch den Merge\n"
+"überschrieben werden:\n"
+"%%sBitte committen oder stashen Sie Ihre Änderungen, bevor sie mergen."
+
+#: unpack-trees.c:71
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%s"
+msgstr ""
+"Ihre lokalen Änderungen in den folgenden Dateien würden durch den Merge\n"
+"überschrieben werden:\n"
+"%%s"
+
+#: unpack-trees.c:74
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%sPlease commit your changes or stash them before you %s."
+msgstr ""
+"Ihre lokalen Änderungen in den folgenden Dateien würden durch %s\n"
+"überschrieben werden:\n"
+"%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie %s ausführen."
+
+#: unpack-trees.c:76
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%s"
+msgstr ""
+"Ihre lokalen Änderungen würden durch %s überschrieben werden.\n"
+"%%s"
+
+#: unpack-trees.c:81
+#, c-format
+msgid ""
+"Updating the following directories would lose untracked files in it:\n"
+"%s"
+msgstr ""
+"Durch die Aktualisierung der folgenden Verzeichnisse würden unversionierte\n"
+"Dateien in diesen Verzeichnissen verloren gehen:\n"
+"%s"
+
+#: unpack-trees.c:85
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den Checkout entfernt werden:\n"
+"%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
+
+#: unpack-trees.c:87
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by checkout:\n"
+"%%s"
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
+"den\n"
+"Checkout entfernt werden:\n"
+"%%s"
+
+#: unpack-trees.c:90
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%sPlease move or remove them before you merge."
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den Merge entfernt werden:\n"
+"%%sBitte verschieben oder entfernen Sie diese, bevor sie mergen."
+
+#: unpack-trees.c:92
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%s"
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
+"den\n"
+"Merge entfernt werden:\n"
+"%%s"
+
+#: unpack-trees.c:95
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den %s entfernt werden:\n"
+"%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
+
+#: unpack-trees.c:97
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%s"
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den %s entfernt werden:\n"
+"%%s"
+
+#: unpack-trees.c:102
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den Checkout überschrieben werden:\n"
+"%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
+
+#: unpack-trees.c:104
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
+"%%s"
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
+"den\n"
+"Checkout überschrieben werden:\n"
+"%%s"
+
+#: unpack-trees.c:107
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%sPlease move or remove them before you merge."
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den Merge überschrieben werden:\n"
+"%%sBitte verschieben oder entfernen Sie diese, bevor Sie mergen."
-#: wt-status.c:1520
+#: unpack-trees.c:109
#, 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')."
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%s"
msgstr ""
-"Es dauerte %.2f Sekunden die unversionierten Dateien zu bestimmen.\n"
-"'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n"
-"neue Dateien selbstständig hinzuzufügen (siehe 'git help status')."
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den Merge überschrieben werden:\n"
+"%%s"
-#: wt-status.c:1526
+#: unpack-trees.c:112
#, c-format
-msgid "Untracked files not listed%s"
-msgstr "Unversionierte Dateien nicht aufgelistet%s"
-
-#: wt-status.c:1528
-msgid " (use -u option to show untracked files)"
-msgstr " (benutzen Sie die Option -u, um unversionierte Dateien anzuzeigen)"
-
-#: wt-status.c:1534
-msgid "No changes"
-msgstr "Keine Änderungen"
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr ""
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch\n"
+"den %s überschrieben werden:\n"
+"%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
-#: wt-status.c:1539
+#: unpack-trees.c:114
#, c-format
-msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%s"
msgstr ""
-"keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder "
-"\"git commit -a\")\n"
+"Die folgenden unversionierten Dateien im Arbeitsverzeichnis würden durch "
+"den\n"
+"%s überschrieben werden:\n"
+"%%s"
-#: wt-status.c:1542
+#: unpack-trees.c:121
#, c-format
-msgid "no changes added to commit\n"
-msgstr "keine Änderungen zum Commit vorgemerkt\n"
+msgid "Entry '%s' overlaps with '%s'. Cannot bind."
+msgstr "Eintrag '%s' überschneidet sich mit '%s'. Kann nicht verbinden."
-#: wt-status.c:1545
+#: unpack-trees.c:124
#, c-format
msgid ""
-"nothing added to commit but untracked files present (use \"git add\" to "
-"track)\n"
+"Cannot update sparse checkout: the following entries are not up-to-date:\n"
+"%s"
msgstr ""
-"nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien (benutzen "
-"Sie \"git add\" zum Versionieren)\n"
+"Kann partiellen Checkout nicht aktualisieren: die folgenden Einträge sind "
+"nicht\n"
+"aktuell:\n"
+"%s"
-#: wt-status.c:1548
+#: unpack-trees.c:126
#, c-format
-msgid "nothing added to commit but untracked files present\n"
-msgstr "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
+msgid ""
+"The following working tree files would be overwritten by sparse checkout "
+"update:\n"
+"%s"
+msgstr ""
+"Die folgenden Dateien im Arbeitsverzeichnis würden durch die Aktualisierung\n"
+"über einen partiellen Checkout überschrieben werden:\n"
+"%s"
-#: wt-status.c:1551
+#: unpack-trees.c:128
#, c-format
-msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
+msgid ""
+"The following working tree files would be removed by sparse checkout "
+"update:\n"
+"%s"
msgstr ""
-"nichts zu committen (Erstellen/Kopieren Sie Dateien und benutzen Sie \"git "
-"add\" zum Versionieren)\n"
+"Die folgenden Dateien im Arbeitsverzeichnis würden durch die Aktualisierung\n"
+"über einen partiellen Checkout entfernt werden:\n"
+"%s"
-#: wt-status.c:1554 wt-status.c:1559
+#: unpack-trees.c:205
#, c-format
-msgid "nothing to commit\n"
-msgstr "nichts zu committen\n"
+msgid "Aborting\n"
+msgstr "Abbruch\n"
-#: wt-status.c:1557
-#, c-format
-msgid "nothing to commit (use -u to show untracked files)\n"
-msgstr ""
-"nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien "
-"anzuzeigen)\n"
+#: unpack-trees.c:237
+msgid "Checking out files"
+msgstr "Checke Dateien aus"
+
+#: urlmatch.c:120
+msgid "invalid URL scheme name or missing '://' suffix"
+msgstr "Ungültiges URL-Schema oder Suffix '://' fehlt"
-#: wt-status.c:1561
+#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
#, c-format
-msgid "nothing to commit, working tree clean\n"
-msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
+msgid "invalid %XX escape sequence"
+msgstr "ungültige Escape-Sequenz %XX"
-#: wt-status.c:1668
-msgid "Initial commit on "
-msgstr "Initialer Commit auf "
+#: urlmatch.c:172
+msgid "missing host and scheme is not 'file:'"
+msgstr "fehlender Host und Schema ist nicht 'file:'"
-#: wt-status.c:1672
-msgid "HEAD (no branch)"
-msgstr "HEAD (kein Branch)"
+#: urlmatch.c:189
+msgid "a 'file:' URL may not have a port number"
+msgstr "eine 'file:' URL darf keine Portnummer enthalten"
-#: wt-status.c:1701
-msgid "gone"
-msgstr "entfernt"
+#: urlmatch.c:199
+msgid "invalid characters in host name"
+msgstr "Hostname enthält ungültige Zeichen"
-#: wt-status.c:1703 wt-status.c:1711
-msgid "behind "
-msgstr "hinterher "
+#: urlmatch.c:244 urlmatch.c:255
+msgid "invalid port number"
+msgstr "ungültige Portnummer"
-#: wt-status.c:1706 wt-status.c:1709
-msgid "ahead "
-msgstr "voraus "
+#: urlmatch.c:322
+msgid "invalid '..' path segment"
+msgstr "ungültiges '..' Pfadsegment"
-#: compat/precompose_utf8.c:57 builtin/clone.c:415
+#: worktree.c:282
#, c-format
-msgid "failed to unlink '%s'"
-msgstr "Konnte '%s' nicht entfernen."
-
-#: builtin/add.c:22
-msgid "git add [<options>] [--] <pathspec>..."
-msgstr "git add [<Optionen>] [--] <Pfadspezifikation>..."
+msgid "failed to read '%s'"
+msgstr "Fehler beim Lesen von '%s'"
-#: builtin/add.c:65
+#: wrapper.c:222 wrapper.c:392
#, c-format
-msgid "unexpected diff status %c"
-msgstr "unerwarteter Differenz-Status %c"
-
-#: builtin/add.c:71 builtin/commit.c:281
-msgid "updating files failed"
-msgstr "Aktualisierung der Dateien fehlgeschlagen"
+msgid "could not open '%s' for reading and writing"
+msgstr "Konnte '%s' nicht zum Lesen und Schreiben öffnen."
-#: builtin/add.c:81
+#: wrapper.c:224 wrapper.c:394 builtin/am.c:766
#, c-format
-msgid "remove '%s'\n"
-msgstr "lösche '%s'\n"
-
-#: builtin/add.c:136
-msgid "Unstaged changes after refreshing the index:"
-msgstr ""
-"Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:"
+msgid "could not open '%s' for writing"
+msgstr "Konnte '%s' nicht zum Schreiben öffnen."
-#: builtin/add.c:196 builtin/rev-parse.c:811
-msgid "Could not read the index"
-msgstr "Konnte den Index nicht lesen"
+#: wrapper.c:226 wrapper.c:396 builtin/am.c:320 builtin/am.c:759
+#: builtin/am.c:847 builtin/commit.c:1705 builtin/merge.c:1029
+#: builtin/pull.c:341
+#, c-format
+msgid "could not open '%s' for reading"
+msgstr "Konnte '%s' nicht zum Lesen öffnen."
-#: builtin/add.c:207
+#: wrapper.c:605 wrapper.c:626
#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "Konnte '%s' nicht zum Schreiben öffnen."
+msgid "unable to access '%s'"
+msgstr "konnte nicht auf '%s' zugreifen"
-#: builtin/add.c:211
-msgid "Could not write patch"
-msgstr "Konnte Patch nicht schreiben"
+#: wrapper.c:634
+msgid "unable to get current working directory"
+msgstr "Konnte aktuelles Arbeitsverzeichnis nicht bekommen."
-#: builtin/add.c:214
-msgid "editing patch failed"
-msgstr "Bearbeitung des Patches fehlgeschlagen"
+#: wrapper.c:658
+#, c-format
+msgid "could not write to %s"
+msgstr "Konnte nicht nach '%s' schreiben."
-#: builtin/add.c:217
+#: wrapper.c:660
#, c-format
-msgid "Could not stat '%s'"
-msgstr "Konnte Verzeichnis '%s' nicht lesen"
+msgid "could not close %s"
+msgstr "Konnte '%s' nicht schließen."
-#: builtin/add.c:219
-msgid "Empty patch. Aborted."
-msgstr "Leerer Patch. Abgebrochen."
+#: wt-status.c:151
+msgid "Unmerged paths:"
+msgstr "Nicht zusammengeführte Pfade:"
-#: builtin/add.c:224
+#: wt-status.c:178 wt-status.c:205
#, c-format
-msgid "Could not apply '%s'"
-msgstr "Konnte '%s' nicht anwenden."
+msgid " (use \"git reset %s <file>...\" to unstage)"
+msgstr ""
+" (benutzen Sie \"git reset %s <Datei>...\" zum Entfernen aus der Staging-"
+"Area)"
-#: builtin/add.c:234
-msgid "The following paths are ignored by one of your .gitignore files:\n"
+#: wt-status.c:180 wt-status.c:207
+msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr ""
-"Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien "
-"ignoriert:\n"
+" (benutzen Sie \"git rm --cached <Datei>...\" zum Entfernen aus der Staging-"
+"Area)"
-#: builtin/add.c:253 builtin/clean.c:870 builtin/fetch.c:113 builtin/mv.c:111
-#: builtin/prune-packed.c:55 builtin/pull.c:197 builtin/push.c:521
-#: builtin/remote.c:1327 builtin/rm.c:268 builtin/send-pack.c:162
-msgid "dry run"
-msgstr "Probelauf"
+#: wt-status.c:184
+msgid " (use \"git add <file>...\" to mark resolution)"
+msgstr ""
+" (benutzen Sie \"git add/rm <Datei>...\", um die Auflösung zu markieren)"
-#: builtin/add.c:254 builtin/apply.c:4854 builtin/check-ignore.c:19
-#: builtin/commit.c:1334 builtin/count-objects.c:85 builtin/fsck.c:593
-#: builtin/log.c:1852 builtin/mv.c:110 builtin/read-tree.c:114
-msgid "be verbose"
-msgstr "erweiterte Ausgaben"
+#: wt-status.c:186 wt-status.c:190
+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)"
-#: builtin/add.c:256
-msgid "interactive picking"
-msgstr "interaktives Auswählen"
+#: wt-status.c:188
+msgid " (use \"git rm <file>...\" to mark resolution)"
+msgstr ""
+" (benutzen Sie \"git add/rm <Datei>...\", um die Auflösung zu markieren)"
-#: builtin/add.c:257 builtin/checkout.c:1157 builtin/reset.c:286
-msgid "select hunks interactively"
-msgstr "Blöcke interaktiv auswählen"
+#: wt-status.c:199 wt-status.c:945
+msgid "Changes to be committed:"
+msgstr "zum Commit vorgemerkte Änderungen:"
-#: builtin/add.c:258
-msgid "edit current diff and apply"
-msgstr "aktuelle Unterschiede editieren und anwenden"
+#: wt-status.c:217 wt-status.c:954
+msgid "Changes not staged for commit:"
+msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:"
-#: builtin/add.c:259
-msgid "allow adding otherwise ignored files"
-msgstr "das Hinzufügen andernfalls ignorierter Dateien erlauben"
+#: wt-status.c:221
+msgid " (use \"git add <file>...\" to update what will be committed)"
+msgstr ""
+" (benutzen Sie \"git add <Datei>...\", um die Änderungen zum Commit "
+"vorzumerken)"
-#: builtin/add.c:260
-msgid "update tracked files"
-msgstr "versionierte Dateien aktualisieren"
+#: wt-status.c:223
+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)"
-#: builtin/add.c:261
-msgid "record only the fact that the path will be added later"
-msgstr "nur speichern, dass der Pfad später hinzugefügt werden soll"
+#: wt-status.c:224
+msgid ""
+" (use \"git checkout -- <file>...\" to discard changes in working directory)"
+msgstr ""
+" (benutzen Sie \"git checkout -- <Datei>...\", um die Änderungen im "
+"Arbeitsverzeichnis zu verwerfen)"
-#: builtin/add.c:262
-msgid "add changes from all tracked and untracked files"
+#: wt-status.c:226
+msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
-"Änderungen von allen versionierten und unversionierten Dateien hinzufügen"
+" (committen oder verwerfen Sie den unversionierten oder geänderten Inhalt "
+"in den Submodulen)"
-#: builtin/add.c:265
-msgid "ignore paths removed in the working tree (same as --no-all)"
-msgstr "gelöschte Pfade im Arbeitsverzeichnis ignorieren (genau wie --no-all)"
+#: wt-status.c:238
+#, 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)"
-#: builtin/add.c:267
-msgid "don't add, only refresh the index"
-msgstr "nichts hinzufügen, nur den Index aktualisieren"
+#: wt-status.c:253
+msgid "both deleted:"
+msgstr "beide gelöscht:"
+
+#: wt-status.c:255
+msgid "added by us:"
+msgstr "von uns hinzugefügt:"
-#: builtin/add.c:268
-msgid "just skip files which cannot be added because of errors"
-msgstr ""
-"Dateien überspringen, die aufgrund von Fehlern nicht hinzugefügt werden "
-"konnten"
+#: wt-status.c:257
+msgid "deleted by them:"
+msgstr "von denen gelöscht:"
-#: builtin/add.c:269
-msgid "check if - even missing - files are ignored in dry run"
-msgstr "prüfen ob - auch fehlende - Dateien im Probelauf ignoriert werden"
+#: wt-status.c:259
+msgid "added by them:"
+msgstr "von denen hinzugefügt:"
-#: builtin/add.c:270 builtin/update-index.c:958
-msgid "(+/-)x"
-msgstr "(+/-)x"
+#: wt-status.c:261
+msgid "deleted by us:"
+msgstr "von uns gelöscht:"
-#: builtin/add.c:270 builtin/update-index.c:959
-msgid "override the executable bit of the listed files"
-msgstr "das \"ausführbar\"-Bit der aufgelisteten Dateien überschreiben"
+#: wt-status.c:263
+msgid "both added:"
+msgstr "von beiden hinzugefügt:"
-#: builtin/add.c:292
-#, c-format
-msgid "Use -f if you really want to add them.\n"
-msgstr "Verwenden Sie -f wenn Sie diese wirklich hinzufügen möchten.\n"
+#: wt-status.c:265
+msgid "both modified:"
+msgstr "von beiden geändert:"
-#: builtin/add.c:300
-msgid "adding files failed"
-msgstr "Hinzufügen von Dateien fehlgeschlagen"
+#: wt-status.c:275
+msgid "new file:"
+msgstr "neue Datei:"
-#: builtin/add.c:336
-msgid "-A and -u are mutually incompatible"
-msgstr "Die Optionen -A und -u sind zueinander inkompatibel."
+#: wt-status.c:277
+msgid "copied:"
+msgstr "kopiert:"
-#: builtin/add.c:343
-msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr ""
-"Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden."
+#: wt-status.c:279
+msgid "deleted:"
+msgstr "gelöscht:"
-#: builtin/add.c:352
-#, c-format
-msgid "--chmod param '%s' must be either -x or +x"
-msgstr "--chmod Parameter '%s' muss entweder -x oder +x sein"
+#: wt-status.c:281
+msgid "modified:"
+msgstr "geändert:"
-#: builtin/add.c:367
-#, c-format
-msgid "Nothing specified, nothing added.\n"
-msgstr "Nichts spezifiziert, nichts hinzugefügt.\n"
+#: wt-status.c:283
+msgid "renamed:"
+msgstr "umbenannt:"
-#: builtin/add.c:368
-#, c-format
-msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr "Meinten Sie vielleicht 'git add .'?\n"
+#: wt-status.c:285
+msgid "typechange:"
+msgstr "Typänderung:"
-#: builtin/add.c:373 builtin/check-ignore.c:172 builtin/checkout.c:279
-#: builtin/checkout.c:473 builtin/clean.c:914 builtin/commit.c:340
-#: builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298
-#: builtin/submodule--helper.c:240
-msgid "index file corrupt"
-msgstr "Index-Datei beschädigt"
+#: wt-status.c:287
+msgid "unknown:"
+msgstr "unbekannt:"
-#: builtin/add.c:454 builtin/apply.c:4784 builtin/mv.c:286 builtin/rm.c:431
-msgid "Unable to write new index file"
-msgstr "Konnte neue Index-Datei nicht schreiben."
+#: wt-status.c:289
+msgid "unmerged:"
+msgstr "nicht gemerged:"
-#: builtin/am.c:257 builtin/commit.c:750 builtin/merge.c:1032
-#, c-format
-msgid "could not read '%s'"
-msgstr "Konnte '%s' nicht lesen"
+#: wt-status.c:371
+msgid "new commits, "
+msgstr "neue Commits, "
-#: builtin/am.c:426
-msgid "could not parse author script"
-msgstr "konnte Autor-Skript nicht parsen"
+#: wt-status.c:373
+msgid "modified content, "
+msgstr "geänderter Inhalt, "
-#: builtin/am.c:503
-#, c-format
-msgid "'%s' was deleted by the applypatch-msg hook"
-msgstr "'%s' wurde durch den applypatch-msg Hook entfernt"
+#: wt-status.c:375
+msgid "untracked content, "
+msgstr "unversionierter Inhalt, "
-#: builtin/am.c:544 builtin/notes.c:301
-#, c-format
-msgid "Malformed input line: '%s'."
-msgstr "Fehlerhafte Eingabezeile: '%s'."
+#: wt-status.c:818
+msgid "Submodules changed but not updated:"
+msgstr "Submodule geändert, aber nicht aktualisiert:"
-#: builtin/am.c:581 builtin/notes.c:316
-#, c-format
-msgid "Failed to copy notes from '%s' to '%s'"
-msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'"
+#: wt-status.c:820
+msgid "Submodule changes to be committed:"
+msgstr "Änderungen in Submodul zum Committen:"
-#: builtin/am.c:607
-msgid "fseek failed"
-msgstr "\"fseek\" fehlgeschlagen"
+#: wt-status.c:901
+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."
-#: builtin/am.c:787
-#, c-format
-msgid "could not parse patch '%s'"
-msgstr "konnte Patch '%s' nicht parsen"
+#: wt-status.c:1013
+msgid "You have unmerged paths."
+msgstr "Sie haben nicht zusammengeführte Pfade."
-#: builtin/am.c:852
-msgid "Only one StGIT patch series can be applied at once"
-msgstr "Es kann nur eine StGIT Patch-Serie auf einmal angewendet werden."
+#: wt-status.c:1016
+msgid " (fix conflicts and run \"git commit\")"
+msgstr " (beheben Sie die Konflikte und führen Sie \"git commit\" aus)"
-#: builtin/am.c:899
-msgid "invalid timestamp"
-msgstr "ungültiger Zeitstempel"
+#: wt-status.c:1018
+msgid " (use \"git merge --abort\" to abort the merge)"
+msgstr " (benutzen Sie \"git merge --abort\", um den Merge abzubrechen)"
-#: builtin/am.c:902 builtin/am.c:910
-msgid "invalid Date line"
-msgstr "Ungültige \"Date\"-Zeile"
+#: wt-status.c:1023
+msgid "All conflicts fixed but you are still merging."
+msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge."
-#: builtin/am.c:907
-msgid "invalid timezone offset"
-msgstr "Ungültiger Offset in der Zeitzone"
+#: wt-status.c:1026
+msgid " (use \"git commit\" to conclude merge)"
+msgstr " (benutzen Sie \"git commit\", um den Merge abzuschließen)"
-#: builtin/am.c:996
-msgid "Patch format detection failed."
-msgstr "Patch-Formaterkennung fehlgeschlagen."
+#: wt-status.c:1036
+msgid "You are in the middle of an am session."
+msgstr "Eine \"am\"-Sitzung ist im Gange."
-#: builtin/am.c:1001 builtin/clone.c:380
-#, c-format
-msgid "failed to create directory '%s'"
-msgstr "Fehler beim Erstellen von Verzeichnis '%s'"
+#: wt-status.c:1039
+msgid "The current patch is empty."
+msgstr "Der aktuelle Patch ist leer."
-#: builtin/am.c:1005
-msgid "Failed to split patches."
-msgstr "Fehler beim Aufteilen der Patches."
+#: wt-status.c:1043
+msgid " (fix conflicts and then run \"git am --continue\")"
+msgstr ""
+" (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)"
-#: builtin/am.c:1137 builtin/commit.c:366
-msgid "unable to write index file"
-msgstr "Konnte Index-Datei nicht schreiben."
+#: wt-status.c:1045
+msgid " (use \"git am --skip\" to skip this patch)"
+msgstr " (benutzen Sie \"git am --skip\", um diesen Patch auszulassen)"
-#: builtin/am.c:1188
-#, c-format
-msgid "When you have resolved this problem, run \"%s --continue\"."
+#: wt-status.c:1047
+msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
-"Wenn Sie das Problem aufgelöst haben, führen Sie \"%s --continue\" aus."
+" (benutzen Sie \"git am --abort\", um den ursprünglichen Branch "
+"wiederherzustellen)"
+
+#: wt-status.c:1172
+msgid "No commands done."
+msgstr "Keine Befehle ausgeführt."
-#: builtin/am.c:1189
+#: wt-status.c:1175
#, c-format
-msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
-msgstr ""
-"Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen \"%s --skip"
-"\" aus."
+msgid "Last command done (%d command done):"
+msgid_plural "Last commands done (%d commands done):"
+msgstr[0] "Zuletzt ausgeführter Befehl (%d Befehl ausgeführt):"
+msgstr[1] "Zuletzt ausgeführte Befehle (%d Befehle ausgeführt):"
-#: builtin/am.c:1190
+#: wt-status.c:1186
#, c-format
-msgid "To restore the original branch and stop patching, run \"%s --abort\"."
-msgstr ""
-"Um den ursprünglichen Branch wiederherzustellen und die Anwendung der "
-"Patches abzubrechen, führen Sie \"%s --abort\" aus."
+msgid " (see more in file %s)"
+msgstr " (mehr Informationen in Datei %s)"
-#: builtin/am.c:1328
-msgid "Patch is empty. Was it split wrong?"
-msgstr "Patch ist leer. War dessen Aufteilung falsch?"
+#: wt-status.c:1191
+msgid "No commands remaining."
+msgstr "Keine Befehle verbleibend."
-#: builtin/am.c:1402 builtin/log.c:1543
+#: wt-status.c:1194
#, c-format
-msgid "invalid ident line: %s"
-msgstr "Ungültige Identifikationszeile: %s"
+msgid "Next command to do (%d remaining command):"
+msgid_plural "Next commands to do (%d remaining commands):"
+msgstr[0] "Nächster auszuführender Befehl (%d Befehle verbleibend):"
+msgstr[1] "Nächste auszuführende Befehle (%d Befehle verbleibend):"
+
+#: wt-status.c:1202
+msgid " (use \"git rebase --edit-todo\" to view and edit)"
+msgstr " (benutzen Sie \"git rebase --edit-todo\" zum Ansehen und Bearbeiten)"
-#: builtin/am.c:1429
+#: wt-status.c:1215
#, c-format
-msgid "unable to parse commit %s"
-msgstr "Konnte Commit '%s' nicht parsen."
+msgid "You are currently rebasing branch '%s' on '%s'."
+msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'."
-#: builtin/am.c:1602
-msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr ""
-"Dem Repository fehlen notwendige Blobs um auf einen 3-Wege-Merge "
-"zurückzufallen."
+#: wt-status.c:1220
+msgid "You are currently rebasing."
+msgstr "Sie sind gerade beim Rebase."
-#: builtin/am.c:1604
-msgid "Using index info to reconstruct a base tree..."
+#: wt-status.c:1234
+msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr ""
-"Verwende Informationen aus der Staging-Area, um ein Basisverzeichnis "
-"nachzustellen ..."
+" (beheben Sie die Konflikte und führen Sie dann \"git rebase --continue\" "
+"aus)"
-#: builtin/am.c:1623
-msgid ""
-"Did you hand edit your patch?\n"
-"It does not apply to blobs recorded in its index."
-msgstr ""
-"Haben Sie den Patch per Hand editiert?\n"
-"Er kann nicht auf die Blobs in seiner 'index' Zeile angewendet werden."
+#: wt-status.c:1236
+msgid " (use \"git rebase --skip\" to skip this patch)"
+msgstr " (benutzen Sie \"git rebase --skip\", um diesen Patch auszulassen)"
-#: builtin/am.c:1629
-msgid "Falling back to patching base and 3-way merge..."
-msgstr "Falle zurück zum Patchen der Basis und zum 3-Wege-Merge ..."
+#: wt-status.c:1238
+msgid " (use \"git rebase --abort\" to check out the original branch)"
+msgstr ""
+" (benutzen Sie \"git rebase --abort\", um den ursprünglichen Branch "
+"auszuchecken)"
-#: builtin/am.c:1654
-msgid "Failed to merge in the changes."
-msgstr "Merge der Änderungen fehlgeschlagen."
+#: wt-status.c:1244
+msgid " (all conflicts fixed: run \"git rebase --continue\")"
+msgstr " (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)"
-#: builtin/am.c:1679 builtin/merge.c:628
-msgid "git write-tree failed to write a tree"
-msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl"
+#: wt-status.c:1248
+#, c-format
+msgid ""
+"You are currently splitting a commit while rebasing branch '%s' on '%s'."
+msgstr ""
+"Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf "
+"'%s' im Gange ist."
-#: builtin/am.c:1686
-msgid "applying to an empty history"
-msgstr "auf leere Historie anwenden"
+#: wt-status.c:1253
+msgid "You are currently splitting a commit during a rebase."
+msgstr "Sie teilen gerade einen Commit während eines Rebase auf."
-#: builtin/am.c:1699 builtin/commit.c:1776 builtin/merge.c:798
-#: builtin/merge.c:823
-msgid "failed to write commit object"
-msgstr "Fehler beim Schreiben des Commit-Objektes."
+#: wt-status.c:1256
+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)"
-#: builtin/am.c:1731 builtin/am.c:1735
+#: wt-status.c:1260
#, c-format
-msgid "cannot resume: %s does not exist."
-msgstr "Kann nicht fortsetzen: %s existiert nicht"
-
-#: builtin/am.c:1751
-msgid "cannot be interactive without stdin connected to a terminal."
+msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
-"Kann nicht interaktiv sein, ohne dass die Standard-Eingabe mit einem "
-"Terminal verbunden ist."
+"Sie editieren gerade einen Commit während eines Rebase von Branch '%s' auf "
+"'%s'."
-#: builtin/am.c:1756
-msgid "Commit Body is:"
-msgstr "Commit-Beschreibung ist:"
+#: wt-status.c:1265
+msgid "You are currently editing a commit during a rebase."
+msgstr "Sie editieren gerade einen Commit während eines Rebase."
-#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
-#. in your translation. The program will only accept English
-#. input at this point.
-#.
-#: builtin/am.c:1766
-msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
-msgstr "Anwenden? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
+#: wt-status.c:1268
+msgid " (use \"git commit --amend\" to amend the current commit)"
+msgstr ""
+" (benutzen Sie \"git commit --amend\", um den aktuellen Commit "
+"nachzubessern)"
-#: builtin/am.c:1816
-#, c-format
-msgid "Dirty index: cannot apply patches (dirty: %s)"
-msgstr "Geänderter Index: kann Patches nicht anwenden (geändert: %s)"
+#: wt-status.c:1270
+msgid ""
+" (use \"git rebase --continue\" once you are satisfied with your changes)"
+msgstr ""
+" (benutzen Sie \"git rebase --continue\" sobald Ihre Änderungen "
+"abgeschlossen sind)"
-#: builtin/am.c:1853 builtin/am.c:1925
+#: wt-status.c:1280
#, c-format
-msgid "Applying: %.*s"
-msgstr "Wende an: %.*s"
+msgid "You are currently cherry-picking commit %s."
+msgstr "Sie führen gerade \"cherry-pick\" von Commit %s aus."
-#: builtin/am.c:1869
-msgid "No changes -- Patch already applied."
-msgstr "Keine Änderungen -- Patches bereits angewendet."
+#: wt-status.c:1285
+msgid " (fix conflicts and run \"git cherry-pick --continue\")"
+msgstr ""
+" (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue"
+"\" aus)"
-#: builtin/am.c:1877
-#, c-format
-msgid "Patch failed at %s %.*s"
-msgstr "Anwendung des Patches fehlgeschlagen bei %s %.*s"
+#: wt-status.c:1288
+msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
+msgstr ""
+" (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)"
+
+#: wt-status.c:1290
+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)"
-#: builtin/am.c:1883
+#: wt-status.c:1299
#, c-format
-msgid "The copy of the patch that failed is found in: %s"
-msgstr "Die Kopie des fehlgeschlagenen Patches befindet sich in: %s"
+msgid "You are currently reverting commit %s."
+msgstr "Sie sind gerade an einem Revert von Commit '%s'."
-#: builtin/am.c:1928
-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."
+#: wt-status.c:1304
+msgid " (fix conflicts and run \"git revert --continue\")"
msgstr ""
-"Keine Änderungen - haben Sie vergessen 'git add' zu benutzen?\n"
-"Wenn keine Änderungen mehr zum Commit vorzumerken sind, könnten\n"
-"diese bereits anderweitig eingefügt worden sein; Sie könnten diesen Patch\n"
-"auslassen."
+" (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" "
+"aus)"
-#: builtin/am.c:1935
-msgid ""
-"You still have unmerged paths in your index.\n"
-"Did you forget to use 'git add'?"
+#: wt-status.c:1307
+msgid " (all conflicts fixed: run \"git revert --continue\")"
+msgstr " (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)"
+
+#: wt-status.c:1309
+msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
-"Sie haben immer noch nicht zusammengeführte Pfade im Index.\n"
-"Haben Sie vergessen 'git add' zu benutzen?"
+" (benutzen Sie \"git revert --abort\", um die Revert-Operation abzubrechen)"
-#: builtin/am.c:2043 builtin/am.c:2047 builtin/am.c:2059 builtin/reset.c:308
-#: builtin/reset.c:316
+#: wt-status.c:1320
#, c-format
-msgid "Could not parse object '%s'."
-msgstr "Konnte Objekt '%s' nicht parsen."
+msgid "You are currently bisecting, started from branch '%s'."
+msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'."
-#: builtin/am.c:2095
-msgid "failed to clean index"
-msgstr "Fehler beim Bereinigen des Index"
+#: wt-status.c:1324
+msgid "You are currently bisecting."
+msgstr "Sie sind gerade bei einer binären Suche."
-#: builtin/am.c:2129
-msgid ""
-"You seem to have moved HEAD since the last 'am' failure.\n"
-"Not rewinding to ORIG_HEAD"
+#: wt-status.c:1327
+msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
-"Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n"
-"Keine Zurücksetzung zu ORIG_HEAD."
+" (benutzen Sie \"git bisect reset\", um zum ursprünglichen Branch "
+"zurückzukehren)"
-#: builtin/am.c:2192
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Ungültiger Wert für --patch-format: %s"
+#: wt-status.c:1524
+msgid "On branch "
+msgstr "Auf Branch "
-#: builtin/am.c:2225
-msgid "git am [<options>] [(<mbox>|<Maildir>)...]"
-msgstr "git am [<Optionen>] [(<mbox>|<E-Mail-Verzeichnis>)...]"
+#: wt-status.c:1530
+msgid "interactive rebase in progress; onto "
+msgstr "interaktives Rebase im Gange; auf "
-#: builtin/am.c:2226
-msgid "git am [<options>] (--continue | --skip | --abort)"
-msgstr "git am [<Optionen>] (--continue | --skip | --abort)"
+#: wt-status.c:1532
+msgid "rebase in progress; onto "
+msgstr "Rebase im Gange; auf "
-#: builtin/am.c:2232
-msgid "run interactively"
-msgstr "interaktiv ausführen"
+#: wt-status.c:1537
+msgid "HEAD detached at "
+msgstr "HEAD losgelöst bei "
-#: builtin/am.c:2234
-msgid "historical option -- no-op"
-msgstr "historische Option -- kein Effekt"
+#: wt-status.c:1539
+msgid "HEAD detached from "
+msgstr "HEAD losgelöst von "
-#: builtin/am.c:2236
-msgid "allow fall back on 3way merging if needed"
-msgstr "erlaube, falls notwendig, das Zurückfallen auf einen 3-Wege-Merge"
+#: wt-status.c:1542
+msgid "Not currently on any branch."
+msgstr "Im Moment auf keinem Branch."
-#: builtin/am.c:2237 builtin/init-db.c:481 builtin/prune-packed.c:57
-#: builtin/repack.c:172
-msgid "be quiet"
-msgstr "weniger Ausgaben"
+#: wt-status.c:1560
+msgid "Initial commit"
+msgstr "Initialer Commit"
-#: builtin/am.c:2239
-msgid "add a Signed-off-by line to the commit message"
-msgstr "der Commit-Beschreibung eine Signed-off-by Zeile hinzufügen"
+#: wt-status.c:1574
+msgid "Untracked files"
+msgstr "Unversionierte Dateien"
-#: builtin/am.c:2242
-msgid "recode into utf8 (default)"
-msgstr "nach UTF-8 umkodieren (Standard)"
+#: wt-status.c:1576
+msgid "Ignored files"
+msgstr "Ignorierte Dateien"
-#: builtin/am.c:2244
-msgid "pass -k flag to git-mailinfo"
-msgstr "-k an git-mailinfo übergeben"
+#: wt-status.c:1580
+#, 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 ""
+"Es dauerte %.2f Sekunden die unversionierten Dateien zu bestimmen.\n"
+"'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n"
+"neue Dateien selbstständig hinzuzufügen (siehe 'git help status')."
-#: builtin/am.c:2246
-msgid "pass -b flag to git-mailinfo"
-msgstr "-b an git-mailinfo übergeben"
+#: wt-status.c:1586
+#, c-format
+msgid "Untracked files not listed%s"
+msgstr "Unversionierte Dateien nicht aufgelistet%s"
-#: builtin/am.c:2248
-msgid "pass -m flag to git-mailinfo"
-msgstr "-m an git-mailinfo übergeben"
+#: wt-status.c:1588
+msgid " (use -u option to show untracked files)"
+msgstr " (benutzen Sie die Option -u, um unversionierte Dateien anzuzeigen)"
-#: builtin/am.c:2250
-msgid "pass --keep-cr flag to git-mailsplit for mbox format"
-msgstr "--keep-cr an git-mailsplit für mbox-Format übergeben"
+#: wt-status.c:1594
+msgid "No changes"
+msgstr "Keine Änderungen"
-#: builtin/am.c:2253
-msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
-msgstr "kein --keep-cr an git-mailsplit übergeben, unabhängig von am.keepcr"
+#: wt-status.c:1599
+#, 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"
-#: builtin/am.c:2256
-msgid "strip everything before a scissors line"
-msgstr "alles vor einer Scheren-Zeile entfernen"
+#: wt-status.c:1602
+#, c-format
+msgid "no changes added to commit\n"
+msgstr "keine Änderungen zum Commit vorgemerkt\n"
-#: builtin/am.c:2257 builtin/apply.c:4837
-msgid "action"
-msgstr "Aktion"
+#: wt-status.c:1605
+#, c-format
+msgid ""
+"nothing added to commit but untracked files present (use \"git add\" to "
+"track)\n"
+msgstr ""
+"nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien (benutzen "
+"Sie \"git add\" zum Versionieren)\n"
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2270 builtin/am.c:2273 builtin/am.c:2276 builtin/am.c:2279
-#: builtin/am.c:2285
-msgid "pass it through git-apply"
-msgstr "an git-apply übergeben"
+#: wt-status.c:1608
+#, c-format
+msgid "nothing added to commit but untracked files present\n"
+msgstr "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
-#: builtin/am.c:2266 builtin/apply.c:4861
-msgid "root"
-msgstr "Wurzelverzeichnis"
+#: wt-status.c:1611
+#, 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 Versionieren)\n"
-#: builtin/am.c:2269 builtin/am.c:2272 builtin/apply.c:4799
-#: builtin/apply.c:4802 builtin/clone.c:90 builtin/fetch.c:96
-#: builtin/pull.c:179 builtin/submodule--helper.c:277
-#: builtin/submodule--helper.c:402 builtin/submodule--helper.c:482
-#: builtin/submodule--helper.c:485 builtin/submodule--helper.c:823
-#: builtin/submodule--helper.c:826
-msgid "path"
-msgstr "Pfad"
+#: wt-status.c:1614 wt-status.c:1619
+#, c-format
+msgid "nothing to commit\n"
+msgstr "nichts zu committen\n"
-#: builtin/am.c:2275 builtin/fmt-merge-msg.c:666 builtin/fmt-merge-msg.c:669
-#: builtin/grep.c:706 builtin/merge.c:200 builtin/pull.c:134 builtin/pull.c:193
-#: builtin/repack.c:181 builtin/repack.c:185 builtin/show-branch.c:645
-#: builtin/show-ref.c:175 builtin/tag.c:340 parse-options.h:132
-#: parse-options.h:134 parse-options.h:244
-msgid "n"
-msgstr "Anzahl"
+#: wt-status.c:1617
+#, c-format
+msgid "nothing to commit (use -u to show untracked files)\n"
+msgstr ""
+"nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien "
+"anzuzeigen)\n"
-#: builtin/am.c:2278 builtin/apply.c:4805
-msgid "num"
-msgstr "Anzahl"
+#: wt-status.c:1621
+#, c-format
+msgid "nothing to commit, working tree clean\n"
+msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
-#: builtin/am.c:2281 builtin/for-each-ref.c:37 builtin/replace.c:438
-#: builtin/tag.c:372
-msgid "format"
-msgstr "Format"
+#: wt-status.c:1728
+msgid "Initial commit on "
+msgstr "Initialer Commit auf "
-#: builtin/am.c:2282
-msgid "format the patch(es) are in"
-msgstr "Patch-Format"
+#: wt-status.c:1732
+msgid "HEAD (no branch)"
+msgstr "HEAD (kein Branch)"
-#: builtin/am.c:2288
-msgid "override error message when patch failure occurs"
-msgstr "Meldung bei fehlerhafter Patch-Anwendung überschreiben"
+#: wt-status.c:1761
+msgid "gone"
+msgstr "entfernt"
-#: builtin/am.c:2290
-msgid "continue applying patches after resolving a conflict"
-msgstr "Anwendung der Patches nach Auflösung eines Konfliktes fortsetzen"
+#: wt-status.c:1763 wt-status.c:1771
+msgid "behind "
+msgstr "hinterher "
-#: builtin/am.c:2293
-msgid "synonyms for --continue"
-msgstr "Synonyme für --continue"
+#: wt-status.c:1766 wt-status.c:1769
+msgid "ahead "
+msgstr "voraus "
-#: builtin/am.c:2296
-msgid "skip the current patch"
-msgstr "den aktuellen Patch auslassen"
+#. TRANSLATORS: the action is e.g. "pull with rebase"
+#: wt-status.c:2270
+#, c-format
+msgid "cannot %s: You have unstaged changes."
+msgstr "%s nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt sind."
-#: builtin/am.c:2299
-msgid "restore the original branch and abort the patching operation."
-msgstr ""
-"ursprünglichen Branch wiederherstellen und Anwendung der Patches abbrechen"
+#: wt-status.c:2276
+msgid "additionally, your index contains uncommitted changes."
+msgstr "Zusätzlich enthält die Staging-Area nicht committete Änderungen."
-#: builtin/am.c:2303
-msgid "lie about committer date"
-msgstr "Autor-Datum als Commit-Datum verwenden"
+#: wt-status.c:2278
+#, c-format
+msgid "cannot %s: Your index contains uncommitted changes."
+msgstr "%s nicht möglich: Die Staging-Area enthält nicht committete Änderungen."
-#: builtin/am.c:2305
-msgid "use current timestamp for author date"
-msgstr "aktuellen Zeitstempel als Autor-Datum verwenden"
+#: compat/precompose_utf8.c:57 builtin/clone.c:414
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "Konnte '%s' nicht entfernen."
-#: builtin/am.c:2307 builtin/commit.c:1610 builtin/merge.c:229
-#: builtin/pull.c:164 builtin/revert.c:92 builtin/tag.c:355
-msgid "key-id"
-msgstr "GPG-Schlüsselkennung"
+#: builtin/add.c:22
+msgid "git add [<options>] [--] <pathspec>..."
+msgstr "git add [<Optionen>] [--] <Pfadspezifikation>..."
-#: builtin/am.c:2308
-msgid "GPG-sign commits"
-msgstr "Commits mit GPG signieren"
+#: builtin/add.c:80
+#, c-format
+msgid "unexpected diff status %c"
+msgstr "unerwarteter Differenz-Status %c"
-#: builtin/am.c:2311
-msgid "(internal use for git-rebase)"
-msgstr "(intern für git-rebase verwendet)"
+#: builtin/add.c:85 builtin/commit.c:291
+msgid "updating files failed"
+msgstr "Aktualisierung der Dateien fehlgeschlagen"
-#: builtin/am.c:2326
-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."
+#: builtin/add.c:95
+#, c-format
+msgid "remove '%s'\n"
+msgstr "lösche '%s'\n"
+
+#: builtin/add.c:149
+msgid "Unstaged changes after refreshing the index:"
msgstr ""
-"Die -b/--binary Option hat seit Langem keinen Effekt und wird\n"
-"entfernt. Bitte verwenden Sie diese nicht mehr."
+"Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:"
+
+#: builtin/add.c:209 builtin/rev-parse.c:840
+msgid "Could not read the index"
+msgstr "Konnte den Index nicht lesen"
+
+#: builtin/add.c:220
+#, c-format
+msgid "Could not open '%s' for writing."
+msgstr "Konnte '%s' nicht zum Schreiben öffnen."
+
+#: builtin/add.c:224
+msgid "Could not write patch"
+msgstr "Konnte Patch nicht schreiben"
-#: builtin/am.c:2333
-msgid "failed to read the index"
-msgstr "Fehler beim Lesen des Index"
+#: builtin/add.c:227
+msgid "editing patch failed"
+msgstr "Bearbeitung des Patches fehlgeschlagen"
-#: builtin/am.c:2348
+#: builtin/add.c:230
#, c-format
-msgid "previous rebase directory %s still exists but mbox given."
-msgstr "Vorheriges Rebase-Verzeichnis %s existiert noch, aber mbox gegeben."
+msgid "Could not stat '%s'"
+msgstr "Konnte Verzeichnis '%s' nicht lesen"
+
+#: builtin/add.c:232
+msgid "Empty patch. Aborted."
+msgstr "Leerer Patch. Abgebrochen."
-#: builtin/am.c:2372
+#: builtin/add.c:237
#, c-format
-msgid ""
-"Stray %s directory found.\n"
-"Use \"git am --abort\" to remove it."
+msgid "Could not apply '%s'"
+msgstr "Konnte '%s' nicht anwenden."
+
+#: builtin/add.c:247
+msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
-"Stray %s Verzeichnis gefunden.\n"
-"Benutzen Sie \"git am --abort\", um es zu entfernen."
+"Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien "
+"ignoriert:\n"
-#: builtin/am.c:2378
-msgid "Resolve operation not in progress, we are not resuming."
-msgstr "Es ist keine Auflösung im Gange, es wird nicht fortgesetzt."
+#: builtin/add.c:266 builtin/clean.c:870 builtin/fetch.c:115 builtin/mv.c:111
+#: builtin/prune-packed.c:55 builtin/pull.c:198 builtin/push.c:521
+#: builtin/remote.c:1326 builtin/rm.c:268 builtin/send-pack.c:162
+msgid "dry run"
+msgstr "Probelauf"
-#: builtin/apply.c:122
-msgid "git apply [<options>] [<patch>...]"
-msgstr "git apply [<Optionen>] [<Patch>...]"
+#: builtin/add.c:269
+msgid "interactive picking"
+msgstr "interaktives Auswählen"
-#: builtin/apply.c:153
-#, c-format
-msgid "unrecognized whitespace option '%s'"
-msgstr "nicht erkannte Whitespace-Option: '%s'"
+#: builtin/add.c:270 builtin/checkout.c:1156 builtin/reset.c:286
+msgid "select hunks interactively"
+msgstr "Blöcke interaktiv auswählen"
-#: builtin/apply.c:169
-#, c-format
-msgid "unrecognized whitespace ignore option '%s'"
-msgstr "nicht erkannte Option zum Ignorieren von Whitespace: '%s'"
+#: builtin/add.c:271
+msgid "edit current diff and apply"
+msgstr "aktuelle Unterschiede editieren und anwenden"
-#: builtin/apply.c:854
-#, c-format
-msgid "Cannot prepare timestamp regexp %s"
-msgstr "Kann regulären Ausdruck für Zeitstempel %s nicht verarbeiten"
+#: builtin/add.c:272
+msgid "allow adding otherwise ignored files"
+msgstr "das Hinzufügen andernfalls ignorierter Dateien erlauben"
-#: builtin/apply.c:863
-#, c-format
-msgid "regexec returned %d for input: %s"
-msgstr "Ausführung des regulären Ausdrucks gab %d zurück. Eingabe: %s"
+#: builtin/add.c:273
+msgid "update tracked files"
+msgstr "versionierte Dateien aktualisieren"
-#: builtin/apply.c:947
-#, c-format
-msgid "unable to find filename in patch at line %d"
-msgstr "Konnte keinen Dateinamen in Zeile %d des Patches finden."
+#: builtin/add.c:274
+msgid "record only the fact that the path will be added later"
+msgstr "nur speichern, dass der Pfad später hinzugefügt werden soll"
-#: builtin/apply.c:984
-#, c-format
-msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
+#: builtin/add.c:275
+msgid "add changes from all tracked and untracked files"
msgstr ""
-"git apply: ungültiges 'git-diff' - erwartete /dev/null, erhielt %s in Zeile "
-"%d"
+"Änderungen von allen versionierten und unversionierten Dateien hinzufügen"
-#: builtin/apply.c:989
-#, c-format
-msgid "git apply: bad git-diff - inconsistent new filename on line %d"
-msgstr ""
-"git apply: ungültiges 'git-diff' - Inkonsistenter neuer Dateiname in Zeile %d"
+#: builtin/add.c:278
+msgid "ignore paths removed in the working tree (same as --no-all)"
+msgstr "gelöschte Pfade im Arbeitsverzeichnis ignorieren (genau wie --no-all)"
-#: builtin/apply.c:990
-#, c-format
-msgid "git apply: bad git-diff - inconsistent old filename on line %d"
+#: builtin/add.c:280
+msgid "don't add, only refresh the index"
+msgstr "nichts hinzufügen, nur den Index aktualisieren"
+
+#: builtin/add.c:281
+msgid "just skip files which cannot be added because of errors"
msgstr ""
-"git apply: ungültiges 'git-diff' - Inkonsistenter alter Dateiname in Zeile %d"
+"Dateien überspringen, die aufgrund von Fehlern nicht hinzugefügt werden "
+"konnten"
-#: builtin/apply.c:995
-#, c-format
-msgid "git apply: bad git-diff - expected /dev/null on line %d"
-msgstr "git apply: ungültiges 'git-diff' - erwartete /dev/null in Zeile %d"
+#: builtin/add.c:282
+msgid "check if - even missing - files are ignored in dry run"
+msgstr "prüfen ob - auch fehlende - Dateien im Probelauf ignoriert werden"
-#: builtin/apply.c:1489
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount: unerwartete Zeile: %.*s"
+#: builtin/add.c:283 builtin/update-index.c:947
+msgid "(+/-)x"
+msgstr "(+/-)x"
-#: builtin/apply.c:1550
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "Patch-Fragment ohne Kopfbereich bei Zeile %d: %.*s"
+#: builtin/add.c:283 builtin/update-index.c:948
+msgid "override the executable bit of the listed files"
+msgstr "das \"ausführbar\"-Bit der aufgelisteten Dateien überschreiben"
-#: builtin/apply.c:1567
+#: builtin/add.c:305
#, 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] ""
-"Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen, wenn "
-"%d vorangestellter Teil des Pfades entfernt wird (Zeile %d)"
-msgstr[1] ""
-"Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen, wenn "
-"%d vorangestellte Teile des Pfades entfernt werden (Zeile %d)"
-
-#: builtin/apply.c:1743
-msgid "new file depends on old contents"
-msgstr "neue Datei hängt von alten Inhalten ab"
+msgid "Use -f if you really want to add them.\n"
+msgstr "Verwenden Sie -f wenn Sie diese wirklich hinzufügen möchten.\n"
-#: builtin/apply.c:1745
-msgid "deleted file still has contents"
-msgstr "entfernte Datei hat noch Inhalte"
+#: builtin/add.c:312
+msgid "adding files failed"
+msgstr "Hinzufügen von Dateien fehlgeschlagen"
-#: builtin/apply.c:1774
-#, c-format
-msgid "corrupt patch at line %d"
-msgstr "fehlerhafter Patch bei Zeile %d"
+#: builtin/add.c:348
+msgid "-A and -u are mutually incompatible"
+msgstr "Die Optionen -A und -u sind zueinander inkompatibel."
-#: builtin/apply.c:1810
-#, c-format
-msgid "new file %s depends on old contents"
-msgstr "neue Datei %s hängt von alten Inhalten ab"
+#: builtin/add.c:355
+msgid "Option --ignore-missing can only be used together with --dry-run"
+msgstr ""
+"Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden."
-#: builtin/apply.c:1812
+#: builtin/add.c:359
#, c-format
-msgid "deleted file %s still has contents"
-msgstr "entfernte Datei %s hat noch Inhalte"
+msgid "--chmod param '%s' must be either -x or +x"
+msgstr "--chmod Parameter '%s' muss entweder -x oder +x sein"
-#: builtin/apply.c:1815
+#: builtin/add.c:374
#, c-format
-msgid "** warning: file %s becomes empty but is not deleted"
-msgstr "** Warnung: Datei %s wird leer, aber nicht entfernt."
+msgid "Nothing specified, nothing added.\n"
+msgstr "Nichts spezifiziert, nichts hinzugefügt.\n"
-#: builtin/apply.c:1962
+#: builtin/add.c:375
#, c-format
-msgid "corrupt binary patch at line %d: %.*s"
-msgstr "fehlerhafter Binär-Patch bei Zeile %d: %.*s"
+msgid "Maybe you wanted to say 'git add .'?\n"
+msgstr "Meinten Sie vielleicht 'git add .'?\n"
-#: builtin/apply.c:1999
-#, c-format
-msgid "unrecognized binary patch at line %d"
-msgstr "nicht erkannter Binär-Patch bei Zeile %d"
+#: builtin/add.c:380 builtin/check-ignore.c:172 builtin/checkout.c:279
+#: builtin/checkout.c:472 builtin/clean.c:914 builtin/commit.c:350
+#: builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298
+#: builtin/submodule--helper.c:244
+msgid "index file corrupt"
+msgstr "Index-Datei beschädigt"
-#: builtin/apply.c:2154
-#, c-format
-msgid "patch with only garbage at line %d"
-msgstr "Patch mit nutzlosen Informationen bei Zeile %d"
+#: builtin/am.c:414
+msgid "could not parse author script"
+msgstr "konnte Autor-Skript nicht parsen"
-#: builtin/apply.c:2244
+#: builtin/am.c:491
#, c-format
-msgid "unable to read symlink %s"
-msgstr "konnte symbolische Verknüpfung %s nicht lesen"
+msgid "'%s' was deleted by the applypatch-msg hook"
+msgstr "'%s' wurde durch den applypatch-msg Hook entfernt"
-#: builtin/apply.c:2248
+#: builtin/am.c:532
#, c-format
-msgid "unable to open or read %s"
-msgstr "konnte %s nicht öffnen oder lesen"
+msgid "Malformed input line: '%s'."
+msgstr "Fehlerhafte Eingabezeile: '%s'."
-#: builtin/apply.c:2901
+#: builtin/am.c:569
#, c-format
-msgid "invalid start of line: '%c'"
-msgstr "Ungültiger Zeilenanfang: '%c'"
+msgid "Failed to copy notes from '%s' to '%s'"
+msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'"
-#: builtin/apply.c:3020
-#, c-format
-msgid "Hunk #%d succeeded at %d (offset %d line)."
-msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
-msgstr[0] "Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeile versetzt)"
-msgstr[1] ""
-"Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeilen versetzt)"
+#: builtin/am.c:595
+msgid "fseek failed"
+msgstr "\"fseek\" fehlgeschlagen"
-#: builtin/apply.c:3032
+#: builtin/am.c:775
#, c-format
-msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
-msgstr "Kontext reduziert zu (%ld/%ld), um Patch-Bereich bei %d anzuwenden"
+msgid "could not parse patch '%s'"
+msgstr "konnte Patch '%s' nicht parsen"
-#: builtin/apply.c:3038
-#, c-format
-msgid ""
-"while searching for:\n"
-"%.*s"
-msgstr ""
-"bei der Suche nach:\n"
-"%.*s"
+#: builtin/am.c:840
+msgid "Only one StGIT patch series can be applied at once"
+msgstr "Es kann nur eine StGIT Patch-Serie auf einmal angewendet werden."
-#: builtin/apply.c:3060
-#, c-format
-msgid "missing binary patch data for '%s'"
-msgstr "keine Daten in Binär-Patch für '%s'"
+#: builtin/am.c:887
+msgid "invalid timestamp"
+msgstr "ungültiger Zeitstempel"
-#: builtin/apply.c:3163
-#, c-format
-msgid "binary patch does not apply to '%s'"
-msgstr "Konnte Binär-Patch nicht auf '%s' anwenden"
+#: builtin/am.c:890 builtin/am.c:898
+msgid "invalid Date line"
+msgstr "Ungültige \"Date\"-Zeile"
-#: builtin/apply.c:3169
-#, c-format
-msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
-msgstr ""
-"Binär-Patch für '%s' erzeugt falsches Ergebnis (erwartete %s, bekam %s)"
+#: builtin/am.c:895
+msgid "invalid timezone offset"
+msgstr "Ungültiger Offset in der Zeitzone"
-#: builtin/apply.c:3190
-#, c-format
-msgid "patch failed: %s:%ld"
-msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
+#: builtin/am.c:984
+msgid "Patch format detection failed."
+msgstr "Patch-Formaterkennung fehlgeschlagen."
-#: builtin/apply.c:3314
+#: builtin/am.c:989 builtin/clone.c:379
#, c-format
-msgid "cannot checkout %s"
-msgstr "kann %s nicht auschecken"
+msgid "failed to create directory '%s'"
+msgstr "Fehler beim Erstellen von Verzeichnis '%s'"
-#: builtin/apply.c:3370
-#, c-format
-msgid "reading from '%s' beyond a symbolic link"
-msgstr "'%s' ist hinter einer symbolischen Verknüpfung"
+#: builtin/am.c:993
+msgid "Failed to split patches."
+msgstr "Fehler beim Aufteilen der Patches."
-#: builtin/apply.c:3399 builtin/apply.c:3630
-#, c-format
-msgid "path %s has been renamed/deleted"
-msgstr "Pfad %s wurde umbenannt/gelöscht"
+#: builtin/am.c:1125 builtin/commit.c:376
+msgid "unable to write index file"
+msgstr "Konnte Index-Datei nicht schreiben."
-#: builtin/apply.c:3482 builtin/apply.c:3644
+#: builtin/am.c:1176
#, c-format
-msgid "%s: does not exist in index"
-msgstr "%s ist nicht im Index"
+msgid "When you have resolved this problem, run \"%s --continue\"."
+msgstr ""
+"Wenn Sie das Problem aufgelöst haben, führen Sie \"%s --continue\" aus."
-#: builtin/apply.c:3486 builtin/apply.c:3636 builtin/apply.c:3658
+#: builtin/am.c:1177
#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
+msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
+msgstr ""
+"Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen \"%s --skip"
+"\" aus."
-#: builtin/apply.c:3491 builtin/apply.c:3652
+#: builtin/am.c:1178
#, c-format
-msgid "%s: does not match index"
-msgstr "%s entspricht nicht der Version im Index"
+msgid "To restore the original branch and stop patching, run \"%s --abort\"."
+msgstr ""
+"Um den ursprünglichen Branch wiederherzustellen und die Anwendung der "
+"Patches abzubrechen, führen Sie \"%s --abort\" aus."
-#: builtin/apply.c:3597
-msgid "removal patch leaves file contents"
-msgstr "Lösch-Patch hinterlässt Dateiinhalte"
+#: builtin/am.c:1316
+msgid "Patch is empty. Was it split wrong?"
+msgstr "Patch ist leer. War dessen Aufteilung falsch?"
-#: builtin/apply.c:3669
+#: builtin/am.c:1390 builtin/log.c:1550
#, c-format
-msgid "%s: wrong type"
-msgstr "%s: falscher Typ"
+msgid "invalid ident line: %s"
+msgstr "Ungültige Identifikationszeile: %s"
-#: builtin/apply.c:3671
+#: builtin/am.c:1417
#, c-format
-msgid "%s has type %o, expected %o"
-msgstr "%s ist vom Typ %o, erwartete %o"
+msgid "unable to parse commit %s"
+msgstr "Konnte Commit '%s' nicht parsen."
-#: builtin/apply.c:3822 builtin/apply.c:3824
-#, c-format
-msgid "invalid path '%s'"
-msgstr "Ungültiger Pfad '%s'"
+#: builtin/am.c:1610
+msgid "Repository lacks necessary blobs to fall back on 3-way merge."
+msgstr ""
+"Dem Repository fehlen notwendige Blobs um auf einen 3-Wege-Merge "
+"zurückzufallen."
-#: builtin/apply.c:3879
-#, c-format
-msgid "%s: already exists in index"
-msgstr "%s ist bereits bereitgestellt"
+#: builtin/am.c:1612
+msgid "Using index info to reconstruct a base tree..."
+msgstr ""
+"Verwende Informationen aus der Staging-Area, um ein Basisverzeichnis "
+"nachzustellen ..."
-#: builtin/apply.c:3882
-#, c-format
-msgid "%s: already exists in working directory"
-msgstr "%s existiert bereits im Arbeitsverzeichnis"
+#: builtin/am.c:1631
+msgid ""
+"Did you hand edit your patch?\n"
+"It does not apply to blobs recorded in its index."
+msgstr ""
+"Haben Sie den Patch per Hand editiert?\n"
+"Er kann nicht auf die Blobs in seiner 'index' Zeile angewendet werden."
-#: builtin/apply.c:3902
-#, c-format
-msgid "new mode (%o) of %s does not match old mode (%o)"
-msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o)"
+#: builtin/am.c:1637
+msgid "Falling back to patching base and 3-way merge..."
+msgstr "Falle zurück zum Patchen der Basis und zum 3-Wege-Merge ..."
-#: builtin/apply.c:3907
-#, c-format
-msgid "new mode (%o) of %s does not match old mode (%o) of %s"
-msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o) von %s"
+#: builtin/am.c:1662
+msgid "Failed to merge in the changes."
+msgstr "Merge der Änderungen fehlgeschlagen."
-#: builtin/apply.c:3927
-#, c-format
-msgid "affected file '%s' is beyond a symbolic link"
-msgstr "betroffene Datei '%s' ist hinter einer symbolischen Verknüpfung"
+#: builtin/am.c:1686 builtin/merge.c:628
+msgid "git write-tree failed to write a tree"
+msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl"
-#: builtin/apply.c:3931
-#, c-format
-msgid "%s: patch does not apply"
-msgstr "%s: Patch konnte nicht angewendet werden"
+#: builtin/am.c:1693
+msgid "applying to an empty history"
+msgstr "auf leere Historie anwenden"
-#: builtin/apply.c:3945
-#, c-format
-msgid "Checking patch %s..."
-msgstr "Prüfe Patch %s ..."
+#: builtin/am.c:1706 builtin/commit.c:1769 builtin/merge.c:798
+#: builtin/merge.c:823
+msgid "failed to write commit object"
+msgstr "Fehler beim Schreiben des Commit-Objektes."
-#: builtin/apply.c:4038 builtin/checkout.c:233 builtin/reset.c:135
+#: builtin/am.c:1739 builtin/am.c:1743
#, c-format
-msgid "make_cache_entry failed for path '%s'"
-msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen"
+msgid "cannot resume: %s does not exist."
+msgstr "Kann nicht fortsetzen: %s existiert nicht"
-#: builtin/apply.c:4182
-#, c-format
-msgid "unable to remove %s from index"
-msgstr "konnte %s nicht aus dem Index entfernen"
+#: builtin/am.c:1759
+msgid "cannot be interactive without stdin connected to a terminal."
+msgstr ""
+"Kann nicht interaktiv sein, ohne dass die Standard-Eingabe mit einem "
+"Terminal verbunden ist."
-#: builtin/apply.c:4215
-#, c-format
-msgid "corrupt patch for submodule %s"
-msgstr "fehlerhafter Patch für Submodul %s"
+#: builtin/am.c:1764
+msgid "Commit Body is:"
+msgstr "Commit-Beschreibung ist:"
-#: builtin/apply.c:4219
-#, c-format
-msgid "unable to stat newly created file '%s'"
-msgstr "konnte neu erstellte Datei '%s' nicht lesen"
+#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
+#. in your translation. The program will only accept English
+#. input at this point.
+#.
+#: builtin/am.c:1774
+msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
+msgstr "Anwenden? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
-#: builtin/apply.c:4224
+#: builtin/am.c:1824
#, c-format
-msgid "unable to create backing store for newly created file %s"
-msgstr "kann internen Speicher für eben erstellte Datei %s nicht erzeugen"
+msgid "Dirty index: cannot apply patches (dirty: %s)"
+msgstr "Geänderter Index: kann Patches nicht anwenden (geändert: %s)"
-#: builtin/apply.c:4227 builtin/apply.c:4340
+#: builtin/am.c:1861 builtin/am.c:1933
#, c-format
-msgid "unable to add cache entry for %s"
-msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
+msgid "Applying: %.*s"
+msgstr "Wende an: %.*s"
-#: builtin/apply.c:4260
-#, c-format
-msgid "closing file '%s'"
-msgstr "schließe Datei '%s'"
+#: builtin/am.c:1877
+msgid "No changes -- Patch already applied."
+msgstr "Keine Änderungen -- Patches bereits angewendet."
-#: builtin/apply.c:4313
+#: builtin/am.c:1885
#, c-format
-msgid "unable to write file '%s' mode %o"
-msgstr "konnte Datei '%s' mit Modus %o nicht schreiben"
+msgid "Patch failed at %s %.*s"
+msgstr "Anwendung des Patches fehlgeschlagen bei %s %.*s"
-#: builtin/apply.c:4403
+#: builtin/am.c:1891
#, c-format
-msgid "Applied patch %s cleanly."
-msgstr "Patch %s sauber angewendet"
+msgid "The copy of the patch that failed is found in: %s"
+msgstr "Die Kopie des fehlgeschlagenen Patches befindet sich in: %s"
-#: builtin/apply.c:4411
-msgid "internal error"
-msgstr "interner Fehler"
+#: builtin/am.c:1936
+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 ""
+"Keine Änderungen - haben Sie vergessen 'git add' zu benutzen?\n"
+"Wenn keine Änderungen mehr zum Commit vorzumerken sind, könnten\n"
+"diese bereits anderweitig eingefügt worden sein; Sie könnten diesen Patch\n"
+"auslassen."
-#: builtin/apply.c:4414
-#, c-format
-msgid "Applying patch %%s with %d reject..."
-msgid_plural "Applying patch %%s with %d rejects..."
-msgstr[0] "Wende Patch %%s mit %d Zurückweisung an..."
-msgstr[1] "Wende Patch %%s mit %d Zurückweisungen an..."
+#: builtin/am.c:1943
+msgid ""
+"You still have unmerged paths in your index.\n"
+"Did you forget to use 'git add'?"
+msgstr ""
+"Sie haben immer noch nicht zusammengeführte Pfade im Index.\n"
+"Haben Sie vergessen 'git add' zu benutzen?"
-#: builtin/apply.c:4424
+#: builtin/am.c:2051 builtin/am.c:2055 builtin/am.c:2067 builtin/reset.c:308
+#: builtin/reset.c:316
#, c-format
-msgid "truncating .rej filename to %.*s.rej"
-msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
+msgid "Could not parse object '%s'."
+msgstr "Konnte Objekt '%s' nicht parsen."
-#: builtin/apply.c:4432
-#, c-format
-msgid "cannot open %s: %s"
-msgstr "Kann %s nicht öffnen: %s"
+#: builtin/am.c:2103
+msgid "failed to clean index"
+msgstr "Fehler beim Bereinigen des Index"
-#: builtin/apply.c:4445
-#, c-format
-msgid "Hunk #%d applied cleanly."
-msgstr "Patch-Bereich #%d sauber angewendet."
+#: builtin/am.c:2137
+msgid ""
+"You seem to have moved HEAD since the last 'am' failure.\n"
+"Not rewinding to ORIG_HEAD"
+msgstr ""
+"Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n"
+"Keine Zurücksetzung zu ORIG_HEAD."
-#: builtin/apply.c:4448
+#: builtin/am.c:2200
#, c-format
-msgid "Rejected hunk #%d."
-msgstr "Patch-Block #%d zurückgewiesen."
+msgid "Invalid value for --patch-format: %s"
+msgstr "Ungültiger Wert für --patch-format: %s"
-#: builtin/apply.c:4537
-#, c-format
-msgid "Skipped patch '%s'."
-msgstr "Patch '%s' ausgelassen."
+#: builtin/am.c:2233
+msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
+msgstr "git am [<Optionen>] [(<mbox> | <E-Mail-Verzeichnis>)...]"
-#: builtin/apply.c:4545
-msgid "unrecognized input"
-msgstr "nicht erkannte Eingabe"
+#: builtin/am.c:2234
+msgid "git am [<options>] (--continue | --skip | --abort)"
+msgstr "git am [<Optionen>] (--continue | --skip | --abort)"
-#: builtin/apply.c:4556
-msgid "unable to read index file"
-msgstr "Konnte Index-Datei nicht lesen"
+#: builtin/am.c:2240
+msgid "run interactively"
+msgstr "interaktiv ausführen"
-#: builtin/apply.c:4701
-msgid "--3way outside a repository"
-msgstr ""
-"Die Option --3way kann nicht außerhalb eines Repositories verwendet werden."
+#: builtin/am.c:2242
+msgid "historical option -- no-op"
+msgstr "historische Option -- kein Effekt"
-#: builtin/apply.c:4709
-msgid "--index outside a repository"
-msgstr ""
-"Die Option --index kann nicht außerhalb eines Repositories verwendet werden."
+#: builtin/am.c:2244
+msgid "allow fall back on 3way merging if needed"
+msgstr "erlaube, falls notwendig, das Zurückfallen auf einen 3-Wege-Merge"
-#: builtin/apply.c:4712
-msgid "--cached outside a repository"
-msgstr ""
-"Die Option --cached kann nicht außerhalb eines Repositories verwendet werden."
+#: builtin/am.c:2245 builtin/init-db.c:483 builtin/prune-packed.c:57
+#: builtin/repack.c:172
+msgid "be quiet"
+msgstr "weniger Ausgaben"
-#: builtin/apply.c:4745
-#, c-format
-msgid "can't open patch '%s'"
-msgstr "kann Patch '%s' nicht öffnen"
+#: builtin/am.c:2247
+msgid "add a Signed-off-by line to the commit message"
+msgstr "der Commit-Beschreibung eine Signed-off-by Zeile hinzufügen"
-#: builtin/apply.c:4760
-#, c-format
-msgid "squelched %d whitespace error"
-msgid_plural "squelched %d whitespace errors"
-msgstr[0] "unterdrückte %d Whitespace-Fehler"
-msgstr[1] "unterdrückte %d Whitespace-Fehler"
+#: builtin/am.c:2250
+msgid "recode into utf8 (default)"
+msgstr "nach UTF-8 umkodieren (Standard)"
-#: builtin/apply.c:4766 builtin/apply.c:4776
-#, c-format
-msgid "%d line adds whitespace errors."
-msgid_plural "%d lines add whitespace errors."
-msgstr[0] "%d Zeile fügt Whitespace-Fehler hinzu."
-msgstr[1] "%d Zeilen fügen Whitespace-Fehler hinzu."
+#: builtin/am.c:2252
+msgid "pass -k flag to git-mailinfo"
+msgstr "-k an git-mailinfo übergeben"
-#: builtin/apply.c:4800
-msgid "don't apply changes matching the given path"
-msgstr "keine Änderungen im angegebenen Pfad anwenden"
+#: builtin/am.c:2254
+msgid "pass -b flag to git-mailinfo"
+msgstr "-b an git-mailinfo übergeben"
-#: builtin/apply.c:4803
-msgid "apply changes matching the given path"
-msgstr "Änderungen nur im angegebenen Pfad anwenden"
+#: builtin/am.c:2256
+msgid "pass -m flag to git-mailinfo"
+msgstr "-m an git-mailinfo übergeben"
-#: builtin/apply.c:4806
-msgid "remove <num> leading slashes from traditional diff paths"
-msgstr ""
-"<Anzahl> vorangestellte Schrägstriche von herkömmlichen Differenzpfaden "
-"entfernen"
+#: builtin/am.c:2258
+msgid "pass --keep-cr flag to git-mailsplit for mbox format"
+msgstr "--keep-cr an git-mailsplit für mbox-Format übergeben"
-#: builtin/apply.c:4809
-msgid "ignore additions made by the patch"
-msgstr "hinzugefügte Zeilen des Patches ignorieren"
+#: builtin/am.c:2261
+msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
+msgstr "kein --keep-cr an git-mailsplit übergeben, unabhängig von am.keepcr"
-#: builtin/apply.c:4811
-msgid "instead of applying the patch, output diffstat for the input"
-msgstr ""
-"anstatt der Anwendung des Patches, den \"diffstat\" für die Eingabe "
-"ausgegeben"
+#: builtin/am.c:2264
+msgid "strip everything before a scissors line"
+msgstr "alles vor einer Scheren-Zeile entfernen"
-#: builtin/apply.c:4815
-msgid "show number of added and deleted lines in decimal notation"
-msgstr ""
-"die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation anzeigen"
+#: builtin/am.c:2266 builtin/am.c:2269 builtin/am.c:2272 builtin/am.c:2275
+#: builtin/am.c:2278 builtin/am.c:2281 builtin/am.c:2284 builtin/am.c:2287
+#: builtin/am.c:2293
+msgid "pass it through git-apply"
+msgstr "an git-apply übergeben"
-#: builtin/apply.c:4817
-msgid "instead of applying the patch, output a summary for the input"
-msgstr ""
-"anstatt der Anwendung des Patches, eine Zusammenfassung für die Eingabe "
-"ausgeben"
+#: builtin/am.c:2283 builtin/fmt-merge-msg.c:662 builtin/fmt-merge-msg.c:665
+#: builtin/grep.c:707 builtin/merge.c:200 builtin/pull.c:135 builtin/pull.c:194
+#: builtin/repack.c:181 builtin/repack.c:185 builtin/show-branch.c:644
+#: builtin/show-ref.c:175 builtin/tag.c:340 parse-options.h:132
+#: parse-options.h:134 parse-options.h:245
+msgid "n"
+msgstr "Anzahl"
-#: builtin/apply.c:4819
-msgid "instead of applying the patch, see if the patch is applicable"
-msgstr ""
-"anstatt der Anwendung des Patches, zeige ob Patch angewendet werden kann"
+#: builtin/am.c:2289 builtin/for-each-ref.c:37 builtin/replace.c:438
+#: builtin/tag.c:372
+msgid "format"
+msgstr "Format"
-#: builtin/apply.c:4821
-msgid "make sure the patch is applicable to the current index"
-msgstr ""
-"sicherstellen, dass der Patch mit dem aktuellen Index angewendet werden kann"
+#: builtin/am.c:2290
+msgid "format the patch(es) are in"
+msgstr "Patch-Format"
-#: builtin/apply.c:4823
-msgid "apply a patch without touching the working tree"
-msgstr "Patch anwenden, ohne Änderungen im Arbeitsverzeichnis vorzunehmen"
+#: builtin/am.c:2296
+msgid "override error message when patch failure occurs"
+msgstr "Meldung bei fehlerhafter Patch-Anwendung überschreiben"
-#: builtin/apply.c:4825
-msgid "accept a patch that touches outside the working area"
-msgstr ""
-"Patch anwenden, der Änderungen außerhalb des Arbeitsverzeichnisses vornimmt"
+#: builtin/am.c:2298
+msgid "continue applying patches after resolving a conflict"
+msgstr "Anwendung der Patches nach Auflösung eines Konfliktes fortsetzen"
-#: builtin/apply.c:4827
-msgid "also apply the patch (use with --stat/--summary/--check)"
-msgstr "Patch anwenden (Benutzung mit --stat/--summary/--check)"
+#: builtin/am.c:2301
+msgid "synonyms for --continue"
+msgstr "Synonyme für --continue"
-#: builtin/apply.c:4829
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "versuche 3-Wege-Merge, wenn der Patch nicht angewendet werden konnte"
+#: builtin/am.c:2304
+msgid "skip the current patch"
+msgstr "den aktuellen Patch auslassen"
-#: builtin/apply.c:4831
-msgid "build a temporary index based on embedded index information"
+#: builtin/am.c:2307
+msgid "restore the original branch and abort the patching operation."
msgstr ""
-"einen temporären Index, basierend auf den integrierten Index-Informationen, "
-"erstellen"
-
-#: builtin/apply.c:4834 builtin/checkout-index.c:169 builtin/ls-files.c:426
-msgid "paths are separated with NUL character"
-msgstr "Pfade sind getrennt durch NUL Zeichen"
+"ursprünglichen Branch wiederherstellen und Anwendung der Patches abbrechen"
-#: builtin/apply.c:4836
-msgid "ensure at least <n> lines of context match"
-msgstr ""
-"sicher stellen, dass mindestens <n> Zeilen des Kontextes übereinstimmen"
+#: builtin/am.c:2311
+msgid "lie about committer date"
+msgstr "Autor-Datum als Commit-Datum verwenden"
-#: builtin/apply.c:4838
-msgid "detect new or modified lines that have whitespace errors"
-msgstr "neue oder geänderte Zeilen, die Whitespace-Fehler haben, ermitteln"
+#: builtin/am.c:2313
+msgid "use current timestamp for author date"
+msgstr "aktuellen Zeitstempel als Autor-Datum verwenden"
-#: builtin/apply.c:4841 builtin/apply.c:4844
-msgid "ignore changes in whitespace when finding context"
-msgstr "Änderungen im Whitespace bei der Suche des Kontextes ignorieren"
+#: builtin/am.c:2315 builtin/commit.c:1605 builtin/merge.c:229
+#: builtin/pull.c:165 builtin/revert.c:92 builtin/tag.c:355
+msgid "key-id"
+msgstr "GPG-Schlüsselkennung"
-#: builtin/apply.c:4847
-msgid "apply the patch in reverse"
-msgstr "den Patch in umgekehrter Reihenfolge anwenden"
+#: builtin/am.c:2316
+msgid "GPG-sign commits"
+msgstr "Commits mit GPG signieren"
-#: builtin/apply.c:4849
-msgid "don't expect at least one line of context"
-msgstr "keinen Kontext erwarten"
+#: builtin/am.c:2319
+msgid "(internal use for git-rebase)"
+msgstr "(intern für git-rebase verwendet)"
-#: builtin/apply.c:4851
-msgid "leave the rejected hunks in corresponding *.rej files"
+#: builtin/am.c:2334
+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 ""
-"zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien hinterlassen"
+"Die -b/--binary Option hat seit Langem keinen Effekt und wird\n"
+"entfernt. Bitte verwenden Sie diese nicht mehr."
-#: builtin/apply.c:4853
-msgid "allow overlapping hunks"
-msgstr "sich überlappende Patch-Blöcke erlauben"
+#: builtin/am.c:2341
+msgid "failed to read the index"
+msgstr "Fehler beim Lesen des Index"
-#: builtin/apply.c:4856
-msgid "tolerate incorrectly detected missing new-line at the end of file"
-msgstr "fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende tolerieren"
+#: builtin/am.c:2356
+#, c-format
+msgid "previous rebase directory %s still exists but mbox given."
+msgstr "Vorheriges Rebase-Verzeichnis %s existiert noch, aber mbox gegeben."
-#: builtin/apply.c:4859
-msgid "do not trust the line counts in the hunk headers"
-msgstr "den Zeilennummern im Kopf des Patch-Blocks nicht vertrauen"
+#: builtin/am.c:2380
+#, c-format
+msgid ""
+"Stray %s directory found.\n"
+"Use \"git am --abort\" to remove it."
+msgstr ""
+"Stray %s Verzeichnis gefunden.\n"
+"Benutzen Sie \"git am --abort\", um es zu entfernen."
-#: builtin/apply.c:4862
-msgid "prepend <root> to all filenames"
-msgstr "<Wurzelverzeichnis> vor alle Dateinamen stellen"
+#: builtin/am.c:2386
+msgid "Resolve operation not in progress, we are not resuming."
+msgstr "Es ist keine Auflösung im Gange, es wird nicht fortgesetzt."
+
+#: builtin/apply.c:8
+msgid "git apply [<options>] [<patch>...]"
+msgstr "git apply [<Optionen>] [<Patch>...]"
#: builtin/archive.c:17
#, c-format
msgid "Blaming lines"
msgstr "Verarbeite Zeilen"
-#: builtin/blame.c:2536
+#: builtin/blame.c:2577
msgid "Show blame entries as we find them, incrementally"
msgstr "\"blame\"-Einträge schrittweise anzeigen, während wir sie generieren"
-#: builtin/blame.c:2537
+#: builtin/blame.c:2578
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr "leere SHA-1 für Grenz-Commits anzeigen (Standard: aus)"
-#: builtin/blame.c:2538
+#: builtin/blame.c:2579
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr "Ursprungs-Commit nicht als Grenzen behandeln (Standard: aus)"
-#: builtin/blame.c:2539
+#: builtin/blame.c:2580
msgid "Show work cost statistics"
msgstr "Statistiken zum Arbeitsaufwand anzeigen"
-#: builtin/blame.c:2540
+#: builtin/blame.c:2581
msgid "Force progress reporting"
msgstr "Fortschrittsanzeige erzwingen"
-#: builtin/blame.c:2541
+#: builtin/blame.c:2582
msgid "Show output score for blame entries"
msgstr "Ausgabebewertung für \"blame\"-Einträge anzeigen"
-#: builtin/blame.c:2542
+#: builtin/blame.c:2583
msgid "Show original filename (Default: auto)"
msgstr "ursprünglichen Dateinamen anzeigen (Standard: auto)"
-#: builtin/blame.c:2543
+#: builtin/blame.c:2584
msgid "Show original linenumber (Default: off)"
msgstr "ursprüngliche Zeilennummer anzeigen (Standard: aus)"
-#: builtin/blame.c:2544
+#: builtin/blame.c:2585
msgid "Show in a format designed for machine consumption"
msgstr "Anzeige in einem Format für maschinelle Auswertung"
-#: builtin/blame.c:2545
+#: builtin/blame.c:2586
msgid "Show porcelain format with per-line commit information"
msgstr ""
"Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile"
-#: builtin/blame.c:2546
+#: builtin/blame.c:2587
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr ""
"Den gleichen Ausgabemodus benutzen wie \"git-annotate\" (Standard: aus)"
-#: builtin/blame.c:2547
+#: builtin/blame.c:2588
msgid "Show raw timestamp (Default: off)"
msgstr "Unbearbeiteten Zeitstempel anzeigen (Standard: aus)"
-#: builtin/blame.c:2548
+#: builtin/blame.c:2589
msgid "Show long commit SHA1 (Default: off)"
msgstr "Langen Commit-SHA1 anzeigen (Standard: aus)"
-#: builtin/blame.c:2549
+#: builtin/blame.c:2590
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Den Namen des Autors und den Zeitstempel unterdrücken (Standard: aus)"
-#: builtin/blame.c:2550
+#: builtin/blame.c:2591
msgid "Show author email instead of name (Default: off)"
msgstr ""
"Anstatt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
-#: builtin/blame.c:2551
+#: builtin/blame.c:2592
msgid "Ignore whitespace differences"
msgstr "Unterschiede im Whitespace ignorieren"
-#: builtin/blame.c:2552
+#: builtin/blame.c:2599
+msgid "Use an experimental indent-based heuristic to improve diffs"
+msgstr ""
+"eine experimentelle, auf Einrückungen basierende Heuristik zur Verbesserung\n"
+"der Darstellung von Unterschieden verwenden"
+
+#: builtin/blame.c:2600
+msgid "Use an experimental blank-line-based heuristic to improve diffs"
+msgstr ""
+"eine experimentelle, auf Leerzeilen basierende Heuristik zur Verbesserung\n"
+"der Darstellung von Unterschieden verwenden"
+
+#: builtin/blame.c:2602
msgid "Spend extra cycles to find better match"
msgstr "Länger arbeiten, um bessere Übereinstimmungen zu finden"
-#: builtin/blame.c:2553
+#: builtin/blame.c:2603
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Commits von <Datei> benutzen, anstatt \"git-rev-list\" aufzurufen"
-#: builtin/blame.c:2554
+#: builtin/blame.c:2604
msgid "Use <file>'s contents as the final image"
msgstr "Inhalte der <Datei>en als endgültiges Abbild benutzen"
-#: builtin/blame.c:2555 builtin/blame.c:2556
+#: builtin/blame.c:2605 builtin/blame.c:2606
msgid "score"
msgstr "Bewertung"
-#: builtin/blame.c:2555
+#: builtin/blame.c:2605
msgid "Find line copies within and across files"
msgstr "kopierte Zeilen innerhalb oder zwischen Dateien finden"
-#: builtin/blame.c:2556
+#: builtin/blame.c:2606
msgid "Find line movements within and across files"
msgstr "verschobene Zeilen innerhalb oder zwischen Dateien finden"
-#: builtin/blame.c:2557
+#: builtin/blame.c:2607
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2557
+#: builtin/blame.c:2607
msgid "Process only line range n,m, counting from 1"
msgstr "nur Zeilen im Bereich n,m verarbeiten, gezählt von 1"
+#: builtin/blame.c:2654
+msgid "--progress can't be used with --incremental or porcelain formats"
+msgstr ""
+"--progress kann nicht mit --incremental oder Formaten für Fremdprogramme\n"
+"verwendet werden"
+
#. TRANSLATORS: This string is used to tell us the maximum
#. display width for a relative timestamp in "git blame"
#. output. For C locale, "4 years, 11 months ago", which
#. takes 22 places, is the longest among various forms of
#. relative timestamps, but your language may need more or
#. fewer display columns.
-#: builtin/blame.c:2649
+#: builtin/blame.c:2700
msgid "4 years, 11 months ago"
msgstr "vor 4 Jahren, und 11 Monaten"
+#: builtin/blame.c:2780
+msgid "--contents and --reverse do not blend well."
+msgstr "--contents und --reverse funktionieren gemeinsam nicht."
+
+#: builtin/blame.c:2800
+msgid "cannot use --contents with final commit object name"
+msgstr "kann --contents nicht mit endgültigem Namen des Commit-Objektes benutzen"
+
+#: builtin/blame.c:2805
+msgid "--reverse and --first-parent together require specified latest commit"
+msgstr ""
+"--reverse und --first-parent zusammen erfordern die Angabe eines endgültigen\n"
+"Commits"
+
+#: builtin/blame.c:2832
+msgid ""
+"--reverse --first-parent together require range along first-parent chain"
+msgstr ""
+"--reverse und --first-parent zusammen erfordern einen Bereich entlang der\n"
+"\"first-parent\"-Kette"
+
+#: builtin/blame.c:2843
+#, c-format
+msgid "no such path %s in %s"
+msgstr "Pfad %s nicht in %s"
+
+#: builtin/blame.c:2854
+#, c-format
+msgid "cannot read blob %s for path %s"
+msgstr "kann Blob %s für Pfad '%s' nicht lesen"
+
+#: builtin/blame.c:2873
+#, c-format
+msgid "file %s has only %lu line"
+msgid_plural "file %s has only %lu lines"
+msgstr[0] "Datei %s hat nur %lu Zeile"
+msgstr[1] "Datei %s hat nur %lu Zeilen"
+
#: builtin/branch.c:26
msgid "git branch [<options>] [-r | -a] [--merged | --no-merged]"
msgstr "git branch [<Optionen>] [-r | -a] [--merged | --no-merged]"
msgid "change the upstream info"
msgstr "Informationen zum Upstream-Branch ändern"
+#: builtin/branch.c:660
+msgid "Unset the upstream info"
+msgstr "Informationen zum Upstream-Branch entfernen"
+
#: builtin/branch.c:661
msgid "use colored output"
msgstr "farbige Ausgaben verwenden"
msgid "field name to sort on"
msgstr "sortiere nach diesem Feld"
-#: builtin/branch.c:686 builtin/for-each-ref.c:41 builtin/notes.c:402
-#: builtin/notes.c:405 builtin/notes.c:565 builtin/notes.c:568
+#: builtin/branch.c:686 builtin/for-each-ref.c:41 builtin/notes.c:404
+#: builtin/notes.c:407 builtin/notes.c:567 builtin/notes.c:570
#: builtin/tag.c:369
msgid "object"
msgstr "Objekt"
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Konnte HEAD nicht als gültige Referenz auflösen."
-#: builtin/branch.c:709 builtin/clone.c:707
+#: builtin/branch.c:709 builtin/clone.c:706
msgid "HEAD not found below refs/heads!"
msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!"
msgid "Need a repository to unbundle."
msgstr "Zum Entpacken wird ein Repository benötigt."
-#: builtin/cat-file.c:443
+#: builtin/cat-file.c:513
msgid ""
-"git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|"
-"<type>|--textconv) <object>"
-msgstr ""
-"git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|"
-"<Art>|--textconv) <Objekt>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
+"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+msgstr "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -p | <Art> | --textconv | --filters) [--path=<Pfad>] <Objekt>"
-#: builtin/cat-file.c:444
-msgid "git cat-file (--batch | --batch-check) [--follow-symlinks]"
-msgstr "git cat-file (--batch | --batch-check) [--follow-symlinks]"
+#: builtin/cat-file.c:514
+msgid ""
+"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
+"filters]"
+msgstr "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --filters]"
-#: builtin/cat-file.c:481
+#: builtin/cat-file.c:551
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<Art> kann sein: blob, tree, commit, tag"
-#: builtin/cat-file.c:482
+#: builtin/cat-file.c:552
msgid "show object type"
msgstr "Objektart anzeigen"
-#: builtin/cat-file.c:483
+#: builtin/cat-file.c:553
msgid "show object size"
msgstr "Objektgröße anzeigen"
-#: builtin/cat-file.c:485
+#: builtin/cat-file.c:555
msgid "exit with zero when there's no error"
msgstr "mit Rückgabewert 0 beenden, wenn kein Fehler aufgetreten ist"
-#: builtin/cat-file.c:486
+#: builtin/cat-file.c:556
msgid "pretty-print object's content"
msgstr "ansprechende Anzeige des Objektinhaltes"
-#: builtin/cat-file.c:488
+#: builtin/cat-file.c:558
msgid "for blob objects, run textconv on object's content"
msgstr "eine Textkonvertierung auf den Inhalt von Blob-Objekten ausführen"
-#: builtin/cat-file.c:490
+#: builtin/cat-file.c:560
+msgid "for blob objects, run filters on object's content"
+msgstr "für Blob-Objekte, Filter auf Objekt-Inhalte ausführen"
+
+#: builtin/cat-file.c:561 git-submodule.sh:923
+msgid "blob"
+msgstr "Blob"
+
+#: builtin/cat-file.c:562
+msgid "use a specific path for --textconv/--filters"
+msgstr "einen bestimmten Pfad für --textconv/--filters verwenden"
+
+#: builtin/cat-file.c:564
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "-s und -t mit beschädigten Objekten erlauben"
-#: builtin/cat-file.c:491
+#: builtin/cat-file.c:565
msgid "buffer --batch output"
msgstr "Ausgabe von --batch puffern"
-#: builtin/cat-file.c:493
+#: builtin/cat-file.c:567
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:496
+#: builtin/cat-file.c:570
msgid "show info about objects fed from the standard input"
msgstr ""
"Anzeige von Informationen über Objekte, gelesen von der Standard-Eingabe"
-#: builtin/cat-file.c:499
+#: builtin/cat-file.c:573
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr ""
"symbolischen Verknüpfungen innerhalb des Repositories folgen (verwendet mit "
"--batch oder --batch-check)"
-#: builtin/cat-file.c:501
+#: builtin/cat-file.c:575
msgid "show all objects with --batch or --batch-check"
msgstr "alle Objekte mit --batch oder --batch-check anzeigen"
msgid "use .gitattributes only from the index"
msgstr "nur .gitattributes vom Index verwenden"
-#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:97
+#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:98
msgid "read file names from stdin"
msgstr "Dateinamen von der Standard-Eingabe lesen"
msgid "terminate input and output records by a NUL character"
msgstr "Einträge von Ein- und Ausgabe mit NUL-Zeichen abschließen"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1138 builtin/gc.c:325
+#: builtin/check-ignore.c:18 builtin/checkout.c:1137 builtin/gc.c:325
msgid "suppress progress reporting"
msgstr "Fortschrittsanzeige unterdrücken"
msgstr "den Inhalt in temporäre Dateien schreiben"
#: builtin/checkout-index.c:174 builtin/column.c:30
-#: builtin/submodule--helper.c:488 builtin/submodule--helper.c:491
-#: builtin/submodule--helper.c:494 builtin/submodule--helper.c:497
-#: builtin/submodule--helper.c:830 builtin/worktree.c:469
+#: builtin/submodule--helper.c:595 builtin/submodule--helper.c:598
+#: builtin/submodule--helper.c:604 builtin/submodule--helper.c:951
+#: builtin/worktree.c:469
msgid "string"
msgstr "Zeichenkette"
msgid "path '%s' is unmerged"
msgstr "Pfad '%s' ist nicht zusammengeführt."
-#: builtin/checkout.c:495
+#: builtin/checkout.c:494
msgid "you need to resolve your current index first"
msgstr "Sie müssen zuerst die Konflikte in Ihrem aktuellen Index auflösen."
-#: builtin/checkout.c:625
+#: builtin/checkout.c:624
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Kann \"reflog\" für '%s' nicht durchführen: %s\n"
-#: builtin/checkout.c:664
+#: builtin/checkout.c:663
msgid "HEAD is now at"
msgstr "HEAD ist jetzt bei"
-#: builtin/checkout.c:668 builtin/clone.c:661
+#: builtin/checkout.c:667 builtin/clone.c:660
msgid "unable to update HEAD"
msgstr "Konnte HEAD nicht aktualisieren."
-#: builtin/checkout.c:672
+#: builtin/checkout.c:671
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Setze Branch '%s' neu\n"
-#: builtin/checkout.c:675
+#: builtin/checkout.c:674
#, c-format
msgid "Already on '%s'\n"
msgstr "Bereits auf '%s'\n"
-#: builtin/checkout.c:679
+#: builtin/checkout.c:678
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Zu umgesetztem Branch '%s' gewechselt\n"
-#: builtin/checkout.c:681 builtin/checkout.c:1070
+#: builtin/checkout.c:680 builtin/checkout.c:1069
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Zu neuem Branch '%s' gewechselt\n"
-#: builtin/checkout.c:683
+#: builtin/checkout.c:682
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Zu Branch '%s' gewechselt\n"
-#: builtin/checkout.c:734
+#: builtin/checkout.c:733
#, c-format
msgid " ... and %d more.\n"
msgstr " ... und %d weitere.\n"
-#: builtin/checkout.c:740
+#: builtin/checkout.c:739
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
"\n"
"%s\n"
-#: builtin/checkout.c:759
+#: builtin/checkout.c:758
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
" git branch <neuer-Branchname> %s\n"
"\n"
-#: builtin/checkout.c:795
+#: builtin/checkout.c:794
msgid "internal error in revision walk"
msgstr "interner Fehler im Revisionsgang"
-#: builtin/checkout.c:799
+#: builtin/checkout.c:798
msgid "Previous HEAD position was"
msgstr "Vorherige Position von HEAD war"
-#: builtin/checkout.c:826 builtin/checkout.c:1065
+#: builtin/checkout.c:825 builtin/checkout.c:1064
msgid "You are on a branch yet to be born"
msgstr "Sie sind auf einem Branch, der noch geboren wird"
-#: builtin/checkout.c:971
+#: builtin/checkout.c:970
#, c-format
msgid "only one reference expected, %d given."
msgstr "nur eine Referenz erwartet, %d gegeben."
-#: builtin/checkout.c:1011 builtin/worktree.c:214
+#: builtin/checkout.c:1010 builtin/worktree.c:214
#, c-format
msgid "invalid reference: %s"
msgstr "Ungültige Referenz: %s"
-#: builtin/checkout.c:1040
+#: builtin/checkout.c:1039
#, c-format
msgid "reference is not a tree: %s"
msgstr "Referenz ist kein \"Tree\"-Objekt: %s"
-#: builtin/checkout.c:1079
+#: builtin/checkout.c:1078
msgid "paths cannot be used with switching branches"
msgstr "Pfade können nicht beim Wechseln von Branches verwendet werden"
-#: builtin/checkout.c:1082 builtin/checkout.c:1086
+#: builtin/checkout.c:1081 builtin/checkout.c:1085
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "'%s' kann nicht beim Wechseln von Branches verwendet werden"
-#: builtin/checkout.c:1090 builtin/checkout.c:1093 builtin/checkout.c:1098
-#: builtin/checkout.c:1101
+#: builtin/checkout.c:1089 builtin/checkout.c:1092 builtin/checkout.c:1097
+#: builtin/checkout.c:1100
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "'%s' kann nicht mit '%s' verwendet werden"
-#: builtin/checkout.c:1106
+#: builtin/checkout.c:1105
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Kann Branch nicht zu Nicht-Commit '%s' wechseln"
-#: builtin/checkout.c:1139 builtin/checkout.c:1141 builtin/clone.c:88
+#: builtin/checkout.c:1138 builtin/checkout.c:1140 builtin/clone.c:93
#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:324
#: builtin/worktree.c:326
msgid "branch"
msgstr "Branch"
-#: builtin/checkout.c:1140
+#: builtin/checkout.c:1139
msgid "create and checkout a new branch"
msgstr "einen neuen Branch erzeugen und auschecken"
-#: builtin/checkout.c:1142
+#: builtin/checkout.c:1141
msgid "create/reset and checkout a branch"
msgstr "einen Branch erstellen/umsetzen und auschecken"
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1142
msgid "create reflog for new branch"
msgstr "das Reflog für den neuen Branch erzeugen"
-#: builtin/checkout.c:1144 builtin/worktree.c:328
+#: builtin/checkout.c:1143 builtin/worktree.c:328
msgid "detach HEAD at named commit"
msgstr "HEAD bei benanntem Commit loslösen"
-#: builtin/checkout.c:1145
+#: builtin/checkout.c:1144
msgid "set upstream info for new branch"
msgstr "Informationen zum Upstream-Branch für den neuen Branch setzen"
-#: builtin/checkout.c:1147
+#: builtin/checkout.c:1146
msgid "new-branch"
msgstr "neuer Branch"
-#: builtin/checkout.c:1147
+#: builtin/checkout.c:1146
msgid "new unparented branch"
msgstr "neuer Branch ohne Eltern-Commit"
-#: builtin/checkout.c:1148
+#: builtin/checkout.c:1147
msgid "checkout our version for unmerged files"
msgstr "unsere Variante für nicht zusammengeführte Dateien auschecken"
-#: builtin/checkout.c:1150
+#: builtin/checkout.c:1149
msgid "checkout their version for unmerged files"
msgstr "ihre Variante für nicht zusammengeführte Dateien auschecken"
-#: builtin/checkout.c:1152
+#: builtin/checkout.c:1151
msgid "force checkout (throw away local modifications)"
msgstr "Auschecken erzwingen (verwirft lokale Änderungen)"
-#: builtin/checkout.c:1153
+#: builtin/checkout.c:1152
msgid "perform a 3-way merge with the new branch"
msgstr "einen 3-Wege-Merge mit dem neuen Branch ausführen"
-#: builtin/checkout.c:1154 builtin/merge.c:231
+#: builtin/checkout.c:1153 builtin/merge.c:231
msgid "update ignored files (default)"
msgstr "ignorierte Dateien aktualisieren (Standard)"
-#: builtin/checkout.c:1155 builtin/log.c:1459 parse-options.h:250
+#: builtin/checkout.c:1154 builtin/log.c:1466 parse-options.h:251
msgid "style"
msgstr "Stil"
-#: builtin/checkout.c:1156
+#: builtin/checkout.c:1155
msgid "conflict style (merge or diff3)"
msgstr "Konfliktstil (merge oder diff3)"
-#: builtin/checkout.c:1159
+#: builtin/checkout.c:1158
msgid "do not limit pathspecs to sparse entries only"
msgstr "keine Einschränkung bei Pfadspezifikationen zum partiellen Auschecken"
-#: builtin/checkout.c:1161
+#: builtin/checkout.c:1160
msgid "second guess 'git checkout <no-such-branch>'"
msgstr "second guess 'git checkout <no-such-branch>'"
-#: builtin/checkout.c:1163
+#: builtin/checkout.c:1162
msgid "do not check if another worktree is holding the given ref"
msgstr ""
"Prüfung, ob die Referenz bereits in einem anderen Arbeitsverzeichnis "
"ausgecheckt wurde, deaktivieren"
-#: builtin/checkout.c:1164 builtin/clone.c:60 builtin/fetch.c:117
-#: builtin/merge.c:228 builtin/pull.c:116 builtin/push.c:536
+#: builtin/checkout.c:1163 builtin/clone.c:63 builtin/fetch.c:119
+#: builtin/merge.c:228 builtin/pull.c:117 builtin/push.c:536
#: builtin/send-pack.c:168
msgid "force progress reporting"
msgstr "Fortschrittsanzeige erzwingen"
-#: builtin/checkout.c:1195
+#: builtin/checkout.c:1194
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "Die Optionen -b, -B und --orphan schließen sich gegenseitig aus."
-#: builtin/checkout.c:1212
+#: builtin/checkout.c:1211
msgid "--track needs a branch name"
msgstr "Bei der Option --track muss ein Branchname angegeben werden."
-#: builtin/checkout.c:1217
+#: builtin/checkout.c:1216
msgid "Missing branch name; try -b"
msgstr "Vermisse Branchnamen; versuchen Sie -b"
-#: builtin/checkout.c:1253
+#: builtin/checkout.c:1252
msgid "invalid path specification"
msgstr "ungültige Pfadspezifikation"
-#: builtin/checkout.c:1260
+#: builtin/checkout.c:1259
#, c-format
msgid ""
"Cannot update paths and switch to branch '%s' at the same time.\n"
"Haben Sie beabsichtigt '%s' auszuchecken, welcher nicht als Commit aufgelöst "
"werden kann?"
-#: builtin/checkout.c:1265
+#: builtin/checkout.c:1264
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach nimmt kein Pfad-Argument '%s'"
-#: builtin/checkout.c:1269
+#: builtin/checkout.c:1268
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
msgid "remove whole directories"
msgstr "ganze Verzeichnisse löschen"
-#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:724
-#: builtin/ls-files.c:457 builtin/name-rev.c:314 builtin/show-ref.c:182
+#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:725
+#: builtin/ls-files.c:536 builtin/name-rev.c:313 builtin/show-ref.c:182
msgid "pattern"
msgstr "Muster"
msgid "git clone [<options>] [--] <repo> [<dir>]"
msgstr "git clone [<Optionen>] [--] <Repository> [<Verzeichnis>]"
-#: builtin/clone.c:62
+#: builtin/clone.c:65
msgid "don't create a checkout"
msgstr "kein Auschecken"
-#: builtin/clone.c:63 builtin/clone.c:65 builtin/init-db.c:476
+#: builtin/clone.c:66 builtin/clone.c:68 builtin/init-db.c:478
msgid "create a bare repository"
msgstr "ein Bare-Repository erstellen"
-#: builtin/clone.c:67
+#: builtin/clone.c:70
msgid "create a mirror repository (implies bare)"
msgstr "ein Spiegelarchiv erstellen (impliziert --bare)"
-#: builtin/clone.c:69
+#: builtin/clone.c:72
msgid "to clone from a local repository"
msgstr "von einem lokalen Repository klonen"
-#: builtin/clone.c:71
+#: builtin/clone.c:74
msgid "don't use local hardlinks, always copy"
msgstr "lokal keine harten Verweise verwenden, immer Kopien"
-#: builtin/clone.c:73
+#: builtin/clone.c:76
msgid "setup as shared repository"
msgstr "als verteiltes Repository einrichten"
-#: builtin/clone.c:75 builtin/clone.c:77
+#: builtin/clone.c:78 builtin/clone.c:80
msgid "initialize submodules in the clone"
msgstr "Submodule im Klon initialisieren"
-#: builtin/clone.c:79
+#: builtin/clone.c:82
msgid "number of submodules cloned in parallel"
msgstr "Anzahl der parallel zu klonenden Submodule"
-#: builtin/clone.c:80 builtin/init-db.c:473
+#: builtin/clone.c:83 builtin/init-db.c:475
msgid "template-directory"
msgstr "Vorlagenverzeichnis"
-#: builtin/clone.c:81 builtin/init-db.c:474
+#: builtin/clone.c:84 builtin/init-db.c:476
msgid "directory from which templates will be used"
msgstr "Verzeichnis, von welchem die Vorlagen verwendet werden"
-#: builtin/clone.c:83 builtin/submodule--helper.c:495
-#: builtin/submodule--helper.c:833
+#: builtin/clone.c:86 builtin/clone.c:88 builtin/submodule--helper.c:602
+#: builtin/submodule--helper.c:954
msgid "reference repository"
msgstr "Repository referenzieren"
-#: builtin/clone.c:85
+#: builtin/clone.c:90
msgid "use --reference only while cloning"
msgstr "--reference nur während des Klonens benutzen"
-#: builtin/clone.c:86 builtin/column.c:26 builtin/merge-file.c:44
+#: builtin/clone.c:91 builtin/column.c:26 builtin/merge-file.c:44
msgid "name"
msgstr "Name"
-#: builtin/clone.c:87
+#: builtin/clone.c:92
msgid "use <name> instead of 'origin' to track upstream"
msgstr "<Name> statt 'origin' für Upstream-Repository verwenden"
-#: builtin/clone.c:89
+#: builtin/clone.c:94
msgid "checkout <branch> instead of the remote's HEAD"
msgstr "<Branch> auschecken, anstatt HEAD des Remote-Repositories"
-#: builtin/clone.c:91
+#: builtin/clone.c:96
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:118 builtin/grep.c:667 builtin/pull.c:201
+#: builtin/clone.c:97 builtin/fetch.c:120 builtin/grep.c:668 builtin/pull.c:202
msgid "depth"
msgstr "Tiefe"
-#: builtin/clone.c:93
+#: builtin/clone.c:98
msgid "create a shallow clone of that depth"
msgstr ""
"einen Klon mit unvollständiger Historie (shallow) in dieser Tiefe erstellen"
-#: builtin/clone.c:95
+#: builtin/clone.c:99 builtin/fetch.c:122 builtin/pack-objects.c:2848
+#: parse-options.h:142
+msgid "time"
+msgstr "Zeit"
+
+#: builtin/clone.c:100
+msgid "create a shallow clone since a specific time"
+msgstr ""
+"einen Klon mit unvollständiger Historie (shallow) seit einer bestimmten Zeit\n"
+"erstellen"
+
+#: builtin/clone.c:101 builtin/fetch.c:124
+msgid "revision"
+msgstr "Commit"
+
+#: builtin/clone.c:102 builtin/fetch.c:125
+msgid "deepen history of shallow clone by excluding rev"
+msgstr ""
+"die Historie eines Klons mit unvollständiger Historie (shallow) mittels\n"
+"Ausschluss eines Commits vertiefen"
+
+#: builtin/clone.c:104
msgid "clone only one branch, HEAD or --branch"
msgstr "nur einen Branch klonen, HEAD oder --branch"
-#: builtin/clone.c:97
+#: builtin/clone.c:106
msgid "any cloned submodules will be shallow"
msgstr "jedes geklonte Submodul mit unvollständiger Historie (shallow)"
-#: builtin/clone.c:98 builtin/init-db.c:482
+#: builtin/clone.c:107 builtin/init-db.c:484
msgid "gitdir"
msgstr ".git-Verzeichnis"
-#: builtin/clone.c:99 builtin/init-db.c:483
+#: builtin/clone.c:108 builtin/init-db.c:485
msgid "separate git dir from working tree"
msgstr "Git-Verzeichnis vom Arbeitsverzeichnis separieren"
-#: builtin/clone.c:100
+#: builtin/clone.c:109
msgid "key=value"
msgstr "Schlüssel=Wert"
-#: builtin/clone.c:101
+#: builtin/clone.c:110
msgid "set config inside the new repository"
msgstr "Konfiguration innerhalb des neuen Repositories setzen"
-#: builtin/clone.c:102 builtin/fetch.c:132 builtin/push.c:547
+#: builtin/clone.c:111 builtin/fetch.c:140 builtin/push.c:547
msgid "use IPv4 addresses only"
msgstr "nur IPv4-Adressen benutzen"
-#: builtin/clone.c:104 builtin/fetch.c:134 builtin/push.c:549
+#: builtin/clone.c:113 builtin/fetch.c:142 builtin/push.c:549
msgid "use IPv6 addresses only"
msgstr "nur IPv6-Adressen benutzen"
-#: builtin/clone.c:241
+#: builtin/clone.c:250
msgid ""
"No directory name could be guessed.\n"
"Please specify a directory on the command line"
"Konnte keinen Verzeichnisnamen erraten.\n"
"Bitte geben Sie ein Verzeichnis auf der Befehlszeile an."
-#: builtin/clone.c:307
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
-"Arbeitsverzeichnis unterstützt."
-
-#: builtin/clone.c:309
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
-
-#: builtin/clone.c:314
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr ""
-"Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
-
-#: builtin/clone.c:317
+#: builtin/clone.c:303
#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr ""
-"Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
-"eingehängt."
+msgid "info: Could not add alternate for '%s': %s\n"
+msgstr "info: Konnte Alternative für '%s' nicht hinzufügen: %s\n"
-#: builtin/clone.c:376
+#: builtin/clone.c:375
#, c-format
msgid "failed to open '%s'"
msgstr "Fehler beim Öffnen von '%s'"
-#: builtin/clone.c:384
+#: builtin/clone.c:383
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s existiert und ist kein Verzeichnis"
-#: builtin/clone.c:398
+#: builtin/clone.c:397
#, c-format
msgid "failed to stat %s\n"
msgstr "Konnte %s nicht lesen\n"
-#: builtin/clone.c:420
+#: builtin/clone.c:419
#, c-format
msgid "failed to create link '%s'"
msgstr "Konnte Verweis '%s' nicht erstellen"
-#: builtin/clone.c:424
+#: builtin/clone.c:423
#, c-format
msgid "failed to copy file to '%s'"
msgstr "Konnte Datei nicht nach '%s' kopieren"
-#: builtin/clone.c:449
+#: builtin/clone.c:448
#, c-format
msgid "done.\n"
msgstr "Fertig.\n"
-#: builtin/clone.c:461
+#: builtin/clone.c:460
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
"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:538
+#: builtin/clone.c:537
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "Konnte zu klonenden Remote-Branch %s nicht finden."
-#: builtin/clone.c:633
+#: builtin/clone.c:632
msgid "remote did not send all necessary objects"
msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet."
-#: builtin/clone.c:649
+#: builtin/clone.c:648
#, c-format
msgid "unable to update %s"
msgstr "kann %s nicht aktualisieren"
-#: builtin/clone.c:698
+#: builtin/clone.c:697
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:729
+#: builtin/clone.c:728
msgid "unable to checkout working tree"
msgstr "Arbeitsverzeichnis konnte nicht ausgecheckt werden"
-#: builtin/clone.c:766
+#: builtin/clone.c:768
msgid "unable to write parameters to config file"
msgstr "konnte Parameter nicht in Konfigurationsdatei schreiben"
-#: builtin/clone.c:829
+#: builtin/clone.c:831
msgid "cannot repack to clean up"
msgstr "Kann \"repack\" zum Aufräumen nicht aufrufen"
-#: builtin/clone.c:831
+#: builtin/clone.c:833
msgid "cannot unlink temporary alternates file"
msgstr "Kann temporäre \"alternates\"-Datei nicht entfernen"
-#: builtin/clone.c:863 builtin/receive-pack.c:1855
+#: builtin/clone.c:866 builtin/receive-pack.c:1895
msgid "Too many arguments."
msgstr "Zu viele Argumente."
-#: builtin/clone.c:867
+#: builtin/clone.c:870
msgid "You must specify a repository to clone."
msgstr "Sie müssen ein Repository zum Klonen angeben."
-#: builtin/clone.c:878
+#: builtin/clone.c:883
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "Die Optionen --bare und --origin %s sind inkompatibel."
-#: builtin/clone.c:881
+#: builtin/clone.c:886
msgid "--bare and --separate-git-dir are incompatible."
msgstr "Die Optionen --bare und --separate-git-dir sind inkompatibel."
-#: builtin/clone.c:894
+#: builtin/clone.c:899
#, c-format
msgid "repository '%s' does not exist"
msgstr "Repository '%s' existiert nicht."
-#: builtin/clone.c:900 builtin/fetch.c:1293
+#: builtin/clone.c:905 builtin/fetch.c:1338
#, c-format
msgid "depth %s is not a positive number"
msgstr "Tiefe %s ist keine positive Zahl"
-#: builtin/clone.c:910
+#: builtin/clone.c:915
#, 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:920
+#: builtin/clone.c:925
#, c-format
msgid "working tree '%s' already exists."
msgstr "Arbeitsverzeichnis '%s' existiert bereits."
-#: builtin/clone.c:935 builtin/clone.c:946 builtin/submodule--helper.c:544
+#: builtin/clone.c:940 builtin/clone.c:951 builtin/submodule--helper.c:657
#: builtin/worktree.c:222 builtin/worktree.c:249
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
-#: builtin/clone.c:938
+#: builtin/clone.c:943
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen"
-#: builtin/clone.c:956
+#: builtin/clone.c:955
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Klone in Bare-Repository '%s' ...\n"
-#: builtin/clone.c:958
+#: builtin/clone.c:957
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Klone nach '%s' ...\n"
-#: builtin/clone.c:997
+#: builtin/clone.c:963
+msgid ""
+"clone --recursive is not compatible with both --reference and --reference-if-"
+"able"
+msgstr "'clone --recursive' ist nicht kompatibel mit --reference und --reference-if-able"
+
+#: builtin/clone.c:1019
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:1000
+#: builtin/clone.c:1021
+msgid "--shallow-since is ignored in local clones; use file:// instead."
+msgstr "--shallow-since wird in lokalen Klonen ignoriert; benutzen Sie stattdessen file://"
+
+#: builtin/clone.c:1023
+msgid "--shallow-exclude is ignored in local clones; use file:// instead."
+msgstr "--shallow-exclude wird in lokalen Klonen ignoriert; benutzen Sie stattdessen file://"
+
+#: builtin/clone.c:1026
msgid "source repository is shallow, ignoring --local"
msgstr ""
"Quelle ist ein Repository mit unvollständiger Historie (shallow),ignoriere --"
"local"
-#: builtin/clone.c:1005
+#: builtin/clone.c:1031
msgid "--local is ignored"
msgstr "--local wird ignoriert"
-#: builtin/clone.c:1009
+#: builtin/clone.c:1035
#, c-format
msgid "Don't know how to clone %s"
msgstr "Weiß nicht wie %s zu klonen ist."
-#: builtin/clone.c:1058 builtin/clone.c:1066
+#: builtin/clone.c:1090 builtin/clone.c:1098
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden"
-#: builtin/clone.c:1069
+#: builtin/clone.c:1101
msgid "You appear to have cloned an empty repository."
msgstr "Sie scheinen ein leeres Repository geklont zu haben."
"Benutzen Sie anschließend \"git cherry-pick --continue\", um die\n"
"Cherry-Pick-Operation mit den verbleibenden Commits fortzusetzen.\n"
-#: builtin/commit.c:308
+#: builtin/commit.c:318
msgid "failed to unpack HEAD tree object"
msgstr "Fehler beim Entpacken des \"Tree\"-Objektes von HEAD."
-#: builtin/commit.c:349
+#: builtin/commit.c:359
msgid "unable to create temporary index"
msgstr "Konnte temporären Index nicht erstellen."
-#: builtin/commit.c:355
+#: builtin/commit.c:365
msgid "interactive add failed"
msgstr "interaktives Hinzufügen fehlgeschlagen"
-#: builtin/commit.c:368
+#: builtin/commit.c:378
msgid "unable to update temporary index"
msgstr "Konnte temporären Index nicht aktualisieren."
-#: builtin/commit.c:370
+#: builtin/commit.c:380
msgid "Failed to update main cache tree"
msgstr "Konnte Haupt-Cache-Verzeichnis nicht aktualisieren"
-#: builtin/commit.c:394 builtin/commit.c:417 builtin/commit.c:466
+#: builtin/commit.c:404 builtin/commit.c:427 builtin/commit.c:476
msgid "unable to write new_index file"
msgstr "Konnte new_index Datei nicht schreiben"
-#: builtin/commit.c:448
+#: builtin/commit.c:458
msgid "cannot do a partial commit during a merge."
msgstr "Kann keinen Teil-Commit durchführen, während ein Merge im Gange ist."
-#: builtin/commit.c:450
+#: builtin/commit.c:460
msgid "cannot do a partial commit during a cherry-pick."
msgstr ""
"Kann keinen Teil-Commit durchführen, während \"cherry-pick\" im Gange ist."
-#: builtin/commit.c:459
+#: builtin/commit.c:469
msgid "cannot read the index"
msgstr "Kann Index nicht lesen"
-#: builtin/commit.c:478
+#: builtin/commit.c:488
msgid "unable to write temporary index file"
msgstr "Konnte temporäre Index-Datei nicht schreiben."
-#: builtin/commit.c:583
+#: builtin/commit.c:582
#, c-format
msgid "commit '%s' lacks author header"
msgstr "Commit '%s' fehlt Autor-Kopfbereich"
-#: builtin/commit.c:585
+#: builtin/commit.c:584
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "Commit '%s' hat fehlerhafte Autor-Zeile"
-#: builtin/commit.c:604
+#: builtin/commit.c:603
msgid "malformed --author parameter"
msgstr "Fehlerhafter --author Parameter"
-#: builtin/commit.c:612
+#: builtin/commit.c:611
#, c-format
msgid "invalid date format: %s"
msgstr "Ungültiges Datumsformat: %s"
-#: builtin/commit.c:656
+#: builtin/commit.c:655
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
"Konnte kein Kommentar-Zeichen auswählen, das nicht in\n"
"der aktuellen Commit-Beschreibung verwendet wird."
-#: builtin/commit.c:693 builtin/commit.c:726 builtin/commit.c:1092
+#: builtin/commit.c:692 builtin/commit.c:725 builtin/commit.c:1096
#, c-format
msgid "could not lookup commit %s"
msgstr "Konnte Commit %s nicht nachschlagen"
-#: builtin/commit.c:705 builtin/shortlog.c:286
+#: builtin/commit.c:704 builtin/shortlog.c:286
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(lese Log-Nachricht von Standard-Eingabe)\n"
-#: builtin/commit.c:707
+#: builtin/commit.c:706
msgid "could not read log from standard input"
msgstr "Konnte Log nicht von Standard-Eingabe lesen."
-#: builtin/commit.c:711
+#: builtin/commit.c:710
#, c-format
msgid "could not read log file '%s'"
msgstr "Konnte Log-Datei '%s' nicht lesen"
-#: builtin/commit.c:738 builtin/commit.c:746
+#: builtin/commit.c:737 builtin/commit.c:745
msgid "could not read SQUASH_MSG"
msgstr "Konnte SQUASH_MSG nicht lesen"
-#: builtin/commit.c:743
+#: builtin/commit.c:742
msgid "could not read MERGE_MSG"
msgstr "Konnte MERGE_MSG nicht lesen"
-#: builtin/commit.c:797
+#: builtin/commit.c:796
msgid "could not write commit template"
msgstr "Konnte Commit-Vorlage nicht schreiben"
-#: builtin/commit.c:815
+#: builtin/commit.c:814
#, c-format
msgid ""
"\n"
"\t%s\n"
"und versuchen Sie es erneut.\n"
-#: builtin/commit.c:820
+#: builtin/commit.c:819
#, c-format
msgid ""
"\n"
"\t%s\n"
"und versuchen Sie es erneut.\n"
-#: builtin/commit.c:833
+#: builtin/commit.c:832
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
"die mit '%c' beginnen, werden ignoriert, und eine leere Beschreibung\n"
"bricht den Commit ab.\n"
-#: builtin/commit.c:840
+#: builtin/commit.c:839
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
"entfernen.\n"
"Eine leere Beschreibung bricht den Commit ab.\n"
-#: builtin/commit.c:860
+#: builtin/commit.c:859
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sAutor: %.*s <%.*s>"
-#: builtin/commit.c:868
+#: builtin/commit.c:867
#, c-format
msgid "%sDate: %s"
msgstr "%sDatum: %s"
-#: builtin/commit.c:875
+#: builtin/commit.c:874
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sCommit-Ersteller: %.*s <%.*s>"
-#: builtin/commit.c:893
+#: builtin/commit.c:892
msgid "Cannot read index"
msgstr "Kann Index nicht lesen"
-#: builtin/commit.c:950
+#: builtin/commit.c:954
msgid "Error building trees"
msgstr "Fehler beim Erzeugen der \"Tree\"-Objekte"
-#: builtin/commit.c:965 builtin/tag.c:266
+#: builtin/commit.c:969 builtin/tag.c:266
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr ""
"Bitte liefern Sie eine Beschreibung entweder mit der Option -m oder -F.\n"
-#: builtin/commit.c:1067
+#: builtin/commit.c:1071
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"--author '%s' ist nicht im Format 'Name <E-Mail>' und stimmt mit keinem "
"vorhandenen Autor überein"
-#: builtin/commit.c:1082 builtin/commit.c:1322
+#: builtin/commit.c:1086 builtin/commit.c:1327
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Ungültiger Modus '%s' für unversionierte Dateien"
-#: builtin/commit.c:1119
+#: builtin/commit.c:1124
msgid "--long and -z are incompatible"
msgstr "Die Optionen --long und -z sind inkompatibel."
-#: builtin/commit.c:1149
+#: builtin/commit.c:1154
msgid "Using both --reset-author and --author does not make sense"
msgstr ""
"Die Optionen --reset-author und --author können nicht gemeinsam verwendet "
"werden."
-#: builtin/commit.c:1158
+#: builtin/commit.c:1163
msgid "You have nothing to amend."
msgstr "Sie haben nichts für \"--amend\"."
-#: builtin/commit.c:1161
+#: builtin/commit.c:1166
msgid "You are in the middle of a merge -- cannot amend."
msgstr "Ein Merge ist im Gange -- kann \"--amend\" nicht ausführen."
-#: builtin/commit.c:1163
+#: builtin/commit.c:1168
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "\"cherry-pick\" ist im Gange -- kann \"--amend\" nicht ausführen."
-#: builtin/commit.c:1166
+#: builtin/commit.c:1171
msgid "Options --squash and --fixup cannot be used together"
msgstr ""
"Die Optionen --squash und --fixup können nicht gemeinsam verwendet werden."
-#: builtin/commit.c:1176
+#: builtin/commit.c:1181
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Es kann nur eine Option von -c/-C/-F/--fixup verwendet werden."
-#: builtin/commit.c:1178
+#: builtin/commit.c:1183
msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
msgstr "Die Option -m kann nicht mit -c/-C/-F/--fixup kombiniert werden."
-#: builtin/commit.c:1186
+#: builtin/commit.c:1191
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr ""
"Die Option --reset--author kann nur mit -C, -c oder --amend verwendet werden."
-#: builtin/commit.c:1203
+#: builtin/commit.c:1208
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr ""
"Es kann nur eine Option von --include/--only/--all/--interactive/--patch "
"verwendet werden."
-#: builtin/commit.c:1205
+#: builtin/commit.c:1210
msgid "No paths with --include/--only does not make sense."
msgstr ""
"Die Optionen --include und --only können nur mit der Angabe von Pfaden "
"verwendet werden."
-#: builtin/commit.c:1207
+#: builtin/commit.c:1212
msgid "Clever... amending the last one with dirty index."
msgstr "Klug ... den letzten Commit mit einem geänderten Index nachbessern."
-#: builtin/commit.c:1209
+#: builtin/commit.c:1214
msgid "Explicit paths specified without -i or -o; assuming --only paths..."
msgstr "Explizite Pfade ohne -i oder -o angegeben; nehme --only an"
-#: builtin/commit.c:1221 builtin/tag.c:474
+#: builtin/commit.c:1226 builtin/tag.c:474
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Ungültiger \"cleanup\" Modus %s"
-#: builtin/commit.c:1226
+#: builtin/commit.c:1231
msgid "Paths with -a does not make sense."
msgstr "Die Option -a kann nicht mit der Angabe von Pfaden verwendet werden."
-#: builtin/commit.c:1336 builtin/commit.c:1622
+#: builtin/commit.c:1341 builtin/commit.c:1617
msgid "show status concisely"
msgstr "Status im Kurzformat anzeigen"
-#: builtin/commit.c:1338 builtin/commit.c:1624
+#: builtin/commit.c:1343 builtin/commit.c:1619
msgid "show branch information"
msgstr "Branchinformationen anzeigen"
-#: builtin/commit.c:1340 builtin/commit.c:1626 builtin/push.c:522
+#: builtin/commit.c:1345
+msgid "version"
+msgstr "Version"
+
+#: builtin/commit.c:1345 builtin/commit.c:1621 builtin/push.c:522
#: builtin/worktree.c:440
msgid "machine-readable output"
msgstr "maschinenlesbare Ausgabe"
-#: builtin/commit.c:1343 builtin/commit.c:1628
+#: builtin/commit.c:1348 builtin/commit.c:1623
msgid "show status in long format (default)"
msgstr "Status im Langformat anzeigen (Standard)"
-#: builtin/commit.c:1346 builtin/commit.c:1631
+#: builtin/commit.c:1351 builtin/commit.c:1626
msgid "terminate entries with NUL"
msgstr "Einträge mit NUL-Zeichen abschließen"
-#: builtin/commit.c:1348 builtin/commit.c:1634 builtin/fast-export.c:981
+#: builtin/commit.c:1353 builtin/commit.c:1629 builtin/fast-export.c:981
#: builtin/fast-export.c:984 builtin/tag.c:353
msgid "mode"
msgstr "Modus"
-#: builtin/commit.c:1349 builtin/commit.c:1634
+#: builtin/commit.c:1354 builtin/commit.c:1629
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"unversionierte Dateien anzeigen, optionale Modi: all, normal, no. (Standard: "
"all)"
-#: builtin/commit.c:1352
+#: builtin/commit.c:1357
msgid "show ignored files"
msgstr "ignorierte Dateien anzeigen"
-#: builtin/commit.c:1353 parse-options.h:155
+#: builtin/commit.c:1358 parse-options.h:155
msgid "when"
msgstr "wann"
-#: builtin/commit.c:1354
+#: builtin/commit.c:1359
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
"Änderungen in Submodulen ignorieren, optional wenn: all, dirty, untracked. "
"(Standard: all)"
-#: builtin/commit.c:1356
+#: builtin/commit.c:1361
msgid "list untracked files in columns"
msgstr "unversionierte Dateien in Spalten auflisten"
-#: builtin/commit.c:1442
+#: builtin/commit.c:1437
msgid "couldn't look up newly created commit"
msgstr "Konnte neu erstellten Commit nicht nachschlagen."
-#: builtin/commit.c:1444
+#: builtin/commit.c:1439
msgid "could not parse newly created commit"
msgstr "Konnte neulich erstellten Commit nicht analysieren."
-#: builtin/commit.c:1489
+#: builtin/commit.c:1484
msgid "detached HEAD"
msgstr "losgelöster HEAD"
-#: builtin/commit.c:1492
+#: builtin/commit.c:1487
msgid " (root-commit)"
msgstr " (Basis-Commit)"
-#: builtin/commit.c:1592
+#: builtin/commit.c:1587
msgid "suppress summary after successful commit"
msgstr "Zusammenfassung nach erfolgreichem Commit unterdrücken"
-#: builtin/commit.c:1593
+#: builtin/commit.c:1588
msgid "show diff in commit message template"
msgstr "Unterschiede in Commit-Beschreibungsvorlage anzeigen"
-#: builtin/commit.c:1595
+#: builtin/commit.c:1590
msgid "Commit message options"
msgstr "Optionen für Commit-Beschreibung"
-#: builtin/commit.c:1596 builtin/tag.c:351
+#: builtin/commit.c:1591 builtin/tag.c:351
msgid "read message from file"
msgstr "Beschreibung von Datei lesen"
-#: builtin/commit.c:1597
+#: builtin/commit.c:1592
msgid "author"
msgstr "Autor"
-#: builtin/commit.c:1597
+#: builtin/commit.c:1592
msgid "override author for commit"
msgstr "Autor eines Commits überschreiben"
-#: builtin/commit.c:1598 builtin/gc.c:326
+#: builtin/commit.c:1593 builtin/gc.c:326
msgid "date"
msgstr "Datum"
-#: builtin/commit.c:1598
+#: builtin/commit.c:1593
msgid "override date for commit"
msgstr "Datum eines Commits überschreiben"
-#: builtin/commit.c:1599 builtin/merge.c:220 builtin/notes.c:396
-#: builtin/notes.c:559 builtin/tag.c:349
+#: builtin/commit.c:1594 builtin/merge.c:220 builtin/notes.c:398
+#: builtin/notes.c:561 builtin/tag.c:349
msgid "message"
msgstr "Beschreibung"
-#: builtin/commit.c:1599
+#: builtin/commit.c:1594
msgid "commit message"
msgstr "Commit-Beschreibung"
-#: builtin/commit.c:1600 builtin/commit.c:1601 builtin/commit.c:1602
-#: builtin/commit.c:1603 parse-options.h:256 ref-filter.h:79
+#: builtin/commit.c:1595 builtin/commit.c:1596 builtin/commit.c:1597
+#: builtin/commit.c:1598 parse-options.h:257 ref-filter.h:79
msgid "commit"
msgstr "Commit"
-#: builtin/commit.c:1600
+#: builtin/commit.c:1595
msgid "reuse and edit message from specified commit"
msgstr "Beschreibung des angegebenen Commits wiederverwenden und editieren"
-#: builtin/commit.c:1601
+#: builtin/commit.c:1596
msgid "reuse message from specified commit"
msgstr "Beschreibung des angegebenen Commits wiederverwenden"
-#: builtin/commit.c:1602
+#: builtin/commit.c:1597
msgid "use autosquash formatted message to fixup specified commit"
msgstr ""
"eine automatisch zusammengesetzte Beschreibung zum Nachbessern des "
"angegebenen Commits verwenden"
-#: builtin/commit.c:1603
+#: builtin/commit.c:1598
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"eine automatisch zusammengesetzte Beschreibung beim \"squash\" des "
"angegebenen Commits verwenden"
-#: builtin/commit.c:1604
+#: builtin/commit.c:1599
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr "Sie als Autor des Commits setzen (verwendet mit -C/-c/--amend)"
-#: builtin/commit.c:1605 builtin/log.c:1409 builtin/revert.c:86
+#: builtin/commit.c:1600 builtin/log.c:1413 builtin/revert.c:86
msgid "add Signed-off-by:"
msgstr "'Signed-off-by:'-Zeile hinzufügen"
-#: builtin/commit.c:1606
+#: builtin/commit.c:1601
msgid "use specified template file"
msgstr "angegebene Vorlagendatei verwenden"
-#: builtin/commit.c:1607
+#: builtin/commit.c:1602
msgid "force edit of commit"
msgstr "Bearbeitung des Commits erzwingen"
-#: builtin/commit.c:1608
+#: builtin/commit.c:1603
msgid "default"
msgstr "Standard"
-#: builtin/commit.c:1608 builtin/tag.c:354
+#: builtin/commit.c:1603 builtin/tag.c:354
msgid "how to strip spaces and #comments from message"
msgstr ""
"wie Leerzeichen und #Kommentare von der Beschreibung getrennt werden sollen"
-#: builtin/commit.c:1609
+#: builtin/commit.c:1604
msgid "include status in commit message template"
msgstr "Status in die Commit-Beschreibungsvorlage einfügen"
-#: builtin/commit.c:1611 builtin/merge.c:230 builtin/pull.c:165
+#: builtin/commit.c:1606 builtin/merge.c:230 builtin/pull.c:166
#: builtin/revert.c:93
msgid "GPG sign commit"
msgstr "Commit mit GPG signieren"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1609
msgid "Commit contents options"
msgstr "Optionen für Commit-Inhalt"
-#: builtin/commit.c:1615
+#: builtin/commit.c:1610
msgid "commit all changed files"
msgstr "alle geänderten Dateien committen"
-#: builtin/commit.c:1616
+#: builtin/commit.c:1611
msgid "add specified files to index for commit"
msgstr "die angegebenen Dateien zusätzlich zum Commit vormerken"
-#: builtin/commit.c:1617
+#: builtin/commit.c:1612
msgid "interactively add files"
msgstr "interaktives Hinzufügen von Dateien"
-#: builtin/commit.c:1618
+#: builtin/commit.c:1613
msgid "interactively add changes"
msgstr "interaktives Hinzufügen von Änderungen"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1614
msgid "commit only specified files"
msgstr "nur die angegebenen Dateien committen"
-#: builtin/commit.c:1620
+#: builtin/commit.c:1615
msgid "bypass pre-commit and commit-msg hooks"
msgstr "Hooks pre-commit und commit-msg umgehen"
-#: builtin/commit.c:1621
+#: builtin/commit.c:1616
msgid "show what would be committed"
msgstr "anzeigen, was committet werden würde"
-#: builtin/commit.c:1632
+#: builtin/commit.c:1627
msgid "amend previous commit"
msgstr "vorherigen Commit ändern"
-#: builtin/commit.c:1633
+#: builtin/commit.c:1628
msgid "bypass post-rewrite hook"
msgstr "\"post-rewrite hook\" umgehen"
-#: builtin/commit.c:1638
+#: builtin/commit.c:1633
msgid "ok to record an empty change"
msgstr "Aufzeichnung einer leeren Änderung erlauben"
-#: builtin/commit.c:1640
+#: builtin/commit.c:1635
msgid "ok to record a change with an empty message"
msgstr "Aufzeichnung einer Änderung mit einer leeren Beschreibung erlauben"
-#: builtin/commit.c:1669
+#: builtin/commit.c:1664
msgid "could not parse HEAD commit"
msgstr "Konnte Commit von HEAD nicht analysieren."
-#: builtin/commit.c:1719
+#: builtin/commit.c:1712
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Beschädigte MERGE_HEAD-Datei (%s)"
-#: builtin/commit.c:1726
+#: builtin/commit.c:1719
msgid "could not read MERGE_MODE"
msgstr "Konnte MERGE_MODE nicht lesen"
-#: builtin/commit.c:1745
+#: builtin/commit.c:1738
#, c-format
msgid "could not read commit message: %s"
msgstr "Konnte Commit-Beschreibung nicht lesen: %s"
-#: builtin/commit.c:1756
+#: builtin/commit.c:1749
#, 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:1761
+#: builtin/commit.c:1754
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Commit aufgrund leerer Beschreibung abgebrochen.\n"
-#: builtin/commit.c:1809
+#: builtin/commit.c:1802
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
msgid "cannot create configuration file %s"
msgstr "Konnte Konfigurationsdatei '%s' nicht erstellen."
-#: builtin/count-objects.c:77
+#: builtin/config.c:625
+#, c-format
+msgid ""
+"cannot overwrite multiple values with a single value\n"
+" Use a regexp, --add or --replace-all to change %s."
+msgstr ""
+"kann nicht mehrere Werte mit einem einzigen Wert überschreiben\n"
+" Benutzen Sie einen regulären Ausdruck, --add oder --replace, um %s\n"
+" zu ändern."
+
+#: builtin/count-objects.c:86
msgid "git count-objects [-v] [-H | --human-readable]"
msgstr "git count-objects [-v] [-H | --human-readable]"
-#: builtin/count-objects.c:87
+#: builtin/count-objects.c:96
msgid "print sizes in human readable format"
msgstr "gibt Größenangaben in menschenlesbaren Format aus"
msgid "only consider tags matching <pattern>"
msgstr "nur Tags, die <Muster> entsprechen, betrachten"
-#: builtin/describe.c:410 builtin/name-rev.c:321
+#: builtin/describe.c:410 builtin/name-rev.c:320
msgid "show abbreviated commit object as fallback"
msgstr "gekürztes Commit-Objekt anzeigen, wenn sonst nichts zutrifft"
msgid "invalid option: %s"
msgstr "Ungültige Option: %s"
-#: builtin/diff.c:360
+#: builtin/diff.c:361
msgid "Not a git repository"
msgstr "Kein Git-Repository"
-#: builtin/diff.c:403
+#: builtin/diff.c:404
#, c-format
msgid "invalid object '%s' given."
msgstr "Objekt '%s' ist ungültig."
-#: builtin/diff.c:412
+#: builtin/diff.c:413
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "Mehr als zwei Blobs angegeben: '%s'"
-#: builtin/diff.c:419
+#: builtin/diff.c:420
#, c-format
msgid "unhandled object '%s' given."
msgstr "unbehandeltes Objekt '%s' angegeben"
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<Optionen>]"
-#: builtin/fetch.c:93 builtin/pull.c:174
+#: builtin/fetch.c:95 builtin/pull.c:175
msgid "fetch from all remotes"
msgstr "fordert von allen Remote-Repositories an"
-#: builtin/fetch.c:95 builtin/pull.c:177
+#: builtin/fetch.c:97 builtin/pull.c:178
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "an .git/FETCH_HEAD anhängen, anstatt zu überschreiben"
-#: builtin/fetch.c:97 builtin/pull.c:180
+#: builtin/fetch.c:99 builtin/pull.c:181
msgid "path to upload pack on remote end"
msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite"
-#: builtin/fetch.c:98 builtin/pull.c:182
+#: builtin/fetch.c:100 builtin/pull.c:183
msgid "force overwrite of local branch"
msgstr "das Überschreiben von lokalen Branches erzwingen"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:102
msgid "fetch from multiple remotes"
msgstr "von mehreren Remote-Repositories anfordern"
-#: builtin/fetch.c:102 builtin/pull.c:184
+#: builtin/fetch.c:104 builtin/pull.c:185
msgid "fetch all tags and associated objects"
msgstr "alle Tags und verbundene Objekte anfordern"
-#: builtin/fetch.c:104
+#: builtin/fetch.c:106
msgid "do not fetch all tags (--no-tags)"
msgstr "nicht alle Tags anfordern (--no-tags)"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:108
msgid "number of submodules fetched in parallel"
msgstr "Anzahl der parallel anzufordernden Submodule"
-#: builtin/fetch.c:108 builtin/pull.c:187
+#: builtin/fetch.c:110 builtin/pull.c:188
msgid "prune remote-tracking branches no longer on remote"
msgstr ""
"Remote-Tracking-Branches entfernen, die sich nicht mehr im Remote-Repository "
"befinden"
-#: builtin/fetch.c:109 builtin/pull.c:190
+#: builtin/fetch.c:111 builtin/pull.c:191
msgid "on-demand"
msgstr "bei-Bedarf"
-#: builtin/fetch.c:110 builtin/pull.c:191
+#: builtin/fetch.c:112 builtin/pull.c:192
msgid "control recursive fetching of submodules"
msgstr "rekursive Anforderungen von Submodulen kontrollieren"
-#: builtin/fetch.c:114 builtin/pull.c:199
+#: builtin/fetch.c:116 builtin/pull.c:200
msgid "keep downloaded pack"
msgstr "heruntergeladenes Paket behalten"
-#: builtin/fetch.c:116
+#: builtin/fetch.c:118
msgid "allow updating of HEAD ref"
msgstr "Aktualisierung der \"HEAD\"-Referenz erlauben"
-#: builtin/fetch.c:119 builtin/pull.c:202
+#: builtin/fetch.c:121 builtin/fetch.c:127 builtin/pull.c:203
msgid "deepen history of shallow clone"
msgstr ""
"die Historie eines Klons mit unvollständiger Historie (shallow) vertiefen"
-#: builtin/fetch.c:121 builtin/pull.c:205
+#: builtin/fetch.c:123
+msgid "deepen history of shallow repository based on time"
+msgstr ""
+"die Historie eines Klons mit unvollständiger Historie (shallow) auf Zeitbasis\n"
+"vertiefen"
+
+#: builtin/fetch.c:129 builtin/pull.c:206
msgid "convert to a complete repository"
msgstr "zu einem vollständigen Repository konvertieren"
-#: builtin/fetch.c:123 builtin/log.c:1426
+#: builtin/fetch.c:131 builtin/log.c:1433
msgid "dir"
msgstr "Verzeichnis"
-#: builtin/fetch.c:124
+#: builtin/fetch.c:132
msgid "prepend this to submodule path output"
msgstr "dies an die Ausgabe der Submodul-Pfade voranstellen"
-#: builtin/fetch.c:127
+#: builtin/fetch.c:135
msgid "default mode for recursion"
msgstr "Standard-Modus für Rekursion"
-#: builtin/fetch.c:129 builtin/pull.c:208
+#: builtin/fetch.c:137 builtin/pull.c:209
msgid "accept refs that update .git/shallow"
msgstr "Referenzen, die .git/shallow aktualisieren, akzeptieren"
-#: builtin/fetch.c:130 builtin/pull.c:210
+#: builtin/fetch.c:138 builtin/pull.c:211
msgid "refmap"
msgstr "Refmap"
-#: builtin/fetch.c:131 builtin/pull.c:211
+#: builtin/fetch.c:139 builtin/pull.c:212
msgid "specify fetch refmap"
msgstr "Refmap für 'fetch' angeben"
-#: builtin/fetch.c:387
+#: builtin/fetch.c:398
msgid "Couldn't find remote ref HEAD"
msgstr "Konnte Remote-Referenz von HEAD nicht finden."
-#: builtin/fetch.c:503
+#: builtin/fetch.c:514
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "Konfiguration fetch.output enthält ungültigen Wert %s"
-#: builtin/fetch.c:592
+#: builtin/fetch.c:607
#, c-format
msgid "object %s not found"
msgstr "Objekt %s nicht gefunden"
-#: builtin/fetch.c:596
+#: builtin/fetch.c:611
msgid "[up to date]"
msgstr "[aktuell]"
-#: builtin/fetch.c:609 builtin/fetch.c:689
+#: builtin/fetch.c:624 builtin/fetch.c:704
msgid "[rejected]"
msgstr "[zurückgewiesen]"
-#: builtin/fetch.c:610
+#: builtin/fetch.c:625
msgid "can't fetch in current branch"
msgstr "kann \"fetch\" im aktuellen Branch nicht ausführen"
-#: builtin/fetch.c:619
+#: builtin/fetch.c:634
msgid "[tag update]"
msgstr "[Tag Aktualisierung]"
-#: builtin/fetch.c:620 builtin/fetch.c:653 builtin/fetch.c:669
-#: builtin/fetch.c:684
+#: builtin/fetch.c:635 builtin/fetch.c:668 builtin/fetch.c:684
+#: builtin/fetch.c:699
msgid "unable to update local ref"
msgstr "kann lokale Referenz nicht aktualisieren"
-#: builtin/fetch.c:639
+#: builtin/fetch.c:654
msgid "[new tag]"
msgstr "[neues Tag]"
-#: builtin/fetch.c:642
+#: builtin/fetch.c:657
msgid "[new branch]"
msgstr "[neuer Branch]"
-#: builtin/fetch.c:645
+#: builtin/fetch.c:660
msgid "[new ref]"
msgstr "[neue Referenz]"
-#: builtin/fetch.c:684
+#: builtin/fetch.c:699
msgid "forced update"
msgstr "Aktualisierung erzwungen"
-#: builtin/fetch.c:689
+#: builtin/fetch.c:704
msgid "non-fast-forward"
msgstr "kein Vorspulen"
-#: builtin/fetch.c:733
+#: builtin/fetch.c:749
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n"
-#: builtin/fetch.c:753
+#: builtin/fetch.c:769
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr ""
"%s wurde zurückgewiesen, da Ursprungs-Commits von Repositoriesmit "
"unvollständiger Historie (shallow) nicht aktualisiert werden dürfen."
-#: builtin/fetch.c:839 builtin/fetch.c:934
+#: builtin/fetch.c:856 builtin/fetch.c:952
#, c-format
msgid "From %.*s\n"
msgstr "Von %.*s\n"
-#: builtin/fetch.c:850
+#: builtin/fetch.c:867
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
"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:904
+#: builtin/fetch.c:922
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s wird unreferenziert)"
-#: builtin/fetch.c:905
+#: builtin/fetch.c:923
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s wurde unreferenziert)"
-#: builtin/fetch.c:937
+#: builtin/fetch.c:955
msgid "[deleted]"
msgstr "[gelöscht]"
-#: builtin/fetch.c:938 builtin/remote.c:1020
+#: builtin/fetch.c:956 builtin/remote.c:1020
msgid "(none)"
msgstr "(nichts)"
-#: builtin/fetch.c:960
+#: builtin/fetch.c:979
#, 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:979
+#: builtin/fetch.c:998
#, 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:982
+#: builtin/fetch.c:1001
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Option \"%s\" wird ignoriert für %s\n"
-#: builtin/fetch.c:1039
+#: builtin/fetch.c:1077
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "Weiß nicht wie von %s angefordert wird."
-#: builtin/fetch.c:1199
+#: builtin/fetch.c:1237
#, c-format
msgid "Fetching %s\n"
msgstr "Fordere an von %s\n"
-#: builtin/fetch.c:1201 builtin/remote.c:96
+#: builtin/fetch.c:1239 builtin/remote.c:96
#, c-format
msgid "Could not fetch %s"
msgstr "Konnte nicht von %s anfordern"
-#: builtin/fetch.c:1219
+#: builtin/fetch.c:1257
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
"oder den Namen des Remote-Repositories an, von welchem neue\n"
"Commits angefordert werden sollen."
-#: builtin/fetch.c:1242
+#: builtin/fetch.c:1280
msgid "You need to specify a tag name."
msgstr "Sie müssen den Namen des Tags angeben."
-#: builtin/fetch.c:1284
+#: builtin/fetch.c:1322
+msgid "Negative depth in --deepen is not supported"
+msgstr "Negative Tiefe wird von --deepen nicht unterstützt."
+
+#: builtin/fetch.c:1324
+msgid "--deepen and --depth are mutually exclusive"
+msgstr "--deepen und --depth schließen sich gegenseitig aus"
+
+#: builtin/fetch.c:1329
msgid "--depth and --unshallow cannot be used together"
msgstr ""
"Die Optionen --depth und --unshallow können nicht gemeinsam verwendet werden."
-#: builtin/fetch.c:1286
+#: builtin/fetch.c:1331
msgid "--unshallow on a complete repository does not make sense"
msgstr ""
"Die Option --unshallow kann nicht in einem Repository mit unvollständiger "
"Historie verwendet werden."
-#: builtin/fetch.c:1306
+#: builtin/fetch.c:1353
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all akzeptiert kein Repository als Argument"
-#: builtin/fetch.c:1308
+#: builtin/fetch.c:1355
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all kann nicht mit Refspecs verwendet werden."
-#: builtin/fetch.c:1319
+#: builtin/fetch.c:1366
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Kein Remote-Repository (einzeln oder Gruppe): %s"
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1374
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"
"git fmt-merge-msg [-m <Beschreibung>] [--log[=<n>] | --no-log] [--file "
"<Datei>]"
-#: builtin/fmt-merge-msg.c:667
+#: builtin/fmt-merge-msg.c:663
msgid "populate log with at most <n> entries from shortlog"
msgstr "Historie mit höchstens <n> Einträgen von \"shortlog\" hinzufügen"
-#: builtin/fmt-merge-msg.c:670
+#: builtin/fmt-merge-msg.c:666
msgid "alias for --log (deprecated)"
msgstr "Alias für --log (veraltet)"
-#: builtin/fmt-merge-msg.c:673
+#: builtin/fmt-merge-msg.c:669
msgid "text"
msgstr "Text"
-#: builtin/fmt-merge-msg.c:674
+#: builtin/fmt-merge-msg.c:670
msgid "use <text> as start of message"
msgstr "<Text> als Beschreibungsanfang verwenden"
-#: builtin/fmt-merge-msg.c:675
+#: builtin/fmt-merge-msg.c:671
msgid "file to read from"
msgstr "Datei zum Einlesen"
msgid "show verbose names for reachable objects"
msgstr "ausführliche Namen für erreichbare Objekte anzeigen"
-#: builtin/fsck.c:671
+#: builtin/fsck.c:665
msgid "Checking objects"
msgstr "Prüfe Objekte"
msgid "invalid number of threads specified (%d) for %s"
msgstr "ungültige Anzahl von Threads (%d) für %s angegeben"
-#: builtin/grep.c:452 builtin/grep.c:487
+#: builtin/grep.c:453 builtin/grep.c:488
#, c-format
msgid "unable to read tree (%s)"
msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen"
-#: builtin/grep.c:502
+#: builtin/grep.c:503
#, c-format
msgid "unable to grep from object of type %s"
msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen"
-#: builtin/grep.c:560
+#: builtin/grep.c:561
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "Schalter '%c' erwartet einen numerischen Wert"
-#: builtin/grep.c:577
-#, c-format
-msgid "cannot open '%s'"
-msgstr "kann '%s' nicht öffnen"
-
-#: builtin/grep.c:646
+#: builtin/grep.c:647
msgid "search in index instead of in the work tree"
msgstr "im Index anstatt im Arbeitsverzeichnis suchen"
-#: builtin/grep.c:648
+#: builtin/grep.c:649
msgid "find in contents not managed by git"
msgstr "auch in Inhalten finden, die nicht von Git verwaltet werden"
-#: builtin/grep.c:650
+#: builtin/grep.c:651
msgid "search in both tracked and untracked files"
msgstr "in versionierten und unversionierten Dateien suchen"
-#: builtin/grep.c:652
+#: builtin/grep.c:653
msgid "ignore files specified via '.gitignore'"
msgstr "Dateien, die über '.gitignore' angegeben sind, ignorieren"
-#: builtin/grep.c:655
+#: builtin/grep.c:656
msgid "show non-matching lines"
msgstr "Zeilen ohne Übereinstimmungen anzeigen"
-#: builtin/grep.c:657
+#: builtin/grep.c:658
msgid "case insensitive matching"
msgstr "Übereinstimmungen unabhängig von Groß- und Kleinschreibung finden"
-#: builtin/grep.c:659
+#: builtin/grep.c:660
msgid "match patterns only at word boundaries"
msgstr "nur ganze Wörter suchen"
-#: builtin/grep.c:661
+#: builtin/grep.c:662
msgid "process binary files as text"
msgstr "binäre Dateien als Text verarbeiten"
-#: builtin/grep.c:663
+#: builtin/grep.c:664
msgid "don't match patterns in binary files"
msgstr "keine Muster in Binärdateien finden"
-#: builtin/grep.c:666
+#: builtin/grep.c:667
msgid "process binary files with textconv filters"
msgstr "binäre Dateien mit \"textconv\"-Filtern verarbeiten"
-#: builtin/grep.c:668
+#: builtin/grep.c:669
msgid "descend at most <depth> levels"
msgstr "höchstens <Tiefe> Ebenen durchlaufen"
-#: builtin/grep.c:672
+#: builtin/grep.c:673
msgid "use extended POSIX regular expressions"
msgstr "erweiterte reguläre Ausdrücke aus POSIX verwenden"
-#: builtin/grep.c:675
+#: builtin/grep.c:676
msgid "use basic POSIX regular expressions (default)"
msgstr "grundlegende reguläre Ausdrücke aus POSIX verwenden (Standard)"
-#: builtin/grep.c:678
+#: builtin/grep.c:679
msgid "interpret patterns as fixed strings"
msgstr "Muster als feste Zeichenketten interpretieren"
-#: builtin/grep.c:681
+#: builtin/grep.c:682
msgid "use Perl-compatible regular expressions"
msgstr "Perl-kompatible reguläre Ausdrücke verwenden"
-#: builtin/grep.c:684
+#: builtin/grep.c:685
msgid "show line numbers"
msgstr "Zeilennummern anzeigen"
-#: builtin/grep.c:685
+#: builtin/grep.c:686
msgid "don't show filenames"
msgstr "keine Dateinamen anzeigen"
-#: builtin/grep.c:686
+#: builtin/grep.c:687
msgid "show filenames"
msgstr "Dateinamen anzeigen"
-#: builtin/grep.c:688
+#: builtin/grep.c:689
msgid "show filenames relative to top directory"
msgstr "Dateinamen relativ zum Projektverzeichnis anzeigen"
-#: builtin/grep.c:690
+#: builtin/grep.c:691
msgid "show only filenames instead of matching lines"
msgstr "nur Dateinamen anzeigen anstatt übereinstimmende Zeilen"
-#: builtin/grep.c:692
+#: builtin/grep.c:693
msgid "synonym for --files-with-matches"
msgstr "Synonym für --files-with-matches"
-#: builtin/grep.c:695
+#: builtin/grep.c:696
msgid "show only the names of files without match"
msgstr "nur die Dateinamen ohne Übereinstimmungen anzeigen"
-#: builtin/grep.c:697
+#: builtin/grep.c:698
msgid "print NUL after filenames"
msgstr "NUL-Zeichen nach Dateinamen ausgeben"
-#: builtin/grep.c:699
+#: builtin/grep.c:700
msgid "show the number of matches instead of matching lines"
msgstr "anstatt der Zeilen, die Anzahl der übereinstimmenden Zeilen anzeigen"
-#: builtin/grep.c:700
+#: builtin/grep.c:701
msgid "highlight matches"
msgstr "Übereinstimmungen hervorheben"
-#: builtin/grep.c:702
+#: builtin/grep.c:703
msgid "print empty line between matches from different files"
msgstr ""
"eine Leerzeile zwischen Übereinstimmungen in verschiedenen Dateien ausgeben"
-#: builtin/grep.c:704
+#: builtin/grep.c:705
msgid "show filename only once above matches from same file"
msgstr ""
"den Dateinamen nur einmal oberhalb der Übereinstimmungen aus dieser Datei "
"anzeigen"
-#: builtin/grep.c:707
+#: builtin/grep.c:708
msgid "show <n> context lines before and after matches"
msgstr "<n> Zeilen vor und nach den Übereinstimmungen anzeigen"
-#: builtin/grep.c:710
+#: builtin/grep.c:711
msgid "show <n> context lines before matches"
msgstr "<n> Zeilen vor den Übereinstimmungen anzeigen"
-#: builtin/grep.c:712
+#: builtin/grep.c:713
msgid "show <n> context lines after matches"
msgstr "<n> Zeilen nach den Übereinstimmungen anzeigen"
-#: builtin/grep.c:714
+#: builtin/grep.c:715
msgid "use <n> worker threads"
msgstr "<n> Threads benutzen"
-#: builtin/grep.c:715
+#: builtin/grep.c:716
msgid "shortcut for -C NUM"
msgstr "Kurzform für -C NUM"
-#: builtin/grep.c:718
+#: builtin/grep.c:719
msgid "show a line with the function name before matches"
msgstr "eine Zeile mit dem Funktionsnamen vor Übereinstimmungen anzeigen"
-#: builtin/grep.c:720
+#: builtin/grep.c:721
msgid "show the surrounding function"
msgstr "die umgebende Funktion anzeigen"
-#: builtin/grep.c:723
+#: builtin/grep.c:724
msgid "read patterns from file"
msgstr "Muster von einer Datei lesen"
-#: builtin/grep.c:725
+#: builtin/grep.c:726
msgid "match <pattern>"
msgstr "<Muster> finden"
-#: builtin/grep.c:727
+#: builtin/grep.c:728
msgid "combine patterns specified with -e"
msgstr "Muster kombinieren, die mit -e angegeben wurden"
-#: builtin/grep.c:739
+#: builtin/grep.c:740
msgid "indicate hit with exit status without output"
msgstr "Übereinstimmungen nur durch Beendigungsstatus anzeigen"
-#: builtin/grep.c:741
+#: builtin/grep.c:742
msgid "show only matches from files that match all patterns"
msgstr ""
"nur Übereinstimmungen von Dateien anzeigen, die allen Mustern entsprechen"
-#: builtin/grep.c:743
+#: builtin/grep.c:744
msgid "show parse tree for grep expression"
msgstr "geparstes Verzeichnis für \"grep\"-Ausdruck anzeigen"
-#: builtin/grep.c:747
+#: builtin/grep.c:748
msgid "pager"
msgstr "Anzeigeprogramm"
-#: builtin/grep.c:747
+#: builtin/grep.c:748
msgid "show matching files in the pager"
msgstr "Dateien mit Übereinstimmungen im Anzeigeprogramm anzeigen"
-#: builtin/grep.c:750
+#: builtin/grep.c:751
msgid "allow calling of grep(1) (ignored by this build)"
msgstr "den Aufruf von grep(1) erlauben (von dieser Programmversion ignoriert)"
-#: builtin/grep.c:813
+#: builtin/grep.c:814
msgid "no pattern given."
msgstr "keine Muster angegeben"
-#: builtin/grep.c:845 builtin/index-pack.c:1479
+#: builtin/grep.c:846 builtin/index-pack.c:1480
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "ungültige Anzahl von Threads angegeben (%d)"
-#: builtin/grep.c:875
+#: builtin/grep.c:876
msgid "--open-files-in-pager only works on the worktree"
msgstr ""
"Die Option --open-files-in-pager kann nur innerhalb des "
"Arbeitsverzeichnisses verwendet werden."
-#: builtin/grep.c:901
+#: builtin/grep.c:902
msgid "--cached or --untracked cannot be used with --no-index."
msgstr ""
"Die Optionen --cached und --untracked können nicht mit --no-index verwendet "
"werden."
-#: builtin/grep.c:906
+#: builtin/grep.c:907
msgid "--no-index or --untracked cannot be used with revs."
msgstr ""
"Die Optionen --no-index und --untracked können nicht mit Commits verwendet "
"werden."
-#: builtin/grep.c:909
+#: builtin/grep.c:910
msgid "--[no-]exclude-standard cannot be used for tracked contents."
msgstr ""
"Die Option --[no-]exclude-standard kann nicht mit versionierten Inhalten "
"verwendet werden."
-#: builtin/grep.c:917
+#: builtin/grep.c:918
msgid "both --cached and trees are given."
msgstr "Die Option --cached kann nicht mit \"Tree\"-Objekten verwendet werden."
msgid "git hash-object --stdin-paths"
msgstr "git hash-object --stdin-paths"
-#: builtin/hash-object.c:93
+#: builtin/hash-object.c:94
msgid "type"
msgstr "Art"
-#: builtin/hash-object.c:93
+#: builtin/hash-object.c:94
msgid "object type"
msgstr "Art des Objektes"
-#: builtin/hash-object.c:94
+#: builtin/hash-object.c:95
msgid "write the object into the object database"
msgstr "das Objekt in die Objektdatenbank schreiben"
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
msgid "read the object from stdin"
msgstr "das Objekt von der Standard-Eingabe lesen"
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:99
msgid "store file as is without filters"
msgstr "Datei wie sie ist speichern, ohne Filter"
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
msgid ""
"just hash any random garbage to create corrupt objects for debugging Git"
msgstr ""
"Hash über zufällige Daten, zur Erzeugung von beschädigten Objekten zur\n"
"Fehlersuche in Git, erzeugen"
-#: builtin/hash-object.c:100
+#: builtin/hash-object.c:101
msgid "process file as it were from this path"
msgstr "Datei verarbeiten, als ob sie von diesem Pfad wäre"
-#: builtin/help.c:41
+#: builtin/help.c:42
msgid "print all available commands"
msgstr "alle vorhandenen Befehle anzeigen"
-#: builtin/help.c:42
+#: builtin/help.c:43
+msgid "exclude guides"
+msgstr "Anleitungen ausschließen"
+
+#: builtin/help.c:44
msgid "print list of useful guides"
msgstr "Liste von allgemein verwendeten Anleitungen anzeigen"
-#: builtin/help.c:43
+#: builtin/help.c:45
msgid "show man page"
msgstr "Handbuch anzeigen"
-#: builtin/help.c:44
+#: builtin/help.c:46
msgid "show manual in web browser"
msgstr "Handbuch in einem Webbrowser anzeigen"
-#: builtin/help.c:46
+#: builtin/help.c:48
msgid "show info page"
msgstr "Info-Seite anzeigen"
-#: builtin/help.c:52
+#: builtin/help.c:54
msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
msgstr "git help [--all] [--guides] [--man | --web | --info] [<Befehl>]"
-#: builtin/help.c:64
+#: builtin/help.c:66
#, c-format
msgid "unrecognized help format '%s'"
msgstr "nicht erkanntes Hilfeformat: %s"
-#: builtin/help.c:91
+#: builtin/help.c:93
msgid "Failed to start emacsclient."
msgstr "Konnte emacsclient nicht starten."
-#: builtin/help.c:104
+#: builtin/help.c:106
msgid "Failed to parse emacsclient version."
msgstr "Konnte Version des emacsclient nicht parsen."
-#: builtin/help.c:112
+#: builtin/help.c:114
#, c-format
msgid "emacsclient version '%d' too old (< 22)."
msgstr "Version des emacsclient '%d' ist zu alt (< 22)."
-#: builtin/help.c:130 builtin/help.c:151 builtin/help.c:160 builtin/help.c:168
+#: builtin/help.c:132 builtin/help.c:153 builtin/help.c:162 builtin/help.c:170
#, c-format
msgid "failed to exec '%s'"
msgstr "Fehler beim Ausführen von '%s'"
-#: builtin/help.c:205
+#: builtin/help.c:207
#, c-format
msgid ""
"'%s': path for unsupported man viewer.\n"
"'%s': Pfad für nicht unterstützten Handbuchbetrachter.\n"
"Sie könnten stattdessen 'man.<Werkzeug>.cmd' benutzen."
-#: builtin/help.c:217
+#: builtin/help.c:219
#, c-format
msgid ""
"'%s': cmd for supported man viewer.\n"
"'%s': Programm für unterstützten Handbuchbetrachter.\n"
"Sie könnten stattdessen 'man.<Werkzeug>.path' benutzen."
-#: builtin/help.c:334
+#: builtin/help.c:336
#, c-format
msgid "'%s': unknown man viewer."
msgstr "'%s': unbekannter Handbuch-Betrachter."
-#: builtin/help.c:351
+#: builtin/help.c:353
msgid "no man viewer handled the request"
msgstr "kein Handbuch-Betrachter konnte mit dieser Anfrage umgehen"
-#: builtin/help.c:359
+#: builtin/help.c:361
msgid "no info viewer handled the request"
msgstr "kein Informations-Betrachter konnte mit dieser Anfrage umgehen"
-#: builtin/help.c:401
+#: builtin/help.c:403
msgid "Defining attributes per path"
msgstr "Definition von Attributen pro Pfad"
-#: builtin/help.c:402
+#: builtin/help.c:404
msgid "Everyday Git With 20 Commands Or So"
msgstr "Tägliche Benutzung von Git mit ungefähr 20 Befehlen"
-#: builtin/help.c:403
+#: builtin/help.c:405
msgid "A Git glossary"
msgstr "Ein Git-Glossar"
-#: builtin/help.c:404
+#: builtin/help.c:406
msgid "Specifies intentionally untracked files to ignore"
msgstr "Spezifikation von bewusst ignorierten, unversionierten Dateien"
-#: builtin/help.c:405
+#: builtin/help.c:407
msgid "Defining submodule properties"
msgstr "Definition von Submodul-Eigenschaften"
-#: builtin/help.c:406
+#: builtin/help.c:408
msgid "Specifying revisions and ranges for Git"
msgstr "Spezifikation von Commits und Bereichen für Git"
-#: builtin/help.c:407
+#: builtin/help.c:409
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:408
+#: builtin/help.c:410
msgid "An overview of recommended workflows with Git"
msgstr "Eine Übersicht über empfohlene Arbeitsabläufe mit Git"
-#: builtin/help.c:420
+#: builtin/help.c:422
msgid "The common Git guides are:\n"
msgstr "Die allgemein verwendeten Git-Anleitungen sind:\n"
-#: builtin/help.c:441 builtin/help.c:458
-#, c-format
-msgid "usage: %s%s"
-msgstr "Verwendung: %s%s"
-
-#: builtin/help.c:474
+#: builtin/help.c:440
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "für `git %s' wurde der Alias `%s' angelegt"
-#: builtin/index-pack.c:153
+#: builtin/help.c:462 builtin/help.c:479
+#, c-format
+msgid "usage: %s%s"
+msgstr "Verwendung: %s%s"
+
+#: builtin/index-pack.c:154
#, c-format
msgid "unable to open %s"
msgstr "kann %s nicht öffnen"
-#: builtin/index-pack.c:203
+#: builtin/index-pack.c:204
#, c-format
msgid "object type mismatch at %s"
msgstr "Objekt-Typen passen bei %s nicht zusammen"
-#: builtin/index-pack.c:223
+#: builtin/index-pack.c:224
#, c-format
msgid "did not receive expected object %s"
msgstr "konnte erwartetes Objekt %s nicht empfangen"
-#: builtin/index-pack.c:226
+#: builtin/index-pack.c:227
#, c-format
msgid "object %s: expected type %s, found %s"
msgstr "Objekt %s: erwarteter Typ %s, %s gefunden"
-#: builtin/index-pack.c:268
+#: builtin/index-pack.c:269
#, c-format
msgid "cannot fill %d byte"
msgid_plural "cannot fill %d bytes"
msgstr[0] "kann %d Byte nicht lesen"
msgstr[1] "kann %d Bytes nicht lesen"
-#: builtin/index-pack.c:278
+#: builtin/index-pack.c:279
msgid "early EOF"
msgstr "zu frühes Dateiende"
-#: builtin/index-pack.c:279
+#: builtin/index-pack.c:280
msgid "read error on input"
msgstr "Fehler beim Lesen der Eingabe"
-#: builtin/index-pack.c:291
+#: builtin/index-pack.c:292
msgid "used more bytes than were available"
msgstr "verwendete mehr Bytes als verfügbar waren"
-#: builtin/index-pack.c:298
+#: builtin/index-pack.c:299
msgid "pack too large for current definition of off_t"
msgstr "Paket ist zu groß für die aktuelle Definition von off_t"
-#: builtin/index-pack.c:314
+#: builtin/index-pack.c:302 builtin/unpack-objects.c:92
+msgid "pack exceeds maximum allowed size"
+msgstr "Paket überschreitet die maximal erlaubte Größe"
+
+#: builtin/index-pack.c:317
#, c-format
msgid "unable to create '%s'"
msgstr "konnte '%s' nicht erstellen"
-#: builtin/index-pack.c:319
+#: builtin/index-pack.c:322
#, c-format
msgid "cannot open packfile '%s'"
msgstr "Kann Paketdatei '%s' nicht öffnen"
-#: builtin/index-pack.c:333
+#: builtin/index-pack.c:336
msgid "pack signature mismatch"
msgstr "Paketsignatur stimmt nicht überein"
-#: builtin/index-pack.c:335
+#: builtin/index-pack.c:338
#, c-format
msgid "pack version %<PRIu32> unsupported"
msgstr "Paketversion %<PRIu32> nicht unterstützt"
-#: builtin/index-pack.c:353
+#: builtin/index-pack.c:356
#, c-format
msgid "pack has bad object at offset %<PRIuMAX>: %s"
msgstr "Paket hat ein ungültiges Objekt bei Versatz %<PRIuMAX>: %s"
-#: builtin/index-pack.c:475
+#: builtin/index-pack.c:478
#, c-format
msgid "inflate returned %d"
msgstr "Dekomprimierung gab %d zurück"
-#: builtin/index-pack.c:524
+#: builtin/index-pack.c:527
msgid "offset value overflow for delta base object"
msgstr "Wert für Versatz bei Differenzobjekt übergelaufen"
-#: builtin/index-pack.c:532
+#: builtin/index-pack.c:535
msgid "delta base offset is out of bound"
msgstr ""
"Wert für Versatz bei Differenzobjekt liegt außerhalb des gültigen Bereichs"
-#: builtin/index-pack.c:540
+#: builtin/index-pack.c:543
#, c-format
msgid "unknown object type %d"
msgstr "Unbekannter Objekt-Typ %d"
-#: builtin/index-pack.c:571
+#: builtin/index-pack.c:574
msgid "cannot pread pack file"
msgstr "Kann Paketdatei %s nicht lesen"
-#: builtin/index-pack.c:573
+#: builtin/index-pack.c:576
#, c-format
msgid "premature end of pack file, %<PRIuMAX> byte missing"
msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
msgstr[0] "frühzeitiges Ende der Paketdatei, vermisse %<PRIuMAX> Byte"
msgstr[1] "frühzeitiges Ende der Paketdatei, vermisse %<PRIuMAX> Bytes"
-#: builtin/index-pack.c:599
+#: builtin/index-pack.c:602
msgid "serious inflate inconsistency"
msgstr "ernsthafte Inkonsistenz nach Dekomprimierung"
-#: builtin/index-pack.c:745 builtin/index-pack.c:751 builtin/index-pack.c:774
-#: builtin/index-pack.c:808 builtin/index-pack.c:817
+#: builtin/index-pack.c:748 builtin/index-pack.c:754 builtin/index-pack.c:777
+#: builtin/index-pack.c:811 builtin/index-pack.c:820
#, c-format
msgid "SHA1 COLLISION FOUND WITH %s !"
msgstr "SHA1 KOLLISION MIT %s GEFUNDEN !"
-#: builtin/index-pack.c:748 builtin/pack-objects.c:164
-#: builtin/pack-objects.c:256
+#: builtin/index-pack.c:751 builtin/pack-objects.c:166
+#: builtin/pack-objects.c:258
#, c-format
msgid "unable to read %s"
msgstr "kann %s nicht lesen"
-#: builtin/index-pack.c:814
+#: builtin/index-pack.c:817
#, c-format
msgid "cannot read existing object %s"
msgstr "Kann existierendes Objekt %s nicht lesen."
-#: builtin/index-pack.c:828
+#: builtin/index-pack.c:831
#, c-format
msgid "invalid blob object %s"
msgstr "ungültiges Blob-Objekt %s"
-#: builtin/index-pack.c:842
+#: builtin/index-pack.c:845
#, c-format
msgid "invalid %s"
msgstr "Ungültiger Objekt-Typ %s"
-#: builtin/index-pack.c:845
+#: builtin/index-pack.c:848
msgid "Error in object"
msgstr "Fehler in Objekt"
-#: builtin/index-pack.c:847
+#: builtin/index-pack.c:850
#, c-format
msgid "Not all child objects of %s are reachable"
msgstr "Nicht alle Kind-Objekte von %s sind erreichbar"
-#: builtin/index-pack.c:919 builtin/index-pack.c:950
+#: builtin/index-pack.c:922 builtin/index-pack.c:953
msgid "failed to apply delta"
msgstr "Konnte Dateiunterschied nicht anwenden"
-#: builtin/index-pack.c:1120
+#: builtin/index-pack.c:1123
msgid "Receiving objects"
msgstr "Empfange Objekte"
-#: builtin/index-pack.c:1120
+#: builtin/index-pack.c:1123
msgid "Indexing objects"
msgstr "Indiziere Objekte"
-#: builtin/index-pack.c:1152
+#: builtin/index-pack.c:1155
msgid "pack is corrupted (SHA1 mismatch)"
msgstr "Paket ist beschädigt (SHA1 unterschiedlich)"
-#: builtin/index-pack.c:1157
+#: builtin/index-pack.c:1160
msgid "cannot fstat packfile"
msgstr "kann Paketdatei nicht lesen"
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1163
msgid "pack has junk at the end"
msgstr "Paketende enthält nicht verwendbaren Inhalt"
-#: builtin/index-pack.c:1171
+#: builtin/index-pack.c:1174
msgid "confusion beyond insanity in parse_pack_objects()"
msgstr "Fehler beim Ausführen von \"parse_pack_objects()\""
-#: builtin/index-pack.c:1196
+#: builtin/index-pack.c:1197
msgid "Resolving deltas"
msgstr "Löse Unterschiede auf"
-#: builtin/index-pack.c:1207
+#: builtin/index-pack.c:1208
#, c-format
msgid "unable to create thread: %s"
msgstr "kann Thread nicht erzeugen: %s"
-#: builtin/index-pack.c:1249
+#: builtin/index-pack.c:1250
msgid "confusion beyond insanity"
msgstr "Fehler beim Auflösen der Unterschiede"
-#: builtin/index-pack.c:1255
+#: builtin/index-pack.c:1256
#, c-format
msgid "completed with %d local object"
msgid_plural "completed with %d local objects"
msgstr[0] "abgeschlossen mit %d lokalem Objekt"
msgstr[1] "abgeschlossen mit %d lokalen Objekten"
-#: builtin/index-pack.c:1267
+#: builtin/index-pack.c:1268
#, c-format
msgid "Unexpected tail checksum for %s (disk corruption?)"
msgstr "Unerwartete Prüfsumme für %s (Festplattenfehler?)"
-#: builtin/index-pack.c:1271
+#: builtin/index-pack.c:1272
#, c-format
msgid "pack has %d unresolved delta"
msgid_plural "pack has %d unresolved deltas"
msgstr[0] "Paket hat %d unaufgelöste Unterschied"
msgstr[1] "Paket hat %d unaufgelöste Unterschiede"
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1296
#, c-format
msgid "unable to deflate appended object (%d)"
msgstr "Konnte angehängtes Objekt (%d) nicht komprimieren"
-#: builtin/index-pack.c:1371
+#: builtin/index-pack.c:1372
#, c-format
msgid "local object %s is corrupt"
msgstr "lokales Objekt %s ist beschädigt"
-#: builtin/index-pack.c:1395
+#: builtin/index-pack.c:1396
msgid "error while closing pack file"
msgstr "Fehler beim Schließen der Paketdatei"
-#: builtin/index-pack.c:1408
+#: builtin/index-pack.c:1409
#, c-format
msgid "cannot write keep file '%s'"
msgstr "Kann Paketbeschreibungsdatei '%s' nicht schreiben"
-#: builtin/index-pack.c:1416
+#: builtin/index-pack.c:1417
#, c-format
msgid "cannot close written keep file '%s'"
msgstr "Kann eben erstellte Paketbeschreibungsdatei '%s' nicht schließen"
-#: builtin/index-pack.c:1429
+#: builtin/index-pack.c:1430
msgid "cannot store pack file"
msgstr "Kann Paketdatei nicht speichern"
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1441
msgid "cannot store index file"
msgstr "Kann Indexdatei nicht speichern"
-#: builtin/index-pack.c:1473
+#: builtin/index-pack.c:1474
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "\"pack.indexversion=%<PRIu32>\" ist ungültig"
-#: builtin/index-pack.c:1483 builtin/index-pack.c:1681
+#: builtin/index-pack.c:1484 builtin/index-pack.c:1681
#, c-format
msgid "no threads support, ignoring %s"
msgstr "keine Unterstützung von Threads, '%s' wird ignoriert"
msgid "bad %s"
msgstr "%s ist ungültig"
-#: builtin/index-pack.c:1730
+#: builtin/index-pack.c:1732
msgid "--fix-thin cannot be used without --stdin"
msgstr "Die Option --fix-thin kann nicht ohne --stdin verwendet werden."
-#: builtin/index-pack.c:1738
+#: builtin/index-pack.c:1740
msgid "--verify with no packfile name given"
msgstr "Die Option --verify wurde ohne Namen der Paketdatei angegeben."
-#: builtin/init-db.c:55
+#: builtin/init-db.c:54
#, c-format
msgid "cannot stat '%s'"
msgstr "Kann '%s' nicht lesen"
-#: builtin/init-db.c:61
+#: builtin/init-db.c:60
#, c-format
msgid "cannot stat template '%s'"
msgstr "kann Vorlage '%s' nicht lesen"
-#: builtin/init-db.c:66
+#: builtin/init-db.c:65
#, c-format
msgid "cannot opendir '%s'"
msgstr "kann Verzeichnis '%s' nicht öffnen"
-#: builtin/init-db.c:77
+#: builtin/init-db.c:76
#, c-format
msgid "cannot readlink '%s'"
msgstr "kann Verweis '%s' nicht lesen"
-#: builtin/init-db.c:79
+#: builtin/init-db.c:78
#, c-format
msgid "cannot symlink '%s' '%s'"
msgstr "kann symbolische Verknüpfung '%s' auf '%s' nicht erstellen"
-#: builtin/init-db.c:85
+#: builtin/init-db.c:84
#, c-format
msgid "cannot copy '%s' to '%s'"
msgstr "kann '%s' nicht nach '%s' kopieren"
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
#, c-format
msgid "ignoring template %s"
msgstr "ignoriere Vorlage %s"
-#: builtin/init-db.c:120
+#: builtin/init-db.c:119
#, c-format
msgid "templates not found %s"
msgstr "keine Vorlagen in '%s' gefunden"
-#: builtin/init-db.c:135
+#: builtin/init-db.c:134
#, c-format
msgid "not copying templates from '%s': %s"
msgstr "kopiere keine Vorlagen von '%s': %s"
-#: builtin/init-db.c:312 builtin/init-db.c:315
-#, c-format
-msgid "%s already exists"
-msgstr "%s existiert bereits"
-
-#: builtin/init-db.c:344
+#: builtin/init-db.c:327
#, c-format
msgid "unable to handle file type %d"
msgstr "kann nicht mit Dateityp %d umgehen"
-#: builtin/init-db.c:347
+#: builtin/init-db.c:330
#, c-format
msgid "unable to move %s to %s"
msgstr "Konnte %s nicht nach %s verschieben"
-#: builtin/init-db.c:402
+#: builtin/init-db.c:347 builtin/init-db.c:350
+#, c-format
+msgid "%s already exists"
+msgstr "%s existiert bereits"
+
+#: builtin/init-db.c:403
#, c-format
msgid "Reinitialized existing shared Git repository in %s%s\n"
msgstr "Bestehendes verteiltes Git-Repository in %s%s neuinitialisiert\n"
-#: builtin/init-db.c:403
+#: builtin/init-db.c:404
#, c-format
msgid "Reinitialized existing Git repository in %s%s\n"
msgstr "Bestehendes Git-Repository in %s%s neuinitialisiert\n"
-#: builtin/init-db.c:407
+#: builtin/init-db.c:408
#, c-format
msgid "Initialized empty shared Git repository in %s%s\n"
msgstr "Leeres verteiltes Git-Repository in %s%s initialisiert\n"
-#: builtin/init-db.c:408
+#: builtin/init-db.c:409
#, c-format
msgid "Initialized empty Git repository in %s%s\n"
msgstr "Leeres Git-Repository in %s%s initialisiert\n"
-#: builtin/init-db.c:455
+#: builtin/init-db.c:457
msgid ""
"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
"shared[=<permissions>]] [<directory>]"
"git init [-q | --quiet] [--bare] [--template=<Vorlagenverzeichnis>] [--"
"shared[=<Berechtigungen>]] [<Verzeichnis>]"
-#: builtin/init-db.c:478
+#: builtin/init-db.c:480
msgid "permissions"
msgstr "Berechtigungen"
-#: builtin/init-db.c:479
+#: builtin/init-db.c:481
msgid "specify that the git repository is to be shared amongst several users"
msgstr "angeben, dass das Git-Repository mit mehreren Benutzern geteilt wird"
-#: builtin/init-db.c:513 builtin/init-db.c:518
+#: builtin/init-db.c:515 builtin/init-db.c:520
#, c-format
msgid "cannot mkdir %s"
msgstr "kann Verzeichnis %s nicht erstellen"
-#: builtin/init-db.c:522
+#: builtin/init-db.c:524
#, c-format
msgid "cannot chdir to %s"
msgstr "kann nicht in Verzeichnis %s wechseln"
-#: builtin/init-db.c:543
+#: builtin/init-db.c:545
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
"%s (oder --work-tree=<Verzeichnis>) nicht erlaubt ohne Spezifizierung von %s "
"(oder --git-dir=<Verzeichnis>)"
-#: builtin/init-db.c:571
+#: builtin/init-db.c:573
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "Kann nicht auf Arbeitsverzeichnis '%s' zugreifen."
msgid "Cover letter needs email format"
msgstr "Anschreiben benötigt E-Mail-Format"
-#: builtin/log.c:1064
+#: builtin/log.c:1063
#, c-format
msgid "insane in-reply-to: %s"
msgstr "ungültiges in-reply-to: %s"
-#: builtin/log.c:1092
+#: builtin/log.c:1091
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [<Optionen>] [<seit> | <Commitbereich>]"
-#: builtin/log.c:1137
+#: builtin/log.c:1141
msgid "Two output directories?"
msgstr "Zwei Ausgabeverzeichnisse?"
-#: builtin/log.c:1244 builtin/log.c:1883 builtin/log.c:1885 builtin/log.c:1897
+#: builtin/log.c:1248 builtin/log.c:1891 builtin/log.c:1893 builtin/log.c:1905
#, c-format
msgid "Unknown commit %s"
msgstr "Unbekannter Commit %s"
-#: builtin/log.c:1254 builtin/notes.c:254 builtin/notes.c:305
-#: builtin/notes.c:307 builtin/notes.c:370 builtin/notes.c:425
-#: builtin/notes.c:511 builtin/notes.c:516 builtin/notes.c:594
-#: builtin/notes.c:657 builtin/notes.c:882 builtin/tag.c:455
+#: builtin/log.c:1258 builtin/notes.c:884 builtin/tag.c:455
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
-#: builtin/log.c:1259
+#: builtin/log.c:1263
msgid "Could not find exact merge base."
msgstr "Konnte keine exakte Merge-Basis finden."
-#: builtin/log.c:1263
+#: builtin/log.c:1267
msgid ""
"Failed to get upstream, if you want to record base commit automatically,\n"
"please use git branch --set-upstream-to to track a remote branch.\n"
"'git branch --set-upstream-to', um einem Remote-Branch zu folgen.\n"
"Oder geben Sie den Basis-Commit mit '--base=<Basis-Commit-Id>' manuell an."
-#: builtin/log.c:1283
+#: builtin/log.c:1287
msgid "Failed to find exact merge base"
msgstr "Fehler beim Finden einer exakten Merge-Basis."
-#: builtin/log.c:1294
+#: builtin/log.c:1298
msgid "base commit should be the ancestor of revision list"
msgstr "Basis-Commit sollte der Vorgänger der Revisionsliste sein."
-#: builtin/log.c:1298
+#: builtin/log.c:1302
msgid "base commit shouldn't be in revision list"
msgstr "Basis-Commit sollte nicht in der Revisionsliste enthalten sein."
-#: builtin/log.c:1347
+#: builtin/log.c:1351
msgid "cannot get patch id"
msgstr "kann Patch-Id nicht lesen"
-#: builtin/log.c:1404
+#: builtin/log.c:1408
msgid "use [PATCH n/m] even with a single patch"
msgstr "[PATCH n/m] auch mit einzelnem Patch verwenden"
-#: builtin/log.c:1407
+#: builtin/log.c:1411
msgid "use [PATCH] even with multiple patches"
msgstr "[PATCH] auch mit mehreren Patches verwenden"
-#: builtin/log.c:1411
+#: builtin/log.c:1415
msgid "print patches to standard out"
msgstr "Ausgabe der Patches in Standard-Ausgabe"
-#: builtin/log.c:1413
+#: builtin/log.c:1417
msgid "generate a cover letter"
msgstr "ein Deckblatt erzeugen"
-#: builtin/log.c:1415
+#: builtin/log.c:1419
msgid "use simple number sequence for output file names"
msgstr "einfache Nummernfolge für die Namen der Ausgabedateien verwenden"
-#: builtin/log.c:1416
+#: builtin/log.c:1420
msgid "sfx"
msgstr "Dateiendung"
-#: builtin/log.c:1417
+#: builtin/log.c:1421
msgid "use <sfx> instead of '.patch'"
msgstr "<Dateiendung> anstatt '.patch' verwenden"
-#: builtin/log.c:1419
+#: builtin/log.c:1423
msgid "start numbering patches at <n> instead of 1"
msgstr "die Nummerierung der Patches bei <n> anstatt bei 1 beginnen"
-#: builtin/log.c:1421
+#: builtin/log.c:1425
msgid "mark the series as Nth re-roll"
msgstr "die Serie als n-te Fassung kennzeichnen"
-#: builtin/log.c:1423
+#: builtin/log.c:1427
+msgid "Use [RFC PATCH] instead of [PATCH]"
+msgstr "[RFC PATCH] anstatt [PATCH] verwenden"
+
+#: builtin/log.c:1430
msgid "Use [<prefix>] instead of [PATCH]"
msgstr "[<Präfix>] anstatt [PATCH] verwenden"
-#: builtin/log.c:1426
+#: builtin/log.c:1433
msgid "store resulting files in <dir>"
msgstr "erzeugte Dateien in <Verzeichnis> speichern"
-#: builtin/log.c:1429
+#: builtin/log.c:1436
msgid "don't strip/add [PATCH]"
msgstr "[PATCH] nicht entfernen/hinzufügen"
-#: builtin/log.c:1432
+#: builtin/log.c:1439
msgid "don't output binary diffs"
msgstr "keine binären Unterschiede ausgeben"
-#: builtin/log.c:1434
+#: builtin/log.c:1441
msgid "output all-zero hash in From header"
msgstr "Hash mit Nullen in \"From\"-Header ausgeben"
-#: builtin/log.c:1436
+#: builtin/log.c:1443
msgid "don't include a patch matching a commit upstream"
msgstr ""
"keine Patches einschließen, die einem Commit im Upstream-Branch entsprechen"
-#: builtin/log.c:1438
+#: builtin/log.c:1445
msgid "show patch format instead of default (patch + stat)"
msgstr "Patchformat anstatt des Standards anzeigen (Patch + Zusammenfassung)"
-#: builtin/log.c:1440
+#: builtin/log.c:1447
msgid "Messaging"
msgstr "E-Mail-Einstellungen"
-#: builtin/log.c:1441
+#: builtin/log.c:1448
msgid "header"
msgstr "Header"
-#: builtin/log.c:1442
+#: builtin/log.c:1449
msgid "add email header"
msgstr "E-Mail-Header hinzufügen"
-#: builtin/log.c:1443 builtin/log.c:1445
+#: builtin/log.c:1450 builtin/log.c:1452
msgid "email"
msgstr "E-Mail"
-#: builtin/log.c:1443
+#: builtin/log.c:1450
msgid "add To: header"
msgstr "\"To:\"-Header hinzufügen"
-#: builtin/log.c:1445
+#: builtin/log.c:1452
msgid "add Cc: header"
msgstr "\"Cc:\"-Header hinzufügen"
-#: builtin/log.c:1447
+#: builtin/log.c:1454
msgid "ident"
msgstr "Ident"
-#: builtin/log.c:1448
+#: builtin/log.c:1455
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"\"From\"-Adresse auf <Ident> setzen (oder Ident des Commit-Erstellers, wenn "
"fehlend)"
-#: builtin/log.c:1450
+#: builtin/log.c:1457
msgid "message-id"
msgstr "message-id"
-#: builtin/log.c:1451
+#: builtin/log.c:1458
msgid "make first mail a reply to <message-id>"
msgstr "aus erster E-Mail eine Antwort zu <message-id> machen"
-#: builtin/log.c:1452 builtin/log.c:1455
+#: builtin/log.c:1459 builtin/log.c:1462
msgid "boundary"
msgstr "Grenze"
-#: builtin/log.c:1453
+#: builtin/log.c:1460
msgid "attach the patch"
msgstr "den Patch anhängen"
-#: builtin/log.c:1456
+#: builtin/log.c:1463
msgid "inline the patch"
msgstr "den Patch direkt in die Nachricht einfügen"
-#: builtin/log.c:1460
+#: builtin/log.c:1467
msgid "enable message threading, styles: shallow, deep"
msgstr "Nachrichtenverkettung aktivieren, Stile: shallow, deep"
-#: builtin/log.c:1462
+#: builtin/log.c:1469
msgid "signature"
msgstr "Signatur"
-#: builtin/log.c:1463
+#: builtin/log.c:1470
msgid "add a signature"
msgstr "eine Signatur hinzufügen"
-#: builtin/log.c:1464
+#: builtin/log.c:1471
msgid "base-commit"
msgstr "Basis-Commit"
-#: builtin/log.c:1465
+#: builtin/log.c:1472
msgid "add prerequisite tree info to the patch series"
msgstr "erforderliche Revisions-Informationen der Patch-Serie hinzufügen"
-#: builtin/log.c:1467
+#: builtin/log.c:1474
msgid "add a signature from a file"
msgstr "eine Signatur aus einer Datei hinzufügen"
-#: builtin/log.c:1468
+#: builtin/log.c:1475
msgid "don't print the patch filenames"
msgstr "keine Dateinamen der Patches anzeigen"
-#: builtin/log.c:1558
+#: builtin/log.c:1565
msgid "-n and -k are mutually exclusive."
msgstr "Die Optionen -n und -k schließen sich gegenseitig aus."
-#: builtin/log.c:1560
-msgid "--subject-prefix and -k are mutually exclusive."
-msgstr "Die Optionen --subject-prefix und -k schließen sich gegenseitig aus."
+#: builtin/log.c:1567
+msgid "--subject-prefix/--rfc and -k are mutually exclusive."
+msgstr "--subject-prefix/--rfc und -k schließen sich gegenseitig aus."
-#: builtin/log.c:1568
+#: builtin/log.c:1575
msgid "--name-only does not make sense"
msgstr "Die Option --name-only kann nicht verwendet werden."
-#: builtin/log.c:1570
+#: builtin/log.c:1577
msgid "--name-status does not make sense"
msgstr "Die Option --name-status kann nicht verwendet werden."
-#: builtin/log.c:1572
+#: builtin/log.c:1579
msgid "--check does not make sense"
msgstr "Die Option --check kann nicht verwendet werden."
-#: builtin/log.c:1602
+#: builtin/log.c:1609
msgid "standard output, or directory, which one?"
msgstr "Standard-Ausgabe oder Verzeichnis, welches von beidem?"
-#: builtin/log.c:1604
+#: builtin/log.c:1611
#, c-format
msgid "Could not create directory '%s'"
msgstr "Konnte Verzeichnis '%s' nicht erstellen."
-#: builtin/log.c:1698
+#: builtin/log.c:1705
#, c-format
msgid "unable to read signature file '%s'"
msgstr "Konnte Signatur-Datei '%s' nicht lesen"
-#: builtin/log.c:1769
+#: builtin/log.c:1777
msgid "Failed to create output files"
msgstr "Fehler beim Erstellen der Ausgabedateien."
-#: builtin/log.c:1818
+#: builtin/log.c:1826
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [<Upstream> [<Branch> [<Limit>]]]"
-#: builtin/log.c:1872
+#: builtin/log.c:1880
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
"Konnte gefolgten Remote-Branch nicht finden, bitte geben Sie <Upstream> "
"manuell an.\n"
-#: builtin/ls-files.c:379
+#: builtin/ls-files.c:458
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [<Optionen>] [<Datei>...]"
-#: builtin/ls-files.c:428
+#: builtin/ls-files.c:507
msgid "identify the file status with tags"
msgstr "den Dateistatus mit Tags anzeigen"
-#: builtin/ls-files.c:430
+#: builtin/ls-files.c:509
msgid "use lowercase letters for 'assume unchanged' files"
msgstr ""
"Kleinbuchstaben für Dateien mit 'assume unchanged' Markierung verwenden"
-#: builtin/ls-files.c:432
+#: builtin/ls-files.c:511
msgid "show cached files in the output (default)"
msgstr "zwischengespeicherte Dateien in der Ausgabe anzeigen (Standard)"
-#: builtin/ls-files.c:434
+#: builtin/ls-files.c:513
msgid "show deleted files in the output"
msgstr "entfernte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:436
+#: builtin/ls-files.c:515
msgid "show modified files in the output"
msgstr "geänderte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:438
+#: builtin/ls-files.c:517
msgid "show other files in the output"
msgstr "sonstige Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:440
+#: builtin/ls-files.c:519
msgid "show ignored files in the output"
msgstr "ignorierte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:443
+#: builtin/ls-files.c:522
msgid "show staged contents' object name in the output"
msgstr ""
"Objektnamen von Inhalten, die zum Commit vorgemerkt sind, in der Ausgabe "
"anzeigen"
-#: builtin/ls-files.c:445
+#: builtin/ls-files.c:524
msgid "show files on the filesystem that need to be removed"
msgstr "Dateien im Dateisystem, die gelöscht werden müssen, anzeigen"
-#: builtin/ls-files.c:447
+#: builtin/ls-files.c:526
msgid "show 'other' directories' names only"
msgstr "nur Namen von 'sonstigen' Verzeichnissen anzeigen"
-#: builtin/ls-files.c:449
+#: builtin/ls-files.c:528
msgid "show line endings of files"
msgstr "Zeilenenden von Dateien anzeigen"
-#: builtin/ls-files.c:451
+#: builtin/ls-files.c:530
msgid "don't show empty directories"
msgstr "keine leeren Verzeichnisse anzeigen"
-#: builtin/ls-files.c:454
+#: builtin/ls-files.c:533
msgid "show unmerged files in the output"
msgstr "nicht zusammengeführte Dateien in der Ausgabe anzeigen"
-#: builtin/ls-files.c:456
+#: builtin/ls-files.c:535
msgid "show resolve-undo information"
msgstr "'resolve-undo' Informationen anzeigen"
-#: builtin/ls-files.c:458
+#: builtin/ls-files.c:537
msgid "skip files matching pattern"
msgstr "Dateien auslassen, die einem Muster entsprechen"
-#: builtin/ls-files.c:461
+#: builtin/ls-files.c:540
msgid "exclude patterns are read from <file>"
msgstr "Muster, gelesen von <Datei>, ausschließen"
-#: builtin/ls-files.c:464
+#: builtin/ls-files.c:543
msgid "read additional per-directory exclude patterns in <file>"
msgstr "zusätzliche pro-Verzeichnis Auschlussmuster aus <Datei> auslesen"
-#: builtin/ls-files.c:466
+#: builtin/ls-files.c:545
msgid "add the standard git exclusions"
msgstr "die standardmäßigen Git-Ausschlüsse hinzufügen"
-#: builtin/ls-files.c:469
+#: builtin/ls-files.c:548
msgid "make the output relative to the project top directory"
msgstr "Ausgabe relativ zum Projektverzeichnis"
-#: builtin/ls-files.c:472
+#: builtin/ls-files.c:551
+msgid "recurse through submodules"
+msgstr "Rekursion in Submodulen durchführen"
+
+#: builtin/ls-files.c:553
msgid "if any <file> is not in the index, treat this as an error"
msgstr "als Fehler behandeln, wenn sich eine <Datei> nicht im Index befindet"
-#: builtin/ls-files.c:473
+#: builtin/ls-files.c:554
msgid "tree-ish"
msgstr "Commit-Referenz"
-#: builtin/ls-files.c:474
+#: builtin/ls-files.c:555
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"vorgeben, dass Pfade, die seit <Commit-Referenz> gelöscht wurden, immer noch "
"vorhanden sind"
-#: builtin/ls-files.c:476
+#: builtin/ls-files.c:557
msgid "show debugging data"
msgstr "Ausgaben zur Fehlersuche anzeigen"
msgid "Available custom strategies are:"
msgstr "Verfügbare benutzerdefinierte Strategien sind:"
-#: builtin/merge.c:195 builtin/pull.c:126
+#: builtin/merge.c:195 builtin/pull.c:127
msgid "do not show a diffstat at the end of the merge"
msgstr "keine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
-#: builtin/merge.c:198 builtin/pull.c:129
+#: builtin/merge.c:198 builtin/pull.c:130
msgid "show a diffstat at the end of the merge"
msgstr "eine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
-#: builtin/merge.c:199 builtin/pull.c:132
+#: builtin/merge.c:199 builtin/pull.c:133
msgid "(synonym to --stat)"
msgstr "(Synonym für --stat)"
-#: builtin/merge.c:201 builtin/pull.c:135
+#: builtin/merge.c:201 builtin/pull.c:136
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"(höchstens <n>) Einträge von \"shortlog\" zur Beschreibung des Merge-Commits "
"hinzufügen"
-#: builtin/merge.c:204 builtin/pull.c:138
+#: builtin/merge.c:204 builtin/pull.c:139
msgid "create a single commit instead of doing a merge"
msgstr "einen einzelnen Commit anstatt eines Merges erzeugen"
-#: builtin/merge.c:206 builtin/pull.c:141
+#: builtin/merge.c:206 builtin/pull.c:142
msgid "perform a commit if the merge succeeds (default)"
msgstr "einen Commit durchführen, wenn der Merge erfolgreich war (Standard)"
-#: builtin/merge.c:208 builtin/pull.c:144
+#: builtin/merge.c:208 builtin/pull.c:145
msgid "edit message before committing"
msgstr "Bearbeitung der Beschreibung vor dem Commit"
msgid "allow fast-forward (default)"
msgstr "Vorspulen erlauben (Standard)"
-#: builtin/merge.c:211 builtin/pull.c:150
+#: builtin/merge.c:211 builtin/pull.c:151
msgid "abort if fast-forward is not possible"
msgstr "abbrechen, wenn kein Vorspulen möglich ist"
-#: builtin/merge.c:215 builtin/pull.c:153
+#: builtin/merge.c:215 builtin/pull.c:154
msgid "verify that the named commit has a valid GPG signature"
msgstr "den genannten Commit auf eine gültige GPG-Signatur überprüfen"
-#: builtin/merge.c:216 builtin/notes.c:772 builtin/pull.c:157
+#: builtin/merge.c:216 builtin/notes.c:774 builtin/pull.c:158
#: builtin/revert.c:89
msgid "strategy"
msgstr "Strategie"
-#: builtin/merge.c:217 builtin/pull.c:158
+#: builtin/merge.c:217 builtin/pull.c:159
msgid "merge strategy to use"
msgstr "zu verwendende Merge-Strategie"
-#: builtin/merge.c:218 builtin/pull.c:161
+#: builtin/merge.c:218 builtin/pull.c:162
msgid "option=value"
msgstr "Option=Wert"
-#: builtin/merge.c:219 builtin/pull.c:162
+#: builtin/merge.c:219 builtin/pull.c:163
msgid "option for selected merge strategy"
msgstr "Option für ausgewählte Merge-Strategie"
msgid "abort the current in-progress merge"
msgstr "den sich im Gange befindlichen Merge abbrechen"
-#: builtin/merge.c:227 builtin/pull.c:169
+#: builtin/merge.c:227 builtin/pull.c:170
msgid "allow merging unrelated histories"
msgstr "erlaube das Zusammenführen von nicht zusammenhängenden Historien"
msgid "Already up-to-date."
msgstr "Bereits aktuell."
-#: builtin/merge.c:1382
+#: builtin/merge.c:1377
#, c-format
msgid "Updating %s..%s\n"
msgstr "Aktualisiere %s..%s\n"
-#: builtin/merge.c:1419
+#: builtin/merge.c:1418
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Probiere wirklich trivialen \"in-index\"-Merge ...\n"
-#: builtin/merge.c:1426
+#: builtin/merge.c:1425
#, c-format
msgid "Nope.\n"
msgstr "Nein.\n"
-#: builtin/merge.c:1451
+#: builtin/merge.c:1450
msgid "Already up-to-date. Yeeah!"
msgstr "Bereits aktuell."
-#: builtin/merge.c:1457
+#: builtin/merge.c:1456
msgid "Not possible to fast-forward, aborting."
msgstr "Vorspulen nicht möglich, breche ab."
-#: builtin/merge.c:1480 builtin/merge.c:1559
+#: builtin/merge.c:1479 builtin/merge.c:1558
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Rücklauf des Verzeichnisses bis zum Ursprung ...\n"
-#: builtin/merge.c:1484
+#: builtin/merge.c:1483
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Probiere Merge-Strategie %s ...\n"
-#: builtin/merge.c:1550
+#: builtin/merge.c:1549
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Keine Merge-Strategie behandelt diesen Merge.\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1551
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Merge mit Strategie %s fehlgeschlagen.\n"
-#: builtin/merge.c:1561
+#: builtin/merge.c:1560
#, 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:1573
+#: builtin/merge.c:1572
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
msgid "git merge-base --fork-point <ref> [<commit>]"
msgstr "git merge-base --fork-point <Referenz> [<Commit>]"
-#: builtin/merge-base.c:214
+#: builtin/merge-base.c:217
msgid "output all common ancestors"
msgstr "Ausgabe aller gemeinsamen Vorgänger-Commits"
-#: builtin/merge-base.c:216
+#: builtin/merge-base.c:219
msgid "find ancestors for a single n-way merge"
msgstr "Vorgänger-Commits für einen einzelnen n-Wege-Merge finden"
-#: builtin/merge-base.c:218
+#: builtin/merge-base.c:221
msgid "list revs not reachable from others"
msgstr "Commits auflisten, die nicht durch Andere erreichbar sind"
-#: builtin/merge-base.c:220
+#: builtin/merge-base.c:223
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
+#: builtin/merge-base.c:225
msgid "find where <commit> forked from reflog of <ref>"
msgstr "<Commit> finden, von wo Reflog von <Referenz> abgespalten wurde"
msgid "set labels for file1/orig-file/file2"
msgstr "Beschriftung für Datei1/orig-Datei/Datei2 setzen"
+#: builtin/merge-recursive.c:45
+#, c-format
+msgid "unknown option %s"
+msgstr "unbekannte Option: %s"
+
+#: builtin/merge-recursive.c:51
+#, c-format
+msgid "could not parse object '%s'"
+msgstr "Konnte Objekt '%s' nicht parsen."
+
+#: builtin/merge-recursive.c:55
+#, c-format
+msgid "cannot handle more than %d base. Ignoring %s."
+msgid_plural "cannot handle more than %d bases. Ignoring %s."
+msgstr[0] "kann nicht mit mehr als %d Merge-Basis umgehen. Ignoriere %s."
+msgstr[1] "kann nicht mit mehr als %d Merge-Basen umgehen. Ignoriere %s."
+
+#: builtin/merge-recursive.c:63
+msgid "not handling anything other than two heads merge."
+msgstr "Es wird nur der Merge von zwei Branches behandelt."
+
+#: builtin/merge-recursive.c:69 builtin/merge-recursive.c:71
+#, c-format
+msgid "could not resolve ref '%s'"
+msgstr "Konnte Referenz '%s' nicht auflösen"
+
+#: builtin/merge-recursive.c:77
+#, c-format
+msgid "Merging %s with %s\n"
+msgstr "Führe %s mit %s zusammen\n"
+
#: builtin/mktree.c:65
msgid "git mktree [-z] [--missing] [--batch]"
msgstr "git mktree [-z] [--missing] [--batch]"
msgid "renaming '%s' failed"
msgstr "Umbenennung von '%s' fehlgeschlagen"
-#: builtin/name-rev.c:258
+#: builtin/name-rev.c:257
msgid "git name-rev [<options>] <commit>..."
msgstr "git name-rev [<Optionen>] <Commit>..."
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [<options>] --all"
msgstr "git name-rev [<Optionen>] --all"
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [<options>] --stdin"
msgstr "git name-rev [<Optionen>] --stdin"
-#: builtin/name-rev.c:312
+#: builtin/name-rev.c:311
msgid "print only names (no SHA-1)"
msgstr "nur Namen anzeigen (keine SHA-1)"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "only use tags to name the commits"
msgstr "nur Tags verwenden, um die Commits zu benennen"
-#: builtin/name-rev.c:315
+#: builtin/name-rev.c:314
msgid "only use refs matching <pattern>"
msgstr "nur Referenzen verwenden die <Muster> entsprechen"
-#: builtin/name-rev.c:317
+#: builtin/name-rev.c:316
msgid "list all commits reachable from all refs"
msgstr "alle Commits auflisten, die von allen Referenzen erreichbar sind"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "read from stdin"
msgstr "von der Standard-Eingabe lesen"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "allow to print `undefined` names (default)"
msgstr "Ausgabe von `undefinierten` Namen erlauben (Standard)"
-#: builtin/name-rev.c:325
+#: builtin/name-rev.c:324
msgid "dereference tags in the input (internal use)"
msgstr "Tags in der Eingabe dereferenzieren (interne Verwendung)"
msgstr "konnte 'show' für Objekt '%s' nicht abschließen"
#: builtin/notes.c:194
-msgid "Please supply the note contents using either -m or -F option"
-msgstr ""
-"Bitte liefern Sie den Notiz-Inhalt unter Verwendung der Option -m oder -F."
+msgid "please supply the note contents using either -m or -F option"
+msgstr "Bitte liefern Sie die Notiz-Inhalte unter Verwendung der Option -m oder -F."
#: builtin/notes.c:203
msgid "unable to write note object"
#: builtin/notes.c:205
#, c-format
-msgid "The note contents have been left in %s"
-msgstr "Die Notiz-Inhalte wurden in %s belassen"
+msgid "the note contents have been left in %s"
+msgstr "Die Notiz-Inhalte wurden in %s belassen."
#: builtin/notes.c:233 builtin/tag.c:439
#, c-format
msgid "could not open or read '%s'"
msgstr "konnte '%s' nicht öffnen oder lesen"
+#: builtin/notes.c:254 builtin/notes.c:305 builtin/notes.c:307
+#: builtin/notes.c:372 builtin/notes.c:427 builtin/notes.c:513
+#: builtin/notes.c:518 builtin/notes.c:596 builtin/notes.c:659
+#, c-format
+msgid "failed to resolve '%s' as a valid ref."
+msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
+
#: builtin/notes.c:257
#, c-format
-msgid "Failed to read object '%s'."
+msgid "failed to read object '%s'."
msgstr "Fehler beim Lesen des Objektes '%s'."
#: builtin/notes.c:261
#, c-format
-msgid "Cannot read note data from non-blob object '%s'."
+msgid "cannot read note data from non-blob object '%s'."
msgstr "Kann Notiz-Daten nicht von Nicht-Blob Objekt '%s' lesen."
-#: builtin/notes.c:363 builtin/notes.c:418 builtin/notes.c:494
-#: builtin/notes.c:506 builtin/notes.c:582 builtin/notes.c:650
-#: builtin/notes.c:800 builtin/notes.c:947 builtin/notes.c:968
+#: builtin/notes.c:301
+#, c-format
+msgid "malformed input line: '%s'."
+msgstr "Fehlerhafte Eingabezeile: '%s'."
+
+#: builtin/notes.c:316
+#, c-format
+msgid "failed to copy notes from '%s' to '%s'"
+msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'"
+
+#. TRANSLATORS: the first %s will be replaced by a
+#. git notes command: 'add', 'merge', 'remove', etc.
+#: builtin/notes.c:345
+#, c-format
+msgid "refusing to %s notes in %s (outside of refs/notes/)"
+msgstr "Ausführung von %s auf Notizen in %s (außerhalb von refs/notes/) zurückgewiesen"
+
+#: builtin/notes.c:365 builtin/notes.c:420 builtin/notes.c:496
+#: builtin/notes.c:508 builtin/notes.c:584 builtin/notes.c:652
+#: builtin/notes.c:802 builtin/notes.c:949 builtin/notes.c:970
msgid "too many parameters"
msgstr "zu viele Parameter"
-#: builtin/notes.c:376 builtin/notes.c:663
+#: builtin/notes.c:378 builtin/notes.c:665
#, c-format
-msgid "No note found for object %s."
+msgid "no note found for object %s."
msgstr "Keine Notiz für Objekt %s gefunden."
-#: builtin/notes.c:397 builtin/notes.c:560
+#: builtin/notes.c:399 builtin/notes.c:562
msgid "note contents as a string"
msgstr "Notizinhalte als Zeichenkette"
-#: builtin/notes.c:400 builtin/notes.c:563
+#: builtin/notes.c:402 builtin/notes.c:565
msgid "note contents in a file"
msgstr "Notizinhalte in einer Datei"
-#: builtin/notes.c:403 builtin/notes.c:566
+#: builtin/notes.c:405 builtin/notes.c:568
msgid "reuse and edit specified note object"
msgstr "Wiederverwendung und Bearbeitung des angegebenen Notiz-Objektes"
-#: builtin/notes.c:406 builtin/notes.c:569
+#: builtin/notes.c:408 builtin/notes.c:571
msgid "reuse specified note object"
msgstr "Wiederverwendung des angegebenen Notiz-Objektes"
-#: builtin/notes.c:409 builtin/notes.c:572
+#: builtin/notes.c:411 builtin/notes.c:574
msgid "allow storing empty note"
msgstr "Speichern leerer Notiz erlauben"
-#: builtin/notes.c:410 builtin/notes.c:481
+#: builtin/notes.c:412 builtin/notes.c:483
msgid "replace existing notes"
msgstr "existierende Notizen ersetzen"
-#: builtin/notes.c:435
+#: builtin/notes.c:437
#, c-format
msgid ""
"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
"Konnte Notizen nicht hinzufügen. Existierende Notizen für Objekt %s "
"gefunden. Verwenden Sie '-f', um die existierenden Notizen zu überschreiben."
-#: builtin/notes.c:450 builtin/notes.c:529
+#: builtin/notes.c:452 builtin/notes.c:531
#, c-format
msgid "Overwriting existing notes for object %s\n"
msgstr "Überschreibe existierende Notizen für Objekt %s\n"
-#: builtin/notes.c:461 builtin/notes.c:622 builtin/notes.c:887
+#: builtin/notes.c:463 builtin/notes.c:624 builtin/notes.c:889
#, c-format
msgid "Removing note for object %s\n"
msgstr "Entferne Notiz für Objekt %s\n"
-#: builtin/notes.c:482
+#: builtin/notes.c:484
msgid "read objects from stdin"
msgstr "Objekte von der Standard-Eingabe lesen"
-#: builtin/notes.c:484
+#: builtin/notes.c:486
msgid "load rewriting config for <command> (implies --stdin)"
msgstr ""
"Konfiguration für <Befehl> zum Umschreiben von Commits laden (impliziert --"
"stdin)"
-#: builtin/notes.c:502
+#: builtin/notes.c:504
msgid "too few parameters"
msgstr "zu wenig Parameter"
-#: builtin/notes.c:523
+#: builtin/notes.c:525
#, c-format
msgid ""
"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
"Kann Notizen nicht kopieren. Existierende Notizen für Objekt %s gefunden. "
"Verwenden Sie '-f', um die existierenden Notizen zu überschreiben."
-#: builtin/notes.c:535
+#: builtin/notes.c:537
#, c-format
-msgid "Missing notes on source object %s. Cannot copy."
+msgid "missing notes on source object %s. Cannot copy."
msgstr "Keine Notizen für Quell-Objekt %s. Kopie nicht möglich."
-#: builtin/notes.c:587
+#: builtin/notes.c:589
#, c-format
msgid ""
"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
"Die Optionen -m/-F/-c/-C sind für den Unterbefehl 'edit' veraltet.\n"
"Bitte benutzen Sie stattdessen 'git notes add -f -m/-F/-c/-C'.\n"
-#: builtin/notes.c:753
+#: builtin/notes.c:685
+msgid "failed to delete ref NOTES_MERGE_PARTIAL"
+msgstr "Fehler beim Löschen der Referenz NOTES_MERGE_PARTIAL"
+
+#: builtin/notes.c:687
+msgid "failed to delete ref NOTES_MERGE_REF"
+msgstr "Fehler beim Löschen der Referenz NOTES_MERGE_REF"
+
+#: builtin/notes.c:689
+msgid "failed to remove 'git notes merge' worktree"
+msgstr "Fehler beim Löschen des Arbeitsverzeichnisses von 'git notes merge'."
+
+#: builtin/notes.c:709
+msgid "failed to read ref NOTES_MERGE_PARTIAL"
+msgstr "Fehler beim Lesen der Referenz NOTES_MERGE_PARTIAL"
+
+#: builtin/notes.c:711
+msgid "could not find commit from NOTES_MERGE_PARTIAL."
+msgstr "Konnte Commit von NOTES_MERGE_PARTIAL nicht finden."
+
+#: builtin/notes.c:713
+msgid "could not parse commit from NOTES_MERGE_PARTIAL."
+msgstr "Konnte Commit von NOTES_MERGE_PARTIAL nicht parsen."
+
+#: builtin/notes.c:726
+msgid "failed to resolve NOTES_MERGE_REF"
+msgstr "Fehler beim Auflösen von NOTES_MERGE_REF"
+
+#: builtin/notes.c:729
+msgid "failed to finalize notes merge"
+msgstr "Fehler beim Abschließen der Zusammenführung der Notizen."
+
+#: builtin/notes.c:755
#, c-format
msgid "unknown notes merge strategy %s"
msgstr "unbekannte Merge-Strategie '%s' für Notizen"
-#: builtin/notes.c:769
+#: builtin/notes.c:771
msgid "General options"
msgstr "Allgemeine Optionen"
-#: builtin/notes.c:771
+#: builtin/notes.c:773
msgid "Merge options"
msgstr "Merge-Optionen"
-#: builtin/notes.c:773
+#: builtin/notes.c:775
msgid ""
"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
"cat_sort_uniq)"
"löst Konflikte bei Notizen mit der angegebenen Strategie auf (manual/ours/"
"theirs/union/cat_sort_uniq)"
-#: builtin/notes.c:775
+#: builtin/notes.c:777
msgid "Committing unmerged notes"
msgstr "nicht zusammengeführte Notizen eintragen"
-#: builtin/notes.c:777
+#: builtin/notes.c:779
msgid "finalize notes merge by committing unmerged notes"
msgstr ""
"Merge von Notizen abschließen, in dem nicht zusammengeführte Notizen "
"committet werden"
-#: builtin/notes.c:779
+#: builtin/notes.c:781
msgid "Aborting notes merge resolution"
msgstr "Konfliktauflösung beim Merge von Notizen abbrechen"
-#: builtin/notes.c:781
+#: builtin/notes.c:783
msgid "abort notes merge"
msgstr "Merge von Notizen abbrechen"
-#: builtin/notes.c:792
+#: builtin/notes.c:794
msgid "cannot mix --commit, --abort or -s/--strategy"
msgstr "Kann --commit, --abort oder -s/--strategy nicht kombinieren."
-#: builtin/notes.c:797
-msgid "Must specify a notes ref to merge"
+#: builtin/notes.c:799
+msgid "must specify a notes ref to merge"
msgstr "Sie müssen eine Notiz-Referenz zum Mergen angeben."
-#: builtin/notes.c:821
+#: builtin/notes.c:823
#, c-format
-msgid "Unknown -s/--strategy: %s"
+msgid "unknown -s/--strategy: %s"
msgstr "Unbekannter Wert für -s/--strategy: %s"
-#: builtin/notes.c:858
+#: builtin/notes.c:860
#, c-format
-msgid "A notes merge into %s is already in-progress at %s"
+msgid "a notes merge into %s is already in-progress at %s"
msgstr "Ein Merge von Notizen nach %s ist bereits im Gange bei %s"
-#: builtin/notes.c:861
+#: builtin/notes.c:863
#, c-format
-msgid "Failed to store link to current notes ref (%s)"
-msgstr "Fehler beim Speichern der Verknüpfung zur aktuellen Notes-Referenz (%s)"
+msgid "failed to store link to current notes ref (%s)"
+msgstr ""
+"Fehler beim Speichern der Verknüpfung zur aktuellen Notes-Referenz (%s)"
-#: builtin/notes.c:863
+#: builtin/notes.c:865
#, c-format
msgid ""
"Automatic notes merge failed. Fix conflicts in %s and commit the result with "
"abort'.\n"
msgstr ""
"Automatisches Zusammenführen der Notizen fehlgeschlagen. Beheben Sie die\n"
-"Konflikte in %s und committen Sie das Ergebnis mit 'git notes merge --commit',\n"
+"Konflikte in %s und committen Sie das Ergebnis mit 'git notes merge --"
+"commit',\n"
"oder brechen Sie den Merge mit 'git notes merge --abort' ab.\n"
-#: builtin/notes.c:885
+#: builtin/notes.c:887
#, c-format
msgid "Object %s has no note\n"
msgstr "Objekt %s hat keine Notiz\n"
-#: builtin/notes.c:897
+#: builtin/notes.c:899
msgid "attempt to remove non-existent note is not an error"
msgstr "der Versuch, eine nicht existierende Notiz zu löschen, ist kein Fehler"
-#: builtin/notes.c:900
+#: builtin/notes.c:902
msgid "read object names from the standard input"
msgstr "Objektnamen von der Standard-Eingabe lesen"
-#: builtin/notes.c:938 builtin/prune.c:105 builtin/worktree.c:127
+#: builtin/notes.c:940 builtin/prune.c:105 builtin/worktree.c:127
msgid "do not remove, show only"
msgstr "nicht löschen, nur anzeigen"
-#: builtin/notes.c:939
+#: builtin/notes.c:941
msgid "report pruned notes"
msgstr "gelöschte Notizen melden"
-#: builtin/notes.c:981
+#: builtin/notes.c:983
msgid "notes-ref"
msgstr "Notiz-Referenz"
-#: builtin/notes.c:982
+#: builtin/notes.c:984
msgid "use notes from <notes-ref>"
msgstr "Notizen von <Notiz-Referenz> verwenden"
-#: builtin/notes.c:1017 builtin/remote.c:1623
+#: builtin/notes.c:1019
#, c-format
-msgid "Unknown subcommand: %s"
+msgid "unknown subcommand: %s"
msgstr "Unbekannter Unterbefehl: %s"
-#: builtin/pack-objects.c:28
+#: builtin/pack-objects.c:29
msgid ""
"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects --stdout [<Optionen>...] [< <Referenzliste> | < "
"<Objektliste>]"
-#: builtin/pack-objects.c:29
+#: builtin/pack-objects.c:30
msgid ""
"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
msgstr ""
"git pack-objects [<Optionen>...] <Basis-Name> [< <Referenzliste> | < "
"<Objektliste>]"
-#: builtin/pack-objects.c:177 builtin/pack-objects.c:180
+#: builtin/pack-objects.c:179 builtin/pack-objects.c:182
#, c-format
msgid "deflate error (%d)"
msgstr "Fehler beim Komprimieren (%d)"
-#: builtin/pack-objects.c:766
+#: builtin/pack-objects.c:768
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr ""
"Deaktiviere Schreiben der Bitmap, Pakete wurden durch pack.packSizeLimit\n"
"aufgetrennt."
-#: builtin/pack-objects.c:779
+#: builtin/pack-objects.c:781
msgid "Writing objects"
msgstr "Schreibe Objekte"
-#: builtin/pack-objects.c:1037
+#: builtin/pack-objects.c:1070
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"Deaktiviere Schreiben der Bitmap, da einige Objekte nicht in eine Pack-"
"Datei\n"
"geschrieben wurden."
-#: builtin/pack-objects.c:2197
+#: builtin/pack-objects.c:2346
msgid "Compressing objects"
msgstr "Komprimiere Objekte"
-#: builtin/pack-objects.c:2611
+#: builtin/pack-objects.c:2759
#, c-format
msgid "unsupported index version %s"
msgstr "Nicht unterstützte Index-Version %s"
-#: builtin/pack-objects.c:2615
+#: builtin/pack-objects.c:2763
#, c-format
msgid "bad index version '%s'"
msgstr "Ungültige Index-Version '%s'"
-#: builtin/pack-objects.c:2645
+#: builtin/pack-objects.c:2793
msgid "do not show progress meter"
msgstr "keine Fortschrittsanzeige anzeigen"
-#: builtin/pack-objects.c:2647
+#: builtin/pack-objects.c:2795
msgid "show progress meter"
msgstr "Fortschrittsanzeige anzeigen"
-#: builtin/pack-objects.c:2649
+#: builtin/pack-objects.c:2797
msgid "show progress meter during object writing phase"
msgstr ""
"Forschrittsanzeige während der Phase des Schreibens der Objekte anzeigen"
-#: builtin/pack-objects.c:2652
+#: builtin/pack-objects.c:2800
msgid "similar to --all-progress when progress meter is shown"
msgstr "ähnlich zu --all-progress wenn Fortschrittsanzeige darstellt wird"
-#: builtin/pack-objects.c:2653
+#: builtin/pack-objects.c:2801
msgid "version[,offset]"
msgstr "version[,offset]"
-#: builtin/pack-objects.c:2654
+#: builtin/pack-objects.c:2802
msgid "write the pack index file in the specified idx format version"
msgstr ""
"die Index-Datei des Paketes in der angegebenen Indexformat-Version schreiben"
-#: builtin/pack-objects.c:2657
+#: builtin/pack-objects.c:2805
msgid "maximum size of each output pack file"
msgstr "maximale Größe für jede ausgegebene Paketdatei"
-#: builtin/pack-objects.c:2659
+#: builtin/pack-objects.c:2807
msgid "ignore borrowed objects from alternate object store"
msgstr "geliehene Objekte von alternativem Objektspeicher ignorieren"
-#: builtin/pack-objects.c:2661
+#: builtin/pack-objects.c:2809
msgid "ignore packed objects"
msgstr "gepackte Objekte ignorieren"
-#: builtin/pack-objects.c:2663
+#: builtin/pack-objects.c:2811
msgid "limit pack window by objects"
msgstr "Paketfenster durch Objekte begrenzen"
-#: builtin/pack-objects.c:2665
+#: builtin/pack-objects.c:2813
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"Paketfenster, zusätzlich zur Objektbegrenzung, durch Speicher begrenzen"
-#: builtin/pack-objects.c:2667
+#: builtin/pack-objects.c:2815
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:2669
+#: builtin/pack-objects.c:2817
msgid "reuse existing deltas"
msgstr "existierende Unterschiede wiederverwenden"
-#: builtin/pack-objects.c:2671
+#: builtin/pack-objects.c:2819
msgid "reuse existing objects"
msgstr "existierende Objekte wiederverwenden"
-#: builtin/pack-objects.c:2673
+#: builtin/pack-objects.c:2821
msgid "use OFS_DELTA objects"
msgstr "OFS_DELTA Objekte verwenden"
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2823
msgid "use threads when searching for best delta matches"
msgstr ""
"Threads bei der Suche nach den besten Übereinstimmungen bei Unterschieden "
"verwenden"
-#: builtin/pack-objects.c:2677
+#: builtin/pack-objects.c:2825
msgid "do not create an empty pack output"
msgstr "keine leeren Pakete erzeugen"
-#: builtin/pack-objects.c:2679
+#: builtin/pack-objects.c:2827
msgid "read revision arguments from standard input"
msgstr "Argumente bezüglich Commits von der Standard-Eingabe lesen"
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2829
msgid "limit the objects to those that are not yet packed"
msgstr "die Objekte zu solchen, die noch nicht gepackt wurden, begrenzen"
-#: builtin/pack-objects.c:2684
+#: builtin/pack-objects.c:2832
msgid "include objects reachable from any reference"
msgstr "Objekte einschließen, die von jeder Referenz erreichbar sind"
-#: builtin/pack-objects.c:2687
+#: builtin/pack-objects.c:2835
msgid "include objects referred by reflog entries"
msgstr ""
"Objekte einschließen, die von Einträgen des Reflogs referenziert werden"
-#: builtin/pack-objects.c:2690
+#: builtin/pack-objects.c:2838
msgid "include objects referred to by the index"
msgstr "Objekte einschließen, die vom Index referenziert werden"
-#: builtin/pack-objects.c:2693
+#: builtin/pack-objects.c:2841
msgid "output pack to stdout"
msgstr "Paket in die Standard-Ausgabe schreiben"
-#: builtin/pack-objects.c:2695
+#: builtin/pack-objects.c:2843
msgid "include tag objects that refer to objects to be packed"
msgstr "Tag-Objekte einschließen, die auf gepackte Objekte referenzieren"
-#: builtin/pack-objects.c:2697
+#: builtin/pack-objects.c:2845
msgid "keep unreachable objects"
msgstr "nicht erreichbare Objekte behalten"
-#: builtin/pack-objects.c:2699
+#: builtin/pack-objects.c:2847
msgid "pack loose unreachable objects"
msgstr "nicht erreichbare lose Objekte packen"
-#: builtin/pack-objects.c:2700 parse-options.h:142
-msgid "time"
-msgstr "Zeit"
-
-#: builtin/pack-objects.c:2701
+#: builtin/pack-objects.c:2849
msgid "unpack unreachable objects newer than <time>"
msgstr "nicht erreichbare Objekte entpacken, die neuer als <Zeit> sind"
-#: builtin/pack-objects.c:2704
+#: builtin/pack-objects.c:2852
msgid "create thin packs"
msgstr "dünnere Pakete erzeugen"
-#: builtin/pack-objects.c:2706
+#: builtin/pack-objects.c:2854
msgid "create packs suitable for shallow fetches"
msgstr ""
"Pakete geeignet für Abholung mit unvollständiger Historie (shallow) erzeugen"
-#: builtin/pack-objects.c:2708
+#: builtin/pack-objects.c:2856
msgid "ignore packs that have companion .keep file"
msgstr "Pakete ignorieren, die .keep Dateien haben"
-#: builtin/pack-objects.c:2710
+#: builtin/pack-objects.c:2858
msgid "pack compression level"
msgstr "Komprimierungsgrad für Paketierung"
-#: builtin/pack-objects.c:2712
+#: builtin/pack-objects.c:2860
msgid "do not hide commits by grafts"
msgstr "keine künstlichen Vorgänger-Commits (\"grafts\") verbergen"
-#: builtin/pack-objects.c:2714
+#: builtin/pack-objects.c:2862
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"Bitmap-Index (falls verfügbar) zur Optimierung der Objektzählung benutzen"
-#: builtin/pack-objects.c:2716
+#: builtin/pack-objects.c:2864
msgid "write a bitmap index together with the pack index"
msgstr "Bitmap-Index zusammen mit Pack-Index schreiben"
-#: builtin/pack-objects.c:2829
+#: builtin/pack-objects.c:2993
msgid "Counting objects"
msgstr "Zähle Objekte"
msgid "cannot prune in a precious-objects repo"
msgstr "kann \"prune\" in precious-objects Repository nicht ausführen"
-#: builtin/pull.c:72
+#: builtin/pull.c:51 builtin/pull.c:53
+#, c-format
+msgid "Invalid value for %s: %s"
+msgstr "Ungültiger Wert für %s: %s"
+
+#: builtin/pull.c:73
msgid "git pull [<options>] [<repository> [<refspec>...]]"
msgstr "git pull [<Optionen>] [<Repository> [<Refspec>...]]"
-#: builtin/pull.c:120
+#: builtin/pull.c:121
msgid "Options related to merging"
msgstr "Optionen bezogen auf Merge"
-#: builtin/pull.c:123
+#: builtin/pull.c:124
msgid "incorporate changes by rebasing rather than merging"
msgstr "Integration von Änderungen durch Rebase statt Merge"
-#: builtin/pull.c:147 builtin/revert.c:101
+#: builtin/pull.c:148 builtin/revert.c:101
msgid "allow fast-forward"
msgstr "Vorspulen erlauben"
-#: builtin/pull.c:156
+#: builtin/pull.c:157
msgid "automatically stash/stash pop before and after rebase"
msgstr "automatischer Stash/Stash-Pop vor und nach eines Rebase"
-#: builtin/pull.c:172
+#: builtin/pull.c:173
msgid "Options related to fetching"
msgstr "Optionen bezogen auf Fetch"
-#: builtin/pull.c:194
+#: builtin/pull.c:195
msgid "number of submodules pulled in parallel"
msgstr "Anzahl der parallel mit 'pull' zu verarbeitenden Submodule"
-#: builtin/pull.c:283
+#: builtin/pull.c:284
#, c-format
msgid "Invalid value for pull.ff: %s"
msgstr "Ungültiger Wert für pull.ff: %s"
-#: builtin/pull.c:379 git-sh-setup.sh:226
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr ""
-"Kann \"pull\" mit \"rebase\" nicht ausführen: Sie haben Änderungen, die "
-"nicht zum Commit vorgemerkt sind."
-
-#: builtin/pull.c:385 git-sh-setup.sh:252
-msgid "Additionally, your index contains uncommitted changes."
-msgstr "Zusätzlich beinhaltet die Staging-Area nicht committete Änderungen."
-
-#: builtin/pull.c:387 git-sh-setup.sh:245
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"Kann \"pull\" mit \"rebase\" nicht ausführen: Die Staging-Area beinhaltet "
-"nicht committete Änderungen."
-
-#: builtin/pull.c:463
+#: builtin/pull.c:397
msgid ""
"There is no candidate for rebasing against among the refs that you just "
"fetched."
"Es gibt keinen Kandidaten für Rebase innerhalb der Referenzen, die eben "
"angefordert wurden."
-#: builtin/pull.c:465
+#: builtin/pull.c:399
msgid ""
"There are no candidates for merging among the refs that you just fetched."
msgstr ""
"Es gibt keine Kandidaten für Merge innerhalb der Referenzen, die eben "
"angefordert wurden."
-#: builtin/pull.c:466
+#: builtin/pull.c:400
msgid ""
"Generally this means that you provided a wildcard refspec which had no\n"
"matches on the remote end."
"Im Allgemeinen bedeutet das, dass Sie einen Refspec mit Wildcards angegeben\n"
"haben, der auf der Gegenseite mit keinen Referenzen übereinstimmt."
-#: builtin/pull.c:469
+#: builtin/pull.c:403
#, c-format
msgid ""
"You asked to pull from the remote '%s', but did not specify\n"
"Repository für den aktuellen Branch ist, müssen Sie einen Branch auf\n"
"der Befehlszeile angeben."
-#: builtin/pull.c:474 git-parse-remote.sh:73
+#: builtin/pull.c:408 git-parse-remote.sh:73
msgid "You are not currently on a branch."
msgstr "Im Moment auf keinem Branch."
-#: builtin/pull.c:476 builtin/pull.c:491 git-parse-remote.sh:79
+#: builtin/pull.c:410 builtin/pull.c:425 git-parse-remote.sh:79
msgid "Please specify which branch you want to rebase against."
msgstr ""
"Bitte geben Sie den Branch an, gegen welchen Sie \"rebase\" ausführen "
"möchten."
-#: builtin/pull.c:478 builtin/pull.c:493 git-parse-remote.sh:82
+#: builtin/pull.c:412 builtin/pull.c:427 git-parse-remote.sh:82
msgid "Please specify which branch you want to merge with."
msgstr "Bitte geben Sie den Branch an, welchen Sie zusammenführen möchten."
-#: builtin/pull.c:479 builtin/pull.c:494
+#: builtin/pull.c:413 builtin/pull.c:428
msgid "See git-pull(1) for details."
msgstr "Siehe git-pull(1) für weitere Details."
-#: builtin/pull.c:481 builtin/pull.c:487 builtin/pull.c:496
+#: builtin/pull.c:415 builtin/pull.c:421 builtin/pull.c:430
#: git-parse-remote.sh:64
msgid "<remote>"
msgstr "<Remote-Repository>"
-#: builtin/pull.c:481 builtin/pull.c:496 builtin/pull.c:501 git-rebase.sh:451
+#: builtin/pull.c:415 builtin/pull.c:430 builtin/pull.c:435 git-rebase.sh:451
#: git-parse-remote.sh:65
msgid "<branch>"
msgstr "<Branch>"
-#: builtin/pull.c:489 git-parse-remote.sh:75
+#: builtin/pull.c:423 git-parse-remote.sh:75
msgid "There is no tracking information for the current branch."
msgstr "Es gibt keine Tracking-Informationen für den aktuellen Branch."
-#: builtin/pull.c:498 git-parse-remote.sh:95
+#: builtin/pull.c:432 git-parse-remote.sh:95
msgid ""
"If you wish to set tracking information for this branch you can do so with:"
msgstr ""
"Sie\n"
"dies tun mit:"
-#: builtin/pull.c:503
+#: builtin/pull.c:437
#, c-format
msgid ""
"Your configuration specifies to merge with the ref '%s'\n"
"des Remote-Repositories durchzuführen, aber diese Referenz\n"
"wurde nicht angefordert."
-#: builtin/pull.c:820
+#: builtin/pull.c:754
msgid "ignoring --verify-signatures for rebase"
msgstr "Ignoriere --verify-signatures für Rebase"
-#: builtin/pull.c:867
+#: builtin/pull.c:801
msgid "--[no-]autostash option is only valid with --rebase."
msgstr "--[no-]autostash ist nur mit --rebase zulässig."
-#: builtin/pull.c:875
+#: builtin/pull.c:809
msgid "Updating an unborn branch with changes added to the index."
msgstr ""
"Aktualisiere einen ungeborenen Branch mit Änderungen, die zum Commit "
"vorgemerkt sind."
-#: builtin/pull.c:903
+#: builtin/pull.c:812
+msgid "pull with rebase"
+msgstr "Pull mit Rebase"
+
+#: builtin/pull.c:813
+msgid "please commit or stash them."
+msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
+
+#: builtin/pull.c:838
#, c-format
msgid ""
"fetch updated the current branch head.\n"
"\"fetch\" aktualisierte die Spitze des aktuellen Branches.\n"
"Spule Ihr Arbeitsverzeichnis von Commit %s vor."
-#: builtin/pull.c:908
+#: builtin/pull.c:843
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
"$ git reset --hard\n"
"zur Wiederherstellung aus."
-#: builtin/pull.c:923
+#: builtin/pull.c:858
msgid "Cannot merge multiple branches into empty head."
msgstr "Kann nicht mehrere Branches in einen leeren Branch zusammenführen."
-#: builtin/pull.c:927
+#: builtin/pull.c:862
msgid "Cannot rebase onto multiple branches."
msgstr "Kann Rebase nicht auf mehrere Branches ausführen."
#: builtin/read-tree.c:139
msgid "debug unpack-trees"
-msgstr "Entpacken der Bäume protokollieren"
+msgstr "unpack-trees protokollieren"
-#: builtin/receive-pack.c:25
+#: builtin/receive-pack.c:26
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack <Git-Verzeichnis>"
-#: builtin/receive-pack.c:1843
+#: builtin/receive-pack.c:793
+msgid ""
+"By default, updating the current branch in a non-bare repository\n"
+"is denied, because it will make the index and work tree inconsistent\n"
+"with what you pushed, and will require 'git reset --hard' to match\n"
+"the work tree to HEAD.\n"
+"\n"
+"You can set 'receive.denyCurrentBranch' configuration variable to\n"
+"'ignore' or 'warn' in the remote repository to allow pushing into\n"
+"its current branch; however, this is not recommended unless you\n"
+"arranged to update its work tree to match what you pushed in some\n"
+"other way.\n"
+"\n"
+"To squelch this message and still keep the default behaviour, set\n"
+"'receive.denyCurrentBranch' configuration variable to 'refuse'."
+msgstr ""
+"Standardmäßig wird die Aktualisierung des aktuellen Branches in einem\n"
+"nicht-Bare-Repository zurückgewiesen, da dies den Index und das Arbeits-\n"
+"verzeichnis inkonsistent zu dem machen würde, was Sie gepushed haben, und\n"
+"'git reset --hard' erforderlich wäre, damit das Arbeitsverzeichnis HEAD\n"
+"entspricht.\n"
+"\n"
+"Sie könnten die Konfigurationsvariable 'receive.denyCurrentBranch' im\n"
+"Remote-Repository zu 'ignore' oder 'warn' setzen, um den Push in den\n"
+"aktuellen Branch zu erlauben; dies wird jedoch nicht empfohlen außer\n"
+"Sie stellen durch andere Wege die Aktualität des Arbeitsverzeichnisses\n"
+"gegenüber dem gepushten Stand sicher.\n"
+"\n"
+"Um diese Meldung zu unterdrücken und das Standardverhalten zu behalten,\n"
+"setzen Sie die Konfigurationsvariable 'receive.denyCurrentBranch' auf\n"
+"'refuse'."
+
+#: builtin/receive-pack.c:813
+msgid ""
+"By default, deleting the current branch is denied, because the next\n"
+"'git clone' won't result in any file checked out, causing confusion.\n"
+"\n"
+"You can set 'receive.denyDeleteCurrent' configuration variable to\n"
+"'warn' or 'ignore' in the remote repository to allow deleting the\n"
+"current branch, with or without a warning message.\n"
+"\n"
+"To squelch this message, you can set it to 'refuse'."
+msgstr ""
+"Standardmäßig wird das Löschen des aktuellen Branches zurückgewiesen,\n"
+"da beim nächsten 'git clone' keine Dateien ausgecheckt werden würden,\n"
+"was zu Verwunderung führt.\n"
+"\n"
+"Sie können die Konfigurationsvariable 'receive.denyDeleteCurrent' im\n"
+"Remote-Repository auf 'warn' oder 'ignore' setzen, um das Löschen des\n"
+"aktuellen Branch mit oder ohne Warnung zu erlauben.\n"
+"\n"
+"Um diese Meldung zu unterdrücken, setzen Sie die Variable auf 'refuse'."
+
+#: builtin/receive-pack.c:1883
msgid "quiet"
msgstr "weniger Ausgaben"
-#: builtin/receive-pack.c:1857
+#: builtin/receive-pack.c:1897
msgid "You must specify a directory."
msgstr "Sie müssen ein Repository angeben."
msgid " Fetch URL: %s"
msgstr " URL zum Abholen: %s"
-#: builtin/remote.c:1143 builtin/remote.c:1156 builtin/remote.c:1296
+#: builtin/remote.c:1143 builtin/remote.c:1156 builtin/remote.c:1295
msgid "(no URL)"
msgstr "(keine URL)"
msgstr[0] " Remote-Branch:%s"
msgstr[1] " Remote-Branches:%s"
-#: builtin/remote.c:1179 builtin/remote.c:1206
+#: builtin/remote.c:1179 builtin/remote.c:1205
msgid " (status not queried)"
msgstr " (Zustand nicht abgefragt)"
msgid " Local refs will be mirrored by 'git push'"
msgstr " Lokale Referenzen werden von 'git push' gespiegelt"
-#: builtin/remote.c:1203
+#: builtin/remote.c:1202
#, 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:1224
+#: builtin/remote.c:1223
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Remote-Repository"
-#: builtin/remote.c:1226
+#: builtin/remote.c:1225
msgid "delete refs/remotes/<name>/HEAD"
msgstr "entfernt refs/remotes/<Name>/HEAD"
-#: builtin/remote.c:1241
+#: builtin/remote.c:1240
msgid "Cannot determine remote HEAD"
msgstr "Kann HEAD des Remote-Repositories nicht bestimmen"
-#: builtin/remote.c:1243
+#: builtin/remote.c:1242
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:1253
+#: builtin/remote.c:1252
#, c-format
msgid "Could not delete %s"
msgstr "Konnte %s nicht entfernen"
-#: builtin/remote.c:1261
+#: builtin/remote.c:1260
#, c-format
msgid "Not a valid ref: %s"
msgstr "keine gültige Referenz: %s"
-#: builtin/remote.c:1263
+#: builtin/remote.c:1262
#, c-format
msgid "Could not setup %s"
msgstr "Konnte %s nicht einrichten"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1280
#, c-format
msgid " %s will become dangling!"
msgstr " %s wird unreferenziert!"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1281
#, c-format
msgid " %s has become dangling!"
msgstr " %s wurde unreferenziert!"
-#: builtin/remote.c:1292
+#: builtin/remote.c:1291
#, c-format
msgid "Pruning %s"
msgstr "entferne veraltete Branches von %s"
-#: builtin/remote.c:1293
+#: builtin/remote.c:1292
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1309
+#: builtin/remote.c:1308
#, c-format
msgid " * [would prune] %s"
msgstr " * [würde veralteten Branch entfernen] %s"
-#: builtin/remote.c:1312
+#: builtin/remote.c:1311
#, c-format
msgid " * [pruned] %s"
msgstr "* [veralteten Branch entfernt] %s"
-#: builtin/remote.c:1357
+#: builtin/remote.c:1356
msgid "prune remotes after fetching"
msgstr "entferne veraltete Branches im Remote-Repository nach \"fetch\""
-#: builtin/remote.c:1420 builtin/remote.c:1474 builtin/remote.c:1542
+#: builtin/remote.c:1419 builtin/remote.c:1473 builtin/remote.c:1541
#, c-format
msgid "No such remote '%s'"
msgstr "Kein solches Remote-Repository '%s'"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1435
msgid "add branch"
msgstr "Branch hinzufügen"
-#: builtin/remote.c:1443
+#: builtin/remote.c:1442
msgid "no remote specified"
msgstr "kein Remote-Repository angegeben"
-#: builtin/remote.c:1460
+#: builtin/remote.c:1459
msgid "query push URLs rather than fetch URLs"
msgstr "nur URLs für Push ausgeben"
-#: builtin/remote.c:1462
+#: builtin/remote.c:1461
msgid "return all URLs"
msgstr "alle URLs ausgeben"
-#: builtin/remote.c:1490
+#: builtin/remote.c:1489
#, c-format
msgid "no URLs configured for remote '%s'"
msgstr "Keine URLs für Remote-Repository '%s' konfiguriert."
-#: builtin/remote.c:1516
+#: builtin/remote.c:1515
msgid "manipulate push URLs"
msgstr "URLs für \"push\" manipulieren"
-#: builtin/remote.c:1518
+#: builtin/remote.c:1517
msgid "add URL"
msgstr "URL hinzufügen"
-#: builtin/remote.c:1520
+#: builtin/remote.c:1519
msgid "delete URLs"
msgstr "URLs löschen"
-#: builtin/remote.c:1527
+#: builtin/remote.c:1526
msgid "--add --delete doesn't make sense"
msgstr ""
"Die Optionen --add und --delete können nicht gemeinsam verwendet werden."
-#: builtin/remote.c:1568
+#: builtin/remote.c:1567
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "ungültiges altes URL Format: %s"
-#: builtin/remote.c:1576
+#: builtin/remote.c:1575
#, c-format
msgid "No such URL found: %s"
msgstr "Keine solche URL gefunden: %s"
-#: builtin/remote.c:1578
+#: builtin/remote.c:1577
msgid "Will not delete all non-push URLs"
msgstr "Werde keine URLs entfernen, die nicht für \"push\" bestimmt sind"
-#: builtin/remote.c:1592
+#: builtin/remote.c:1591
msgid "be verbose; must be placed before a subcommand"
msgstr "erweiterte Ausgaben; muss vor einem Unterbefehl angegeben werden"
+#: builtin/remote.c:1622
+#, c-format
+msgid "Unknown subcommand: %s"
+msgstr "Unbekannter Unterbefehl: %s"
+
#: builtin/repack.c:17
msgid "git repack [<options>]"
msgstr "git repack [<Optionen>]"
"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<Commit>]"
#: builtin/reset.c:27
-msgid "git reset [-q] <tree-ish> [--] <paths>..."
-msgstr "git reset [-q] <Commit-Referenz> [--] <Pfade>..."
+msgid "git reset [-q] [<tree-ish>] [--] <paths>..."
+msgstr "git reset [-q] [<Commit-Referenz>] [--] <Pfade>..."
#: builtin/reset.c:28
msgid "git reset --patch [<tree-ish>] [--] [<paths>...]"
msgid "Could not write new index file."
msgstr "Konnte neue Index-Datei nicht schreiben."
-#: builtin/rev-list.c:362
+#: builtin/rev-list.c:354
msgid "rev-list does not support display of notes"
msgstr "rev-list unterstützt keine Anzeige von Notizen"
-#: builtin/rev-parse.c:358
+#: builtin/rev-parse.c:386
msgid "git rev-parse --parseopt [<options>] -- [<args>...]"
msgstr "git rev-parse --parseopt [<Optionen>] -- [<Argumente>...]"
-#: builtin/rev-parse.c:363
+#: builtin/rev-parse.c:391
msgid "keep the `--` passed as an arg"
msgstr "`--` als Argument lassen"
-#: builtin/rev-parse.c:365
+#: builtin/rev-parse.c:393
msgid "stop parsing after the first non-option argument"
msgstr "das Parsen nach dem ersten Argument, was keine Option ist, stoppen"
-#: builtin/rev-parse.c:368
+#: builtin/rev-parse.c:396
msgid "output in stuck long form"
msgstr ""
"Ausgabe in Langform mit Argumenten an den Optionen (getrennt durch '=')"
-#: builtin/rev-parse.c:499
+#: builtin/rev-parse.c:527
msgid ""
"git rev-parse --parseopt [<options>] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
msgid "revert failed"
msgstr "\"revert\" fehlgeschlagen"
-#: builtin/revert.c:207
+#: builtin/revert.c:205
msgid "cherry-pick failed"
msgstr "\"cherry-pick\" fehlgeschlagen"
msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g | --reflog)[=<n>[,<Basis>]] [--list] [<Referenz>]"
-#: builtin/show-branch.c:640
+#: builtin/show-branch.c:375
+#, c-format
+msgid "ignoring %s; cannot handle more than %d ref"
+msgid_plural "ignoring %s; cannot handle more than %d refs"
+msgstr[0] "ignoriere %s; kann nicht mehr als %d Referenz behandeln"
+msgstr[1] "ignoriere %s; kann nicht mehr als %d Referenzen behandeln"
+
+#: builtin/show-branch.c:541
+#, c-format
+msgid "no matching refs with %s"
+msgstr "keine übereinstimmenden Referenzen mit %s"
+
+#: builtin/show-branch.c:639
msgid "show remote-tracking and local branches"
msgstr "Remote-Tracking und lokale Branches anzeigen"
-#: builtin/show-branch.c:642
+#: builtin/show-branch.c:641
msgid "show remote-tracking branches"
msgstr "Remote-Tracking-Branches anzeigen"
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:643
msgid "color '*!+-' corresponding to the branch"
msgstr "'*!+-' entsprechend des Branches einfärben"
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:645
msgid "show <n> more commits after the common ancestor"
msgstr "<n> weitere Commits nach dem gemeinsamen Vorgänger-Commit anzeigen"
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:647
msgid "synonym to more=-1"
msgstr "Synonym für more=-1"
-#: builtin/show-branch.c:649
+#: builtin/show-branch.c:648
msgid "suppress naming strings"
msgstr "Namen unterdrücken"
-#: builtin/show-branch.c:651
+#: builtin/show-branch.c:650
msgid "include the current branch"
msgstr "den aktuellen Branch einbeziehen"
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:652
msgid "name commits with their object names"
msgstr "Commits nach ihren Objektnamen benennen"
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:654
msgid "show possible merge bases"
msgstr "mögliche Merge-Basen anzeigen"
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:656
msgid "show refs unreachable from any other ref"
msgstr ""
"Referenzen, die unerreichbar von allen anderen Referenzen sind, anzeigen"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "show commits in topological order"
msgstr "Commits in topologischer Ordnung anzeigen"
-#: builtin/show-branch.c:662
+#: builtin/show-branch.c:661
msgid "show only commits not on the first branch"
msgstr "nur Commits anzeigen, die sich nicht im ersten Branch befinden"
-#: builtin/show-branch.c:664
+#: builtin/show-branch.c:663
msgid "show merges reachable from only one tip"
msgstr "Merges anzeigen, die nur von einem Branch aus erreichbar sind"
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:665
msgid "topologically sort, maintaining date order where possible"
msgstr "topologische Sortierung, Beibehaltung Datumsordnung wo möglich"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "<n>[,<base>]"
msgstr "<n>[,<Basis>]"
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:669
msgid "show <n> most recent ref-log entries starting at base"
msgstr "die <n> jüngsten Einträge im Reflog, beginnend an der Basis, anzeigen"
+#: builtin/show-branch.c:703
+msgid ""
+"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
+msgstr "--reflog ist inkompatibel mit --all, --remotes, --independent oder --merge-base"
+
+#: builtin/show-branch.c:727
+msgid "no branches given, and HEAD is not valid"
+msgstr "keine Branches angegeben, und HEAD ist ungültig"
+
+#: builtin/show-branch.c:730
+msgid "--reflog option needs one branch name"
+msgstr "Die Option --reflog benötigt einen Branchnamen."
+
+#: builtin/show-branch.c:733
+#, c-format
+msgid "only %d entry can be shown at one time."
+msgid_plural "only %d entries can be shown at one time."
+msgstr[0] "nur %d Eintrag kann zur selben Zeit angezeigt werden"
+msgstr[1] "nur %d Einträge können zur selben Zeit angezeigt werden"
+
+#: builtin/show-branch.c:737
+#, c-format
+msgid "no such ref %s"
+msgstr "Referenz nicht gefunden: %s"
+
+#: builtin/show-branch.c:829
+#, c-format
+msgid "cannot handle more than %d rev."
+msgid_plural "cannot handle more than %d revs."
+msgstr[0] "Kann nicht mehr als %d Commit behandeln."
+msgstr[1] "Kann nicht mehr als %d Commits behandeln."
+
+#: builtin/show-branch.c:833
+#, c-format
+msgid "'%s' is not a valid ref."
+msgstr "'%s' ist keine gültige Referenz."
+
+#: builtin/show-branch.c:836
+#, c-format
+msgid "cannot find commit %s (%s)"
+msgstr "kann Commit %s (%s) nicht finden"
+
#: builtin/show-ref.c:10
msgid ""
"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --"
msgid "prepend comment character and space to each line"
msgstr "Kommentarzeichen mit Leerzeichen an jede Zeile voranstellen"
-#: builtin/submodule--helper.c:24 builtin/submodule--helper.c:923
+#: builtin/submodule--helper.c:24 builtin/submodule--helper.c:1046
#, c-format
msgid "No such ref: %s"
msgstr "Referenz nicht gefunden: %s"
-#: builtin/submodule--helper.c:31 builtin/submodule--helper.c:932
+#: builtin/submodule--helper.c:31 builtin/submodule--helper.c:1055
#, c-format
msgid "Expecting a full ref name, got %s"
msgstr "Vollständiger Referenzname erwartet, %s erhalten"
msgid "cannot strip one component off url '%s'"
msgstr "Kann eine Komponente von URL '%s' nicht extrahieren"
-#: builtin/submodule--helper.c:278 builtin/submodule--helper.c:403
-#: builtin/submodule--helper.c:483
+#: builtin/submodule--helper.c:282 builtin/submodule--helper.c:408
+#: builtin/submodule--helper.c:590
msgid "alternative anchor for relative paths"
msgstr "Alternativer Anker für relative Pfade"
-#: builtin/submodule--helper.c:283
+#: builtin/submodule--helper.c:287
msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper list [--prefix=<Pfad>] [<Pfad>...]"
-#: builtin/submodule--helper.c:324 builtin/submodule--helper.c:338
+#: builtin/submodule--helper.c:329 builtin/submodule--helper.c:343
#, c-format
msgid "No url found for submodule path '%s' in .gitmodules"
msgstr "Keine URL für Submodul-Pfad '%s' in .gitmodules gefunden"
-#: builtin/submodule--helper.c:364
+#: builtin/submodule--helper.c:369
#, c-format
msgid "Failed to register url for submodule path '%s'"
msgstr ""
"Fehler beim Eintragen der URL für Submodul-Pfad '%s' in die Konfiguration."
-#: builtin/submodule--helper.c:368
+#: builtin/submodule--helper.c:373
#, c-format
msgid "Submodule '%s' (%s) registered for path '%s'\n"
msgstr "Submodul '%s' (%s) für Pfad '%s' in die Konfiguration eingetragen.\n"
-#: builtin/submodule--helper.c:378
+#: builtin/submodule--helper.c:383
#, c-format
msgid "warning: command update mode suggested for submodule '%s'\n"
msgstr "Warnung: 'update'-Modus für Submodul '%s' vorgeschlagen\n"
-#: builtin/submodule--helper.c:385
+#: builtin/submodule--helper.c:390
#, c-format
msgid "Failed to register update mode for submodule path '%s'"
msgstr ""
"Fehler bei Änderung des Aktualisierungsmodus für Submodul-Pfad '%s' in der\n"
"Konfiguration."
-#: builtin/submodule--helper.c:404
+#: builtin/submodule--helper.c:409
msgid "Suppress output for initializing a submodule"
msgstr "Ausgaben bei Initialisierung eines Submoduls unterdrücken"
-#: builtin/submodule--helper.c:409
+#: builtin/submodule--helper.c:414
msgid "git submodule--helper init [<path>]"
msgstr "git submodule--helper init [<Pfad>]"
-#: builtin/submodule--helper.c:430
+#: builtin/submodule--helper.c:435
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name <Pfad>"
-#: builtin/submodule--helper.c:436
+#: builtin/submodule--helper.c:441
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr "Keine Submodul-Zuordnung in .gitmodules für Pfad '%s' gefunden"
-#: builtin/submodule--helper.c:486
+#: builtin/submodule--helper.c:524 builtin/submodule--helper.c:527
+#, c-format
+msgid "submodule '%s' cannot add alternate: %s"
+msgstr "Submodul '%s' kann Alternative nicht hinzufügen: %s"
+
+#: builtin/submodule--helper.c:563
+#, c-format
+msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
+msgstr "Wert '%s' für submodule.alternateErrorStrategy wird nicht erkannt"
+
+#: builtin/submodule--helper.c:570
+#, c-format
+msgid "Value '%s' for submodule.alternateLocation is not recognized"
+msgstr "Wert '%s' für submodule.alternateLocation wird nicht erkannt."
+
+#: builtin/submodule--helper.c:593
msgid "where the new submodule will be cloned to"
msgstr "Pfad für neues Submodul"
-#: builtin/submodule--helper.c:489
+#: builtin/submodule--helper.c:596
msgid "name of the new submodule"
msgstr "Name des neuen Submoduls"
-#: builtin/submodule--helper.c:492
+#: builtin/submodule--helper.c:599
msgid "url where to clone the submodule from"
msgstr "URL von der das Submodul geklont wird"
-#: builtin/submodule--helper.c:498
+#: builtin/submodule--helper.c:605
msgid "depth for shallow clones"
msgstr "Tiefe des Klons mit unvollständiger Historie (shallow)"
-#: builtin/submodule--helper.c:504
+#: builtin/submodule--helper.c:608 builtin/submodule--helper.c:964
+msgid "force cloning progress"
+msgstr "Fortschrittsanzeige beim Klonen erzwingen"
+
+#: builtin/submodule--helper.c:613
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
"<repository>] [--name <name>] [--depth <depth>] --url <url> --path <path>"
"<Repository>] [--name <Name>] [--url <URL>] [--name <Name>] [--depth "
"<Tiefe>] --url <URL> --path <Pfad>"
-#: builtin/submodule--helper.c:529 builtin/submodule--helper.c:535
+#: builtin/submodule--helper.c:638 builtin/submodule--helper.c:648
#, c-format
msgid "could not create directory '%s'"
msgstr "Konnte Verzeichnis '%s' nicht erstellen."
-#: builtin/submodule--helper.c:531
+#: builtin/submodule--helper.c:644
#, c-format
msgid "clone of '%s' into submodule path '%s' failed"
msgstr "Klonen von '%s' in Submodul-Pfad '%s' fehlgeschlagen"
-#: builtin/submodule--helper.c:547
+#: builtin/submodule--helper.c:660
#, c-format
msgid "cannot open file '%s'"
msgstr "Kann Datei '%s' nicht öffnen"
-#: builtin/submodule--helper.c:552
+#: builtin/submodule--helper.c:665
#, c-format
msgid "could not close file %s"
msgstr "Konnte Datei '%s' nicht schließen."
-#: builtin/submodule--helper.c:559
+#: builtin/submodule--helper.c:672
#, c-format
msgid "could not get submodule directory for '%s'"
msgstr "Konnte Submodul-Verzeichnis '%s' nicht finden."
-#: builtin/submodule--helper.c:611
+#: builtin/submodule--helper.c:726
#, c-format
msgid "Submodule path '%s' not initialized"
msgstr "Submodul-Pfad '%s' nicht initialisiert"
-#: builtin/submodule--helper.c:615
+#: builtin/submodule--helper.c:730
msgid "Maybe you want to use 'update --init'?"
msgstr "Meinten Sie vielleicht 'update --init'?"
-#: builtin/submodule--helper.c:641
+#: builtin/submodule--helper.c:756
#, c-format
msgid "Skipping unmerged submodule %s"
msgstr "Überspringe nicht zusammengeführtes Submodul %s"
-#: builtin/submodule--helper.c:662
+#: builtin/submodule--helper.c:777
#, c-format
msgid "Skipping submodule '%s'"
msgstr "Überspringe Submodul '%s'"
-#: builtin/submodule--helper.c:792
+#: builtin/submodule--helper.c:913
#, c-format
msgid "Failed to clone '%s'. Retry scheduled"
msgstr "Fehler beim Klonen von '%s'. Weiterer Versuch geplant"
-#: builtin/submodule--helper.c:803
+#: builtin/submodule--helper.c:924
#, c-format
msgid "Failed to clone '%s' a second time, aborting"
msgstr "Zweiter Versuch '%s' zu klonen fehlgeschlagen, breche ab."
-#: builtin/submodule--helper.c:824
+#: builtin/submodule--helper.c:945
msgid "path into the working tree"
msgstr "Pfad zum Arbeitsverzeichnis"
-#: builtin/submodule--helper.c:827
+#: builtin/submodule--helper.c:948
msgid "path into the working tree, across nested submodule boundaries"
msgstr ""
"Pfad zum Arbeitsverzeichnis, über verschachtelte Submodul-Grenzen hinweg"
-#: builtin/submodule--helper.c:831
+#: builtin/submodule--helper.c:952
msgid "rebase, merge, checkout or none"
msgstr "rebase, merge, checkout oder none"
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:956
msgid "Create a shallow clone truncated to the specified number of revisions"
msgstr ""
"Erstellung eines Klons mit unvollständiger Historie (shallow), abgeschnitten "
"bei\n"
"der angegebenen Anzahl von Commits."
-#: builtin/submodule--helper.c:838
+#: builtin/submodule--helper.c:959
msgid "parallel jobs"
msgstr "Parallele Ausführungen"
-#: builtin/submodule--helper.c:840
+#: builtin/submodule--helper.c:961
msgid "whether the initial clone should follow the shallow recommendation"
msgstr ""
"ob das initiale Klonen den Empfehlungen für eine unvollständige\n"
"Historie (shallow) folgen soll"
-#: builtin/submodule--helper.c:841
+#: builtin/submodule--helper.c:962
msgid "don't print cloning progress"
msgstr "keine Fortschrittsanzeige beim Klonen"
-#: builtin/submodule--helper.c:846
+#: builtin/submodule--helper.c:969
msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper update_clone [--prefix=<Pfad>] [<Pfad>...]"
-#: builtin/submodule--helper.c:856
+#: builtin/submodule--helper.c:979
msgid "bad value for update parameter"
msgstr "Fehlerhafter Wert für --update Parameter"
-#: builtin/submodule--helper.c:927
+#: builtin/submodule--helper.c:1050
#, c-format
msgid ""
"Submodule (%s) branch configured to inherit branch from superproject, but "
"Branch von Submodul (%s) ist konfiguriert, den Branch des Hauptprojektes\n"
"zu erben, aber das Hauptprojekt befindet sich auf keinem Branch."
-#: builtin/submodule--helper.c:977
+#: builtin/submodule--helper.c:1100
msgid "submodule--helper subcommand must be called with a subcommand"
msgstr "submodule--helper muss mit einem Unterbefehl aufgerufen werden"
-#: builtin/submodule--helper.c:984
+#: builtin/submodule--helper.c:1107
#, c-format
msgid "'%s' is not a valid submodule--helper subcommand"
msgstr "'%s' ist kein gültiger Unterbefehl von submodule--helper"
msgid "Updated tag '%s' (was %s)\n"
msgstr "Tag '%s' aktualisiert (war %s)\n"
-#: builtin/unpack-objects.c:490
+#: builtin/unpack-objects.c:493
msgid "Unpacking objects"
msgstr "Entpacke Objekte"
msgid " OK"
msgstr " OK"
-#: builtin/update-index.c:575
+#: builtin/update-index.c:564
msgid "git update-index [<options>] [--] [<file>...]"
msgstr "git update-index [<Optionen>] [--] [<Datei>...]"
-#: builtin/update-index.c:930
+#: builtin/update-index.c:919
msgid "continue refresh even when index needs update"
msgstr ""
"Aktualisierung fortsetzen, auch wenn der Index aktualisiert werden muss"
-#: builtin/update-index.c:933
+#: builtin/update-index.c:922
msgid "refresh: ignore submodules"
msgstr "Aktualisierung: ignoriert Submodule"
-#: builtin/update-index.c:936
+#: builtin/update-index.c:925
msgid "do not ignore new files"
msgstr "keine neuen Dateien ignorieren"
-#: builtin/update-index.c:938
+#: builtin/update-index.c:927
msgid "let files replace directories and vice-versa"
msgstr "Dateien Verzeichnisse ersetzen lassen, und umgedreht"
-#: builtin/update-index.c:940
+#: builtin/update-index.c:929
msgid "notice files missing from worktree"
msgstr "fehlende Dateien im Arbeitsverzeichnis beachten"
-#: builtin/update-index.c:942
+#: builtin/update-index.c:931
msgid "refresh even if index contains unmerged entries"
msgstr ""
"aktualisieren, auch wenn der Index nicht zusammengeführte Einträge beinhaltet"
-#: builtin/update-index.c:945
+#: builtin/update-index.c:934
msgid "refresh stat information"
msgstr "Dateiinformationen aktualisieren"
-#: builtin/update-index.c:949
+#: builtin/update-index.c:938
msgid "like --refresh, but ignore assume-unchanged setting"
msgstr "wie --refresh, ignoriert aber \"assume-unchanged\" Einstellung"
-#: builtin/update-index.c:953
+#: builtin/update-index.c:942
msgid "<mode>,<object>,<path>"
msgstr "<Modus>,<Objekt>,<Pfad>"
-#: builtin/update-index.c:954
+#: builtin/update-index.c:943
msgid "add the specified entry to the index"
msgstr "den angegebenen Eintrag zum Commit vormerken"
-#: builtin/update-index.c:963
+#: builtin/update-index.c:952
msgid "mark files as \"not changing\""
msgstr "diese Datei immer als unverändert betrachten"
-#: builtin/update-index.c:966
+#: builtin/update-index.c:955
msgid "clear assumed-unchanged bit"
msgstr "\"assumed-unchanged\"-Bit löschen"
-#: builtin/update-index.c:969
+#: builtin/update-index.c:958
msgid "mark files as \"index-only\""
msgstr "Dateien als \"index-only\" markieren"
-#: builtin/update-index.c:972
+#: builtin/update-index.c:961
msgid "clear skip-worktree bit"
msgstr "\"skip-worktree\"-Bit löschen"
-#: builtin/update-index.c:975
+#: builtin/update-index.c:964
msgid "add to index only; do not add content to object database"
msgstr ""
"die Änderungen nur zum Commit vormerken; Inhalt wird nicht der Objekt-"
"Datenbank hinzugefügt"
-#: builtin/update-index.c:977
+#: builtin/update-index.c:966
msgid "remove named paths even if present in worktree"
msgstr ""
"benannte Pfade löschen, auch wenn sie sich im Arbeitsverzeichnis befinden"
-#: builtin/update-index.c:979
+#: builtin/update-index.c:968
msgid "with --stdin: input lines are terminated by null bytes"
msgstr "mit --stdin: eingegebene Zeilen sind durch NUL-Bytes abgeschlossen"
-#: builtin/update-index.c:981
+#: builtin/update-index.c:970
msgid "read list of paths to be updated from standard input"
msgstr "Liste der zu aktualisierenden Pfade von der Standard-Eingabe lesen"
-#: builtin/update-index.c:985
+#: builtin/update-index.c:974
msgid "add entries from standard input to the index"
msgstr "Einträge von der Standard-Eingabe zum Commit vormerken"
-#: builtin/update-index.c:989
+#: builtin/update-index.c:978
msgid "repopulate stages #2 and #3 for the listed paths"
msgstr ""
"wiederholtes Einpflegen der Zustände #2 und #3 für die aufgelisteten Pfade"
-#: builtin/update-index.c:993
+#: builtin/update-index.c:982
msgid "only update entries that differ from HEAD"
msgstr "nur Einträge aktualisieren, die unterschiedlich zu HEAD sind"
-#: builtin/update-index.c:997
+#: builtin/update-index.c:986
msgid "ignore files missing from worktree"
msgstr "fehlende Dateien im Arbeitsverzeichnis ignorieren"
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:989
msgid "report actions to standard output"
msgstr "die Aktionen in der Standard-Ausgabe ausgeben"
-#: builtin/update-index.c:1002
+#: builtin/update-index.c:991
msgid "(for porcelains) forget saved unresolved conflicts"
msgstr "(für Fremdprogramme) keine gespeicherten, nicht aufgelöste Konflikte"
-#: builtin/update-index.c:1006
+#: builtin/update-index.c:995
msgid "write index in this format"
msgstr "Index-Datei in diesem Format schreiben"
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:997
msgid "enable or disable split index"
msgstr "Splitting des Index aktivieren oder deaktivieren"
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:999
msgid "enable/disable untracked cache"
msgstr "Cache für unversionierte Dateien aktivieren oder deaktivieren"
-#: builtin/update-index.c:1012
+#: builtin/update-index.c:1001
msgid "test if the filesystem supports untracked cache"
msgstr ""
"prüfen ob das Dateisystem einen Cache für unversionierte Dateien unterstützt"
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1003
msgid "enable untracked cache without testing the filesystem"
msgstr ""
"Cache für unversionierte Dateien ohne Prüfung des Dateisystems aktivieren"
-#: builtin/update-index.c:1134
+#: builtin/update-index.c:1119
+msgid ""
+"core.untrackedCache is set to true; remove or change it, if you really want "
+"to disable the untracked cache"
+msgstr ""
+"core.untrackedCache ist auf 'true' gesetzt. Entfernen oder ändern Sie dies,\n"
+"wenn Sie wirklich den Cache für unversionierte Dateien deaktivieren möchten."
+
+#: builtin/update-index.c:1123
msgid "Untracked cache disabled"
msgstr "Cache für unversionierte Dateien deaktiviert"
-#: builtin/update-index.c:1146
+#: builtin/update-index.c:1131
+msgid ""
+"core.untrackedCache is set to false; remove or change it, if you really want "
+"to enable the untracked cache"
+msgstr ""
+"core.untrackedCache ist auf 'false' gesetzt. Entfernen oder ändern Sie dies,\n"
+"wenn sie wirklich den Cache für unversionierte Dateien aktivieren möchten."
+
+#: builtin/update-index.c:1135
#, c-format
msgid "Untracked cache enabled for '%s'"
msgstr "Cache für unversionierte Dateien für '%s' aktiviert"
msgid "only useful for debugging"
msgstr "nur nützlich für Fehlersuche"
-#: upload-pack.c:20
+#: upload-pack.c:22
msgid "git upload-pack [<options>] <dir>"
msgstr "git upload-pack [<Optionen>] <Verzeichnis>"
-#: upload-pack.c:837
+#: upload-pack.c:1028
msgid "quit after a single request/response exchange"
msgstr "nach einem einzigen Request/Response-Austausch beenden"
-#: upload-pack.c:839
+#: upload-pack.c:1030
msgid "exit immediately after initial ref advertisement"
msgstr "direkt nach der initialen Angabe der Commits beenden"
-#: upload-pack.c:841
+#: upload-pack.c:1032
msgid "do not try <directory>/.git/ if <directory> is no Git directory"
-msgstr "kein Versuch in <Verzeichnis>/.git/ wenn <Verzeichnis> kein Git-Verzeichnis ist"
+msgstr ""
+"kein Versuch in <Verzeichnis>/.git/ wenn <Verzeichnis> kein Git-Verzeichnis "
+"ist"
-#: upload-pack.c:843
+#: upload-pack.c:1034
msgid "interrupt transfer after <n> seconds of inactivity"
msgstr "Übertragung nach <n> Sekunden Inaktivität unterbrechen"
+#: credential-cache--daemon.c:223
+#, c-format
+msgid ""
+"The permissions on your socket directory are too loose; other\n"
+"users may be able to read your cached credentials. Consider running:\n"
+"\n"
+"\tchmod 0700 %s"
+msgstr ""
+"Die Berechtigungen auf Ihr Socket-Verzeichnis sind zu schwach; andere\n"
+"Nutzer könnten Ihre zwischengespeicherten Anmeldeinformationen lesen.\n"
+"Ziehen Sie in Betracht\n"
+"\n"
+"\tchmod 0700 %s\n"
+"\n"
+"auszuführen."
+
#: credential-cache--daemon.c:271
msgid "print debugging messages to stderr"
msgstr "Meldungen zur Fehlersuche in Standard-Fehlerausgabe ausgeben"
"oder 'git help <Konzept>', um mehr über einen spezifischen Befehl oder\n"
"Konzept zu erfahren."
-#: http.c:323
+#: http.c:342
+msgid "Delegation control is not supported with cURL < 7.22.0"
+msgstr "Kontrolle über Delegation wird mit cURL < 7.22.0 nicht unterstützt"
+
+#: http.c:351
msgid "Public key pinning not supported with cURL < 7.44.0"
msgstr ""
"Das Anheften des öffentlichen Schlüssels wird mit cURL < 7.44.0\n"
msgid "no-op (backward compatibility)"
msgstr "Kein Effekt (Rückwärtskompatibilität)"
-#: parse-options.h:237
+#: parse-options.h:238
msgid "be more verbose"
msgstr "erweiterte Ausgaben"
-#: parse-options.h:239
+#: parse-options.h:240
msgid "be more quiet"
msgstr "weniger Ausgaben"
-#: parse-options.h:245
+#: parse-options.h:246
msgid "use <n> digits to display SHA-1s"
msgstr "benutze <n> Ziffern zur Anzeige von SHA-1s"
"Error: Your local changes to the following files would be overwritten by "
"merge"
msgstr ""
-"Fehler Ihre lokalen Änderungen in den folgenden Dateien würden durch den Merge\n"
+"Fehler Ihre lokalen Änderungen in den folgenden Dateien würden durch den "
+"Merge\n"
"überschrieben werden"
#: git-merge-octopus.sh:61
msgstr "Automatischer Merge hat nicht funktioniert."
#: git-merge-octopus.sh:62
-msgid "Should not be doing an Octopus."
+msgid "Should not be doing an octopus."
msgstr "Sollte keinen Octopus-Merge ausführen."
#: git-merge-octopus.sh:73
msgid "Cannot save the current index state"
msgstr "Kann den aktuellen Zustand des Index nicht speichern"
+#: git-stash.sh:103
+msgid "Cannot save the untracked files"
+msgstr "Kann die unversionierten Dateien nicht speichern"
+
#: git-stash.sh:123 git-stash.sh:136
msgid "Cannot save the current worktree state"
msgstr "Kann den aktuellen Zustand des Arbeitsverzeichnisses nicht speichern"
" Um eine Beschreibung anzugeben, benutzen Sie \"git stash save -- "
"'$option'\""
+#: git-stash.sh:251
+msgid "Can't use --patch and --include-untracked or --all at the same time"
+msgstr "Kann nicht gleichzeitig --patch und --include-untracked oder --all verwenden"
+
#: git-stash.sh:259
msgid "No local changes to save"
msgstr "Keine lokalen Änderungen zum Speichern"
msgid "Cannot remove worktree changes"
msgstr "Kann Änderungen im Arbeitsverzeichnis nicht löschen"
-#: git-stash.sh:404
+#: git-stash.sh:403
#, sh-format
msgid "unknown option: $opt"
msgstr "unbekannte Option: $opt"
-#: git-stash.sh:414
+#: git-stash.sh:416
msgid "No stash found."
msgstr "Kein Stash-Eintrag gefunden."
-#: git-stash.sh:421
+#: git-stash.sh:423
#, sh-format
msgid "Too many revisions specified: $REV"
msgstr "Zu viele Commits angegeben: $REV"
-#: git-stash.sh:427
+#: git-stash.sh:438
#, sh-format
msgid "$reference is not a valid reference"
msgstr "$reference ist keine gültige Referenz"
-#: git-stash.sh:455
+#: git-stash.sh:466
#, sh-format
msgid "'$args' is not a stash-like commit"
msgstr "'$args' ist kein \"stash\"-artiger Commit"
-#: git-stash.sh:466
+#: git-stash.sh:477
#, sh-format
msgid "'$args' is not a stash reference"
msgstr "'$args' ist keine \"stash\"-Referenz"
-#: git-stash.sh:474
+#: git-stash.sh:485
msgid "unable to refresh index"
msgstr "Konnte den Index nicht aktualisieren."
-#: git-stash.sh:478
+#: git-stash.sh:489
msgid "Cannot apply a stash in the middle of a merge"
msgstr "Kann \"stash\" nicht anwenden, solang ein Merge im Gange ist"
-#: git-stash.sh:486
+#: git-stash.sh:497
msgid "Conflicts in index. Try without --index."
msgstr "Konflikte im Index. Versuchen Sie es ohne --index."
-#: git-stash.sh:488
+#: git-stash.sh:499
msgid "Could not save index tree"
msgstr "Konnte Index-Verzeichnis nicht speichern"
-#: git-stash.sh:522
+#: git-stash.sh:508
+msgid "Could not restore untracked files from stash"
+msgstr "Konnte unversionierte Dateien vom Stash nicht wiederherstellen"
+
+#: git-stash.sh:533
msgid "Cannot unstage modified files"
msgstr "Kann geänderte Dateien nicht aus dem Index entfernen"
-#: git-stash.sh:537
+#: git-stash.sh:548
msgid "Index was not unstashed."
msgstr "Index wurde nicht aus dem Stash zurückgeladen."
-#: git-stash.sh:551
+#: git-stash.sh:562
msgid "The stash is kept in case you need it again."
msgstr "Der Stash wird behalten, im Falle Sie benötigen diesen nochmal."
-#: git-stash.sh:560
+#: git-stash.sh:571
#, sh-format
msgid "Dropped ${REV} ($s)"
msgstr "Gelöscht ${REV} ($s)"
-#: git-stash.sh:561
+#: git-stash.sh:572
#, sh-format
msgid "${REV}: Could not drop stash entry"
msgstr "${REV}: Konnte \"stash\"-Eintrag nicht löschen"
-#: git-stash.sh:569
+#: git-stash.sh:580
msgid "No branch name specified"
msgstr "Kein Branchname spezifiziert"
-#: git-stash.sh:641
+#: git-stash.sh:652
msgid "(To restore them type \"git stash apply\")"
msgstr "(Zur Wiederherstellung geben Sie \"git stash apply\" ein)"
-#: git-submodule.sh:183
+#: git-submodule.sh:184
msgid "Relative path can only be used from the toplevel of the working tree"
msgstr ""
"Relative Pfade können nur von der obersten Ebene des Arbeitsverzeichnisses "
"benutzt werden."
-#: git-submodule.sh:193
+#: git-submodule.sh:194
#, sh-format
msgid "repo URL: '$repo' must be absolute or begin with ./|../"
msgstr "repo URL: '$repo' muss absolut sein oder mit ./|../ beginnen"
-#: git-submodule.sh:210
+#: git-submodule.sh:211
#, sh-format
msgid "'$sm_path' already exists in the index"
msgstr "'$sm_path' ist bereits zum Commit vorgemerkt"
-#: git-submodule.sh:214
+#: git-submodule.sh:215
#, sh-format
msgid ""
"The following path is ignored by one of your .gitignore files:\n"
"$sm_path\n"
"Benutzen Sie -f wenn Sie diesen wirklich hinzufügen möchten."
-#: git-submodule.sh:232
+#: git-submodule.sh:233
#, sh-format
msgid "Adding existing repo at '$sm_path' to the index"
msgstr "Füge existierendes Repository in '$sm_path' dem Index hinzu."
-#: git-submodule.sh:234
+#: git-submodule.sh:235
#, sh-format
msgid "'$sm_path' already exists and is not a valid git repo"
msgstr "'$sm_path' existiert bereits und ist kein gültiges Git-Repository"
-#: git-submodule.sh:242
+#: git-submodule.sh:243
#, sh-format
msgid "A git directory for '$sm_name' is found locally with remote(s):"
msgstr ""
"Ein Git-Verzeichnis für '$sm_name' wurde lokal gefunden mit den Remote-"
"Repositories:"
-#: git-submodule.sh:244
+#: git-submodule.sh:245
#, sh-format
msgid ""
"If you want to reuse this local git directory instead of cloning again from\n"
"or you are unsure what this means choose another name with the '--name' "
"option."
msgstr ""
-"Wenn Sie das lokale Git-Verzeichnis wiederverwenden wollen, anstatt erneut von\n"
+"Wenn Sie das lokale Git-Verzeichnis wiederverwenden wollen, anstatt erneut "
+"von\n"
" $realrepo\n"
-"zu klonen, benutzen Sie die Option '--force'. Wenn das lokale Git-Verzeichnis\n"
+"zu klonen, benutzen Sie die Option '--force'. Wenn das lokale Git-"
+"Verzeichnis\n"
"nicht das korrekte Repository ist oder Sie unsicher sind, was das bedeutet,\n"
"wählen Sie einen anderen Namen mit der Option '--name'."
-#: git-submodule.sh:250
+#: git-submodule.sh:251
#, sh-format
msgid "Reactivating local git directory for submodule '$sm_name'."
msgstr "Reaktiviere lokales Git-Verzeichnis für Submodul '$sm_name'."
-#: git-submodule.sh:262
+#: git-submodule.sh:263
#, sh-format
msgid "Unable to checkout submodule '$sm_path'"
msgstr "Kann Submodul '$sm_path' nicht auschecken"
-#: git-submodule.sh:267
+#: git-submodule.sh:268
#, sh-format
msgid "Failed to add submodule '$sm_path'"
msgstr "Hinzufügen von Submodul '$sm_path' fehlgeschlagen"
-#: git-submodule.sh:276
+#: git-submodule.sh:277
#, sh-format
msgid "Failed to register submodule '$sm_path'"
msgstr "Fehler beim Eintragen von Submodul '$sm_path' in die Konfiguration."
-#: git-submodule.sh:323
+#: git-submodule.sh:324
#, sh-format
msgid "Entering '$displaypath'"
msgstr "Betrete '$displaypath'"
-#: git-submodule.sh:343
+#: git-submodule.sh:344
#, sh-format
msgid "Stopping at '$displaypath'; script returned non-zero status."
msgstr "Stoppe bei '$displaypath'; Skript gab nicht-Null Status zurück."
-#: git-submodule.sh:414
+#: git-submodule.sh:415
#, sh-format
msgid "pathspec and --all are incompatible"
msgstr "Pfadspezifikationen und --all sind inkompatibel."
-#: git-submodule.sh:419
+#: git-submodule.sh:420
#, sh-format
msgid "Use '--all' if you really want to deinitialize all submodules"
msgstr ""
"Verwenden Sie '--all', wenn Sie wirklich alle Submodule deinitialisieren\n"
"möchten."
-#: git-submodule.sh:439
+#: git-submodule.sh:440
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains a .git directory\n"
"(use 'rm -rf' if you really want to remove it including all of its history)"
msgstr ""
-"Arbeitsverzeichnis von Submodul in '$displaypath' enthält ein .git-Verzeichnis\n"
-"(benutzen Sie 'rm -rf' wenn Sie dieses wirklich mitsamt seiner Historie löschen\n"
+"Arbeitsverzeichnis von Submodul in '$displaypath' enthält ein .git-"
+"Verzeichnis\n"
+"(benutzen Sie 'rm -rf' wenn Sie dieses wirklich mitsamt seiner Historie "
+"löschen\n"
"möchten)"
-#: git-submodule.sh:447
+#: git-submodule.sh:448
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
"Arbeitsverzeichnis von Submodul in '$displaypath' enthält lokale Änderungen; "
"verwenden Sie '-f', um diese zu verwerfen"
-#: git-submodule.sh:450
+#: git-submodule.sh:451
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "Verzeichnis '$displaypath' bereinigt."
-#: git-submodule.sh:451
+#: git-submodule.sh:452
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr ""
"Konnte Arbeitsverzeichnis des Submoduls in '$displaypath' nicht löschen."
-#: git-submodule.sh:454
+#: git-submodule.sh:455
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr ""
"Konnte kein leeres Verzeichnis für Submodul in '$displaypath' erstellen."
-#: git-submodule.sh:463
+#: git-submodule.sh:464
#, 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:612
+#: git-submodule.sh:617
#, 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:622
+#: git-submodule.sh:627
#, 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:627
+#: git-submodule.sh:632
#, sh-format
msgid ""
"Unable to find current ${remote_name}/${branch} revision in submodule path "
"Konnte aktuellen Commit von ${remote_name}/${branch} in Submodul-Pfad\n"
"'$sm_path' nicht finden."
-#: git-submodule.sh:645
+#: git-submodule.sh:650
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "Konnte \"fetch\" in Submodul-Pfad '$displaypath' nicht ausführen"
-#: git-submodule.sh:651
+#: git-submodule.sh:656
#, sh-format
msgid ""
"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
"\"fetch\" in Submodul-Pfad '$displaypath' ausgeführt, aber $sha1 nicht\n"
"enthalten. Direktes Anfordern dieses Commits ist fehlgeschlagen."
-#: git-submodule.sh:658
+#: git-submodule.sh:663
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "Konnte '$sha1' in Submodul-Pfad '$displaypath' nicht auschecken."
-#: git-submodule.sh:659
+#: git-submodule.sh:664
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Submodul-Pfad: '$displaypath': '$sha1' ausgecheckt"
-#: git-submodule.sh:663
+#: git-submodule.sh:668
#, 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:664
+#: git-submodule.sh:669
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Submodul-Pfad '$displaypath': Rebase auf '$sha1'"
-#: git-submodule.sh:669
+#: git-submodule.sh:674
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr "Merge von '$sha1' in Submodul-Pfad '$displaypath' fehlgeschlagen"
-#: git-submodule.sh:670
+#: git-submodule.sh:675
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Submodul-Pfad '$displaypath': zusammengeführt in '$sha1'"
-#: git-submodule.sh:675
+#: git-submodule.sh:680
#, sh-format
msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
msgstr ""
"Ausführung von '$command $sha1' in Submodul-Pfad '$displaypath' "
"fehlgeschlagen"
-#: git-submodule.sh:676
+#: git-submodule.sh:681
#, sh-format
msgid "Submodule path '$displaypath': '$command $sha1'"
msgstr "Submodul-Pfad '$displaypath': '$command $sha1'"
-#: git-submodule.sh:707
+#: git-submodule.sh:712
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "Fehler bei Rekursion in Submodul-Pfad '$displaypath'"
-#: git-submodule.sh:815
+#: git-submodule.sh:820
msgid "The --cached option cannot be used with the --files option"
msgstr ""
"Die Optionen --cached und --files können nicht gemeinsam verwendet werden."
-#: git-submodule.sh:867
+#: git-submodule.sh:872
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "unerwarteter Modus $mod_dst"
-#: git-submodule.sh:887
+#: git-submodule.sh:892
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_src"
-#: git-submodule.sh:890
+#: git-submodule.sh:895
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_dst"
-#: git-submodule.sh:893
+#: git-submodule.sh:898
#, 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:918
-msgid "blob"
-msgstr "Blob"
-
-#: git-submodule.sh:1040
+#: git-submodule.sh:1045
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "Fehler bei Rekursion in Submodul-Pfad '$sm_path'"
-#: git-submodule.sh:1107
+#: git-submodule.sh:1112
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "Synchronisiere Submodul-URL für '$displaypath'"
msgid "See git-${cmd}(1) for details."
msgstr "Siehe git-${cmd}(1) für weitere Details."
-#: git-rebase--interactive.sh:131
+#: git-rebase--interactive.sh:140
#, sh-format
msgid "Rebasing ($new_count/$total)"
msgstr "Führe Rebase aus ($new_count/$total)"
-#: git-rebase--interactive.sh:147
+#: git-rebase--interactive.sh:156
msgid ""
"\n"
"Commands:\n"
"Diese Zeilen können umsortiert werden; Sie werden von oben nach unten\n"
"ausgeführt.\n"
-#: git-rebase--interactive.sh:162
+#: git-rebase--interactive.sh:171
msgid ""
"\n"
"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
"Keine Zeile entfernen. Benutzen Sie 'drop', um explizit einen Commit zu\n"
"entfernen.\n"
-#: git-rebase--interactive.sh:166
+#: git-rebase--interactive.sh:175
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
-msgstr "\nWenn Sie hier eine Zeile entfernen, wird DIESER COMMIT VERLOREN GEHEN.\n"
+msgstr ""
+"\n"
+"Wenn Sie hier eine Zeile entfernen, wird DIESER COMMIT VERLOREN GEHEN.\n"
-#: git-rebase--interactive.sh:202
+#: git-rebase--interactive.sh:211
#, sh-format
msgid ""
"You can amend the commit now, with\n"
"\n"
"\tgit rebase --continue"
-#: git-rebase--interactive.sh:227
+#: git-rebase--interactive.sh:236
#, sh-format
msgid "$sha1: not a commit that can be picked"
msgstr "$sha1: kein Commit der gepickt werden kann"
-#: git-rebase--interactive.sh:266
+#: git-rebase--interactive.sh:275
#, sh-format
msgid "Invalid commit name: $sha1"
msgstr "Ungültiger Commit-Name: $sha1"
-#: git-rebase--interactive.sh:308
+#: git-rebase--interactive.sh:317
msgid "Cannot write current commit's replacement sha1"
msgstr "Kann ersetzenden SHA-1 des aktuellen Commits nicht schreiben"
-#: git-rebase--interactive.sh:360
+#: git-rebase--interactive.sh:369
#, sh-format
msgid "Fast-forward to $sha1"
msgstr "Spule vor zu $sha1"
-#: git-rebase--interactive.sh:362
+#: git-rebase--interactive.sh:371
#, sh-format
msgid "Cannot fast-forward to $sha1"
msgstr "Kann nicht zu $sha1 vorspulen"
-#: git-rebase--interactive.sh:371
+#: git-rebase--interactive.sh:380
#, sh-format
msgid "Cannot move HEAD to $first_parent"
msgstr "Kann HEAD nicht auf $first_parent setzen"
-#: git-rebase--interactive.sh:376
+#: git-rebase--interactive.sh:385
#, sh-format
msgid "Refusing to squash a merge: $sha1"
msgstr "\"squash\" eines Merges ($sha1) zurückgewiesen."
-#: git-rebase--interactive.sh:390
+#: git-rebase--interactive.sh:399
#, sh-format
msgid "Error redoing merge $sha1"
msgstr "Fehler beim Wiederholen des Merges von $sha1"
-#: git-rebase--interactive.sh:398
+#: git-rebase--interactive.sh:407
#, sh-format
msgid "Could not pick $sha1"
msgstr "Konnte $sha1 nicht picken"
-#: git-rebase--interactive.sh:407
+#: git-rebase--interactive.sh:416
#, sh-format
msgid "This is the commit message #${n}:"
msgstr "Das ist Commit-Beschreibung #${n}:"
-#: git-rebase--interactive.sh:412
+#: git-rebase--interactive.sh:421
#, sh-format
msgid "The commit message #${n} will be skipped:"
msgstr "Commit-Beschreibung #${n} wird ausgelassen:"
-#: git-rebase--interactive.sh:423
+#: git-rebase--interactive.sh:432
#, sh-format
msgid "This is a combination of $count commit."
msgid_plural "This is a combination of $count commits."
msgstr[0] "Das ist eine Kombination aus $count Commit."
msgstr[1] "Das ist eine Kombination aus $count Commits."
-#: git-rebase--interactive.sh:431
+#: git-rebase--interactive.sh:440
#, sh-format
msgid "Cannot write $fixup_msg"
msgstr "Kann $fixup_msg nicht schreiben"
-#: git-rebase--interactive.sh:434
+#: git-rebase--interactive.sh:443
msgid "This is a combination of 2 commits."
msgstr "Das ist eine Kombination aus 2 Commits."
-#: git-rebase--interactive.sh:435
+#: git-rebase--interactive.sh:444
msgid "This is the 1st commit message:"
msgstr "Das ist die erste Commit-Beschreibung:"
-#: git-rebase--interactive.sh:475 git-rebase--interactive.sh:518
-#: git-rebase--interactive.sh:521
+#: git-rebase--interactive.sh:484 git-rebase--interactive.sh:527
+#: git-rebase--interactive.sh:530
#, sh-format
msgid "Could not apply $sha1... $rest"
msgstr "Konnte $sha1... ($rest) nicht anwenden"
-#: git-rebase--interactive.sh:549
+#: git-rebase--interactive.sh:558
#, sh-format
msgid ""
"Could not amend commit after successfully picking $sha1... $rest\n"
"before\n"
"you are able to reword the commit."
msgstr ""
-"Konnte Commit nicht nachbessern, nachdem dieser verwendet wurde: $sha1... $rest\n"
-"Das passierte sehr wahrscheinlich wegen einer leeren Commit-Beschreibung, oder\n"
+"Konnte Commit nicht nachbessern, nachdem dieser verwendet wurde: $sha1... "
+"$rest\n"
+"Das passierte sehr wahrscheinlich wegen einer leeren Commit-Beschreibung, "
+"oder\n"
"weil der pre-commit Hook fehlschlug. Falls der pre-commit Hook fehlschlug,\n"
-"sollten Sie das Problem beheben, bevor Sie die Commit-Beschreibung ändern können."
+"sollten Sie das Problem beheben, bevor Sie die Commit-Beschreibung ändern "
+"können."
-#: git-rebase--interactive.sh:564
+#: git-rebase--interactive.sh:573
#, sh-format
msgid "Stopped at $sha1_abbrev... $rest"
msgstr "Angehalten bei $sha1_abbrev... $rest"
-#: git-rebase--interactive.sh:579
+#: git-rebase--interactive.sh:588
#, sh-format
msgid "Cannot '$squash_style' without a previous commit"
msgstr "Kann nicht '$squash_style' ohne vorherigen Commit"
-#: git-rebase--interactive.sh:621
+#: git-rebase--interactive.sh:630
#, sh-format
msgid "Executing: $rest"
msgstr "Führe aus: $rest"
-#: git-rebase--interactive.sh:629
+#: git-rebase--interactive.sh:638
#, sh-format
msgid "Execution failed: $rest"
msgstr "Ausführung fehlgeschlagen: $rest"
-#: git-rebase--interactive.sh:631
+#: git-rebase--interactive.sh:640
msgid "and made changes to the index and/or the working tree"
msgstr "Der Index und/oder das Arbeitsverzeichnis wurde geändert."
-#: git-rebase--interactive.sh:633
+#: git-rebase--interactive.sh:642
msgid ""
"You can fix the problem, and then run\n"
"\n"
"ausführen."
#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--interactive.sh:646
+#: git-rebase--interactive.sh:655
#, sh-format
msgid ""
"Execution succeeded: $rest\n"
"\n"
"\tgit rebase --continue"
-#: git-rebase--interactive.sh:657
+#: git-rebase--interactive.sh:666
#, sh-format
msgid "Unknown command: $command $sha1 $rest"
msgstr "Unbekannter Befehl: $command $sha1 $rest"
-#: git-rebase--interactive.sh:658
+#: git-rebase--interactive.sh:667
msgid "Please fix this using 'git rebase --edit-todo'."
msgstr "Bitte beheben Sie das, indem Sie 'git rebase --edit-todo' ausführen."
-#: git-rebase--interactive.sh:693
+#: git-rebase--interactive.sh:702
#, sh-format
msgid "Successfully rebased and updated $head_name."
msgstr "Erfolgreich Rebase ausgeführt und $head_name aktualisiert."
-#: git-rebase--interactive.sh:740
+#: git-rebase--interactive.sh:749
msgid "Could not skip unnecessary pick commands"
msgstr "Fehler beim Auslassen von nicht erforderlichen \"pick\"-Befehlen."
-#: git-rebase--interactive.sh:898
+#: git-rebase--interactive.sh:907
#, sh-format
msgid ""
"Warning: the SHA-1 is missing or isn't a commit in the following line:\n"
"Warnung: Der SHA-1 in der folgenden Zeile fehlt oder ist kein Commit:\n"
" - $line"
-#: git-rebase--interactive.sh:931
+#: git-rebase--interactive.sh:940
#, sh-format
msgid ""
"Warning: the command isn't recognized in the following line:\n"
"Warnung: Das Kommando in der folgenden Zeile wurde nicht erkannt:\n"
" - $line"
-#: git-rebase--interactive.sh:970
+#: git-rebase--interactive.sh:979
msgid "could not detach HEAD"
msgstr "Konnte HEAD nicht loslösen"
-#: git-rebase--interactive.sh:1008
+#: git-rebase--interactive.sh:1017
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
"Dropped commits (newer to older):"
"Warnung: Einige Commits könnten aus Versehen entfernt worden sein.\n"
"Entfernte Commits (neu zu alt):"
-#: git-rebase--interactive.sh:1016
+#: git-rebase--interactive.sh:1025
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
"\n"
"Um diese Meldung zu vermeiden, benutzen Sie \"drop\", um exlizit Commits zu\n"
"entfernen.\n"
"\n"
-"Benutzen Sie 'git config rebase.missingCommitsCheck', um die Stufe der Warnungen\n"
+"Benutzen Sie 'git config rebase.missingCommitsCheck', um die Stufe der "
+"Warnungen\n"
"zu ändern.\n"
"Die möglichen Verhaltensweisen sind: ignore, warn, error."
-#: git-rebase--interactive.sh:1027
+#: git-rebase--interactive.sh:1036
#, sh-format
msgid ""
"Unrecognized setting $check_level for option rebase.missingCommitsCheck. "
"Ignoring."
msgstr ""
-"Nicht erkannte Einstellung $check_level für Option rebase.missingCommitsCheck.\n"
+"Nicht erkannte Einstellung $check_level für Option rebase."
+"missingCommitsCheck.\n"
"Ignoriere."
-#: git-rebase--interactive.sh:1044
-msgid "You can fix this with 'git rebase --edit-todo'."
-msgstr "Sie können das mit 'git rebase --edit-todo' beheben."
+#: git-rebase--interactive.sh:1053
+msgid ""
+"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
+"continue'."
+msgstr ""
+"Sie können das mit 'git rebase --edit-todo' beheben. Führen Sie danach\n"
+"'git rebase --continue' aus."
-#: git-rebase--interactive.sh:1045
+#: git-rebase--interactive.sh:1054
msgid "Or you can abort the rebase with 'git rebase --abort'."
msgstr "Oder Sie können den Rebase mit 'git rebase --abort' abbrechen."
-#: git-rebase--interactive.sh:1069
+#: git-rebase--interactive.sh:1078
msgid "Could not remove CHERRY_PICK_HEAD"
msgstr "Konnte CHERRY_PICK_HEAD nicht löschen"
-#: git-rebase--interactive.sh:1074
+#: git-rebase--interactive.sh:1083
#, sh-format
msgid ""
"You have staged changes in your working tree.\n"
"\n"
" git commit $gpg_sign_opt_quoted\n"
"\n"
-"In both case, once you're done, continue with:\n"
+"In both cases, once you're done, continue with:\n"
"\n"
" git rebase --continue\n"
msgstr ""
"\n"
" git rebase --continue\n"
-#: git-rebase--interactive.sh:1091
+#: git-rebase--interactive.sh:1100
msgid "Error trying to find the author identity to amend commit"
msgstr ""
"Fehler beim Versuch die Identität des Authors zum Verbessern des Commits zu\n"
"finden"
-#: git-rebase--interactive.sh:1096
+#: git-rebase--interactive.sh:1105
msgid ""
"You have uncommitted changes in your working tree. Please commit them\n"
"first and then run 'git rebase --continue' again."
msgstr ""
"Sie haben nicht committete Änderungen in Ihrem Arbeitsverzeichnis. Bitte\n"
-"committen Sie diese zuerst und führen Sie dann 'git rebase --continue' erneut\n"
+"committen Sie diese zuerst und führen Sie dann 'git rebase --continue' "
+"erneut\n"
"aus."
-#: git-rebase--interactive.sh:1101 git-rebase--interactive.sh:1105
+#: git-rebase--interactive.sh:1110 git-rebase--interactive.sh:1114
msgid "Could not commit staged changes."
msgstr "Konnte Änderungen aus der Staging-Area nicht committen."
-#: git-rebase--interactive.sh:1129
+#: git-rebase--interactive.sh:1138
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
" git rebase --continue\n"
"\n"
-#: git-rebase--interactive.sh:1137 git-rebase--interactive.sh:1298
+#: git-rebase--interactive.sh:1146 git-rebase--interactive.sh:1304
msgid "Could not execute editor"
msgstr "Konnte Editor nicht ausführen."
-#: git-rebase--interactive.sh:1145
-msgid "You need to set your committer info first"
-msgstr "Sie müssen zuerst die Informationen zum Commit-Ersteller setzen."
-
-#: git-rebase--interactive.sh:1153
+#: git-rebase--interactive.sh:1159
#, sh-format
msgid "Could not checkout $switch_to"
msgstr "Konnte $switch_to nicht auschecken."
-#: git-rebase--interactive.sh:1158
+#: git-rebase--interactive.sh:1164
msgid "No HEAD?"
msgstr "Kein HEAD?"
-#: git-rebase--interactive.sh:1159
+#: git-rebase--interactive.sh:1165
#, sh-format
msgid "Could not create temporary $state_dir"
msgstr "Konnte temporäres Verzeichnis $state_dir nicht erstellen."
-#: git-rebase--interactive.sh:1161
+#: git-rebase--interactive.sh:1167
msgid "Could not mark as interactive"
msgstr "Konnte nicht als interaktiven Rebase markieren."
-#: git-rebase--interactive.sh:1171 git-rebase--interactive.sh:1176
+#: git-rebase--interactive.sh:1177 git-rebase--interactive.sh:1182
msgid "Could not init rewritten commits"
msgstr "Konnte neu geschriebene Commits nicht initialisieren."
-#: git-rebase--interactive.sh:1276
+#: git-rebase--interactive.sh:1282
#, sh-format
msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
msgstr[0] "Rebase von $shortrevisions auf $shortonto ($todocount Kommando)"
msgstr[1] "Rebase von $shortrevisions auf $shortonto ($todocount Kommandos)"
-#: git-rebase--interactive.sh:1281
+#: git-rebase--interactive.sh:1287
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
"\n"
-msgstr "\nWenn Sie jedoch alles löschen, wird der Rebase abgebrochen.\n\n"
+msgstr ""
+"\n"
+"Wenn Sie jedoch alles löschen, wird der Rebase abgebrochen.\n"
+"\n"
-#: git-rebase--interactive.sh:1288
+#: git-rebase--interactive.sh:1294
msgid "Note that empty commits are commented out"
msgstr "Leere Commits sind auskommentiert."
#: git-sh-setup.sh:199 git-sh-setup.sh:206
#, sh-format
msgid "fatal: $program_name cannot be used without a working tree."
-msgstr "fatal: $program_name kann ohne ein Arbeitsverzeichnis nicht verwendet werden."
+msgstr ""
+"fatal: $program_name kann ohne ein Arbeitsverzeichnis nicht verwendet werden."
#: git-sh-setup.sh:220
msgid "Cannot rebase: You have unstaged changes."
-msgstr "Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt sind."
+msgstr ""
+"Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt "
+"sind."
#: git-sh-setup.sh:223
msgid "Cannot rewrite branches: You have unstaged changes."
msgstr ""
-"Kann Branches nicht neu schreiben: Sie haben Änderungen, die nicht zum Commit\n"
+"Kann Branches nicht neu schreiben: Sie haben Änderungen, die nicht zum "
+"Commit\n"
"vorgemerkt sind."
+#: git-sh-setup.sh:226
+msgid "Cannot pull with rebase: You have unstaged changes."
+msgstr ""
+"Kann \"pull\" mit \"rebase\" nicht ausführen: Sie haben Änderungen, die "
+"nicht zum Commit vorgemerkt sind."
+
#: git-sh-setup.sh:229
#, sh-format
msgid "Cannot $action: You have unstaged changes."
#: git-sh-setup.sh:242
msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr "Rebase nicht möglich: Die Staging-Area beinhaltet nicht committete Änderungen."
+msgstr ""
+"Rebase nicht möglich: Die Staging-Area beinhaltet nicht committete "
+"Änderungen."
+
+#: git-sh-setup.sh:245
+msgid "Cannot pull with rebase: Your index contains uncommitted changes."
+msgstr ""
+"Kann \"pull\" mit \"rebase\" nicht ausführen: Die Staging-Area beinhaltet "
+"nicht committete Änderungen."
#: git-sh-setup.sh:248
#, sh-format
"Kann $action nicht ausführen: Die Staging-Area beinhaltet nicht committete\n"
"Änderungen."
+#: git-sh-setup.sh:252
+msgid "Additionally, your index contains uncommitted changes."
+msgstr "Zusätzlich beinhaltet die Staging-Area nicht committete Änderungen."
+
#: git-sh-setup.sh:372
msgid "You need to run this command from the toplevel of the working tree."
-msgstr "Sie müssen den Befehl von der obersten Ebene des Arbeitsverzeichnisses ausführen."
+msgstr ""
+"Sie müssen den Befehl von der obersten Ebene des Arbeitsverzeichnisses "
+"ausführen."
#: git-sh-setup.sh:377
msgid "Unable to determine absolute path of git directory"
msgstr "Konnte absoluten Pfad des Git-Verzeichnisses nicht bestimmen."
+#~ msgid "Could not write to %s"
+#~ msgstr "Konnte nicht nach %s schreiben"
+
+#~ msgid "Error wrapping up %s."
+#~ msgstr "Fehler beim Einpacken von %s."
+
+#~ msgid "Your local changes would be overwritten by cherry-pick."
+#~ msgstr ""
+#~ "Ihre lokalen Änderungen würden durch den Cherry-Pick überschrieben werden."
+
+#~ msgid "Cannot revert during another revert."
+#~ msgstr "Kann Revert nicht während eines anderen Reverts ausführen."
+
+#~ msgid "Cannot cherry-pick during another cherry-pick."
+#~ msgstr ""
+#~ "Kann Cherry-Pick nicht während eines anderen Cherry-Picks ausführen."
+
+#~ msgid "Could not parse line %d."
+#~ msgstr "Konnte Zeile %d nicht parsen."
+
+#~ msgid "Could not open %s"
+#~ msgstr "Konnte %s nicht öffnen"
+
+#~ msgid "Could not read %s."
+#~ msgstr "Konnte %s nicht lesen."
+
+#~ msgid "Could not format %s."
+#~ msgstr "Konnte %s nicht formatieren."
+
+#~ msgid "%s: %s"
+#~ msgstr "%s: %s"
+
+#~ msgid "cannot open %s: %s"
+#~ msgstr "Kann %s nicht öffnen: %s"
+
+#~ msgid "You need to set your committer info first"
+#~ msgstr "Sie müssen zuerst die Informationen zum Commit-Ersteller setzen."
msgstr ""
"Project-Id-Version: git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-11-22 22:10+0800\n"
-"PO-Revision-Date: 2016-11-22 22:16+0800\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-25 22:55+0800\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"
#: sequencer.c:251
#, c-format
-msgid "could not write eol to '%s"
+msgid "could not write eol to '%s'"
msgstr "impossible d'écrire la fin de ligne dans '%s'"
#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-11-22 22:10+0800\n"
+"POT-Creation-Date: 2016-11-25 22:50+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"
msgid "prepend prefix to each pathname in the archive"
msgstr ""
-#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2603
-#: builtin/blame.c:2604 builtin/config.c:59 builtin/fast-export.c:987
-#: builtin/fast-export.c:989 builtin/grep.c:723 builtin/hash-object.c:101
-#: builtin/ls-files.c:539 builtin/ls-files.c:542 builtin/notes.c:401
-#: builtin/notes.c:564 builtin/read-tree.c:109 parse-options.h:153
+#: archive.c:432 builtin/blame.c:2603 builtin/blame.c:2604 builtin/config.c:59
+#: builtin/fast-export.c:987 builtin/fast-export.c:989 builtin/grep.c:723
+#: builtin/hash-object.c:101 builtin/ls-files.c:539 builtin/ls-files.c:542
+#: builtin/notes.c:401 builtin/notes.c:564 builtin/read-tree.c:109
+#: parse-options.h:153
msgid "file"
msgstr ""
#: sequencer.c:251
#, c-format
-msgid "could not write eol to '%s"
+msgid "could not write eol to '%s'"
msgstr ""
#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
msgid "See git-${cmd}(1) for details."
msgstr ""
-#: git-rebase--interactive.sh:131
+#: git-rebase--interactive.sh:140
#, sh-format
msgid "Rebasing ($new_count/$total)"
msgstr ""
-#: git-rebase--interactive.sh:147
+#: git-rebase--interactive.sh:156
msgid ""
"\n"
"Commands:\n"
"These lines can be re-ordered; they are executed from top to bottom.\n"
msgstr ""
-#: git-rebase--interactive.sh:162
+#: git-rebase--interactive.sh:171
msgid ""
"\n"
"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
msgstr ""
-#: git-rebase--interactive.sh:166
+#: git-rebase--interactive.sh:175
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
msgstr ""
-#: git-rebase--interactive.sh:202
+#: git-rebase--interactive.sh:211
#, sh-format
msgid ""
"You can amend the commit now, with\n"
"\tgit rebase --continue"
msgstr ""
-#: git-rebase--interactive.sh:227
+#: git-rebase--interactive.sh:236
#, sh-format
msgid "$sha1: not a commit that can be picked"
msgstr ""
-#: git-rebase--interactive.sh:266
+#: git-rebase--interactive.sh:275
#, sh-format
msgid "Invalid commit name: $sha1"
msgstr ""
-#: git-rebase--interactive.sh:308
+#: git-rebase--interactive.sh:317
msgid "Cannot write current commit's replacement sha1"
msgstr ""
-#: git-rebase--interactive.sh:360
+#: git-rebase--interactive.sh:369
#, sh-format
msgid "Fast-forward to $sha1"
msgstr ""
-#: git-rebase--interactive.sh:362
+#: git-rebase--interactive.sh:371
#, sh-format
msgid "Cannot fast-forward to $sha1"
msgstr ""
-#: git-rebase--interactive.sh:371
+#: git-rebase--interactive.sh:380
#, sh-format
msgid "Cannot move HEAD to $first_parent"
msgstr ""
-#: git-rebase--interactive.sh:376
+#: git-rebase--interactive.sh:385
#, sh-format
msgid "Refusing to squash a merge: $sha1"
msgstr ""
-#: git-rebase--interactive.sh:390
+#: git-rebase--interactive.sh:399
#, sh-format
msgid "Error redoing merge $sha1"
msgstr ""
-#: git-rebase--interactive.sh:398
+#: git-rebase--interactive.sh:407
#, sh-format
msgid "Could not pick $sha1"
msgstr ""
-#: git-rebase--interactive.sh:407
+#: git-rebase--interactive.sh:416
#, sh-format
msgid "This is the commit message #${n}:"
msgstr ""
-#: git-rebase--interactive.sh:412
+#: git-rebase--interactive.sh:421
#, sh-format
msgid "The commit message #${n} will be skipped:"
msgstr ""
-#: git-rebase--interactive.sh:423
+#: git-rebase--interactive.sh:432
#, sh-format
msgid "This is a combination of $count commit."
msgid_plural "This is a combination of $count commits."
msgstr[0] ""
msgstr[1] ""
-#: git-rebase--interactive.sh:431
+#: git-rebase--interactive.sh:440
#, sh-format
msgid "Cannot write $fixup_msg"
msgstr ""
-#: git-rebase--interactive.sh:434
+#: git-rebase--interactive.sh:443
msgid "This is a combination of 2 commits."
msgstr ""
-#: git-rebase--interactive.sh:435
+#: git-rebase--interactive.sh:444
msgid "This is the 1st commit message:"
msgstr ""
-#: git-rebase--interactive.sh:475 git-rebase--interactive.sh:518
-#: git-rebase--interactive.sh:521
+#: git-rebase--interactive.sh:484 git-rebase--interactive.sh:527
+#: git-rebase--interactive.sh:530
#, sh-format
msgid "Could not apply $sha1... $rest"
msgstr ""
-#: git-rebase--interactive.sh:549
+#: git-rebase--interactive.sh:558
#, sh-format
msgid ""
"Could not amend commit after successfully picking $sha1... $rest\n"
"you are able to reword the commit."
msgstr ""
-#: git-rebase--interactive.sh:564
+#: git-rebase--interactive.sh:573
#, sh-format
msgid "Stopped at $sha1_abbrev... $rest"
msgstr ""
-#: git-rebase--interactive.sh:579
+#: git-rebase--interactive.sh:588
#, sh-format
msgid "Cannot '$squash_style' without a previous commit"
msgstr ""
-#: git-rebase--interactive.sh:621
+#: git-rebase--interactive.sh:630
#, sh-format
msgid "Executing: $rest"
msgstr ""
-#: git-rebase--interactive.sh:629
+#: git-rebase--interactive.sh:638
#, sh-format
msgid "Execution failed: $rest"
msgstr ""
-#: git-rebase--interactive.sh:631
+#: git-rebase--interactive.sh:640
msgid "and made changes to the index and/or the working tree"
msgstr ""
-#: git-rebase--interactive.sh:633
+#: git-rebase--interactive.sh:642
msgid ""
"You can fix the problem, and then run\n"
"\n"
msgstr ""
#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--interactive.sh:646
+#: git-rebase--interactive.sh:655
#, sh-format
msgid ""
"Execution succeeded: $rest\n"
"\tgit rebase --continue"
msgstr ""
-#: git-rebase--interactive.sh:657
+#: git-rebase--interactive.sh:666
#, sh-format
msgid "Unknown command: $command $sha1 $rest"
msgstr ""
-#: git-rebase--interactive.sh:658
+#: git-rebase--interactive.sh:667
msgid "Please fix this using 'git rebase --edit-todo'."
msgstr ""
-#: git-rebase--interactive.sh:693
+#: git-rebase--interactive.sh:702
#, sh-format
msgid "Successfully rebased and updated $head_name."
msgstr ""
-#: git-rebase--interactive.sh:740
+#: git-rebase--interactive.sh:749
msgid "Could not skip unnecessary pick commands"
msgstr ""
-#: git-rebase--interactive.sh:898
+#: git-rebase--interactive.sh:907
#, sh-format
msgid ""
"Warning: the SHA-1 is missing or isn't a commit in the following line:\n"
" - $line"
msgstr ""
-#: git-rebase--interactive.sh:931
+#: git-rebase--interactive.sh:940
#, sh-format
msgid ""
"Warning: the command isn't recognized in the following line:\n"
" - $line"
msgstr ""
-#: git-rebase--interactive.sh:970
+#: git-rebase--interactive.sh:979
msgid "could not detach HEAD"
msgstr ""
-#: git-rebase--interactive.sh:1008
+#: git-rebase--interactive.sh:1017
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
"Dropped commits (newer to older):"
msgstr ""
-#: git-rebase--interactive.sh:1016
+#: git-rebase--interactive.sh:1025
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
"\n"
"The possible behaviours are: ignore, warn, error."
msgstr ""
-#: git-rebase--interactive.sh:1027
+#: git-rebase--interactive.sh:1036
#, sh-format
msgid ""
"Unrecognized setting $check_level for option rebase.missingCommitsCheck. "
"Ignoring."
msgstr ""
-#: git-rebase--interactive.sh:1044
+#: git-rebase--interactive.sh:1053
msgid ""
"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
"continue'."
msgstr ""
-#: git-rebase--interactive.sh:1045
+#: git-rebase--interactive.sh:1054
msgid "Or you can abort the rebase with 'git rebase --abort'."
msgstr ""
-#: git-rebase--interactive.sh:1069
+#: git-rebase--interactive.sh:1078
msgid "Could not remove CHERRY_PICK_HEAD"
msgstr ""
-#: git-rebase--interactive.sh:1074
+#: git-rebase--interactive.sh:1083
#, sh-format
msgid ""
"You have staged changes in your working tree.\n"
" git rebase --continue\n"
msgstr ""
-#: git-rebase--interactive.sh:1091
+#: git-rebase--interactive.sh:1100
msgid "Error trying to find the author identity to amend commit"
msgstr ""
-#: git-rebase--interactive.sh:1096
+#: git-rebase--interactive.sh:1105
msgid ""
"You have uncommitted changes in your working tree. Please commit them\n"
"first and then run 'git rebase --continue' again."
msgstr ""
-#: git-rebase--interactive.sh:1101 git-rebase--interactive.sh:1105
+#: git-rebase--interactive.sh:1110 git-rebase--interactive.sh:1114
msgid "Could not commit staged changes."
msgstr ""
-#: git-rebase--interactive.sh:1129
+#: git-rebase--interactive.sh:1138
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
"\n"
msgstr ""
-#: git-rebase--interactive.sh:1137 git-rebase--interactive.sh:1295
+#: git-rebase--interactive.sh:1146 git-rebase--interactive.sh:1304
msgid "Could not execute editor"
msgstr ""
-#: git-rebase--interactive.sh:1150
+#: git-rebase--interactive.sh:1159
#, sh-format
msgid "Could not checkout $switch_to"
msgstr ""
-#: git-rebase--interactive.sh:1155
+#: git-rebase--interactive.sh:1164
msgid "No HEAD?"
msgstr ""
-#: git-rebase--interactive.sh:1156
+#: git-rebase--interactive.sh:1165
#, sh-format
msgid "Could not create temporary $state_dir"
msgstr ""
-#: git-rebase--interactive.sh:1158
+#: git-rebase--interactive.sh:1167
msgid "Could not mark as interactive"
msgstr ""
-#: git-rebase--interactive.sh:1168 git-rebase--interactive.sh:1173
+#: git-rebase--interactive.sh:1177 git-rebase--interactive.sh:1182
msgid "Could not init rewritten commits"
msgstr ""
-#: git-rebase--interactive.sh:1273
+#: git-rebase--interactive.sh:1282
#, sh-format
msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
msgstr[0] ""
msgstr[1] ""
-#: git-rebase--interactive.sh:1278
+#: git-rebase--interactive.sh:1287
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
"\n"
msgstr ""
-#: git-rebase--interactive.sh:1285
+#: git-rebase--interactive.sh:1294
msgid "Note that empty commits are commented out"
msgstr ""
msgstr ""
"Project-Id-Version: git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-11-22 22:10+0800\n"
-"PO-Revision-Date: 2016-11-22 22:16+0800\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-25 22:56+0800\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: Git Korean translation <http://github.com/changwoo/git-l10n-"
"ko>\n"
#: sequencer.c:251
#, c-format
-msgid "could not write eol to '%s"
+msgid "could not write eol to '%s'"
msgstr "'%s'에 줄바꿈을 쓸 수 없습니다"
#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-11-22 22:10+0800\n"
-"PO-Revision-Date: 2016-11-13 16:37+0000\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-25 22:58+0800\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Portuguese\n"
"Language: pt\n"
#: sequencer.c:251
#, c-format
-msgid "could not write eol to '%s"
+msgid "could not write eol to '%s'"
msgstr "não foi possível escrever fim de linha em '%s'"
#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
msgstr ""
"Project-Id-Version: Git Russian Localization Project\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-08-27 23:21+0800\n"
-"PO-Revision-Date: 2016-10-16 17:25+0000\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-28 23:58+0000\n"
"Last-Translator: Dimitriy Ryazantcev <DJm00n@mail.ru>\n"
"Language-Team: Russian (http://www.transifex.com/djm00n/git-po-ru/language/ru/)\n"
"MIME-Version: 1.0\n"
"\n"
msgstr "Примечание: переход на «%s».\n\nВы сейчас в состоянии «отделённого HEAD». Вы можете осмотреться, сделать\nэкспериментальные изменения и закоммитить их, также вы можете отменить\nизменения любых коммитов в этом состоянии не затрагивая любые ветки и\nне переходя на них.\n\nЕсли вы хотите создать новую ветку и сохранить свои коммиты, то вы\nможете сделать это (сейчас или позже) вызвав команду checkout снова,\nно с параметром -b. Например:\n\n git checkout -b <имя-новой-ветки>\n\n"
-#: archive.c:12
-msgid "git archive [<options>] <tree-ish> [<path>...]"
-msgstr "git archive [<опции>] <указатель-дерева> [<путь>…]"
+#: apply.c:57
+#, c-format
+msgid "unrecognized whitespace option '%s'"
+msgstr "неопознанная опция для пробелов «%s»"
-#: archive.c:13
-msgid "git archive --list"
-msgstr "git archive --list"
+#: apply.c:73
+#, c-format
+msgid "unrecognized whitespace ignore option '%s'"
+msgstr "неопознанная опция для игнорирования пробелов «%s»"
-#: archive.c:14
-msgid ""
-"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> "
-"[<path>...]"
-msgstr "git archive --remote <репозиторий> [--exec <команда>] [<опции>] <указатель-дерева> [<путь>…]"
+#: apply.c:125
+msgid "--reject and --3way cannot be used together."
+msgstr "--reject и --3way нельзя использовать одновременно."
-#: archive.c:15
-msgid "git archive --remote <repo> [--exec <cmd>] --list"
-msgstr "git archive --remote <репозиторий> [--exec <команда>] --list"
+#: apply.c:127
+msgid "--cached and --3way cannot be used together."
+msgstr "--cached и --3way нельзя использовать одновременно."
-#: archive.c:344 builtin/add.c:139 builtin/add.c:435 builtin/rm.c:327
-#, c-format
-msgid "pathspec '%s' did not match any files"
-msgstr "спецификация пути «%s» не соответствует ни одному файлу"
+#: apply.c:130
+msgid "--3way outside a repository"
+msgstr "--3way вне репозитория"
-#: archive.c:429
-msgid "fmt"
-msgstr "формат"
+#: apply.c:141
+msgid "--index outside a repository"
+msgstr "--index вне репозитория"
-#: archive.c:429
-msgid "archive format"
-msgstr "формат архива"
+#: apply.c:144
+msgid "--cached outside a repository"
+msgstr "--cached вне репозитория"
-#: archive.c:430 builtin/log.c:1422
-msgid "prefix"
-msgstr "префикс"
+#: apply.c:845
+#, c-format
+msgid "Cannot prepare timestamp regexp %s"
+msgstr "Не удалось подготовить регулярное выражение для метки времени %s"
-#: archive.c:431
-msgid "prepend prefix to each pathname in the archive"
-msgstr "добавлять префикс перед каждым путем файла в архиве"
+#: apply.c:854
+#, c-format
+msgid "regexec returned %d for input: %s"
+msgstr "regexec возвратил %d для ввода: %s"
-#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2553
-#: builtin/blame.c:2554 builtin/config.c:59 builtin/fast-export.c:987
-#: builtin/fast-export.c:989 builtin/grep.c:722 builtin/hash-object.c:100
-#: builtin/ls-files.c:460 builtin/ls-files.c:463 builtin/notes.c:399
-#: builtin/notes.c:562 builtin/read-tree.c:109 parse-options.h:153
-msgid "file"
-msgstr "файл"
+#: apply.c:938
+#, c-format
+msgid "unable to find filename in patch at line %d"
+msgstr "не удалось найти имя файла в строке патча %d"
-#: archive.c:433 builtin/archive.c:89
-msgid "write the archive to this file"
-msgstr "запись архива в этот файл"
+#: apply.c:977
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
+msgstr "git apply: плохой git-diff — ожидалось /dev/null, получено %s на строке %d"
-#: archive.c:435
-msgid "read .gitattributes in working directory"
-msgstr "читать .gitattributes в рабочем каталоге"
+#: apply.c:983
+#, c-format
+msgid "git apply: bad git-diff - inconsistent new filename on line %d"
+msgstr "git apply: плохой git-diff — не согласующееся новое имя файла на строке %d"
-#: archive.c:436
-msgid "report archived files on stderr"
-msgstr "отчет об архивированных файлах в stderr"
+#: apply.c:984
+#, c-format
+msgid "git apply: bad git-diff - inconsistent old filename on line %d"
+msgstr "git apply: плохой git-diff — не согласующееся старое имя файла на строке %d"
-#: archive.c:437
-msgid "store only"
-msgstr "только хранение"
+#: apply.c:990
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null on line %d"
+msgstr "git apply: плохой git-diff — ожидалось /dev/null на строке %d"
-#: archive.c:438
-msgid "compress faster"
-msgstr "сжимать быстрее"
+#: apply.c:1488
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount: не ожидаемая строка: %.*s"
-#: archive.c:446
-msgid "compress better"
-msgstr "сжимать лучше"
+#: apply.c:1557
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "фрагмент изменений без заголовка на строке %d: %.*s"
-#: archive.c:449
-msgid "list supported archive formats"
-msgstr "перечислить поддерживаемые форматы архивов"
+#: apply.c:1577
+#, 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] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущего компонента пути к файлу (строка %d)"
+msgstr[1] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
+msgstr[2] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
+msgstr[3] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
-#: archive.c:451 builtin/archive.c:90 builtin/clone.c:82
-#: builtin/submodule--helper.c:832
-msgid "repo"
-msgstr "репозиторий"
+#: apply.c:1589
+#, c-format
+msgid "git diff header lacks filename information (line %d)"
+msgstr "заголовок git diff не содержит информации об имени файла (строка %d)"
-#: archive.c:452 builtin/archive.c:91
-msgid "retrieve the archive from remote repository <repo>"
-msgstr "полÑ\83Ñ\87иÑ\82Ñ\8c аÑ\80Ñ\85ив из внеÑ\88него <Ñ\80епозиÑ\82оÑ\80иÑ\8f>"
+#: apply.c:1759
+msgid "new file depends on old contents"
+msgstr "новÑ\8bй Ñ\84айл завиÑ\81иÑ\82 оÑ\82 Ñ\81Ñ\82аÑ\80ого Ñ\81одеÑ\80жимого"
-#: archive.c:453 builtin/archive.c:92 builtin/notes.c:483
-msgid "command"
-msgstr "команда"
+#: apply.c:1761
+msgid "deleted file still has contents"
+msgstr "удаленный файл все еще имеет содержимое"
-#: archive.c:454 builtin/archive.c:93
-msgid "path to the remote git-upload-archive command"
-msgstr "путь к команде git-upload-archive на машине с внешним репозиторием"
+#: apply.c:1795
+#, c-format
+msgid "corrupt patch at line %d"
+msgstr "патч поврежден на строке %d"
-#: archive.c:461
-msgid "Unexpected option --remote"
-msgstr "Неожиданная опция --remote"
+#: apply.c:1832
+#, c-format
+msgid "new file %s depends on old contents"
+msgstr "новый файл %s зависит от старого содержимого"
-#: archive.c:463
-msgid "Option --exec can only be used together with --remote"
-msgstr "Опция --exec может использоваться только вместе с --remote"
+#: apply.c:1834
+#, c-format
+msgid "deleted file %s still has contents"
+msgstr "удаленный файл %s все еще имеет содержимое"
-#: archive.c:465
-msgid "Unexpected option --output"
-msgstr "Неожиданная опция --output"
+#: apply.c:1837
+#, c-format
+msgid "** warning: file %s becomes empty but is not deleted"
+msgstr "** предупреждение: файл %s становится пустым, но не удаляется"
-#: archive.c:487
+#: apply.c:1984
#, c-format
-msgid "Unknown archive format '%s'"
-msgstr "Ð\9dеизвеÑ\81Ñ\82нÑ\8bй Ñ\84оÑ\80маÑ\82 аÑ\80Ñ\85ива «%s»"
+msgid "corrupt binary patch at line %d: %.*s"
+msgstr "повÑ\80ежденнÑ\8bй двоиÑ\87нÑ\8bй паÑ\82Ñ\87 на Ñ\81Ñ\82Ñ\80оке %d: %.*s"
-#: archive.c:494
+#: apply.c:2021
#, c-format
-msgid "Argument not supported for format '%s': -%d"
-msgstr "Ð\90Ñ\80гÑ\83менÑ\82 не поддеÑ\80живаеÑ\82Ñ\81Ñ\8f длÑ\8f Ñ\84оÑ\80маÑ\82а «%s»: -%d"
+msgid "unrecognized binary patch at line %d"
+msgstr "неопознаннÑ\8bй двоиÑ\87нÑ\8bй паÑ\82Ñ\87 на Ñ\81Ñ\82Ñ\80оке %d"
-#: attr.c:263
-msgid ""
-"Negative patterns are ignored in git attributes\n"
-"Use '\\!' for literal leading exclamation."
-msgstr "Отрицающие шаблоны в атрибутах git игнорируются.\nИспользуйте «\\!» для буквального использования символа в значении «восклицательный знак»."
+#: apply.c:2182
+#, c-format
+msgid "patch with only garbage at line %d"
+msgstr "патч с мусором на строке %d"
-#: bisect.c:441
+#: apply.c:2274
#, c-format
-msgid "Could not open file '%s'"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c Ñ\84айл «%s»"
+msgid "unable to read symlink %s"
+msgstr "не Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c Ñ\81имволÑ\8cнÑ\83Ñ\8e Ñ\81Ñ\81Ñ\8bлкÑ\83 %s"
-#: bisect.c:446
+#: apply.c:2278
#, c-format
-msgid "Badly quoted content in file '%s': %s"
-msgstr "Ð\9fлоÑ\85ое Ñ\81одеÑ\80жимое Ñ\84айла «%s»: %s"
+msgid "unable to open or read %s"
+msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c или пÑ\80оÑ\87еÑ\81Ñ\82Ñ\8c %s"
-#: bisect.c:655
+#: apply.c:2931
#, c-format
-msgid "We cannot bisect more!\n"
-msgstr "Ð\9dевозможно пÑ\80одолжиÑ\82Ñ\8c бинаÑ\80нÑ\8bй поиÑ\81к!\n"
+msgid "invalid start of line: '%c'"
+msgstr "непÑ\80авилÑ\8cное наÑ\87ало Ñ\81Ñ\82Ñ\80оки: «%c»"
-#: bisect.c:708
+#: apply.c:3050
#, c-format
-msgid "Not a valid commit name %s"
-msgstr "Недопустимое имя коммита %s"
+msgid "Hunk #%d succeeded at %d (offset %d line)."
+msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
+msgstr[0] "Часть #%d успешно применена на %d (со сдвигом в %d строку)."
+msgstr[1] "Часть #%d успешно применена на %d (со сдвигом в %d строки)."
+msgstr[2] "Часть #%d успешно применена на %d (со сдвигом в %d строк)."
+msgstr[3] "Часть #%d успешно применена на %d (со сдвигом в %d строк)."
-#: bisect.c:732
+#: apply.c:3062
#, c-format
-msgid ""
-"The merge base %s is bad.\n"
-"This means the bug has been fixed between %s and [%s].\n"
-msgstr "База слияния %s является плохим коммитом.\nЭто значит, что ошибка была исправлена где-то между %s и [%s].\n"
+msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
+msgstr "Контекст сужен до (%ld/%ld), чтобы применить фрагмент на %d строке"
-#: bisect.c:737
+#: apply.c:3068
#, c-format
msgid ""
-"The merge base %s is new.\n"
-"The property has changed between %s and [%s].\n"
-msgstr "Ð\91аза Ñ\81лиÑ\8fниÑ\8f %s Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f новой.\nСвойÑ\81Ñ\82во бÑ\8bло изменено где-Ñ\82о междÑ\83 %s и [%s].\n"
+"while searching for:\n"
+"%.*s"
+msgstr "пÑ\80и поиÑ\81ке:\n%.*s"
-#: bisect.c:742
+#: apply.c:3090
#, c-format
-msgid ""
-"The merge base %s is %s.\n"
-"This means the first '%s' commit is between %s and [%s].\n"
-msgstr "База слияния %s является %s.\nЭто значит, что «%s» коммит находится где-то между %s и [%s].\n"
+msgid "missing binary patch data for '%s'"
+msgstr "пропущены данные двоичного патча для «%s»"
-#: bisect.c:750
+#: apply.c:3098
#, c-format
-msgid ""
-"Some %s revs are not ancestor of the %s rev.\n"
-"git bisect cannot work properly in this case.\n"
-"Maybe you mistook %s and %s revs?\n"
-msgstr "Несколько %s коммитов не являются предками %s коммита.\nВ этом случае git bisect не может работать правильно.\nВозможно, вы перепутали редакции %s и %s местами?\n"
+msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
+msgstr "невозможно выполнить reverse-apply для двоичного патча, без обращения изменений блока «%s»"
-#: bisect.c:763
+#: apply.c:3144
+#, c-format
+msgid "cannot apply binary patch to '%s' without full index line"
+msgstr "невозможно применить двоичный патч «%s» без строки с указанной полной версией индекса"
+
+#: apply.c:3154
#, c-format
msgid ""
-"the merge base between %s and [%s] must be skipped.\n"
-"So we cannot be sure the first %s commit is between %s and %s.\n"
-"We continue anyway."
-msgstr "База слияния между %s и [%s] должно быть пропущена.\nПоэтому мы не можем быть уверены, что первый %s коммит находится между %s и %s.\nНо все же продолжаем поиск."
+"the patch applies to '%s' (%s), which does not match the current contents."
+msgstr "патч применятся к файлу «%s» (%s), но его текущее содержимое не соотвествует ожидаемому."
-#: bisect.c:798
+#: apply.c:3162
#, c-format
-msgid "Bisecting: a merge base must be tested\n"
-msgstr "Ð\91инаÑ\80нÑ\8bй поиÑ\81к: база Ñ\81лиÑ\8fниÑ\8f должна бÑ\8bÑ\82Ñ\8c пÑ\80овеÑ\80ена\n"
+msgid "the patch applies to an empty '%s' but it is not empty"
+msgstr "паÑ\82Ñ\87 пÑ\80именÑ\8fеÑ\82Ñ\81Ñ\8f к пÑ\83Ñ\81Ñ\82омÑ\83 Ñ\84айлÑ\83 «%s», но Ñ\84айл не пÑ\83Ñ\81Ñ\82ой"
-#: bisect.c:849
+#: apply.c:3180
#, c-format
-msgid "a %s revision is needed"
-msgstr "нужно указать %s редакцию"
+msgid "the necessary postimage %s for '%s' cannot be read"
+msgstr "не удалось прочитать необходимую посылку %s для «%s»"
-#: bisect.c:866 builtin/notes.c:174 builtin/tag.c:248
+#: apply.c:3193
#, c-format
-msgid "could not create file '%s'"
-msgstr "не удалось создать файл «%s»"
+msgid "binary patch does not apply to '%s'"
+msgstr "не удалось применить двоичный патч к «%s»"
-#: bisect.c:917
+#: apply.c:3199
#, c-format
-msgid "could not read file '%s'"
-msgstr "не Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c Ñ\84айл «%s»"
+msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
+msgstr "поÑ\81ле пÑ\80именениÑ\8f двоиÑ\87ного паÑ\82Ñ\87а длÑ\8f «%s» бÑ\8bл полÑ\83Ñ\87ен непÑ\80авилÑ\8cнÑ\8bй Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82 (ожидалоÑ\81Ñ\8c %s, полÑ\83Ñ\87ено %s)"
-#: bisect.c:947
-msgid "reading bisect refs failed"
-msgstr "сбой при чтении ссылок двоичного поиска"
+#: apply.c:3220
+#, c-format
+msgid "patch failed: %s:%ld"
+msgstr "ошибка применения изменений: %s:%ld"
-#: bisect.c:967
+#: apply.c:3342
#, c-format
-msgid "%s was both %s and %s\n"
-msgstr "%s была одновременно и %s и %s\n"
+msgid "cannot checkout %s"
+msgstr "не удалось переключить состояние на %s"
-#: bisect.c:975
+#: apply.c:3390 apply.c:3401 apply.c:3447 setup.c:248
#, c-format
-msgid ""
-"No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
-msgstr "Тестируемый коммит не найден.\nВозможно, вы начали поиск с указанием неправильного параметра пути?\n"
+msgid "failed to read %s"
+msgstr "не удалось прочитать %s"
-#: bisect.c:994
+#: apply.c:3398
#, c-format
-msgid "(roughly %d step)"
-msgid_plural "(roughly %d steps)"
-msgstr[0] "(примерно %d шаг)"
-msgstr[1] "(примерно %d шага)"
-msgstr[2] "(примерно %d шагов)"
-msgstr[3] "(примерно %d шагов)"
+msgid "reading from '%s' beyond a symbolic link"
+msgstr "чтение из «%s» за символической ссылкой"
-#. TRANSLATORS: the last %s will be replaced with
-#. "(roughly %d steps)" translation
-#: bisect.c:998
+#: apply.c:3427 apply.c:3667
#, c-format
-msgid "Bisecting: %d revision left to test after this %s\n"
-msgid_plural "Bisecting: %d revisions left to test after this %s\n"
-msgstr[0] "Бинарный поиск: %d редакцию осталось проверить после этой %s\n"
-msgstr[1] "Бинарный поиск: %d редакции осталось проверить после этой %s\n"
-msgstr[2] "Бинарный поиск: %d редакций осталось проверить после этой %s\n"
-msgstr[3] "Бинарный поиск: %d редакций осталось проверить после этой %s\n"
+msgid "path %s has been renamed/deleted"
+msgstr "путь %s был переименован/удален"
-#: branch.c:53
+#: apply.c:3510 apply.c:3681
#, c-format
-msgid ""
-"\n"
-"After fixing the error cause you may try to fix up\n"
-"the remote tracking information by invoking\n"
-"\"git branch --set-upstream-to=%s%s%s\"."
-msgstr "\nПосле исправления причины ошибки,\nвы можете исправить информацию об отслеживаемой\nвнешней ветке, с помощью команды\n«git branch --set-upstream-to=%s%s%s»."
+msgid "%s: does not exist in index"
+msgstr "%s: нет в индексе"
-#: branch.c:67
+#: apply.c:3519 apply.c:3689
#, c-format
-msgid "Not setting branch %s as its own upstream."
-msgstr "Не устанавливаю ветку %s, так так она принадлежит вышестоящему репозиторию."
+msgid "%s: does not match index"
+msgstr "%s: не совпадает с индексом"
-#: branch.c:93
-#, c-format
-msgid "Branch %s set up to track remote branch %s from %s by rebasing."
-msgstr "Ветка %s отслеживает внешнюю ветку %s из %s перемещением."
+#: apply.c:3554
+msgid "repository lacks the necessary blob to fall back on 3-way merge."
+msgstr "в репозитории отсутствует необходимый двоичный объект для отката к трёхходовому слиянию."
-#: branch.c:94
+#: apply.c:3557
#, c-format
-msgid "Branch %s set up to track remote branch %s from %s."
-msgstr "Ð\92еÑ\82ка %s оÑ\82Ñ\81леживаеÑ\82 внеÑ\88нÑ\8eÑ\8e веÑ\82кÑ\83 %s из %s."
+msgid "Falling back to three-way merge...\n"
+msgstr "Ð\9eÑ\82каÑ\82 к Ñ\82Ñ\80Ñ\91Ñ\85Ñ\85одовомÑ\83 Ñ\81лиÑ\8fниÑ\8eâ\80¦\n"
-#: branch.c:98
+#: apply.c:3573 apply.c:3577
#, c-format
-msgid "Branch %s set up to track local branch %s by rebasing."
-msgstr "Ð\92еÑ\82ка %s оÑ\82Ñ\81леживаеÑ\82 локалÑ\8cнÑ\83Ñ\8e веÑ\82кÑ\83 %s пеÑ\80емеÑ\89ением."
+msgid "cannot read the current contents of '%s'"
+msgstr "не Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c Ñ\82екÑ\83Ñ\89ее Ñ\81одеÑ\80жимое «%s»"
-#: branch.c:99
+#: apply.c:3589
#, c-format
-msgid "Branch %s set up to track local branch %s."
-msgstr "Ð\92еÑ\82ка %s оÑ\82Ñ\81леживаеÑ\82 локалÑ\8cнÑ\83Ñ\8e веÑ\82кÑ\83 %s."
+msgid "Failed to fall back on three-way merge...\n"
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c оÑ\82каÑ\82иÑ\82Ñ\8cÑ\81Ñ\8f к Ñ\82Ñ\80Ñ\91Ñ\85Ñ\85одовомÑ\83 Ñ\81лиÑ\8fниÑ\8eâ\80¦\n"
-#: branch.c:104
+#: apply.c:3603
#, c-format
-msgid "Branch %s set up to track remote ref %s by rebasing."
-msgstr "Ð\92еÑ\82ка %s оÑ\82Ñ\81леживаеÑ\82 внеÑ\88нÑ\8eÑ\8e Ñ\81Ñ\81Ñ\8bлкÑ\83 %s пеÑ\80емеÑ\89ением."
+msgid "Applied patch to '%s' with conflicts.\n"
+msgstr "Ð\9fаÑ\82Ñ\87 пÑ\80именен к «%s» Ñ\81 конÑ\84ликÑ\82ами.\n"
-#: branch.c:105
+#: apply.c:3608
#, c-format
-msgid "Branch %s set up to track remote ref %s."
-msgstr "Ð\92еÑ\82ка %s оÑ\82Ñ\81леживаеÑ\82 внеÑ\88нÑ\8eÑ\8e Ñ\81Ñ\81Ñ\8bлкÑ\83 %s."
+msgid "Applied patch to '%s' cleanly.\n"
+msgstr "Ð\9fаÑ\82Ñ\87 пÑ\80именен к «%s» без оÑ\88ибок.\n"
-#: branch.c:109
+#: apply.c:3634
+msgid "removal patch leaves file contents"
+msgstr "патч удаления не удалил содержимое файла"
+
+#: apply.c:3706
#, c-format
-msgid "Branch %s set up to track local ref %s by rebasing."
-msgstr "Ветка %s отслеживает локальную ссылку %s перемещением."
+msgid "%s: wrong type"
+msgstr "%s: неправильный тип"
-#: branch.c:110
+#: apply.c:3708
#, c-format
-msgid "Branch %s set up to track local ref %s."
-msgstr "Ветка %s отслеживает локальную ссылку %s."
+msgid "%s has type %o, expected %o"
+msgstr "%s имеет тип %o, а ожидался %o"
-#: branch.c:119
-msgid "Unable to write upstream branch configuration"
-msgstr "Не удалось записать настройки вышестоящей ветки"
+#: apply.c:3859 apply.c:3861
+#, c-format
+msgid "invalid path '%s'"
+msgstr "неправильный путь «%s»"
-#: branch.c:156
+#: apply.c:3917
#, c-format
-msgid "Not tracking: ambiguous information for ref %s"
-msgstr "Не отслеживается: неоднозначная информация для ссылки %s"
+msgid "%s: already exists in index"
+msgstr "%s: уже содержится в индексе"
-#: branch.c:185
+#: apply.c:3920
#, c-format
-msgid "'%s' is not a valid branch name."
-msgstr "«%s» не является действительным именем ветки."
+msgid "%s: already exists in working directory"
+msgstr "%s: уже содержится в рабочем каталоге"
-#: branch.c:190
+#: apply.c:3940
#, c-format
-msgid "A branch named '%s' already exists."
-msgstr "Ð\92еÑ\82ка Ñ\81 именем «%s» Ñ\83же Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82."
+msgid "new mode (%o) of %s does not match old mode (%o)"
+msgstr "новÑ\8bй Ñ\80ежим доÑ\81Ñ\82Ñ\83па (%o) длÑ\8f %s не Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83еÑ\82 Ñ\81Ñ\82аÑ\80омÑ\83 Ñ\80ежимÑ\83 доÑ\81Ñ\82Ñ\83па (%o)"
-#: branch.c:198
-msgid "Cannot force update the current branch."
-msgstr "Не удалось принудительно обновить текущую ветку."
+#: apply.c:3945
+#, c-format
+msgid "new mode (%o) of %s does not match old mode (%o) of %s"
+msgstr "новый режим доступа (%o) для %s не соответствует старому режиму доступа (%o) для %s"
-#: branch.c:218
+#: apply.c:3965
#, c-format
-msgid ""
-"Cannot setup tracking information; starting point '%s' is not a branch."
-msgstr "Не удалось настроить информацию отслеживания; стартовая точка «%s» не является веткой."
+msgid "affected file '%s' is beyond a symbolic link"
+msgstr "затронутый файл «%s» находится за символической ссылкой"
-#: branch.c:220
+#: apply.c:3969
#, c-format
-msgid "the requested upstream branch '%s' does not exist"
-msgstr "запрошенная ветка вышестоящего репозитория «%s» не существует"
+msgid "%s: patch does not apply"
+msgstr "%s: не удалось применить патч"
-#: branch.c:222
-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 "\nЕсли вы планируете основывать свою работу на вышестоящей ветке, которая уже существует во внешнем репозитории, вам может потребоваться запустить «git fetch» для ее получения.\n\nЕсли вы планируете отправить новую локальную ветку, которая будет отслеживаться, во внешний репозиторий, вам может потребоваться запустить «git push -u» — чтобы сохранить настройку вышестоящего репозитория для отправки."
+#: apply.c:3984
+#, c-format
+msgid "Checking patch %s..."
+msgstr "Проверка патча %s…"
-#: branch.c:266
+#: apply.c:4075
#, c-format
-msgid "Not a valid object name: '%s'."
-msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имое имÑ\8f обÑ\8aекÑ\82а: «%s»."
+msgid "sha1 information is lacking or useless for submodule %s"
+msgstr "инÑ\84оÑ\80маÑ\86иÑ\8f об sha1 оÑ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83еÑ\82 или беÑ\81полезна длÑ\8f подмодÑ\83лÑ\8f %s"
-#: branch.c:286
+#: apply.c:4082
#, c-format
-msgid "Ambiguous object name: '%s'."
-msgstr "Ð\9dеоднознаÑ\87ное имÑ\8f обÑ\8aекÑ\82а: «%s»."
+msgid "mode change for %s, which is not in current HEAD"
+msgstr "изменен Ñ\80ежим длÑ\8f %s, коÑ\82оÑ\80Ñ\8bй не наÑ\85одиÑ\82Ñ\81Ñ\8f в Ñ\82екÑ\83Ñ\89ем HEAD"
-#: branch.c:291
+#: apply.c:4085
#, c-format
-msgid "Not a valid branch point: '%s'."
-msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имаÑ\8f Ñ\82оÑ\87ка веÑ\82ки: «%s»."
+msgid "sha1 information is lacking or useless (%s)."
+msgstr "инÑ\84оÑ\80маÑ\86иÑ\8f об sha1 оÑ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83еÑ\82 или беÑ\81полезна (%s)."
-#: branch.c:345
+#: apply.c:4090 builtin/checkout.c:233 builtin/reset.c:135
#, c-format
-msgid "'%s' is already checked out at '%s'"
-msgstr "«%s» уже находится на «%s»"
+msgid "make_cache_entry failed for path '%s'"
+msgstr "сбой make_cache_entry для пути «%s»"
-#: branch.c:364
+#: apply.c:4094
#, c-format
-msgid "HEAD of working tree %s is not updated"
-msgstr "HEAD рабочего каталога %s не обновлён"
+msgid "could not add %s to temporary index"
+msgstr "не удалось добавить %s во временный индекс"
-#: bundle.c:34
+#: apply.c:4104
#, c-format
-msgid "'%s' does not look like a v2 bundle file"
-msgstr "«%s» не похож на файл пакета версии 2"
+msgid "could not write temporary index to %s"
+msgstr "не удалось записать временный индкекс в %s"
-#: bundle.c:61
+#: apply.c:4242
#, c-format
-msgid "unrecognized header: %s%s (%d)"
-msgstr "неопознанный заголовок: %s%s (%d)"
+msgid "unable to remove %s from index"
+msgstr "не удалось удалить %s из индекса"
-#: bundle.c:87 builtin/commit.c:778
+#: apply.c:4277
#, c-format
-msgid "could not open '%s'"
-msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c «%s»"
+msgid "corrupt patch for submodule %s"
+msgstr "повÑ\80ежденнÑ\8bй паÑ\82Ñ\87 длÑ\8f подмодÑ\83лÑ\8f %s"
-#: bundle.c:139
-msgid "Repository lacks these prerequisite commits:"
-msgstr "В репозитории отсутствуют необходимые коммиты:"
+#: apply.c:4283
+#, c-format
+msgid "unable to stat newly created file '%s'"
+msgstr "не удалось выполнить stat для созданного файла «%s»"
-#: bundle.c:163 ref-filter.c:1462 sequencer.c:630 sequencer.c:1085
-#: builtin/blame.c:2763 builtin/commit.c:1057 builtin/log.c:348
-#: builtin/log.c:890 builtin/log.c:1336 builtin/log.c:1659 builtin/log.c:1901
-#: builtin/merge.c:356 builtin/shortlog.c:170
-msgid "revision walk setup failed"
-msgstr "сбой инициализации прохода по редакциям"
+#: apply.c:4291
+#, c-format
+msgid "unable to create backing store for newly created file %s"
+msgstr "не удалось создать вспомогательный файл для созданного файла %s"
-#: bundle.c:185
+#: apply.c:4297 apply.c:4441
#, c-format
-msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
-msgstr[0] "Пакет содержит эту %d ссылку:"
-msgstr[1] "Пакет содержит эти %d ссылки:"
-msgstr[2] "Пакет содержит эти %d ссылок:"
-msgstr[3] "Пакет содержит эти %d ссылок:"
+msgid "unable to add cache entry for %s"
+msgstr "не удалось создать запись в кэше для %s"
-#: bundle.c:192
-msgid "The bundle records a complete history."
-msgstr "Пакет содержит полную историю."
+#: apply.c:4338
+#, c-format
+msgid "failed to write to '%s'"
+msgstr "не удалось записать в «%s»"
-#: bundle.c:194
+#: apply.c:4342
#, c-format
-msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
-msgstr[0] "Пакет требует эту %d ссылку:"
-msgstr[1] "Пакет требует эти %d ссылки:"
-msgstr[2] "Пакет требует эти %d ссылок:"
-msgstr[3] "Пакет требует эти %d ссылок:"
+msgid "closing file '%s'"
+msgstr "закрытие файла «%s»"
-#: bundle.c:253
-msgid "Could not spawn pack-objects"
-msgstr "Не удалось создать объекты пакета"
+#: apply.c:4412
+#, c-format
+msgid "unable to write file '%s' mode %o"
+msgstr "не удалось записать файл «%s» с режимом доступа %o"
-#: bundle.c:264
-msgid "pack-objects died"
-msgstr "критическая ошибка pack-objects"
+#: apply.c:4510
+#, c-format
+msgid "Applied patch %s cleanly."
+msgstr "Патч %s применен без ошибок."
-#: bundle.c:304
-msgid "rev-list died"
-msgstr "кÑ\80иÑ\82иÑ\87еÑ\81каÑ\8f оÑ\88ибка rev-list"
+#: apply.c:4518
+msgid "internal error"
+msgstr "внÑ\83Ñ\82Ñ\80еннÑ\8fÑ\8f оÑ\88ибка"
-#: bundle.c:353
+#: apply.c:4521
#, c-format
-msgid "ref '%s' is excluded by the rev-list options"
-msgstr "ссылка «%s» исключена в соответствии с опциями rev-list"
+msgid "Applying patch %%s with %d reject..."
+msgid_plural "Applying patch %%s with %d rejects..."
+msgstr[0] "Применение патча %%s с %d отказом…"
+msgstr[1] "Применение патча %%s с %d отказами…"
+msgstr[2] "Применение патча %%s с %d отказами…"
+msgstr[3] "Применение патча %%s с %d отказами…"
-#: bundle.c:443 builtin/log.c:165 builtin/log.c:1565 builtin/shortlog.c:273
+#: apply.c:4532
#, c-format
-msgid "unrecognized argument: %s"
-msgstr "неопознанный аргумент: %s"
-
-#: bundle.c:451
-msgid "Refusing to create empty bundle."
-msgstr "Отклонение создания пустого пакета."
+msgid "truncating .rej filename to %.*s.rej"
+msgstr "усечение имени .rej файла до %.*s.rej"
-#: bundle.c:463
+#: apply.c:4540 builtin/fetch.c:740 builtin/fetch.c:989
#, c-format
-msgid "cannot create '%s'"
-msgstr "не удалось создать «%s»"
-
-#: bundle.c:491
-msgid "index-pack died"
-msgstr "критическая ошибка index-pack"
+msgid "cannot open %s"
+msgstr "не удалось открыть %s"
-#: color.c:290
+#: apply.c:4554
#, c-format
-msgid "invalid color value: %.*s"
-msgstr "недопÑ\83Ñ\81Ñ\82имое знаÑ\87ение Ñ\86веÑ\82а: %.*s"
+msgid "Hunk #%d applied cleanly."
+msgstr "Ð\91лок â\84\96%d пÑ\80именен без оÑ\88ибок."
-#: commit.c:40 builtin/am.c:433 builtin/am.c:469 builtin/am.c:1505
-#: builtin/am.c:2119
+#: apply.c:4558
#, c-format
-msgid "could not parse %s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\80азобÑ\80аÑ\82Ñ\8c %s"
+msgid "Rejected hunk #%d."
+msgstr "Ð\91лок â\84\96%d оÑ\82клонен."
-#: commit.c:42
+#: apply.c:4668
#, c-format
-msgid "%s %s is not a commit!"
-msgstr "%s %s не является коммитом!"
+msgid "Skipped patch '%s'."
+msgstr "Патч «%s» пропущен."
-#: compat/obstack.c:406 compat/obstack.c:408
-msgid "memory exhausted"
-msgstr "памÑ\8fÑ\82Ñ\8c иÑ\81Ñ\87еÑ\80пана"
+#: apply.c:4676
+msgid "unrecognized input"
+msgstr "не Ñ\80аÑ\81познаннÑ\8bй ввод"
-#: config.c:516
+#: apply.c:4695
+msgid "unable to read index file"
+msgstr "не удалось прочитать файл индекса"
+
+#: apply.c:4833
#, c-format
-msgid "bad config line %d in blob %s"
-msgstr "оÑ\88ибка в %d Ñ\81Ñ\82Ñ\80оке двоиÑ\87ного обÑ\8aекÑ\82а %s"
+msgid "can't open patch '%s': %s"
+msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c паÑ\82Ñ\87 «%s»: %s"
-#: config.c:520
+#: apply.c:4858
#, c-format
-msgid "bad config line %d in file %s"
-msgstr "ошибка в %d строке файла %s"
+msgid "squelched %d whitespace error"
+msgid_plural "squelched %d whitespace errors"
+msgstr[0] "пропущена %d ошибка в пробельных символах"
+msgstr[1] "пропущено %d ошибки в пробельных символах"
+msgstr[2] "пропущено %d ошибок в пробельных символах"
+msgstr[3] "пропущено %d ошибок в пробельных символах"
-#: config.c:524
+#: apply.c:4864 apply.c:4879
#, c-format
-msgid "bad config line %d in standard input"
-msgstr "ошибка в %d строке стандартного ввода"
+msgid "%d line adds whitespace errors."
+msgid_plural "%d lines add whitespace errors."
+msgstr[0] "%d строка добавила ошибки в пробельных символах."
+msgstr[1] "%d строки добавили ошибки в пробельных символах."
+msgstr[2] "%d строк добавили ошибки в пробельных символах."
+msgstr[3] "%d строк добавили ошибки в пробельных символах."
-#: config.c:528
+#: apply.c:4872
#, c-format
-msgid "bad config line %d in submodule-blob %s"
-msgstr "ошибка в %d строке двоичного объекта подмодуля %s"
+msgid "%d line applied after fixing whitespace errors."
+msgid_plural "%d lines applied after fixing whitespace errors."
+msgstr[0] "%d строка добавлена после исправления ошибок в пробелах."
+msgstr[1] "%d строки добавлено после исправления ошибок в пробелах."
+msgstr[2] "%d строк добавлено после исправления ошибок в пробелах."
+msgstr[3] "%d строки добавлено после исправления ошибок в пробелах."
-#: config.c:532
+#: apply.c:4888 builtin/add.c:463 builtin/mv.c:286 builtin/rm.c:431
+msgid "Unable to write new index file"
+msgstr "Не удалось записать новый файл индекса"
+
+#: apply.c:4919 apply.c:4922 builtin/am.c:2277 builtin/am.c:2280
+#: builtin/clone.c:95 builtin/fetch.c:98 builtin/pull.c:180
+#: builtin/submodule--helper.c:281 builtin/submodule--helper.c:407
+#: builtin/submodule--helper.c:589 builtin/submodule--helper.c:592
+#: builtin/submodule--helper.c:944 builtin/submodule--helper.c:947
+msgid "path"
+msgstr "путь"
+
+#: apply.c:4920
+msgid "don't apply changes matching the given path"
+msgstr "не применять изменения по указанному пути"
+
+#: apply.c:4923
+msgid "apply changes matching the given path"
+msgstr "применять изменения по указанному пути"
+
+#: apply.c:4925 builtin/am.c:2286
+msgid "num"
+msgstr "количество"
+
+#: apply.c:4926
+msgid "remove <num> leading slashes from traditional diff paths"
+msgstr "удалить <количество> ведущих косых черт из традиционных путей списка изменений"
+
+#: apply.c:4929
+msgid "ignore additions made by the patch"
+msgstr "игнорировать добавления, сделанные этим патчем"
+
+#: apply.c:4931
+msgid "instead of applying the patch, output diffstat for the input"
+msgstr "вместо применения патча вывести статистику добавлений и удалений для ввода"
+
+#: apply.c:4935
+msgid "show number of added and deleted lines in decimal notation"
+msgstr "показать количество добавленных и удаленных строк в десятичном представлении"
+
+#: apply.c:4937
+msgid "instead of applying the patch, output a summary for the input"
+msgstr "вместо применения патча вывести статистику изменений для ввода"
+
+#: apply.c:4939
+msgid "instead of applying the patch, see if the patch is applicable"
+msgstr "вместо применения патча проверить подходит ли он"
+
+#: apply.c:4941
+msgid "make sure the patch is applicable to the current index"
+msgstr "проверить, что патч применяется к текущему индексу"
+
+#: apply.c:4943
+msgid "apply a patch without touching the working tree"
+msgstr "применить патч, не изменяя рабочий каталог"
+
+#: apply.c:4945
+msgid "accept a patch that touches outside the working area"
+msgstr "принять патч, который затрагивает файлы за рабочим каталогом"
+
+#: apply.c:4947
+msgid "also apply the patch (use with --stat/--summary/--check)"
+msgstr "а также применить патч (используйте с --stat/--summary/--check)"
+
+#: apply.c:4949
+msgid "attempt three-way merge if a patch does not apply"
+msgstr "попытаться сделать трехходовое слияние, если патч не применяется"
+
+#: apply.c:4951
+msgid "build a temporary index based on embedded index information"
+msgstr "построить временный индекс, основанный на встроенной информации об индексе"
+
+#: apply.c:4954 builtin/checkout-index.c:169 builtin/ls-files.c:505
+msgid "paths are separated with NUL character"
+msgstr "пути, отделённые НУЛЕВЫМ символом"
+
+#: apply.c:4956
+msgid "ensure at least <n> lines of context match"
+msgstr "удостовериться, что по крайней мере <n> строк контекста совпадают"
+
+#: apply.c:4957 builtin/am.c:2265
+msgid "action"
+msgstr "действие"
+
+#: apply.c:4958
+msgid "detect new or modified lines that have whitespace errors"
+msgstr "определять новые или модифицированные строки, у которых есть ошибки в пробельных символах"
+
+#: apply.c:4961 apply.c:4964
+msgid "ignore changes in whitespace when finding context"
+msgstr "игнорировать изменения в пробельных символах при поиске контекста"
+
+#: apply.c:4967
+msgid "apply the patch in reverse"
+msgstr "применить патч с обращением изменений"
+
+#: apply.c:4969
+msgid "don't expect at least one line of context"
+msgstr "не ожидать как минимум одной строки контекста"
+
+#: apply.c:4971
+msgid "leave the rejected hunks in corresponding *.rej files"
+msgstr "оставить отклоненные блоки изменений в соответствующих *.rej файлах"
+
+#: apply.c:4973
+msgid "allow overlapping hunks"
+msgstr "разрешить перекрывающиеся блоки изменений"
+
+#: apply.c:4974 builtin/add.c:267 builtin/check-ignore.c:19
+#: builtin/commit.c:1339 builtin/count-objects.c:94 builtin/fsck.c:593
+#: builtin/log.c:1860 builtin/mv.c:110 builtin/read-tree.c:114
+msgid "be verbose"
+msgstr "быть многословнее"
+
+#: apply.c:4976
+msgid "tolerate incorrectly detected missing new-line at the end of file"
+msgstr "разрешить некорректно определенные пропущенные пустые строки в конце файла"
+
+#: apply.c:4979
+msgid "do not trust the line counts in the hunk headers"
+msgstr "не доверять количеству строк из заголовка блока изменений"
+
+#: apply.c:4981 builtin/am.c:2274
+msgid "root"
+msgstr "корень"
+
+#: apply.c:4982
+msgid "prepend <root> to all filenames"
+msgstr "добавить <корень> спереди ко всем именам файлов"
+
+#: archive.c:12
+msgid "git archive [<options>] <tree-ish> [<path>...]"
+msgstr "git archive [<опции>] <указатель-дерева> [<путь>…]"
+
+#: archive.c:13
+msgid "git archive --list"
+msgstr "git archive --list"
+
+#: archive.c:14
+msgid ""
+"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> "
+"[<path>...]"
+msgstr "git archive --remote <репозиторий> [--exec <команда>] [<опции>] <указатель-дерева> [<путь>…]"
+
+#: archive.c:15
+msgid "git archive --remote <repo> [--exec <cmd>] --list"
+msgstr "git archive --remote <репозиторий> [--exec <команда>] --list"
+
+#: archive.c:344 builtin/add.c:152 builtin/add.c:442 builtin/rm.c:327
#, c-format
-msgid "bad config line %d in command line %s"
-msgstr "ошибка в %d строке коммандной строки %s"
+msgid "pathspec '%s' did not match any files"
+msgstr "спецификация пути «%s» не соответствует ни одному файлу"
-#: config.c:536
+#: archive.c:429
+msgid "fmt"
+msgstr "формат"
+
+#: archive.c:429
+msgid "archive format"
+msgstr "формат архива"
+
+#: archive.c:430 builtin/log.c:1429
+msgid "prefix"
+msgstr "префикс"
+
+#: archive.c:431
+msgid "prepend prefix to each pathname in the archive"
+msgstr "добавлять префикс перед каждым путем файла в архиве"
+
+#: archive.c:432 builtin/blame.c:2603 builtin/blame.c:2604 builtin/config.c:59
+#: builtin/fast-export.c:987 builtin/fast-export.c:989 builtin/grep.c:723
+#: builtin/hash-object.c:101 builtin/ls-files.c:539 builtin/ls-files.c:542
+#: builtin/notes.c:401 builtin/notes.c:564 builtin/read-tree.c:109
+#: parse-options.h:153
+msgid "file"
+msgstr "файл"
+
+#: archive.c:433 builtin/archive.c:89
+msgid "write the archive to this file"
+msgstr "запись архива в этот файл"
+
+#: archive.c:435
+msgid "read .gitattributes in working directory"
+msgstr "читать .gitattributes в рабочем каталоге"
+
+#: archive.c:436
+msgid "report archived files on stderr"
+msgstr "отчет об архивированных файлах в stderr"
+
+#: archive.c:437
+msgid "store only"
+msgstr "только хранение"
+
+#: archive.c:438
+msgid "compress faster"
+msgstr "сжимать быстрее"
+
+#: archive.c:446
+msgid "compress better"
+msgstr "сжимать лучше"
+
+#: archive.c:449
+msgid "list supported archive formats"
+msgstr "перечислить поддерживаемые форматы архивов"
+
+#: archive.c:451 builtin/archive.c:90 builtin/clone.c:85 builtin/clone.c:88
+#: builtin/submodule--helper.c:601 builtin/submodule--helper.c:953
+msgid "repo"
+msgstr "репозиторий"
+
+#: archive.c:452 builtin/archive.c:91
+msgid "retrieve the archive from remote repository <repo>"
+msgstr "получить архив из внешнего <репозитория>"
+
+#: archive.c:453 builtin/archive.c:92 builtin/notes.c:485
+msgid "command"
+msgstr "команда"
+
+#: archive.c:454 builtin/archive.c:93
+msgid "path to the remote git-upload-archive command"
+msgstr "путь к команде git-upload-archive на машине с внешним репозиторием"
+
+#: archive.c:461
+msgid "Unexpected option --remote"
+msgstr "Неожиданная опция --remote"
+
+#: archive.c:463
+msgid "Option --exec can only be used together with --remote"
+msgstr "Опция --exec может использоваться только вместе с --remote"
+
+#: archive.c:465
+msgid "Unexpected option --output"
+msgstr "Неожиданная опция --output"
+
+#: archive.c:487
#, c-format
-msgid "bad config line %d in %s"
-msgstr "оÑ\88ибка в %d Ñ\81Ñ\82Ñ\80оке в %s"
+msgid "Unknown archive format '%s'"
+msgstr "Ð\9dеизвеÑ\81Ñ\82нÑ\8bй Ñ\84оÑ\80маÑ\82 аÑ\80Ñ\85ива «%s»"
-#: config.c:655
-msgid "out of range"
-msgstr "вне диапазона"
+#: archive.c:494
+#, c-format
+msgid "Argument not supported for format '%s': -%d"
+msgstr "Аргумент не поддерживается для формата «%s»: -%d"
-#: config.c:655
-msgid "invalid unit"
-msgstr "неправильное число"
+#: attr.c:263
+msgid ""
+"Negative patterns are ignored in git attributes\n"
+"Use '\\!' for literal leading exclamation."
+msgstr "Отрицающие шаблоны в атрибутах git игнорируются.\nИспользуйте «\\!» для буквального использования символа в значении «восклицательный знак»."
-#: config.c:661
+#: bisect.c:441
#, c-format
-msgid "bad numeric config value '%s' for '%s': %s"
-msgstr "непÑ\80авилÑ\8cное Ñ\87иÑ\81ловое знаÑ\87ение «%s» длÑ\8f «%s»: %s"
+msgid "Could not open file '%s'"
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c Ñ\84айл «%s»"
-#: config.c:666
+#: bisect.c:446
#, c-format
-msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
-msgstr "непÑ\80авилÑ\8cное Ñ\87иÑ\81ловое знаÑ\87ение «%s» длÑ\8f «%s» в двоиÑ\87ном обÑ\8aекÑ\82е %s: %s"
+msgid "Badly quoted content in file '%s': %s"
+msgstr "Ð\9fлоÑ\85ое Ñ\81одеÑ\80жимое Ñ\84айла «%s»: %s"
-#: config.c:669
+#: bisect.c:655
#, c-format
-msgid "bad numeric config value '%s' for '%s' in file %s: %s"
-msgstr "непÑ\80авилÑ\8cное Ñ\87иÑ\81ловое знаÑ\87ение «%s» длÑ\8f «%s» в Ñ\84айле %s: %s"
+msgid "We cannot bisect more!\n"
+msgstr "Ð\9dевозможно пÑ\80одолжиÑ\82Ñ\8c бинаÑ\80нÑ\8bй поиÑ\81к!\n"
-#: config.c:672
+#: bisect.c:708
#, c-format
-msgid "bad numeric config value '%s' for '%s' in standard input: %s"
-msgstr "непÑ\80авилÑ\8cное Ñ\87иÑ\81ловое знаÑ\87ение «%s» длÑ\8f «%s» на Ñ\81Ñ\82андаÑ\80Ñ\82ном вводе: %s"
+msgid "Not a valid commit name %s"
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имое имÑ\8f коммиÑ\82а %s"
-#: config.c:675
+#: bisect.c:732
#, c-format
-msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
-msgstr "неправильное числовое значение «%s» для «%s» в двоичном объекте подмодуля %s: %s"
+msgid ""
+"The merge base %s is bad.\n"
+"This means the bug has been fixed between %s and [%s].\n"
+msgstr "База слияния %s является плохим коммитом.\nЭто значит, что ошибка была исправлена где-то между %s и [%s].\n"
-#: config.c:678
+#: bisect.c:737
#, c-format
-msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
-msgstr "неправильное числовое значение «%s» для «%s» на коммандной строке %s: %s"
+msgid ""
+"The merge base %s is new.\n"
+"The property has changed between %s and [%s].\n"
+msgstr "База слияния %s является новой.\nСвойство было изменено где-то между %s и [%s].\n"
-#: config.c:681
+#: bisect.c:742
#, c-format
-msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr "неправильное числовое значение «%s» для «%s» в %s: %s"
+msgid ""
+"The merge base %s is %s.\n"
+"This means the first '%s' commit is between %s and [%s].\n"
+msgstr "База слияния %s является %s.\nЭто значит, что «%s» коммит находится где-то между %s и [%s].\n"
-#: config.c:768
+#: bisect.c:750
#, c-format
-msgid "failed to expand user dir in: '%s'"
-msgstr "сбой разворачивания пути каталога пользователя: «%s»"
+msgid ""
+"Some %s revs are not ancestor of the %s rev.\n"
+"git bisect cannot work properly in this case.\n"
+"Maybe you mistook %s and %s revs?\n"
+msgstr "Несколько %s коммитов не являются предками %s коммита.\nВ этом случае git bisect не может работать правильно.\nВозможно, вы перепутали редакции %s и %s местами?\n"
-#: config.c:849 config.c:860
+#: bisect.c:763
#, c-format
-msgid "bad zlib compression level %d"
-msgstr "неправильный уровень сжатия zlib %d"
+msgid ""
+"the merge base between %s and [%s] must be skipped.\n"
+"So we cannot be sure the first %s commit is between %s and %s.\n"
+"We continue anyway."
+msgstr "База слияния между %s и [%s] должно быть пропущена.\nПоэтому мы не можем быть уверены, что первый %s коммит находится между %s и %s.\nНо все же продолжаем поиск."
-#: config.c:978
+#: bisect.c:798
#, c-format
-msgid "invalid mode for object creation: %s"
-msgstr "недопÑ\83Ñ\81Ñ\82имÑ\8bй Ñ\80ежим Ñ\81озданиÑ\8f обÑ\8aекÑ\82а: %s"
+msgid "Bisecting: a merge base must be tested\n"
+msgstr "Ð\91инаÑ\80нÑ\8bй поиÑ\81к: база Ñ\81лиÑ\8fниÑ\8f должна бÑ\8bÑ\82Ñ\8c пÑ\80овеÑ\80ена\n"
-#: config.c:1312
-msgid "unable to parse command-line config"
-msgstr "не удалось разобрать конфигурацию из командной строки"
+#: bisect.c:849
+#, c-format
+msgid "a %s revision is needed"
+msgstr "нужно указать %s редакцию"
-#: config.c:1362
-msgid "unknown error occurred while reading the configuration files"
-msgstr "произошла неизвестная ошибка при чтении файлов конфигурации"
+#: bisect.c:866 builtin/notes.c:174 builtin/tag.c:248
+#, c-format
+msgid "could not create file '%s'"
+msgstr "не удалось создать файл «%s»"
-#: config.c:1716
+#: bisect.c:917
#, c-format
-msgid "unable to parse '%s' from command-line config"
-msgstr "не удалось разобрать «%s» в конфигурации из командной строки"
+msgid "could not read file '%s'"
+msgstr "не удалось прочитать файл «%s»"
-#: config.c:1718
+#: bisect.c:947
+msgid "reading bisect refs failed"
+msgstr "сбой при чтении ссылок двоичного поиска"
+
+#: bisect.c:967
#, c-format
-msgid "bad config variable '%s' in file '%s' at line %d"
-msgstr "неправильная переменная конфигурации «%s» в файле «%s» на строке %d"
+msgid "%s was both %s and %s\n"
+msgstr "%s была одновременно и %s и %s\n"
-#: config.c:1777
+#: bisect.c:975
#, c-format
-msgid "%s has multiple values"
-msgstr "%s имеет несколько значений"
+msgid ""
+"No testable commit found.\n"
+"Maybe you started with bad path parameters?\n"
+msgstr "Тестируемый коммит не найден.\nВозможно, вы начали поиск с указанием неправильного параметра пути?\n"
-#: config.c:2311
+#: bisect.c:994
#, c-format
-msgid "could not set '%s' to '%s'"
-msgstr "не удалось установить «%s» в «%s»"
+msgid "(roughly %d step)"
+msgid_plural "(roughly %d steps)"
+msgstr[0] "(примерно %d шаг)"
+msgstr[1] "(примерно %d шага)"
+msgstr[2] "(примерно %d шагов)"
+msgstr[3] "(примерно %d шагов)"
-#: config.c:2313
+#. TRANSLATORS: the last %s will be replaced with
+#. "(roughly %d steps)" translation
+#: bisect.c:998
#, c-format
-msgid "could not unset '%s'"
-msgstr "не удалось сбросить значение для «%s»"
+msgid "Bisecting: %d revision left to test after this %s\n"
+msgid_plural "Bisecting: %d revisions left to test after this %s\n"
+msgstr[0] "Бинарный поиск: %d редакцию осталось проверить после этой %s\n"
+msgstr[1] "Бинарный поиск: %d редакции осталось проверить после этой %s\n"
+msgstr[2] "Бинарный поиск: %d редакций осталось проверить после этой %s\n"
+msgstr[3] "Бинарный поиск: %d редакций осталось проверить после этой %s\n"
-#: connected.c:63 builtin/fsck.c:173 builtin/prune.c:140
-msgid "Checking connectivity"
-msgstr "Проверка соединения"
+#: branch.c:53
+#, c-format
+msgid ""
+"\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking\n"
+"\"git branch --set-upstream-to=%s%s%s\"."
+msgstr "\nПосле исправления причины ошибки,\nвы можете исправить информацию об отслеживаемой\nвнешней ветке, с помощью команды\n«git branch --set-upstream-to=%s%s%s»."
-#: connected.c:74
-msgid "Could not run 'git rev-list'"
-msgstr "Не удалось запустить «git rev-list»"
+#: branch.c:67
+#, c-format
+msgid "Not setting branch %s as its own upstream."
+msgstr "Не устанавливаю ветку %s, так так она принадлежит вышестоящему репозиторию."
-#: connected.c:94
-msgid "failed write to rev-list"
-msgstr "сбой записи в rev-list"
+#: branch.c:93
+#, c-format
+msgid "Branch %s set up to track remote branch %s from %s by rebasing."
+msgstr "Ветка %s отслеживает внешнюю ветку %s из %s перемещением."
-#: connected.c:101
-msgid "failed to close rev-list's stdin"
-msgstr "сбой закрытия стандартного ввода у rev-list"
+#: branch.c:94
+#, c-format
+msgid "Branch %s set up to track remote branch %s from %s."
+msgstr "Ветка %s отслеживает внешнюю ветку %s из %s."
-#: date.c:97
-msgid "in the future"
-msgstr "в будущем"
+#: branch.c:98
+#, c-format
+msgid "Branch %s set up to track local branch %s by rebasing."
+msgstr "Ветка %s отслеживает локальную ветку %s перемещением."
-#: date.c:103
+#: branch.c:99
#, c-format
-msgid "%lu second ago"
-msgid_plural "%lu seconds ago"
-msgstr[0] "%lu секунду назад"
-msgstr[1] "%lu секунды назад"
-msgstr[2] "%lu секунд назад"
-msgstr[3] "%lu секунд назад"
+msgid "Branch %s set up to track local branch %s."
+msgstr "Ветка %s отслеживает локальную ветку %s."
-#: date.c:110
+#: branch.c:104
#, c-format
-msgid "%lu minute ago"
-msgid_plural "%lu minutes ago"
-msgstr[0] "%lu минуту назад"
-msgstr[1] "%lu минуты назад"
-msgstr[2] "%lu минут назад"
-msgstr[3] "%lu минут назад"
+msgid "Branch %s set up to track remote ref %s by rebasing."
+msgstr "Ветка %s отслеживает внешнюю ссылку %s перемещением."
-#: date.c:117
+#: branch.c:105
#, c-format
-msgid "%lu hour ago"
-msgid_plural "%lu hours ago"
-msgstr[0] "%lu час назад"
-msgstr[1] "%lu часа назад"
-msgstr[2] "%lu часов назад"
-msgstr[3] "%lu часов назад"
+msgid "Branch %s set up to track remote ref %s."
+msgstr "Ветка %s отслеживает внешнюю ссылку %s."
-#: date.c:124
+#: branch.c:109
#, c-format
-msgid "%lu day ago"
-msgid_plural "%lu days ago"
-msgstr[0] "%lu день назад"
-msgstr[1] "%lu дня назад"
-msgstr[2] "%lu дней назад"
-msgstr[3] "%lu дней назад"
+msgid "Branch %s set up to track local ref %s by rebasing."
+msgstr "Ветка %s отслеживает локальную ссылку %s перемещением."
-#: date.c:130
+#: branch.c:110
#, c-format
-msgid "%lu week ago"
-msgid_plural "%lu weeks ago"
-msgstr[0] "%lu неделю назад"
-msgstr[1] "%lu недели назад"
-msgstr[2] "%lu недель назад"
-msgstr[3] "%lu недель назад"
+msgid "Branch %s set up to track local ref %s."
+msgstr "Ветка %s отслеживает локальную ссылку %s."
-#: date.c:137
+#: branch.c:119
+msgid "Unable to write upstream branch configuration"
+msgstr "Не удалось записать настройки вышестоящей ветки"
+
+#: branch.c:156
#, c-format
-msgid "%lu month ago"
-msgid_plural "%lu months ago"
-msgstr[0] "%lu месяц назад"
-msgstr[1] "%lu месяца назад"
-msgstr[2] "%lu месяцев назад"
-msgstr[3] "%lu месяцев назад"
+msgid "Not tracking: ambiguous information for ref %s"
+msgstr "Не отслеживается: неоднозначная информация для ссылки %s"
-#: date.c:148
+#: branch.c:185
#, c-format
-msgid "%lu year"
-msgid_plural "%lu years"
-msgstr[0] "%lu год"
-msgstr[1] "%lu года"
-msgstr[2] "%lu лет"
-msgstr[3] "%lu лет"
+msgid "'%s' is not a valid branch name."
+msgstr "«%s» не является действительным именем ветки."
-#. TRANSLATORS: "%s" is "<n> years"
-#: date.c:151
+#: branch.c:190
#, c-format
-msgid "%s, %lu month ago"
-msgid_plural "%s, %lu months ago"
-msgstr[0] "%s и %lu месяц назад"
-msgstr[1] "%s и %lu месяца назад"
-msgstr[2] "%s и %lu месяцев назад"
-msgstr[3] "%s и %lu месяцев назад"
+msgid "A branch named '%s' already exists."
+msgstr "Ветка с именем «%s» уже существует."
-#: date.c:156 date.c:161
+#: branch.c:198
+msgid "Cannot force update the current branch."
+msgstr "Не удалось принудительно обновить текущую ветку."
+
+#: branch.c:218
#, c-format
-msgid "%lu year ago"
-msgid_plural "%lu years ago"
-msgstr[0] "%lu год назад"
-msgstr[1] "%lu года назад"
-msgstr[2] "%lu лет назад"
-msgstr[3] "%lu лет назад"
+msgid ""
+"Cannot setup tracking information; starting point '%s' is not a branch."
+msgstr "Не удалось настроить информацию отслеживания; стартовая точка «%s» не является веткой."
-#: diffcore-order.c:24
+#: branch.c:220
#, c-format
-msgid "failed to read orderfile '%s'"
-msgstr "сбой чтения orderfile «%s»"
+msgid "the requested upstream branch '%s' does not exist"
+msgstr "запрошенная ветка вышестоящего репозитория «%s» не существует"
-#: diffcore-rename.c:540
-msgid "Performing inexact rename detection"
-msgstr "Выполняется неточное определение переименования"
+#: branch.c:222
+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 "\nЕсли вы планируете основывать свою работу на вышестоящей ветке, которая уже существует во внешнем репозитории, вам может потребоваться запустить «git fetch» для ее получения.\n\nЕсли вы планируете отправить новую локальную ветку, которая будет отслеживаться, во внешний репозиторий, вам может потребоваться запустить «git push -u» — чтобы сохранить настройку вышестоящего репозитория для отправки."
-#: diff.c:116
+#: branch.c:265
#, c-format
-msgid " Failed to parse dirstat cut-off percentage '%s'\n"
-msgstr " Сбой разбора величины среза (cut-off) у dirstat «%s»\n"
+msgid "Not a valid object name: '%s'."
+msgstr "Недопустимое имя объекта: «%s»."
-#: diff.c:121
+#: branch.c:285
#, c-format
-msgid " Unknown dirstat parameter '%s'\n"
-msgstr "Ð\9dеизвеÑ\81Ñ\82нÑ\8bй паÑ\80амеÑ\82Ñ\80 dirstat: «%s»\n"
+msgid "Ambiguous object name: '%s'."
+msgstr "Ð\9dеоднознаÑ\87ное имÑ\8f обÑ\8aекÑ\82а: «%s»."
-#: diff.c:225
+#: branch.c:290
#, c-format
-msgid "Unknown value for 'diff.submodule' config variable: '%s'"
-msgstr "Ð\9dеизвеÑ\81Ñ\82ное знаÑ\87ениÑ\8f длÑ\8f пеÑ\80еменной «diff.submodule»: «%s»"
+msgid "Not a valid branch point: '%s'."
+msgstr "Ð\9dедопÑ\83Ñ\81Ñ\82имаÑ\8f Ñ\82оÑ\87ка веÑ\82ки: «%s»."
-#: diff.c:277
+#: branch.c:344
#, c-format
-msgid ""
-"Found errors in 'diff.dirstat' config variable:\n"
-"%s"
-msgstr "Найдены ошибки в переменной «diff.dirstat»:\n%s"
+msgid "'%s' is already checked out at '%s'"
+msgstr "«%s» уже находится на «%s»"
-#: diff.c:3017
+#: branch.c:363
#, c-format
-msgid "external diff died, stopping at %s"
-msgstr "критическая ошибка при внешнем сравнении, останов на %s"
+msgid "HEAD of working tree %s is not updated"
+msgstr "HEAD рабочего каталога %s не обновлён"
-#: diff.c:3415
-msgid "--follow requires exactly one pathspec"
-msgstr "--follow требует ровно одной спецификации пути"
+#: bundle.c:34
+#, c-format
+msgid "'%s' does not look like a v2 bundle file"
+msgstr "«%s» не похож на файл пакета версии 2"
-#: diff.c:3578
+#: bundle.c:61
#, c-format
-msgid ""
-"Failed to parse --dirstat/-X option parameter:\n"
-"%s"
-msgstr "Сбой разбора параметра опции --dirstat/-X :\n%s"
+msgid "unrecognized header: %s%s (%d)"
+msgstr "неопознанный заголовок: %s%s (%d)"
-#: diff.c:3592
+#: bundle.c:87 sequencer.c:963 builtin/commit.c:777
#, c-format
-msgid "Failed to parse --submodule option parameter: '%s'"
-msgstr "Сбой Ñ\80азбоÑ\80а паÑ\80амеÑ\82Ñ\80а опÑ\86ии --submodule: «%s»"
+msgid "could not open '%s'"
+msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c «%s»"
-#: dir.c:1823
-msgid "failed to get kernel name and information"
-msgstr "не Ñ\83далоÑ\81Ñ\8c полÑ\83Ñ\87иÑ\82Ñ\8c имÑ\8f Ñ\8fдÑ\80а и инÑ\84оÑ\80маÑ\86иÑ\8e"
+#: bundle.c:139
+msgid "Repository lacks these prerequisite commits:"
+msgstr "Ð\92 Ñ\80епозиÑ\82оÑ\80ии оÑ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\82 необÑ\85одимÑ\8bе коммиÑ\82Ñ\8b:"
-#: dir.c:1942
-msgid "Untracked cache is disabled on this system or location."
-msgstr "Кэш неотслеживаемых файлов отключен на этой системе или в этом месте."
+#: bundle.c:163 ref-filter.c:1462 sequencer.c:830 sequencer.c:1374
+#: builtin/blame.c:2814 builtin/commit.c:1061 builtin/log.c:348
+#: builtin/log.c:890 builtin/log.c:1340 builtin/log.c:1666 builtin/log.c:1909
+#: builtin/merge.c:356 builtin/shortlog.c:170
+msgid "revision walk setup failed"
+msgstr "сбой инициализации прохода по редакциям"
-#: gpg-interface.c:178
-msgid "gpg failed to sign the data"
-msgstr "gpg не удалось подписать данные"
+#: bundle.c:185
+#, c-format
+msgid "The bundle contains this ref:"
+msgid_plural "The bundle contains these %d refs:"
+msgstr[0] "Пакет содержит эту %d ссылку:"
+msgstr[1] "Пакет содержит эти %d ссылки:"
+msgstr[2] "Пакет содержит эти %d ссылок:"
+msgstr[3] "Пакет содержит эти %d ссылок:"
-#: gpg-interface.c:208
-msgid "could not create temporary file"
-msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\81оздаÑ\82Ñ\8c вÑ\80еменнÑ\8bй Ñ\84айл"
+#: bundle.c:192
+msgid "The bundle records a complete history."
+msgstr "Ð\9fакеÑ\82 Ñ\81одеÑ\80жиÑ\82 полнÑ\83Ñ\8e иÑ\81Ñ\82оÑ\80иÑ\8e."
-#: gpg-interface.c:210
+#: bundle.c:194
#, c-format
-msgid "failed writing detached signature to '%s'"
-msgstr "сбой записи отсоединенной подписи в «%s»"
+msgid "The bundle requires this ref:"
+msgid_plural "The bundle requires these %d refs:"
+msgstr[0] "Пакет требует эту %d ссылку:"
+msgstr[1] "Пакет требует эти %d ссылки:"
+msgstr[2] "Пакет требует эти %d ссылок:"
+msgstr[3] "Пакет требует эти %d ссылок:"
-#: grep.c:1792
-#, c-format
-msgid "'%s': unable to read %s"
-msgstr "«%s»: не удалось прочесть %s"
+#: bundle.c:253
+msgid "Could not spawn pack-objects"
+msgstr "Не удалось создать объекты пакета"
-#: grep.c:1809 builtin/clone.c:382 builtin/diff.c:84 builtin/rm.c:155
-#, c-format
-msgid "failed to stat '%s'"
-msgstr "не удалось выполнить stat «%s»"
+#: bundle.c:264
+msgid "pack-objects died"
+msgstr "критическая ошибка pack-objects"
-#: grep.c:1820
-#, c-format
-msgid "'%s': short read"
-msgstr "«%s»: слишком мало данных прочитано"
+#: bundle.c:304
+msgid "rev-list died"
+msgstr "критическая ошибка rev-list"
-#: help.c:205
+#: bundle.c:353
#, c-format
-msgid "available git commands in '%s'"
-msgstr "доступные команды git в «%s»"
+msgid "ref '%s' is excluded by the rev-list options"
+msgstr "ссылка «%s» исключена в соответствии с опциями rev-list"
-#: help.c:212
-msgid "git commands available from elsewhere on your $PATH"
-msgstr "команды git, доступные в других местах вашего $PATH"
+#: bundle.c:443 builtin/log.c:165 builtin/log.c:1572 builtin/shortlog.c:273
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "неопознанный аргумент: %s"
-#: help.c:244
-msgid "These are common Git commands used in various situations:"
-msgstr "СÑ\82андаÑ\80Ñ\82нÑ\8bе командÑ\8b Git иÑ\81полÑ\8cзÑ\83емÑ\8bе в Ñ\80азлиÑ\87нÑ\8bÑ\85 Ñ\81иÑ\82Ñ\83аÑ\86иÑ\8fÑ\85:"
+#: bundle.c:451
+msgid "Refusing to create empty bundle."
+msgstr "Ð\9eÑ\82клонение Ñ\81озданиÑ\8f пÑ\83Ñ\81Ñ\82ого пакеÑ\82а."
-#: help.c:309
+#: bundle.c:463
#, 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, но нам не удалось ее запустить. Возможно, git-%s не работает?"
+msgid "cannot create '%s'"
+msgstr "не удалось создать «%s»"
-#: help.c:366
-msgid "Uh oh. Your system reports no Git commands at all."
-msgstr "Ð\9eй-Ñ\91й! Ð\92аÑ\88а Ñ\81иÑ\81Ñ\82ема не Ñ\81ообÑ\89аеÑ\82 ни о какиÑ\85 командаÑ\85 Git вообÑ\89е."
+#: bundle.c:491
+msgid "index-pack died"
+msgstr "кÑ\80иÑ\82иÑ\87еÑ\81каÑ\8f оÑ\88ибка index-pack"
-#: help.c:388
+#: color.c:290
#, 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»"
+msgid "invalid color value: %.*s"
+msgstr "недопустимое значение цвета: %.*s"
-#: help.c:393
+#: commit.c:40 builtin/am.c:421 builtin/am.c:457 builtin/am.c:1493
+#: builtin/am.c:2127
#, c-format
-msgid "in %0.1f seconds automatically..."
-msgstr "через %0.1f секунд автоматически…"
+msgid "could not parse %s"
+msgstr "не удалось разобрать %s"
-#: help.c:400
+#: commit.c:42
#, c-format
-msgid "git: '%s' is not a git command. See 'git --help'."
-msgstr "git: «%s» не является командой git. Смотрите «git --help»."
+msgid "%s %s is not a commit!"
+msgstr "%s %s не является коммитом!"
-#: help.c:404 help.c:470
+#: commit.c:1514
msgid ""
-"\n"
-"Did you mean this?"
-msgid_plural ""
-"\n"
-"Did you mean one of these?"
-msgstr[0] "\nВозможно, вы имели в виду это?"
-msgstr[1] "\nВозможно, вы имели в виду что-то из этого?"
-msgstr[2] "\nВозможно, вы имели в виду что-то из этого?"
-msgstr[3] "\nВозможно, вы имели в виду что-то из этого?"
+"Warning: commit message did not conform to UTF-8.\n"
+"You may want to amend it after fixing the message, or set the config\n"
+"variable i18n.commitencoding to the encoding your project uses.\n"
+msgstr "Предупреждение: сообщение коммита не соответствует UTF-8.\nВозможно, вы захотите исправить его после исправления сообщения\nили настроить опцию i18n.commitencoding и указать кодировку\nсообщений, которую использует ваш проект.\n"
-#: help.c:466
-#, c-format
-msgid "%s: %s - %s"
-msgstr "%s: %s — %s"
+#: compat/obstack.c:406 compat/obstack.c:408
+msgid "memory exhausted"
+msgstr "память исчерпана"
-#: lockfile.c:152
+#: config.c:516
#, c-format
-msgid ""
-"Unable to create '%s.lock': %s.\n"
-"\n"
-"Another git process seems to be running in this repository, e.g.\n"
-"an editor opened by 'git commit'. Please make sure all processes\n"
-"are terminated then try again. If it still fails, a git process\n"
-"may have crashed in this repository earlier:\n"
-"remove the file manually to continue."
-msgstr "Не удалось создать «%s.lock»: %s.\n\nПохоже, что другой процесс git запущен в этом репозитории,\nнапример редактор открыт из «git commit». Пожалуйста, убедитесь,\nчто все процессы были завершены и потом попробуйте снова.\nЕсли это не поможет, то возможно процесс git был ранее завершен\nс ошибкой в этом репозитории: \nудалите файл вручную для продолжения."
+msgid "bad config line %d in blob %s"
+msgstr "ошибка в %d строке двоичного объекта %s"
-#: lockfile.c:160
+#: config.c:520
#, c-format
-msgid "Unable to create '%s.lock': %s"
-msgstr "Не удалось создать «%s.lock»: %s"
-
-#: merge.c:41
-msgid "failed to read the cache"
-msgstr "сбой чтения кэша"
-
-#: merge.c:94 builtin/am.c:1992 builtin/am.c:2027 builtin/checkout.c:375
-#: builtin/checkout.c:589 builtin/clone.c:732
-msgid "unable to write new index file"
-msgstr "не удалось записать новый файл индекса"
-
-#: merge-recursive.c:209
-msgid "(bad commit)\n"
-msgstr "(плохой коммит)\n"
+msgid "bad config line %d in file %s"
+msgstr "ошибка в %d строке файла %s"
-#: merge-recursive.c:231
+#: config.c:524
#, c-format
-msgid "addinfo_cache failed for path '%s'"
-msgstr "сбой addinfo_cache для пути «%s»"
-
-#: merge-recursive.c:301
-msgid "error building trees"
-msgstr "ошибка при построении деревьев"
+msgid "bad config line %d in standard input"
+msgstr "ошибка в %d строке стандартного ввода"
-#: merge-recursive.c:720
+#: config.c:528
#, c-format
-msgid "failed to create path '%s'%s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\81оздаÑ\82Ñ\8c пÑ\83Ñ\82Ñ\8c «%s»%s"
+msgid "bad config line %d in submodule-blob %s"
+msgstr "оÑ\88ибка в %d Ñ\81Ñ\82Ñ\80оке двоиÑ\87ного обÑ\8aекÑ\82а подмодÑ\83лÑ\8f %s"
-#: merge-recursive.c:731
+#: config.c:532
#, c-format
-msgid "Removing %s to make room for subdirectory\n"
-msgstr "Удаление %s, чтобы освободить место для подкаталогов\n"
-
-#: merge-recursive.c:745 merge-recursive.c:764
-msgid ": perhaps a D/F conflict?"
-msgstr ": возможно, конфликт каталогов/файлов?"
+msgid "bad config line %d in command line %s"
+msgstr "ошибка в %d строке коммандной строки %s"
-#: merge-recursive.c:754
+#: config.c:536
#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "оÑ\82каз поÑ\82еÑ\80и неоÑ\82Ñ\81леживаемого Ñ\84айла в «%s»"
+msgid "bad config line %d in %s"
+msgstr "оÑ\88ибка в %d Ñ\81Ñ\82Ñ\80оке в %s"
-#: merge-recursive.c:796
-#, c-format
-msgid "cannot read object %s '%s'"
-msgstr "невозможно прочитать объект %s «%s»"
+#: config.c:655
+msgid "out of range"
+msgstr "вне диапазона"
-#: merge-recursive.c:798
-#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "ожидается двоичный объект для %s «%s»"
+#: config.c:655
+msgid "invalid unit"
+msgstr "неправильное число"
-#: merge-recursive.c:822
+#: config.c:661
#, c-format
-msgid "failed to open '%s': %s"
-msgstr "не удалось открыть «%s»: %s"
+msgid "bad numeric config value '%s' for '%s': %s"
+msgstr "неправильное числовое значение «%s» для «%s»: %s"
-#: merge-recursive.c:833
+#: config.c:666
#, c-format
-msgid "failed to symlink '%s': %s"
-msgstr "не удалось создать символьную ссылку «%s»: %s"
+msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
+msgstr "неправильное числовое значение «%s» для «%s» в двоичном объекте %s: %s"
-#: merge-recursive.c:838
+#: config.c:669
#, c-format
-msgid "do not know what to do with %06o %s '%s'"
-msgstr "не понятно, что делать с %06o %s «%s»"
-
-#: merge-recursive.c:978
-msgid "Failed to execute internal merge"
-msgstr "Не удалось запустить внутреннее слияние"
+msgid "bad numeric config value '%s' for '%s' in file %s: %s"
+msgstr "неправильное числовое значение «%s» для «%s» в файле %s: %s"
-#: merge-recursive.c:982
+#: config.c:672
#, c-format
-msgid "Unable to add %s to database"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c добавиÑ\82Ñ\8c %s в базÑ\83 даннÑ\8bÑ\85"
+msgid "bad numeric config value '%s' for '%s' in standard input: %s"
+msgstr "непÑ\80авилÑ\8cное Ñ\87иÑ\81ловое знаÑ\87ение «%s» длÑ\8f «%s» на Ñ\81Ñ\82андаÑ\80Ñ\82ном вводе: %s"
-#: merge-recursive.c:1081 merge-recursive.c:1095
+#: config.c:675
#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree."
-msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и %s в %s. Версия %s из %s оставлена в дереве."
+msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
+msgstr "неправильное числовое значение «%s» для «%s» в двоичном объекте подмодуля %s: %s"
-#: merge-recursive.c:1087 merge-recursive.c:1100
+#: config.c:678
#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree at %s."
-msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и %s в %s. Версия %s из %s оставлена в дереве на %s."
+msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
+msgstr "неправильное числовое значение «%s» для «%s» на коммандной строке %s: %s"
-#: merge-recursive.c:1143
-msgid "rename"
-msgstr "переименование"
+#: config.c:681
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in %s: %s"
+msgstr "неправильное числовое значение «%s» для «%s» в %s: %s"
-#: merge-recursive.c:1143
-msgid "renamed"
-msgstr "переименовано"
+#: config.c:768
+#, c-format
+msgid "failed to expand user dir in: '%s'"
+msgstr "сбой разворачивания пути каталога пользователя: «%s»"
-#: merge-recursive.c:1200
+#: config.c:852 config.c:863
#, c-format
-msgid "%s is a directory in %s adding as %s instead"
-msgstr "%s — это каталог в %s, добавляем как %s вместо этого"
+msgid "bad zlib compression level %d"
+msgstr "неправильный уровень сжатия zlib %d"
-#: merge-recursive.c:1225
+#: config.c:978
#, c-format
-msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
-"\"%s\"->\"%s\" in \"%s\"%s"
-msgstr "КОНФЛИКТ (переименование/переименование): Переименование «%s»→«%s» в ветке «%s» и переименование «%s»→«%s» в ветке «%s»%s"
+msgid "invalid mode for object creation: %s"
+msgstr "недопустимый режим создания объекта: %s"
-#: merge-recursive.c:1230
-msgid " (left unresolved)"
-msgstr " (оставлено неразрешенным)"
+#: config.c:1312
+msgid "unable to parse command-line config"
+msgstr "не удалось разобрать конфигурацию из командной строки"
-#: merge-recursive.c:1292
-#, c-format
-msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
-msgstr "КОНФЛИКТ (переименование/переименование): Переименование «%s»→«%s» в ветке «%s» и переименование «%s»→«%s» в ветке «%s»"
+#: config.c:1362
+msgid "unknown error occurred while reading the configuration files"
+msgstr "произошла неизвестная ошибка при чтении файлов конфигурации"
-#: merge-recursive.c:1325
+#: config.c:1716
#, c-format
-msgid "Renaming %s to %s and %s to %s instead"
-msgstr "Ð\9fеÑ\80еименовÑ\8bваÑ\8e %s в %s и %s в %s вмеÑ\81Ñ\82о Ñ\8dÑ\82ого"
+msgid "unable to parse '%s' from command-line config"
+msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\80азобÑ\80аÑ\82Ñ\8c «%s» в конÑ\84игÑ\83Ñ\80аÑ\86ии из командной Ñ\81Ñ\82Ñ\80оки"
-#: merge-recursive.c:1531
+#: config.c:1718
#, c-format
-msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
-msgstr "Ð\9aÐ\9eÐ\9dФÐ\9bÐ\98Ð\9aТ (пеÑ\80еименование/добавление): Ð\9fеÑ\80еименование «%s»â\86\92«%s» в веÑ\82ке «%s» и добавление «%s» в веÑ\82ке «%s»"
+msgid "bad config variable '%s' in file '%s' at line %d"
+msgstr "непÑ\80авилÑ\8cнаÑ\8f пеÑ\80еменнаÑ\8f конÑ\84игÑ\83Ñ\80аÑ\86ии «%s» в Ñ\84айле «%s» на Ñ\81Ñ\82Ñ\80оке %d"
-#: merge-recursive.c:1546
+#: config.c:1777
#, c-format
-msgid "Adding merged %s"
-msgstr "Добавление слитого %s"
+msgid "%s has multiple values"
+msgstr "%s имеет несколько значений"
-#: merge-recursive.c:1553 merge-recursive.c:1766
+#: config.c:2311
#, c-format
-msgid "Adding as %s instead"
-msgstr "Ð\94обавление вмеÑ\81Ñ\82о Ñ\8dÑ\82ого как %s"
+msgid "could not set '%s' to '%s'"
+msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c «%s» в «%s»"
-#: merge-recursive.c:1610
+#: config.c:2313
#, c-format
-msgid "cannot read object %s"
-msgstr "невозможно прочитать объект «%s»"
+msgid "could not unset '%s'"
+msgstr "не удалось сбросить значение для «%s»"
-#: merge-recursive.c:1613
-#, c-format
-msgid "object %s is not a blob"
-msgstr "объект %s не является двоичным объектом"
+#: connect.c:49
+msgid "The remote end hung up upon initial contact"
+msgstr "Внешний сервер отсоединился до начала сеанса связи"
-#: merge-recursive.c:1666
-msgid "modify"
-msgstr "изменение"
+#: connect.c:51
+msgid ""
+"Could not read from remote repository.\n"
+"\n"
+"Please make sure you have the correct access rights\n"
+"and the repository exists."
+msgstr "Не удалось прочитать из внешнего репозитория.\n\nУдостоверьтесь, что у вас есть необходимые права доступа\nи репозиторий существует."
-#: merge-recursive.c:1666
-msgid "modified"
-msgstr "изменено"
+#: connected.c:63 builtin/fsck.c:173 builtin/prune.c:140
+msgid "Checking connectivity"
+msgstr "Ð\9fÑ\80овеÑ\80ка Ñ\81оединениÑ\8f"
-#: merge-recursive.c:1676
-msgid "content"
-msgstr "содержимое"
+#: connected.c:75
+msgid "Could not run 'git rev-list'"
+msgstr "Не удалось запустить «git rev-list»"
-#: merge-recursive.c:1683
-msgid "add/add"
-msgstr "добавление/добавление"
+#: connected.c:95
+msgid "failed write to rev-list"
+msgstr "сбой записи в rev-list"
-#: merge-recursive.c:1718
-#, c-format
-msgid "Skipped %s (merged same as existing)"
-msgstr "Пропуск %s (слиты одинаковые изменения как существующие)"
+#: connected.c:102
+msgid "failed to close rev-list's stdin"
+msgstr "сбой закрытия стандартного ввода у rev-list"
-#: merge-recursive.c:1732
+#: convert.c:201
#, c-format
-msgid "Auto-merging %s"
-msgstr "Автослияние %s"
+msgid ""
+"CRLF will be replaced by LF in %s.\n"
+"The file will have its original line endings in your working directory."
+msgstr "CRLF будет заменен на LF в %s.\nФайл будет иметь свои оригинальные концы строк в рашей рабочей копии."
-#: merge-recursive.c:1736 git-submodule.sh:919
-msgid "submodule"
-msgstr "подмодуль"
+#: convert.c:205
+#, c-format
+msgid "CRLF would be replaced by LF in %s."
+msgstr "CRLF будет заменен на LF в %s."
-#: merge-recursive.c:1737
+#: convert.c:211
#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "КОНФЛИКТ (%s): Конфликт слияния в %s"
+msgid ""
+"LF will be replaced by CRLF in %s.\n"
+"The file will have its original line endings in your working directory."
+msgstr "LF будет заменен на CRLF в %s.\nФайл будет иметь свои оригинальные концы строк в рашей рабочей копии."
-#: merge-recursive.c:1831
+#: convert.c:215
#, c-format
-msgid "Removing %s"
-msgstr "Удаление %s"
+msgid "LF would be replaced by CRLF in %s"
+msgstr "LF будет заменен на CRLF в %s"
-#: merge-recursive.c:1857
-msgid "file/directory"
-msgstr "файл/каталог"
+#: date.c:97
+msgid "in the future"
+msgstr "в будущем"
-#: merge-recursive.c:1863
-msgid "directory/file"
-msgstr "каталог/файл"
+#: date.c:103
+#, c-format
+msgid "%lu second ago"
+msgid_plural "%lu seconds ago"
+msgstr[0] "%lu секунду назад"
+msgstr[1] "%lu секунды назад"
+msgstr[2] "%lu секунд назад"
+msgstr[3] "%lu секунд назад"
-#: merge-recursive.c:1868
+#: date.c:110
#, c-format
-msgid ""
-"CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
-msgstr "КОНФЛИКТ (%s): Уже существует каталог с именем «%s» в «%s». Добавление «%s» как «%s»"
+msgid "%lu minute ago"
+msgid_plural "%lu minutes ago"
+msgstr[0] "%lu минуту назад"
+msgstr[1] "%lu минуты назад"
+msgstr[2] "%lu минут назад"
+msgstr[3] "%lu минут назад"
-#: merge-recursive.c:1877
+#: date.c:117
#, c-format
-msgid "Adding %s"
-msgstr "Добавление %s"
+msgid "%lu hour ago"
+msgid_plural "%lu hours ago"
+msgstr[0] "%lu час назад"
+msgstr[1] "%lu часа назад"
+msgstr[2] "%lu часов назад"
+msgstr[3] "%lu часов назад"
-#: merge-recursive.c:1914
-msgid "Already up-to-date!"
-msgstr "Уже обновлено!"
+#: date.c:124
+#, c-format
+msgid "%lu day ago"
+msgid_plural "%lu days ago"
+msgstr[0] "%lu день назад"
+msgstr[1] "%lu дня назад"
+msgstr[2] "%lu дней назад"
+msgstr[3] "%lu дней назад"
-#: merge-recursive.c:1923
+#: date.c:130
#, c-format
-msgid "merging of trees %s and %s failed"
-msgstr "сбой слияния деревьев «%s» и «%s»"
+msgid "%lu week ago"
+msgid_plural "%lu weeks ago"
+msgstr[0] "%lu неделю назад"
+msgstr[1] "%lu недели назад"
+msgstr[2] "%lu недель назад"
+msgstr[3] "%lu недель назад"
-#: merge-recursive.c:2006
-msgid "Merging:"
-msgstr "Слияние:"
+#: date.c:137
+#, c-format
+msgid "%lu month ago"
+msgid_plural "%lu months ago"
+msgstr[0] "%lu месяц назад"
+msgstr[1] "%lu месяца назад"
+msgstr[2] "%lu месяцев назад"
+msgstr[3] "%lu месяцев назад"
-#: merge-recursive.c:2019
+#: date.c:148
#, c-format
-msgid "found %u common ancestor:"
-msgid_plural "found %u common ancestors:"
-msgstr[0] "найден %u общий предок:"
-msgstr[1] "найдено %u общих предка:"
-msgstr[2] "найдено %u общих предков:"
-msgstr[3] "найдено %u общих предков:"
+msgid "%lu year"
+msgid_plural "%lu years"
+msgstr[0] "%lu год"
+msgstr[1] "%lu года"
+msgstr[2] "%lu лет"
+msgstr[3] "%lu лет"
-#: merge-recursive.c:2058
-msgid "merge returned no commit"
-msgstr "слияние не вернуло коммит"
+#. TRANSLATORS: "%s" is "<n> years"
+#: date.c:151
+#, c-format
+msgid "%s, %lu month ago"
+msgid_plural "%s, %lu months ago"
+msgstr[0] "%s и %lu месяц назад"
+msgstr[1] "%s и %lu месяца назад"
+msgstr[2] "%s и %lu месяцев назад"
+msgstr[3] "%s и %lu месяцев назад"
-#: merge-recursive.c:2121
+#: date.c:156 date.c:161
#, c-format
-msgid "Could not parse object '%s'"
-msgstr "Не удалось разобрать объект «%s»"
+msgid "%lu year ago"
+msgid_plural "%lu years ago"
+msgstr[0] "%lu год назад"
+msgstr[1] "%lu года назад"
+msgstr[2] "%lu лет назад"
+msgstr[3] "%lu лет назад"
-#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788
-msgid "Unable to write index."
-msgstr "Не удается записать индекс."
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr "сбой чтения orderfile «%s»"
-#: notes-utils.c:41
-msgid "Cannot commit uninitialized/unreferenced notes tree"
-msgstr "Нельзя закоммитить неинициализированное или не имеющее ссылок дерево заметок"
+#: diffcore-rename.c:536
+msgid "Performing inexact rename detection"
+msgstr "Выполняется неточное определение переименования"
+
+#: diff.c:62
+#, c-format
+msgid "option '%s' requires a value"
+msgstr "параметр «%s» требует указания значения"
+
+#: diff.c:124
+#, c-format
+msgid " Failed to parse dirstat cut-off percentage '%s'\n"
+msgstr " Сбой разбора величины среза (cut-off) у dirstat «%s»\n"
-#: notes-utils.c:100
+#: diff.c:129
#, c-format
-msgid "Bad notes.rewriteMode value: '%s'"
-msgstr "Ð\9dепÑ\80авилÑ\8cное знаÑ\87ение notes.rewriteMode: «%s»"
+msgid " Unknown dirstat parameter '%s'\n"
+msgstr "Ð\9dеизвеÑ\81Ñ\82нÑ\8bй паÑ\80амеÑ\82Ñ\80 dirstat: «%s»\n"
-#: notes-utils.c:110
+#: diff.c:283
#, c-format
-msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
-msgstr "Ð\9eÑ\82каз в пеÑ\80езапиÑ\81и замеÑ\82ок в %s (за пÑ\80еделами refs/notes/)"
+msgid "Unknown value for 'diff.submodule' config variable: '%s'"
+msgstr "Ð\9dеизвеÑ\81Ñ\82ное знаÑ\87ениÑ\8f длÑ\8f пеÑ\80еменной «diff.submodule»: «%s»"
-#. TRANSLATORS: The first %s is the name of the
-#. environment variable, the second %s is its value
-#: notes-utils.c:137
+#: diff.c:346
#, c-format
-msgid "Bad %s value: '%s'"
-msgstr "Неправильное значение переменной %s: «%s»"
+msgid ""
+"Found errors in 'diff.dirstat' config variable:\n"
+"%s"
+msgstr "Найдены ошибки в переменной «diff.dirstat»:\n%s"
-#: object.c:242
+#: diff.c:3087
#, c-format
-msgid "unable to parse object: %s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\80азобÑ\80аÑ\82Ñ\8c обÑ\8aекÑ\82: %s"
+msgid "external diff died, stopping at %s"
+msgstr "кÑ\80иÑ\82иÑ\87еÑ\81каÑ\8f оÑ\88ибка пÑ\80и внеÑ\88нем Ñ\81Ñ\80авнении, оÑ\81Ñ\82анов на %s"
-#: parse-options.c:572
-msgid "..."
-msgstr "…"
+#: diff.c:3412
+msgid "--name-only, --name-status, --check and -s are mutually exclusive"
+msgstr "--name-only, --name-status, --check и -s нельзя использовать одновременно"
-#: parse-options.c:590
-#, c-format
-msgid "usage: %s"
-msgstr "использование: %s"
+#: diff.c:3502
+msgid "--follow requires exactly one pathspec"
+msgstr "--follow требует ровно одной спецификации пути"
-#. TRANSLATORS: the colon here should align with the
-#. one in "usage: %s" translation
-#: parse-options.c:594
+#: diff.c:3665
#, c-format
-msgid " or: %s"
-msgstr " или: %s"
+msgid ""
+"Failed to parse --dirstat/-X option parameter:\n"
+"%s"
+msgstr "Сбой разбора параметра опции --dirstat/-X :\n%s"
-#: parse-options.c:597
+#: diff.c:3679
#, c-format
-msgid " %s"
-msgstr " %s"
+msgid "Failed to parse --submodule option parameter: '%s'"
+msgstr "Сбой разбора параметра опции --submodule: «%s»"
-#: parse-options.c:631
-msgid "-NUM"
-msgstr "-КОЛИЧЕСТВО"
+#: diff.c:4700
+msgid "inexact rename detection was skipped due to too many files."
+msgstr "неточное определение переименования было пропущено из-за слишком большого количества файлов."
-#: parse-options-cb.c:108
-#, c-format
-msgid "malformed object name '%s'"
-msgstr "Неправильное имя объекта «%s»"
+#: diff.c:4703
+msgid "only found copies from modified paths due to too many files."
+msgstr "найдены только копии из измененных путей из-за слишком большого количества файлов."
-#: path.c:798
+#: diff.c:4706
#, c-format
-msgid "Could not make %s writable by group"
-msgstr "Не удалось предоставить доступ к %s на запись"
+msgid ""
+"you may want to set your %s variable to at least %d and retry the command."
+msgstr "возможно вы захотите установить переменную %s в как минимум значение %d и повторить вызов команды."
-#: pathspec.c:133
-msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
-msgstr "глобалÑ\8cнÑ\8bе опÑ\86ии Ñ\81пеÑ\86иÑ\84икаÑ\86ии пÑ\83Ñ\82и «glob» и «noglob» нелÑ\8cзÑ\8f иÑ\81полÑ\8cзоваÑ\82Ñ\8c одновÑ\80еменно"
+#: dir.c:1866
+msgid "failed to get kernel name and information"
+msgstr "не Ñ\83далоÑ\81Ñ\8c полÑ\83Ñ\87иÑ\82Ñ\8c имÑ\8f Ñ\8fдÑ\80а и инÑ\84оÑ\80маÑ\86иÑ\8e"
-#: pathspec.c:143
-msgid ""
-"global 'literal' pathspec setting is incompatible with all other global "
-"pathspec settings"
-msgstr "глобальная опция спецификации пути «literal» не совместима с другими глобальными спецификаторами доступа"
+#: dir.c:1985
+msgid "Untracked cache is disabled on this system or location."
+msgstr "Кэш неотслеживаемых файлов отключен на этой системе или в этом месте."
-#: pathspec.c:177
-msgid "invalid parameter for pathspec magic 'prefix'"
-msgstr "неправильный параметр для магического слова «prefix» в спецификации пути "
+#: fetch-pack.c:213
+msgid "git fetch-pack: expected shallow list"
+msgstr "git fetch-pack: ожидается передача списка для получение части"
-#: pathspec.c:183
+#: fetch-pack.c:225
+msgid "git fetch-pack: expected ACK/NAK, got EOF"
+msgstr "git fetch-pack: ожидается ACK/NAK, а получено EOF"
+
+#: fetch-pack.c:243
#, c-format
-msgid "Invalid pathspec magic '%.*s' in '%s'"
-msgstr "неправильное магическое слово «%.*s» в спецификации пути «%s»"
+msgid "git fetch-pack: expected ACK/NAK, got '%s'"
+msgstr "git fetch-pack: ожидается ACK/NAK, а получено «%s»"
-#: pathspec.c:187
+#: fetch-pack.c:295
+msgid "--stateless-rpc requires multi_ack_detailed"
+msgstr "--stateless-rpc требует multi_ack_detailed"
+
+#: fetch-pack.c:381
#, c-format
-msgid "Missing ')' at the end of pathspec magic in '%s'"
-msgstr "Ð\9fÑ\80опÑ\83Ñ\89ено «)» в конÑ\86е магиÑ\87еÑ\81кого Ñ\81лова Ñ\81пеÑ\86иÑ\84икаÑ\86ии пÑ\83Ñ\82и «%s»"
+msgid "invalid shallow line: %s"
+msgstr "непÑ\80авилÑ\8cнаÑ\8f Ñ\81Ñ\82Ñ\80ока Ñ\87аÑ\81Ñ\82иÑ\87ного полÑ\83Ñ\87ениÑ\8f: %s"
-#: pathspec.c:205
+#: fetch-pack.c:387
#, c-format
-msgid "Unimplemented pathspec magic '%c' in '%s'"
-msgstr "Ð\9dеÑ\80еализованное магиÑ\87еÑ\81кое Ñ\81лово «%c» Ñ\81пеÑ\86иÑ\84икаÑ\86ии пÑ\83Ñ\82и «%s»"
+msgid "invalid unshallow line: %s"
+msgstr "непÑ\80авилÑ\8cнаÑ\8f Ñ\81Ñ\82Ñ\80ока полного полÑ\83Ñ\87ениÑ\8f: %s"
-#: pathspec.c:230
+#: fetch-pack.c:389
#, c-format
-msgid "%s: 'literal' and 'glob' are incompatible"
-msgstr "%s: «literal» и «glob» не совместимы"
+msgid "object not found: %s"
+msgstr "объект не найден: %s"
-#: pathspec.c:241
+#: fetch-pack.c:392
#, c-format
-msgid "%s: '%s' is outside repository"
-msgstr "%s: «%s» вне репозитория"
+msgid "error in object: %s"
+msgstr "ошибка в объекте: %s"
-#: pathspec.c:291
+#: fetch-pack.c:394
#, c-format
-msgid "Pathspec '%s' is in submodule '%.*s'"
-msgstr "Спецификация пути «%s» в подмодуле «%.*s»"
+msgid "no shallow found: %s"
+msgstr "частичный клон не найден: %s"
-#: pathspec.c:353
+#: fetch-pack.c:397
#, c-format
-msgid "%s: pathspec magic not supported by this command: %s"
-msgstr "%s: магические слова в спецификации пути не поддерживаются командой: %s"
+msgid "expected shallow/unshallow, got %s"
+msgstr "ожидалось shallow/unshallow, а получено %s"
-#: pathspec.c:433
+#: fetch-pack.c:436
#, c-format
-msgid "pathspec '%s' is beyond a symbolic link"
-msgstr "спецификация пути «%s» находится за символической ссылкой"
+msgid "got %s %d %s"
+msgstr "получено %s %d %s"
-#: pathspec.c:442
-msgid ""
-"There is nothing to exclude from by :(exclude) patterns.\n"
-"Perhaps you forgot to add either ':/' or '.' ?"
-msgstr "Не указан шаблон для исключения с помощью :(exclude).\nВозможно, вы забыли «:/» или «.» ?"
+#: fetch-pack.c:450
+#, c-format
+msgid "invalid commit %s"
+msgstr "недопустимый коммит %s"
-#: pretty.c:973
-msgid "unable to parse --pretty format"
-msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\80азобÑ\80аÑ\82Ñ\8c Ñ\84оÑ\80маÑ\82 длÑ\8f --pretty"
+#: fetch-pack.c:483
+msgid "giving up"
+msgstr "оÑ\81Ñ\82анавливаÑ\8e далÑ\8cнейÑ\88ие попÑ\8bÑ\82ки"
-#: progress.c:235
+#: fetch-pack.c:493 progress.c:235
msgid "done"
msgstr "готово"
-#: read-cache.c:1281
+#: fetch-pack.c:505
#, c-format
-msgid ""
-"index.version set, but the value is invalid.\n"
-"Using version %i"
-msgstr "index.version указан, но значение недействительное.\nИспользую версию %i"
+msgid "got %s (%d) %s"
+msgstr "получено %s (%d) %s"
-#: read-cache.c:1291
+#: fetch-pack.c:551
#, c-format
-msgid ""
-"GIT_INDEX_VERSION set, but the value is invalid.\n"
-"Using version %i"
-msgstr "GIT_INDEX_VERSION указан, но значение недействительное.\nИспользую версию %i"
+msgid "Marking %s as complete"
+msgstr "Помечаю %s как завершенный"
-#: refs.c:551 builtin/merge.c:840
+#: fetch-pack.c:697
#, c-format
-msgid "Could not open '%s' for writing"
-msgstr "Не удалось открыть «%s» для записи"
+msgid "already have %s (%s)"
+msgstr "уже есть %s (%s)"
-#: refs/files-backend.c:2534
-#, c-format
-msgid "could not delete reference %s: %s"
-msgstr "не удалось удалить ссылку %s: %s"
+#: fetch-pack.c:735
+msgid "fetch-pack: unable to fork off sideband demultiplexer"
+msgstr "fetch-pack: не удалось запустить программу разбора данных"
-#: refs/files-backend.c:2537
-#, c-format
-msgid "could not delete references: %s"
-msgstr "не удалось удалить ссылки: %s"
+#: fetch-pack.c:743
+msgid "protocol error: bad pack header"
+msgstr "ошибка протокола: неправильный заголовок потока"
-#: refs/files-backend.c:2546
+#: fetch-pack.c:799
#, c-format
-msgid "could not remove reference %s"
-msgstr "не удалось удалить ссылки %s"
+msgid "fetch-pack: unable to fork off %s"
+msgstr "fetch-pack: не удалось запустить программу %s"
-#: ref-filter.c:55
+#: fetch-pack.c:815
#, c-format
-msgid "expected format: %%(color:<color>)"
-msgstr "ожидаемый формат: %%(color:<color>)"
+msgid "%s failed"
+msgstr "%s завершен с ошибкой"
-#: ref-filter.c:57
-#, c-format
-msgid "unrecognized color: %%(color:%s)"
-msgstr "неопознанный цвет: %%(color:%s)"
+#: fetch-pack.c:817
+msgid "error in sideband demultiplexer"
+msgstr "произошла ошибка в программе разбора данных"
-#: ref-filter.c:71
+#: fetch-pack.c:844
+msgid "Server does not support shallow clients"
+msgstr "Сервер не поддерживает клиентов с частичным клонированием"
+
+#: fetch-pack.c:848
+msgid "Server supports multi_ack_detailed"
+msgstr "Сервер поддерживает multi_ack_detailed"
+
+#: fetch-pack.c:851
+msgid "Server supports no-done"
+msgstr "Сервер поддерживает no-done"
+
+#: fetch-pack.c:857
+msgid "Server supports multi_ack"
+msgstr "Сервер поддерживает multi_ack"
+
+#: fetch-pack.c:861
+msgid "Server supports side-band-64k"
+msgstr "Сервер поддерживает side-band-64k"
+
+#: fetch-pack.c:865
+msgid "Server supports side-band"
+msgstr "Сервер поддерживает side-band"
+
+#: fetch-pack.c:869
+msgid "Server supports allow-tip-sha1-in-want"
+msgstr "Сервер поддерживает allow-tip-sha1-in-want"
+
+#: fetch-pack.c:873
+msgid "Server supports allow-reachable-sha1-in-want"
+msgstr "Сервер поддерживает allow-reachable-sha1-in-want"
+
+#: fetch-pack.c:883
+msgid "Server supports ofs-delta"
+msgstr "Сервер поддерживает ofs-delta"
+
+#: fetch-pack.c:890
#, c-format
-msgid "unrecognized format: %%(%s)"
-msgstr "неопознаннÑ\8bй Ñ\84оÑ\80маÑ\82: %%(%s)"
+msgid "Server version is %.*s"
+msgstr "Ð\92еÑ\80Ñ\81иÑ\8f Ñ\81еÑ\80веÑ\80а %.*s"
-#: ref-filter.c:77
+#: fetch-pack.c:896
+msgid "Server does not support --shallow-since"
+msgstr "Сервер не поддерживает --shallow-since"
+
+#: fetch-pack.c:900
+msgid "Server does not support --shallow-exclude"
+msgstr "Сервер не поддерживает --shallow-exclude"
+
+#: fetch-pack.c:902
+msgid "Server does not support --deepen"
+msgstr "Сервер не поддерживает --deepen"
+
+#: fetch-pack.c:913
+msgid "no common commits"
+msgstr "не общих коммитов"
+
+#: fetch-pack.c:925
+msgid "git fetch-pack: fetch failed."
+msgstr "git fetch-pack: ошибка при получении данных."
+
+#: fetch-pack.c:1087
+msgid "no matching remote head"
+msgstr "нет соотвествующего внешнего указателя на ветку"
+
+#: gpg-interface.c:185
+msgid "gpg failed to sign the data"
+msgstr "gpg не удалось подписать данные"
+
+#: gpg-interface.c:215
+msgid "could not create temporary file"
+msgstr "не удалось создать временный файл"
+
+#: gpg-interface.c:217
#, c-format
-msgid "%%(body) does not take arguments"
-msgstr "%%(body) не принимает аргументов"
+msgid "failed writing detached signature to '%s'"
+msgstr "сбой записи отсоединенной подписи в «%s»"
-#: ref-filter.c:84
+#: grep.c:1782
#, c-format
-msgid "%%(subject) does not take arguments"
-msgstr "%%(subject) не принимает аргументов"
+msgid "'%s': unable to read %s"
+msgstr "«%s»: не удалось прочесть %s"
-#: ref-filter.c:101
+#: grep.c:1799 builtin/clone.c:381 builtin/diff.c:84 builtin/rm.c:155
#, c-format
-msgid "positive value expected contents:lines=%s"
-msgstr "положиÑ\82елÑ\8cное знаÑ\87ение ожидаеÑ\82 Ñ\81одеÑ\80жимое:lines=%s"
+msgid "failed to stat '%s'"
+msgstr "не Ñ\83далоÑ\81Ñ\8c вÑ\8bполниÑ\82Ñ\8c stat «%s»"
-#: ref-filter.c:103
+#: grep.c:1810
#, c-format
-msgid "unrecognized %%(contents) argument: %s"
-msgstr "неопознанный аргумент %%(contents): %s"
+msgid "'%s': short read"
+msgstr "«%s»: слишком мало данных прочитано"
-#: ref-filter.c:113
+#: help.c:203
#, c-format
-msgid "unrecognized %%(objectname) argument: %s"
-msgstr "неопознаннÑ\8bй аÑ\80гÑ\83менÑ\82 %%(objectname): %s"
+msgid "available git commands in '%s'"
+msgstr "доÑ\81Ñ\82Ñ\83пнÑ\8bе командÑ\8b git в «%s»"
-#: ref-filter.c:135
+#: help.c:210
+msgid "git commands available from elsewhere on your $PATH"
+msgstr "команды git, доступные в других местах вашего $PATH"
+
+#: help.c:241
+msgid "These are common Git commands used in various situations:"
+msgstr "Стандартные команды Git используемые в различных ситуациях:"
+
+#: help.c:306
#, c-format
-msgid "expected format: %%(align:<width>,<position>)"
-msgstr "ожидаемый формат: %%(align:<width>,<position>)"
+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, но нам не удалось ее запустить. Возможно, git-%s не работает?"
-#: ref-filter.c:147
+#: help.c:361
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr "Ой-ёй! Ваша система не сообщает ни о каких командах Git вообще."
+
+#: help.c:383
#, c-format
-msgid "unrecognized position:%s"
-msgstr "неопознанная позиция:%s"
+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»"
-#: ref-filter.c:151
+#: help.c:388
#, c-format
-msgid "unrecognized width:%s"
-msgstr "неопознанная ширина:%s"
+msgid "in %0.1f seconds automatically..."
+msgstr "через %0.1f секунд автоматически…"
-#: ref-filter.c:157
+#: help.c:395
#, c-format
-msgid "unrecognized %%(align) argument: %s"
-msgstr "неопознанный аргумент %%(align): %s"
+msgid "git: '%s' is not a git command. See 'git --help'."
+msgstr "git: «%s» не является командой git. Смотрите «git --help»."
-#: ref-filter.c:161
+#: help.c:399 help.c:465
+msgid ""
+"\n"
+"Did you mean this?"
+msgid_plural ""
+"\n"
+"Did you mean one of these?"
+msgstr[0] "\nВозможно, вы имели в виду это?"
+msgstr[1] "\nВозможно, вы имели в виду что-то из этого?"
+msgstr[2] "\nВозможно, вы имели в виду что-то из этого?"
+msgstr[3] "\nВозможно, вы имели в виду что-то из этого?"
+
+#: help.c:461
#, c-format
-msgid "positive width expected with the %%(align) atom"
-msgstr "ожидается положительная ширина с указанием частицы %%(align)"
+msgid "%s: %s - %s"
+msgstr "%s: %s — %s"
-#: ref-filter.c:244
+#: ident.c:334
+msgid ""
+"\n"
+"*** Please tell me who you are.\n"
+"\n"
+"Run\n"
+"\n"
+" git config --global user.email \"you@example.com\"\n"
+" git config --global user.name \"Your Name\"\n"
+"\n"
+"to set your account's default identity.\n"
+"Omit --global to set the identity only in this repository.\n"
+"\n"
+msgstr "\n*** Пожалуйста, скажите мне кто вы есть.\n\nЗапустите\n\n git config --global user.email \"you@example.com\"\n git config --global user.name \"Ваше Имя\"\n\nдля указания идентификационных данных аккаунта по умолчанию.\nПропустите параметр --global для указания данных только для этого репозитория.\n\n"
+
+#: lockfile.c:152
#, c-format
-msgid "malformed field name: %.*s"
-msgstr "неправильное имя поля: %.*s"
+msgid ""
+"Unable to create '%s.lock': %s.\n"
+"\n"
+"Another git process seems to be running in this repository, e.g.\n"
+"an editor opened by 'git commit'. Please make sure all processes\n"
+"are terminated then try again. If it still fails, a git process\n"
+"may have crashed in this repository earlier:\n"
+"remove the file manually to continue."
+msgstr "Не удалось создать «%s.lock»: %s.\n\nПохоже, что другой процесс git запущен в этом репозитории,\nнапример редактор открыт из «git commit». Пожалуйста, убедитесь,\nчто все процессы были завершены и потом попробуйте снова.\nЕсли это не поможет, то возможно процесс git был ранее завершен\nс ошибкой в этом репозитории: \nудалите файл вручную для продолжения."
-#: ref-filter.c:270
+#: lockfile.c:160
#, c-format
-msgid "unknown field name: %.*s"
-msgstr "неизвестное имя поля: %.*s"
+msgid "Unable to create '%s.lock': %s"
+msgstr "Не удалось создать «%s.lock»: %s"
+
+#: merge.c:41
+msgid "failed to read the cache"
+msgstr "сбой чтения кэша"
-#: ref-filter.c:372
-#, c-format
-msgid "format: %%(end) atom used without corresponding atom"
-msgstr "формат: частица %%(end) использована без соответствующей частицы"
+#: merge.c:96 builtin/am.c:2000 builtin/am.c:2035 builtin/checkout.c:374
+#: builtin/checkout.c:588 builtin/clone.c:731
+msgid "unable to write new index file"
+msgstr "не удалось записать новый файл индекса"
-#: ref-filter.c:424
+#: merge-recursive.c:209
+msgid "(bad commit)\n"
+msgstr "(плохой коммит)\n"
+
+#: merge-recursive.c:231
#, c-format
-msgid "malformed format string %s"
-msgstr "неправильная строка формата %s"
+msgid "addinfo_cache failed for path '%s'"
+msgstr "сбой addinfo_cache для пути «%s»"
-#: ref-filter.c:878
-msgid ":strip= requires a positive integer argument"
-msgstr ":strip= требует наличия положительного целого аргумента"
+#: merge-recursive.c:301
+msgid "error building trees"
+msgstr "ошибка при построении деревьев"
-#: ref-filter.c:883
+#: merge-recursive.c:720
#, c-format
-msgid "ref '%s' does not have %ld components to :strip"
-msgstr "ссылка «%s» не содержит %ld компонент для :strip"
+msgid "failed to create path '%s'%s"
+msgstr "не удалось создать путь «%s»%s"
-#: ref-filter.c:1046
+#: merge-recursive.c:731
#, c-format
-msgid "unknown %.*s format %s"
-msgstr "неизвеÑ\81Ñ\82нÑ\8bй %.*s Ñ\84оÑ\80маÑ\82 %s"
+msgid "Removing %s to make room for subdirectory\n"
+msgstr "Удаление %s, Ñ\87Ñ\82обÑ\8b оÑ\81вободиÑ\82Ñ\8c меÑ\81Ñ\82о длÑ\8f подкаÑ\82алогов\n"
-#: ref-filter.c:1066 ref-filter.c:1097
-#, c-format
-msgid "missing object %s for %s"
-msgstr "не найден объект %s для %s"
+#: merge-recursive.c:745 merge-recursive.c:764
+msgid ": perhaps a D/F conflict?"
+msgstr ": возможно, конфликт каталогов/файлов?"
-#: ref-filter.c:1069 ref-filter.c:1100
+#: merge-recursive.c:754
#, c-format
-msgid "parse_object_buffer failed on %s for %s"
-msgstr "сбой при выполнении parse_object_buffer на %s для %s"
+msgid "refusing to lose untracked file at '%s'"
+msgstr "отказ потери неотслеживаемого файла в «%s»"
-#: ref-filter.c:1311
+#: merge-recursive.c:796 builtin/cat-file.c:34
#, c-format
-msgid "malformed object at '%s'"
-msgstr "Ð\9fовÑ\80еждÑ\91ннÑ\8bй обÑ\8aекÑ\82 «%s»"
+msgid "cannot read object %s '%s'"
+msgstr "невозможно пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c обÑ\8aекÑ\82 %s «%s»"
-#: ref-filter.c:1373
+#: merge-recursive.c:798
#, c-format
-msgid "ignoring ref with broken name %s"
-msgstr "игноÑ\80иÑ\80Ñ\83Ñ\8e Ñ\81Ñ\81Ñ\8bлкÑ\83 Ñ\81 непÑ\80авилÑ\8cнÑ\8bм именем %s"
+msgid "blob expected for %s '%s'"
+msgstr "ожидаеÑ\82Ñ\81Ñ\8f двоиÑ\87нÑ\8bй обÑ\8aекÑ\82 длÑ\8f %s «%s»"
-#: ref-filter.c:1378
+#: merge-recursive.c:822
#, c-format
-msgid "ignoring broken ref %s"
-msgstr "игноÑ\80иÑ\80Ñ\83Ñ\8e непÑ\80авилÑ\8cнÑ\83Ñ\8e Ñ\81Ñ\81Ñ\8bлкÑ\83 %s"
+msgid "failed to open '%s': %s"
+msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c «%s»: %s"
-#: ref-filter.c:1651
+#: merge-recursive.c:833
#, c-format
-msgid "format: %%(end) atom missing"
-msgstr "format: пропущена частица %%(end)"
+msgid "failed to symlink '%s': %s"
+msgstr "не удалось создать символьную ссылку «%s»: %s"
-#: ref-filter.c:1705
+#: merge-recursive.c:838
#, c-format
-msgid "malformed object name %s"
-msgstr "неправильное имя объекта %s"
+msgid "do not know what to do with %06o %s '%s'"
+msgstr "не понятно, что делать с %06o %s «%s»"
-#: remote.c:746
+#: merge-recursive.c:978
+msgid "Failed to execute internal merge"
+msgstr "Не удалось запустить внутреннее слияние"
+
+#: merge-recursive.c:982
#, c-format
-msgid "Cannot fetch both %s and %s to %s"
-msgstr "Нельзя извлечь одновременно %s и %s в %s"
+msgid "Unable to add %s to database"
+msgstr "Не удалось добавить %s в базу данных"
-#: remote.c:750
+#: merge-recursive.c:1081 merge-recursive.c:1095
#, c-format
-msgid "%s usually tracks %s, not %s"
-msgstr "%s обычно отслеживает %s, а не %s"
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree."
+msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и %s в %s. Версия %s из %s оставлена в дереве."
-#: remote.c:754
+#: merge-recursive.c:1087 merge-recursive.c:1100
#, c-format
-msgid "%s tracks both %s and %s"
-msgstr "%s отслеживает и %s и %s"
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree at %s."
+msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и %s в %s. Версия %s из %s оставлена в дереве на %s."
-#: remote.c:762
-msgid "Internal error"
-msgstr "Ð\92нÑ\83Ñ\82Ñ\80еннÑ\8fÑ\8f оÑ\88ибка"
+#: merge-recursive.c:1143
+msgid "rename"
+msgstr "пеÑ\80еименование"
-#: remote.c:1677 remote.c:1720
-msgid "HEAD does not point to a branch"
-msgstr "HEAD не указывает на ветку"
+#: merge-recursive.c:1143
+msgid "renamed"
+msgstr "переименовано"
-#: remote.c:1686
+#: merge-recursive.c:1200
#, c-format
-msgid "no such branch: '%s'"
-msgstr "нет такой ветки: «%s»"
+msgid "%s is a directory in %s adding as %s instead"
+msgstr "%s — это каталог в %s, добавляем как %s вместо этого"
-#: remote.c:1689
+#: merge-recursive.c:1225
#, c-format
-msgid "no upstream configured for branch '%s'"
-msgstr "вышестоящая ветка не настроена для ветки «%s»"
+msgid ""
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
+"\"%s\"->\"%s\" in \"%s\"%s"
+msgstr "КОНФЛИКТ (переименование/переименование): Переименование «%s»→«%s» в ветке «%s» и переименование «%s»→«%s» в ветке «%s»%s"
-#: remote.c:1695
-#, c-format
-msgid "upstream branch '%s' not stored as a remote-tracking branch"
-msgstr "вышестоящая ветка «%s» не сохранена как отслеживаемая ветка"
+#: merge-recursive.c:1230
+msgid " (left unresolved)"
+msgstr " (оставлено неразрешенным)"
-#: remote.c:1710
+#: merge-recursive.c:1292
#, c-format
-msgid "push destination '%s' on remote '%s' has no local tracking branch"
-msgstr "назнаÑ\87ение длÑ\8f оÑ\82пÑ\80авки «%s» на внеÑ\88нем Ñ\81еÑ\80веÑ\80е «%s» не имееÑ\82 локалÑ\8cной оÑ\82Ñ\81леживаемой веÑ\82ки"
+msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
+msgstr "Ð\9aÐ\9eÐ\9dФÐ\9bÐ\98Ð\9aТ (пеÑ\80еименование/пеÑ\80еименование): Ð\9fеÑ\80еименование «%s»â\86\92«%s» в веÑ\82ке «%s» и пеÑ\80еименование «%s»â\86\92«%s» в веÑ\82ке «%s»"
-#: remote.c:1725
+#: merge-recursive.c:1325
#, c-format
-msgid "branch '%s' has no remote for pushing"
-msgstr "веÑ\82ка «%s» не имееÑ\82 внеÑ\88него Ñ\81еÑ\80веÑ\80а длÑ\8f оÑ\82пÑ\80авки"
+msgid "Renaming %s to %s and %s to %s instead"
+msgstr "Ð\9fеÑ\80еименовÑ\8bваÑ\8e %s в %s и %s в %s вмеÑ\81Ñ\82о Ñ\8dÑ\82ого"
-#: remote.c:1736
+#: merge-recursive.c:1531
#, c-format
-msgid "push refspecs for '%s' do not include '%s'"
-msgstr "спецификации пути для отправки «%s» не включают в себя «%s»"
-
-#: remote.c:1749
-msgid "push has no destination (push.default is 'nothing')"
-msgstr "отправка не имеет точки назначения (push.default выставлен в «nothing»)"
-
-#: remote.c:1771
-msgid "cannot resolve 'simple' push to a single destination"
-msgstr "не удалось выполнить «simple» отправку в единственную точку назначения"
+msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
+msgstr "КОНФЛИКТ (переименование/добавление): Переименование «%s»→«%s» в ветке «%s» и добавление «%s» в ветке «%s»"
-#: remote.c:2073
+#: merge-recursive.c:1546
#, c-format
-msgid "Your branch is based on '%s', but the upstream is gone.\n"
-msgstr "Ваша ветка базируется на «%s», но вышестоящий репозиторий исчез.\n"
-
-#: remote.c:2077
-msgid " (use \"git branch --unset-upstream\" to fixup)\n"
-msgstr "(для исправления запустите «git branch --unset-upstream»)\n"
+msgid "Adding merged %s"
+msgstr "Добавление слитого %s"
-#: remote.c:2080
+#: merge-recursive.c:1553 merge-recursive.c:1766
#, c-format
-msgid "Your branch is up-to-date with '%s'.\n"
-msgstr "Ð\92аÑ\88а веÑ\82ка обновлена в Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вии Ñ\81 «%s».\n"
+msgid "Adding as %s instead"
+msgstr "Ð\94обавление вмеÑ\81Ñ\82о Ñ\8dÑ\82ого как %s"
-#: remote.c:2084
+#: merge-recursive.c:1610
#, 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"
-msgstr[2] "Ваша ветка опережает «%s» на %d коммитов.\n"
-msgstr[3] "Ваша ветка опережает «%s» на %d коммитов.\n"
-
-#: remote.c:2090
-msgid " (use \"git push\" to publish your local commits)\n"
-msgstr " (используйте «git push», чтобы опубликовать ваши локальные коммиты)\n"
+msgid "cannot read object %s"
+msgstr "невозможно прочитать объект «%s»"
-#: remote.c:2093
+#: merge-recursive.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] "Ваша ветка отстает от «%s» на %d коммит и может быть перемотана вперед.\n"
-msgstr[1] "Ваша ветка отстает от «%s» на %d коммита и может быть перемотана вперед.\n"
-msgstr[2] "Ваша ветка отстает от «%s» на %d коммитов и может быть перемотана вперед.\n"
-msgstr[3] "Ваша ветка отстает от «%s» на %d коммитов и может быть перемотана вперед.\n"
+msgid "object %s is not a blob"
+msgstr "объект %s не является двоичным объектом"
-#: remote.c:2101
-msgid " (use \"git pull\" to update your local branch)\n"
-msgstr " (используйте «git pull», чтобы обновить вашу локальную ветку)\n"
+#: merge-recursive.c:1666
+msgid "modify"
+msgstr "изменение"
-#: remote.c:2104
-#, 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"
-msgstr[2] "Ваша ветка и «%s» разделились\nи теперь имеют %d и %d разных коммитов в каждой соответственно.\n"
-msgstr[3] "Ваша ветка и «%s» разделились\nи теперь имеют %d и %d разных коммитов в каждой соответственно.\n"
+#: merge-recursive.c:1666
+msgid "modified"
+msgstr "изменено"
-#: remote.c:2114
-msgid " (use \"git pull\" to merge the remote branch into yours)\n"
-msgstr " (используйте «git pull», чтобы слить внешнюю ветку в вашу)\n"
+#: merge-recursive.c:1676
+msgid "content"
+msgstr "содержимое"
-#: revision.c:2132
-msgid "your current branch appears to be broken"
-msgstr "поÑ\85оже, ваÑ\88а Ñ\82екÑ\83Ñ\89аÑ\8f веÑ\82ка повÑ\80еждена"
+#: merge-recursive.c:1683
+msgid "add/add"
+msgstr "добавление/добавление"
-#: revision.c:2135
+#: merge-recursive.c:1718
#, c-format
-msgid "your current branch '%s' does not have any commits yet"
-msgstr "ваша текущая ветка «%s» еще не содержит ни одного коммита"
-
-#: revision.c:2329
-msgid "--first-parent is incompatible with --bisect"
-msgstr "опцию --first-parent нельзя использовать одновременно с --bisect"
-
-#: run-command.c:92
-msgid "open /dev/null failed"
-msgstr "сбой открытия /dev/null"
+msgid "Skipped %s (merged same as existing)"
+msgstr "Пропуск %s (слиты одинаковые изменения как существующие)"
-#: run-command.c:94
+#: merge-recursive.c:1732
#, c-format
-msgid "dup2(%d,%d) failed"
-msgstr "dup2(%d,%d) сбой"
-
-#: send-pack.c:298
-msgid "failed to sign the push certificate"
-msgstr "сбой подписания сертификата отправки"
-
-#: send-pack.c:411
-msgid "the receiving end does not support --signed push"
-msgstr "принимающая сторона не поддерживает отправку с опцией --signed"
+msgid "Auto-merging %s"
+msgstr "Автослияние %s"
-#: send-pack.c:413
-msgid ""
-"not sending a push certificate since the receiving end does not support "
-"--signed push"
-msgstr "не отправляем сертификат для отправки, так как принимающая сторона не поддерживает отправку с опцией --signed"
+#: merge-recursive.c:1736 git-submodule.sh:924
+msgid "submodule"
+msgstr "подмодуль"
-#: send-pack.c:425
-msgid "the receiving end does not support --atomic push"
-msgstr "принимающая сторона не поддерживает отправку с опцией --atomic"
+#: merge-recursive.c:1737
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "КОНФЛИКТ (%s): Конфликт слияния в %s"
-#: send-pack.c:430
-msgid "the receiving end does not support push options"
-msgstr "принимающая сторона не поддерживает отправку с опциями"
+#: merge-recursive.c:1831
+#, c-format
+msgid "Removing %s"
+msgstr "Удаление %s"
-#: sequencer.c:174
-msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'"
-msgstr "после разрешения конфликтов, пометьте исправленные пути\nс помощью «git add <пути>» или «git rm <пути>»"
+#: merge-recursive.c:1857
+msgid "file/directory"
+msgstr "файл/каталог"
-#: sequencer.c:177
-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 "после разрешения конфликтов, пометьте исправленные пути\nс помощью «git add <пути>» или «git rm <пути>»\nи сделайте коммит с помощью «git commit»"
+#: merge-recursive.c:1863
+msgid "directory/file"
+msgstr "каталог/файл"
-#: sequencer.c:190 sequencer.c:841 sequencer.c:924
+#: merge-recursive.c:1868
#, c-format
-msgid "Could not write to %s"
-msgstr "Не удалось записать в %s"
+msgid ""
+"CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
+msgstr "КОНФЛИКТ (%s): Уже существует каталог с именем «%s» в «%s». Добавление «%s» как «%s»"
-#: sequencer.c:193 sequencer.c:843 sequencer.c:928
+#: merge-recursive.c:1877
#, c-format
-msgid "Error wrapping up %s."
-msgstr "Ð\9eÑ\88ибка обоÑ\80аÑ\87иваниÑ\8f %s."
+msgid "Adding %s"
+msgstr "Ð\94обавление %s"
-#: sequencer.c:208
-msgid "Your local changes would be overwritten by cherry-pick."
-msgstr "Ð\92аÑ\88и локалÑ\8cнÑ\8bе изменение бÑ\83дÑ\83Ñ\82 пеÑ\80езапиÑ\81анÑ\8b копией коммиÑ\82а."
+#: merge-recursive.c:1914
+msgid "Already up-to-date!"
+msgstr "Уже обновлено!"
-#: sequencer.c:210
-msgid "Your local changes would be overwritten by revert."
-msgstr "Ваши локальные изменения будут перезаписаны обратными изменениями коммита."
+#: merge-recursive.c:1923
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr "сбой слияния деревьев «%s» и «%s»"
-#: sequencer.c:213
-msgid "Commit your changes or stash them to proceed."
-msgstr "СделайÑ\82е коммиÑ\82 или Ñ\81пÑ\80Ñ\8fÑ\87Ñ\8cÑ\82е ваÑ\88и изменениÑ\8f длÑ\8f пÑ\80одолжениÑ\8f."
+#: merge-recursive.c:2006
+msgid "Merging:"
+msgstr "СлиÑ\8fние:"
-#: sequencer.c:228
+#: merge-recursive.c:2019
#, c-format
-msgid "%s: fast-forward"
-msgstr "%s: перемотка вперед"
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] "найден %u общий предок:"
+msgstr[1] "найдено %u общих предка:"
+msgstr[2] "найдено %u общих предков:"
+msgstr[3] "найдено %u общих предков:"
-#. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:303
-#, c-format
-msgid "%s: Unable to write new index file"
-msgstr "%s: Не удалось записать файл индекса"
+#: merge-recursive.c:2058
+msgid "merge returned no commit"
+msgstr "слияние не вернуло коммит"
-#: sequencer.c:321
-msgid "Could not resolve HEAD commit\n"
-msgstr "Не удалось определить HEAD коммит\n"
+#: merge-recursive.c:2121
+#, c-format
+msgid "Could not parse object '%s'"
+msgstr "Не удалось разобрать объект «%s»"
-#: sequencer.c:341
-msgid "Unable to update cache tree\n"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c обновиÑ\82Ñ\8c деÑ\80ево кÑ\8dÑ\88а\n"
+#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788
+msgid "Unable to write index."
+msgstr "Ð\9dе Ñ\83даеÑ\82Ñ\81Ñ\8f запиÑ\81аÑ\82Ñ\8c индекÑ\81."
-#: sequencer.c:393
+#: notes-merge.c:273
#, c-format
-msgid "Could not parse commit %s\n"
-msgstr "Не удалось разобрать коммит %s\n"
+msgid ""
+"You have not concluded your previous notes merge (%s exists).\n"
+"Please, use 'git notes merge --commit' or 'git notes merge --abort' to commit/abort the previous merge before you start a new notes merge."
+msgstr "Вы не закончили предыдущее слияние заметок (%s существует).\nЗапустите «git notes merge --commit» или «git notes merge --abort» для коммита или отмены предыдущего слияния и запуска нового слияния заметок."
-#: sequencer.c:398
+#: notes-merge.c:280
#, c-format
-msgid "Could not parse parent commit %s\n"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\80азобÑ\80аÑ\82Ñ\8c Ñ\80одиÑ\82елÑ\8cÑ\81кÑ\83Ñ\8e коммиÑ\82 %s\n"
+msgid "You have not concluded your notes merge (%s exists)."
+msgstr "Ð\92Ñ\8b не законÑ\87или пÑ\80едÑ\8bдÑ\83Ñ\89ее Ñ\81лиÑ\8fние замеÑ\82ок (%s Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82)."
-#: sequencer.c:463
-msgid "Your index file is unmerged."
-msgstr "Ð\92аÑ\88 Ñ\84айл индекÑ\81а не Ñ\81лиÑ\82."
+#: notes-utils.c:41
+msgid "Cannot commit uninitialized/unreferenced notes tree"
+msgstr "Ð\9dелÑ\8cзÑ\8f закоммиÑ\82иÑ\82Ñ\8c неиниÑ\86иализиÑ\80ованное или не имеÑ\8eÑ\89ее Ñ\81Ñ\81Ñ\8bлок деÑ\80ево замеÑ\82ок"
-#: sequencer.c:482
+#: notes-utils.c:100
#, c-format
-msgid "Commit %s is a merge but no -m option was given."
-msgstr "Ð\9aоммиÑ\82 %s â\80\94 Ñ\8dÑ\82о коммиÑ\82-Ñ\81лиÑ\8fние, но опÑ\86иÑ\8f -m не Ñ\83казана."
+msgid "Bad notes.rewriteMode value: '%s'"
+msgstr "Ð\9dепÑ\80авилÑ\8cное знаÑ\87ение notes.rewriteMode: «%s»"
-#: sequencer.c:490
+#: notes-utils.c:110
#, c-format
-msgid "Commit %s does not have parent %d"
-msgstr "У коммиÑ\82а %s неÑ\82 пÑ\80едка %d"
+msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
+msgstr "Ð\9eÑ\82каз в пеÑ\80езапиÑ\81и замеÑ\82ок в %s (за пÑ\80еделами refs/notes/)"
-#: sequencer.c:494
+#. TRANSLATORS: The first %s is the name of the
+#. environment variable, the second %s is its value
+#: notes-utils.c:137
#, c-format
-msgid "Mainline was specified but commit %s is not a merge."
-msgstr "Ð\9eÑ\81новнаÑ\8f веÑ\82ка Ñ\83казана, но коммиÑ\82 %s не Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ñ\81лиÑ\8fнием."
+msgid "Bad %s value: '%s'"
+msgstr "Ð\9dепÑ\80авилÑ\8cное знаÑ\87ение пеÑ\80еменной %s: «%s»"
-#. TRANSLATORS: The first %s will be "revert" or
-#. "cherry-pick", the second %s a SHA1
-#: sequencer.c:507
+#: object.c:242
#, c-format
-msgid "%s: cannot parse parent commit %s"
-msgstr "%s: не удалось разобрать родительский коммит для %s"
+msgid "unable to parse object: %s"
+msgstr "не удалось разобрать объект: %s"
+
+#: parse-options.c:572
+msgid "..."
+msgstr "…"
-#: sequencer.c:511
+#: parse-options.c:590
#, c-format
-msgid "Cannot get commit message for %s"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c полÑ\83Ñ\87иÑ\82Ñ\8c Ñ\81ообÑ\89ение коммиÑ\82а длÑ\8f %s"
+msgid "usage: %s"
+msgstr "иÑ\81полÑ\8cзование: %s"
-#: sequencer.c:597
+#. TRANSLATORS: the colon here should align with the
+#. one in "usage: %s" translation
+#: parse-options.c:594
#, c-format
-msgid "could not revert %s... %s"
-msgstr "не удалось обратить изменения коммита %s… %s"
+msgid " or: %s"
+msgstr " или: %s"
-#: sequencer.c:598
+#: parse-options.c:597
#, c-format
-msgid "could not apply %s... %s"
-msgstr "не удалось применить коммит %s… %s"
+msgid " %s"
+msgstr " %s"
-#: sequencer.c:633
-msgid "empty commit set passed"
-msgstr "передан пустой набор коммитов"
+#: parse-options.c:631
+msgid "-NUM"
+msgstr "-КОЛИЧЕСТВО"
-#: sequencer.c:641
+#: parse-options-cb.c:108
#, c-format
-msgid "git %s: failed to read the index"
-msgstr "git %s: сбой чтения индекса"
+msgid "malformed object name '%s'"
+msgstr "Неправильное имя объекта «%s»"
-#: sequencer.c:645
+#: path.c:826
#, c-format
-msgid "git %s: failed to refresh the index"
-msgstr "git %s: сбой обновления индекса"
-
-#: sequencer.c:705
-msgid "Cannot revert during another revert."
-msgstr "Нельзя обратить изменения коммита во время другого процесса обращения коммита."
+msgid "Could not make %s writable by group"
+msgstr "Не удалось предоставить доступ к %s на запись"
-#: sequencer.c:706
-msgid "Cannot revert during a cherry-pick."
-msgstr "Ð\9dелÑ\8cзÑ\8f обÑ\80аÑ\82иÑ\82Ñ\8c изменениÑ\8f коммиÑ\82а во вÑ\80емÑ\8f копиÑ\80ованиÑ\8f коммиÑ\82а."
+#: pathspec.c:133
+msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
+msgstr "глобалÑ\8cнÑ\8bе опÑ\86ии Ñ\81пеÑ\86иÑ\84икаÑ\86ии пÑ\83Ñ\82и «glob» и «noglob» нелÑ\8cзÑ\8f иÑ\81полÑ\8cзоваÑ\82Ñ\8c одновÑ\80еменно"
-#: sequencer.c:709
-msgid "Cannot cherry-pick during a revert."
-msgstr "Нельзя скопировать коммит во время процесса обращения коммита."
+#: pathspec.c:143
+msgid ""
+"global 'literal' pathspec setting is incompatible with all other global "
+"pathspec settings"
+msgstr "глобальная опция спецификации пути «literal» не совместима с другими глобальными спецификаторами доступа"
-#: sequencer.c:710
-msgid "Cannot cherry-pick during another cherry-pick."
-msgstr "Ð\9dелÑ\8cзÑ\8f Ñ\81копиÑ\80оваÑ\82Ñ\8c коммиÑ\82 во вÑ\80емÑ\8f дÑ\80Ñ\83гого пÑ\80оÑ\86еÑ\81Ñ\81а копиÑ\80ованиÑ\8f коммиÑ\82а."
+#: pathspec.c:177
+msgid "invalid parameter for pathspec magic 'prefix'"
+msgstr "непÑ\80авилÑ\8cнÑ\8bй паÑ\80амеÑ\82Ñ\80 длÑ\8f магиÑ\87еÑ\81кого Ñ\81лова «prefix» в Ñ\81пеÑ\86иÑ\84икаÑ\86ии пÑ\83Ñ\82и "
-#: sequencer.c:732
+#: pathspec.c:183
#, c-format
-msgid "Could not parse line %d."
-msgstr "Не удалось разобрать строку %d."
-
-#: sequencer.c:737
-msgid "No commits parsed."
-msgstr "Коммиты не разобраны."
+msgid "Invalid pathspec magic '%.*s' in '%s'"
+msgstr "неправильное магическое слово «%.*s» в спецификации пути «%s»"
-#: sequencer.c:749
+#: pathspec.c:187
#, c-format
-msgid "Could not open %s"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c %s"
+msgid "Missing ')' at the end of pathspec magic in '%s'"
+msgstr "Ð\9fÑ\80опÑ\83Ñ\89ено «)» в конÑ\86е магиÑ\87еÑ\81кого Ñ\81лова Ñ\81пеÑ\86иÑ\84икаÑ\86ии пÑ\83Ñ\82и «%s»"
-#: sequencer.c:753
+#: pathspec.c:205
#, c-format
-msgid "Could not read %s."
-msgstr "Не удалось прочитать %s."
+msgid "Unimplemented pathspec magic '%c' in '%s'"
+msgstr "Нереализованное магическое слово «%c» спецификации пути «%s»"
-#: sequencer.c:760
+#: pathspec.c:230
#, c-format
-msgid "Unusable instruction sheet: %s"
-msgstr "Непригодная для использования карта с инструкциями: %s"
+msgid "%s: 'literal' and 'glob' are incompatible"
+msgstr "%s: «literal» и «glob» не совместимы"
-#: sequencer.c:790
+#: pathspec.c:241
#, c-format
-msgid "Invalid key: %s"
-msgstr "Недействительный ключ: %s"
+msgid "%s: '%s' is outside repository"
+msgstr "%s: «%s» вне репозитория"
-#: sequencer.c:793 builtin/pull.c:50 builtin/pull.c:52
+#: pathspec.c:291
#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Ð\9dепÑ\80авилÑ\8cное знаÑ\87ение %s: %s"
+msgid "Pathspec '%s' is in submodule '%.*s'"
+msgstr "СпеÑ\86иÑ\84икаÑ\86иÑ\8f пÑ\83Ñ\82и «%s» в подмодÑ\83ле «%.*s»"
-#: sequencer.c:803
+#: pathspec.c:353
#, c-format
-msgid "Malformed options sheet: %s"
-msgstr "Повреждённая карта с опциями: %s"
-
-#: sequencer.c:822
-msgid "a cherry-pick or revert is already in progress"
-msgstr "копирование или обращение изменений коммита уже выполняются"
+msgid "%s: pathspec magic not supported by this command: %s"
+msgstr "%s: магические слова в спецификации пути не поддерживаются командой: %s"
-#: sequencer.c:823
-msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
-msgstr "попробуйте «git cherry-pick (--continue | --quit | --abort)»"
+#: pathspec.c:408
+msgid ""
+"empty strings as pathspecs will be made invalid in upcoming releases. please"
+" use . instead if you meant to match all paths"
+msgstr "пустые строки как спецификаторы пути будут сделаны недопустимыми в следующих версиях. используйте вместо них «.», что значит соотвествие всем путям"
-#: sequencer.c:827
+#: pathspec.c:440
#, c-format
-msgid "Could not create sequencer directory %s"
-msgstr "Не удалось создать каталог для указателя следования коммитов %s"
-
-#: sequencer.c:862 sequencer.c:998
-msgid "no cherry-pick or revert in progress"
-msgstr "копирование или обращение изменений коммита уже выполняются"
+msgid "pathspec '%s' is beyond a symbolic link"
+msgstr "спецификация пути «%s» находится за символической ссылкой"
-#: sequencer.c:864
-msgid "cannot resolve HEAD"
-msgstr "не удалось определить HEAD"
+#: pathspec.c:449
+msgid ""
+"There is nothing to exclude from by :(exclude) patterns.\n"
+"Perhaps you forgot to add either ':/' or '.' ?"
+msgstr "Не указан шаблон для исключения с помощью :(exclude).\nВозможно, вы забыли «:/» или «.» ?"
-#: sequencer.c:866 sequencer.c:900
-msgid "cannot abort from a branch yet to be born"
-msgstr "нельзя отменить изменения с ветки, которая еще не создана"
+#: pretty.c:971
+msgid "unable to parse --pretty format"
+msgstr "не удалось разобрать формат для --pretty"
-#: sequencer.c:886 builtin/fetch.c:724 builtin/fetch.c:970
+#: read-cache.c:1315
#, c-format
-msgid "cannot open %s"
-msgstr "не удалось открыть %s"
+msgid ""
+"index.version set, but the value is invalid.\n"
+"Using version %i"
+msgstr "index.version указан, но значение недействительное.\nИспользую версию %i"
-#: sequencer.c:888
+#: read-cache.c:1325
#, c-format
-msgid "cannot read %s: %s"
-msgstr "не удалось прочитать %s: %s"
+msgid ""
+"GIT_INDEX_VERSION set, but the value is invalid.\n"
+"Using version %i"
+msgstr "GIT_INDEX_VERSION указан, но значение недействительное.\nИспользую версию %i"
-#: sequencer.c:889
-msgid "unexpected end of file"
-msgstr "неожиданный конец файла"
+#: refs.c:576 builtin/merge.c:840
+#, c-format
+msgid "Could not open '%s' for writing"
+msgstr "Не удалось открыть «%s» для записи"
-#: sequencer.c:895
+#: refs/files-backend.c:2481
#, c-format
-msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
-msgstr "сохраненный файл с HEAD перед копированием коммита «%s» поврежден"
+msgid "could not delete reference %s: %s"
+msgstr "не удалось удалить ссылку %s: %s"
-#: sequencer.c:921
+#: refs/files-backend.c:2484
#, c-format
-msgid "Could not format %s."
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c оÑ\82Ñ\84оÑ\80маÑ\82иÑ\80оваÑ\82Ñ\8c %s."
+msgid "could not delete references: %s"
+msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\83далиÑ\82Ñ\8c Ñ\81Ñ\81Ñ\8bлки: %s"
-#: sequencer.c:1066
+#: refs/files-backend.c:2493
#, c-format
-msgid "%s: can't cherry-pick a %s"
-msgstr "%s: не удалось скопировать коммит %s"
+msgid "could not remove reference %s"
+msgstr "не удалось удалить ссылки %s"
-#: sequencer.c:1069
+#: ref-filter.c:55
#, c-format
-msgid "%s: bad revision"
-msgstr "%s: плохая редакция"
+msgid "expected format: %%(color:<color>)"
+msgstr "ожидаемый формат: %%(color:<color>)"
-#: sequencer.c:1102
-msgid "Can't revert as initial commit"
-msgstr "Нельзя обратить изменения изначального коммита"
+#: ref-filter.c:57
+#, c-format
+msgid "unrecognized color: %%(color:%s)"
+msgstr "неопознанный цвет: %%(color:%s)"
-#: setup.c:160
+#: ref-filter.c:71
#, c-format
-msgid ""
-"%s: no such path in the working tree.\n"
-"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
-msgstr "%s: нет такого пути в рабочем каталоге.\nИспользуйте «git <команда> -- <путь>…» для указания путей, которые не существуют локально."
+msgid "unrecognized format: %%(%s)"
+msgstr "неопознанный формат: %%(%s)"
-#: setup.c:173
+#: ref-filter.c:77
#, c-format
-msgid ""
-"ambiguous argument '%s': unknown revision or path not in the working tree.\n"
-"Use '--' to separate paths from revisions, like this:\n"
-"'git <command> [<revision>...] -- [<file>...]'"
-msgstr "неоднозначный аргумент «%s»: неизвестная редакция или не путь в рабочем каталоге.\nИспользуйте «--» для отделения путей от редакций, вот так:\n«git <команда> [<редакция>…] -- [<файл>…]»"
+msgid "%%(body) does not take arguments"
+msgstr "%%(body) не принимает аргументов"
-#: setup.c:223
+#: ref-filter.c:84
#, c-format
-msgid ""
-"ambiguous argument '%s': both revision and filename\n"
-"Use '--' to separate paths from revisions, like this:\n"
-"'git <command> [<revision>...] -- [<file>...]'"
-msgstr "неоднозначный аргумент «%s»: является одновременно и редакцией и именем файла.\nИспользуйте «--» для отделения путей от редакций, вот так:\n«git <команда> [<редакция>…] -- [<файл>…]»"
+msgid "%%(subject) does not take arguments"
+msgstr "%%(subject) не принимает аргументов"
-#: setup.c:248 builtin/apply.c:3362 builtin/apply.c:3373 builtin/apply.c:3419
+#: ref-filter.c:101
#, c-format
-msgid "failed to read %s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c %s"
+msgid "positive value expected contents:lines=%s"
+msgstr "положиÑ\82елÑ\8cное знаÑ\87ение ожидаеÑ\82 Ñ\81одеÑ\80жимое:lines=%s"
-#: setup.c:468
+#: ref-filter.c:103
#, c-format
-msgid "Expected git repo version <= %d, found %d"
-msgstr "Ð\9eжидаемаÑ\8f веÑ\80Ñ\81иÑ\8f git Ñ\80епозиÑ\82оÑ\80иÑ\8f <= %d, а обнаÑ\80Ñ\83жена %d"
+msgid "unrecognized %%(contents) argument: %s"
+msgstr "неопознаннÑ\8bй аÑ\80гÑ\83менÑ\82 %%(contents): %s"
-#: setup.c:476
-msgid "unknown repository extensions found:"
-msgstr "обнаружены неизвестные расширения репозитория:"
+#: ref-filter.c:113
+#, c-format
+msgid "unrecognized %%(objectname) argument: %s"
+msgstr "неопознанный аргумент %%(objectname): %s"
-#: setup.c:762
+#: ref-filter.c:135
#, c-format
-msgid "Not a git repository (or any of the parent directories): %s"
-msgstr "Ð\9dе найден git Ñ\80епозиÑ\82оий (или один из его каÑ\82алогов): %s"
+msgid "expected format: %%(align:<width>,<position>)"
+msgstr "ожидаемÑ\8bй Ñ\84оÑ\80маÑ\82: %%(align:<width>,<position>)"
-#: setup.c:764 setup.c:915 builtin/index-pack.c:1641
-msgid "Cannot come back to cwd"
-msgstr "Не удалось вернуться в текущий рабочий каталог"
+#: ref-filter.c:147
+#, c-format
+msgid "unrecognized position:%s"
+msgstr "неопознанная позиция:%s"
-#: setup.c:845
-msgid "Unable to read current working directory"
-msgstr "Не удалось прочитать текущий рабочий каталог"
+#: ref-filter.c:151
+#, c-format
+msgid "unrecognized width:%s"
+msgstr "неопознанная ширина:%s"
-#: setup.c:920
+#: ref-filter.c:157
#, c-format
-msgid ""
-"Not a git repository (or any parent up to mount point %s)\n"
-"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
-msgstr "Не найден git репозитоий (или один из его каталогов вплоть до точки монтирования %s)\nОстанавливаю поиск на границе файловой системы (так как GIT_DISCOVERY_ACROSS_FILESYSTEM не установлен)."
+msgid "unrecognized %%(align) argument: %s"
+msgstr "неопознанный аргумент %%(align): %s"
-#: setup.c:927
+#: ref-filter.c:161
#, c-format
-msgid "Cannot change to '%s/..'"
-msgstr "Ð\9fеÑ\80ейÑ\82и в «%s/..»"
+msgid "positive width expected with the %%(align) atom"
+msgstr "ожидаеÑ\82Ñ\81Ñ\8f положиÑ\82елÑ\8cнаÑ\8f Ñ\88иÑ\80ина Ñ\81 Ñ\83казанием Ñ\87аÑ\81Ñ\82иÑ\86Ñ\8b %%(align)"
-#: setup.c:989
+#: ref-filter.c:244
#, c-format
-msgid ""
-"Problem with core.sharedRepository filemode value (0%.3o).\n"
-"The owner of files must always have read and write permissions."
-msgstr "Проблема со значением режима доступа к файлу core.sharedRepository (0%.3o).\nВладелец файлов должен всегда иметь права на чтение и на запись."
+msgid "malformed field name: %.*s"
+msgstr "неправильное имя поля: %.*s"
-#: sha1_file.c:1046
-msgid "offset before end of packfile (broken .idx?)"
-msgstr "сдвиг до конца файла пакета (возможно, повреждён файл .idx?)"
+#: ref-filter.c:270
+#, c-format
+msgid "unknown field name: %.*s"
+msgstr "неизвестное имя поля: %.*s"
-#: sha1_file.c:2434
+#: ref-filter.c:372
#, c-format
-msgid "offset before start of pack index for %s (corrupt index?)"
-msgstr "Ñ\81двиг до наÑ\87ала индекÑ\81а пакеÑ\82а длÑ\8f %s (повÑ\80еждÑ\91н индекÑ\81?)"
+msgid "format: %%(end) atom used without corresponding atom"
+msgstr "Ñ\84оÑ\80маÑ\82: Ñ\87аÑ\81Ñ\82иÑ\86а %%(end) иÑ\81полÑ\8cзована без Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\89ей Ñ\87аÑ\81Ñ\82иÑ\86Ñ\8b"
-#: sha1_file.c:2438
+#: ref-filter.c:424
#, c-format
-msgid "offset beyond end of pack index for %s (truncated index?)"
-msgstr "сдвиг за пределами индекса пакета для %s (обрезан индекс?)"
+msgid "malformed format string %s"
+msgstr "неправильная строка формата %s"
-#: sha1_name.c:462
-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 "Обычно Git не создает ссылки, оканчивающиеся на 40 шестнадцатеричных\nсимволов, потому, что они будут игнорироваться, когда вы просто\nукажете это 40-символьное шестнадцатеричное число. Такие ссылки\nмогли быть созданы по ошибке. Например, с помощью:\n\n git checkout -b $br $(git rev-parse …)\n\n, если «$br» оказался пустым, то ссылка с 40-символьным\nшестнадцатеричным числом будет создана. Пожалуйста, просмотрите эти\nссылки и, возможно, удалите их. Вы можете отключить это сообщение\nзапустив «git config advice.objectNameWarning false»"
+#: ref-filter.c:878
+msgid ":strip= requires a positive integer argument"
+msgstr ":strip= требует наличия положительного целого аргумента"
-#: submodule.c:64 submodule.c:98
-msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
-msgstr "Не удалось изменить не слитый .gitmodules, сначала разрешите конфликты"
+#: ref-filter.c:883
+#, c-format
+msgid "ref '%s' does not have %ld components to :strip"
+msgstr "ссылка «%s» не содержит %ld компонент для :strip"
-#: submodule.c:68 submodule.c:102
+#: ref-filter.c:1046
#, c-format
-msgid "Could not find section in .gitmodules where path=%s"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c найÑ\82и Ñ\80аздел в .gitmodules, где пÑ\83Ñ\82Ñ\8c Ñ\80авен %s"
+msgid "unknown %.*s format %s"
+msgstr "неизвеÑ\81Ñ\82нÑ\8bй %.*s Ñ\84оÑ\80маÑ\82 %s"
-#: submodule.c:76
+#: ref-filter.c:1066 ref-filter.c:1097
#, c-format
-msgid "Could not update .gitmodules entry %s"
-msgstr " Не удалось обновить .gitmodules запись %s"
+msgid "missing object %s for %s"
+msgstr "не найден объект %s для %s"
-#: submodule.c:109
+#: ref-filter.c:1069 ref-filter.c:1100
#, c-format
-msgid "Could not remove .gitmodules entry for %s"
-msgstr "Не удалось удалить запись в .gitmodules для %s"
+msgid "parse_object_buffer failed on %s for %s"
+msgstr "сбой при выполнении parse_object_buffer на %s для %s"
-#: submodule.c:120
-msgid "staging updated .gitmodules failed"
-msgstr "сбой индексирования обновленного .gitmodules"
+#: ref-filter.c:1311
+#, c-format
+msgid "malformed object at '%s'"
+msgstr "Повреждённый объект «%s»"
-#: submodule.c:177
-msgid "negative values not allowed for submodule.fetchJobs"
-msgstr "нельзя использовать отприцательные значения для submodule.fetchJobs"
+#: ref-filter.c:1373
+#, c-format
+msgid "ignoring ref with broken name %s"
+msgstr "игнорирую ссылку с неправильным именем %s"
-#: submodule-config.c:358
+#: ref-filter.c:1378
#, c-format
-msgid "invalid value for %s"
-msgstr "непÑ\80авилÑ\8cное знаÑ\87ение %s"
+msgid "ignoring broken ref %s"
+msgstr "игноÑ\80иÑ\80Ñ\83Ñ\8e непÑ\80авилÑ\8cнÑ\83Ñ\8e Ñ\81Ñ\81Ñ\8bлкÑ\83 %s"
-#: trailer.c:237
+#: ref-filter.c:1633
#, c-format
-msgid "running trailer command '%s' failed"
-msgstr "сбой при запуске команды завершителя «%s»"
+msgid "format: %%(end) atom missing"
+msgstr "format: пропущена частица %%(end)"
-#: trailer.c:492 trailer.c:496 trailer.c:500 trailer.c:554 trailer.c:558
-#: trailer.c:562
+#: ref-filter.c:1687
#, c-format
-msgid "unknown value '%s' for key '%s'"
-msgstr "неизвеÑ\81Ñ\82ное знаÑ\87ение «%s» длÑ\8f клÑ\8eÑ\87а «%s»"
+msgid "malformed object name %s"
+msgstr "непÑ\80авилÑ\8cное имÑ\8f обÑ\8aекÑ\82а %s"
-#: trailer.c:544 trailer.c:549 builtin/remote.c:289
+#: remote.c:746
#, c-format
-msgid "more than one %s"
-msgstr "болÑ\8cÑ\88е одного %s"
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "Ð\9dелÑ\8cзÑ\8f извлеÑ\87Ñ\8c одновÑ\80еменно %s и %s в %s"
-#: trailer.c:582
+#: remote.c:750
#, c-format
-msgid "empty trailer token in trailer '%.*s'"
-msgstr "пустая последняя лексема в завершителе «%.*s»"
+msgid "%s usually tracks %s, not %s"
+msgstr "%s обычно отслеживает %s, а не %s"
-#: trailer.c:702
+#: remote.c:754
#, c-format
-msgid "could not read input file '%s'"
-msgstr "не удалось прочитать входной файл «%s»"
+msgid "%s tracks both %s and %s"
+msgstr "%s отслеживает и %s и %s"
-#: trailer.c:705
-msgid "could not read from stdin"
-msgstr "не Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c из Ñ\81Ñ\82андаÑ\80Ñ\82ного ввода"
+#: remote.c:762
+msgid "Internal error"
+msgstr "Ð\92нÑ\83Ñ\82Ñ\80еннÑ\8fÑ\8f оÑ\88ибка"
-#: trailer.c:857 builtin/am.c:42
-#, c-format
-msgid "could not stat %s"
-msgstr "не удалось выполнить stat для %s"
+#: remote.c:1677 remote.c:1720
+msgid "HEAD does not point to a branch"
+msgstr "HEAD не указывает на ветку"
-#: trailer.c:859
+#: remote.c:1686
#, c-format
-msgid "file %s is not a regular file"
-msgstr "файл %s не является обычным файлом"
+msgid "no such branch: '%s'"
+msgstr "нет такой ветки: «%s»"
-#: trailer.c:861
+#: remote.c:1689
#, c-format
-msgid "file %s is not writable by user"
-msgstr "файл %s не доступен на запись пользователю"
-
-#: trailer.c:873
-msgid "could not open temporary file"
-msgstr "не удалось создать временный файл"
+msgid "no upstream configured for branch '%s'"
+msgstr "вышестоящая ветка не настроена для ветки «%s»"
-#: trailer.c:912
+#: remote.c:1695
#, c-format
-msgid "could not rename temporary file to %s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c пеÑ\80еименоваÑ\82Ñ\8c вÑ\80еменнÑ\8bй Ñ\84айл в %s"
+msgid "upstream branch '%s' not stored as a remote-tracking branch"
+msgstr "вÑ\8bÑ\88еÑ\81Ñ\82оÑ\8fÑ\89аÑ\8f веÑ\82ка «%s» не Ñ\81оÑ\85Ñ\80анена как оÑ\82Ñ\81леживаемаÑ\8f веÑ\82ка"
-#: transport.c:62
+#: remote.c:1710
#, c-format
-msgid "Would set upstream of '%s' to '%s' of '%s'\n"
-msgstr "Ð\91Ñ\83деÑ\82 Ñ\83Ñ\81Ñ\82ановлен вÑ\8bÑ\88еÑ\81Ñ\82оÑ\8fÑ\89ий Ñ\80епозиÑ\82оÑ\80ий длÑ\8f «%s» на «%s» Ñ\81 «%s»\n"
+msgid "push destination '%s' on remote '%s' has no local tracking branch"
+msgstr "назнаÑ\87ение длÑ\8f оÑ\82пÑ\80авки «%s» на внеÑ\88нем Ñ\81еÑ\80веÑ\80е «%s» не имееÑ\82 локалÑ\8cной оÑ\82Ñ\81леживаемой веÑ\82ки"
-#: transport.c:151
+#: remote.c:1725
#, c-format
-msgid "transport: invalid depth option '%s'"
-msgstr "транспорт: неправильный параметр глубины «%s»"
+msgid "branch '%s' has no remote for pushing"
+msgstr "ветка «%s» не имеет внешнего сервера для отправки"
-#: transport.c:771
+#: remote.c:1736
#, c-format
-msgid ""
-"The following submodule paths contain changes that can\n"
-"not be found on any remote:\n"
-msgstr "Подмодули по указанным путям содержат изменения, которые не найдены ни на одном из внешних репозиториев:\n"
+msgid "push refspecs for '%s' do not include '%s'"
+msgstr "спецификации пути для отправки «%s» не включают в себя «%s»"
+
+#: remote.c:1749
+msgid "push has no destination (push.default is 'nothing')"
+msgstr "отправка не имеет точки назначения (push.default выставлен в «nothing»)"
+
+#: remote.c:1771
+msgid "cannot resolve 'simple' push to a single destination"
+msgstr "не удалось выполнить «simple» отправку в единственную точку назначения"
-#: transport.c:775
+#: remote.c:2073
#, c-format
-msgid ""
-"\n"
-"Please try\n"
-"\n"
-"\tgit push --recurse-submodules=on-demand\n"
-"\n"
-"or cd to the path and use\n"
-"\n"
-"\tgit push\n"
-"\n"
-"to push them to a remote.\n"
-"\n"
-msgstr "\nПопробуйте выполнить\n\n\tgit push --recurse-submodules=on-demand\n\nили перейти в каталог с помощью команды cd и выполнить\n\n\tgit push\n\nдля их отправки на внешний репозиторий.\n"
+msgid "Your branch is based on '%s', but the upstream is gone.\n"
+msgstr "Ваша ветка базируется на «%s», но вышестоящий репозиторий исчез.\n"
-#: transport.c:783
-msgid "Aborting."
-msgstr "Прерываю."
+#: remote.c:2077
+msgid " (use \"git branch --unset-upstream\" to fixup)\n"
+msgstr "(для исправления запустите «git branch --unset-upstream»)\n"
-#: transport-helper.c:1041
+#: remote.c:2080
#, c-format
-msgid "Could not read ref %s"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c Ñ\81Ñ\81Ñ\8bлкÑ\83 %s"
+msgid "Your branch is up-to-date with '%s'.\n"
+msgstr "Ð\92аÑ\88а веÑ\82ка обновлена в Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вии Ñ\81 «%s».\n"
-#: unpack-trees.c:64
+#: remote.c:2084
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%sPlease commit your changes or stash them before you switch branches."
-msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при переключении на состояние:\n%%sСделайте коммит или спрячьте ваши изменения перед переключением веток."
+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"
+msgstr[2] "Ваша ветка опережает «%s» на %d коммитов.\n"
+msgstr[3] "Ваша ветка опережает «%s» на %d коммитов.\n"
-#: unpack-trees.c:66
+#: remote.c:2090
+msgid " (use \"git push\" to publish your local commits)\n"
+msgstr " (используйте «git push», чтобы опубликовать ваши локальные коммиты)\n"
+
+#: remote.c:2093
#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%s"
-msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при переключении на состояние:\n%%s"
+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] "Ваша ветка отстает от «%s» на %d коммит и может быть перемотана вперед.\n"
+msgstr[1] "Ваша ветка отстает от «%s» на %d коммита и может быть перемотана вперед.\n"
+msgstr[2] "Ваша ветка отстает от «%s» на %d коммитов и может быть перемотана вперед.\n"
+msgstr[3] "Ваша ветка отстает от «%s» на %d коммитов и может быть перемотана вперед.\n"
-#: unpack-trees.c:69
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%sPlease commit your changes or stash them before you merge."
-msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:\n%%sСделайте коммит или спрячьте ваши изменения перед слиянием веток."
+#: remote.c:2101
+msgid " (use \"git pull\" to update your local branch)\n"
+msgstr " (используйте «git pull», чтобы обновить вашу локальную ветку)\n"
-#: unpack-trees.c:71
+#: remote.c:2104
#, c-format
msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%s"
-msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:\n%%s"
+"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"
+msgstr[2] "Ваша ветка и «%s» разделились\nи теперь имеют %d и %d разных коммитов в каждой соответственно.\n"
+msgstr[3] "Ваша ветка и «%s» разделились\nи теперь имеют %d и %d разных коммитов в каждой соответственно.\n"
-#: unpack-trees.c:74
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by %s:\n"
-"%%sPlease commit your changes or stash them before you %s."
-msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при %s:\n%%sСделайте коммит или спрячьте ваши изменения перед %s."
+#: remote.c:2114
+msgid " (use \"git pull\" to merge the remote branch into yours)\n"
+msgstr " (используйте «git pull», чтобы слить внешнюю ветку в вашу)\n"
-#: unpack-trees.c:76
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by %s:\n"
-"%%s"
-msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при %s:\n%%s"
+#: revision.c:2158
+msgid "your current branch appears to be broken"
+msgstr "похоже, ваша текущая ветка повреждена"
-#: unpack-trees.c:81
+#: revision.c:2161
#, c-format
-msgid ""
-"Updating the following directories would lose untracked files in it:\n"
-"%s"
-msgstr "Обновление указанных каталогов приведет к потере неотслеживаемых файлов в них:\n%s"
+msgid "your current branch '%s' does not have any commits yet"
+msgstr "ваша текущая ветка «%s» еще не содержит ни одного коммита"
-#: unpack-trees.c:85
-#, c-format
-msgid ""
-"The following untracked working tree files would be removed by checkout:\n"
-"%%sPlease move or remove them before you switch branches."
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при переключении на состояние:\n%%sПереместите эти файлы или удалите их перед переключением веток."
+#: revision.c:2355
+msgid "--first-parent is incompatible with --bisect"
+msgstr "опцию --first-parent нельзя использовать одновременно с --bisect"
-#: unpack-trees.c:87
-#, c-format
-msgid ""
-"The following untracked working tree files would be removed by checkout:\n"
-"%%s"
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при переключении на состояние:\n%%s"
+#: run-command.c:106
+msgid "open /dev/null failed"
+msgstr "сбой открытия /dev/null"
-#: unpack-trees.c:90
+#: run-command.c:108
#, c-format
-msgid ""
-"The following untracked working tree files would be removed by merge:\n"
-"%%sPlease move or remove them before you merge."
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при слиянии:\n%%sПереместите эти файлы или удалите их перед переключением веток."
+msgid "dup2(%d,%d) failed"
+msgstr "dup2(%d,%d) сбой"
-#: unpack-trees.c:92
-#, c-format
-msgid ""
-"The following untracked working tree files would be removed by merge:\n"
-"%%s"
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при слиянии:\n%%s"
+#: send-pack.c:297
+msgid "failed to sign the push certificate"
+msgstr "сбой подписания сертификата отправки"
-#: unpack-trees.c:95
-#, c-format
-msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%sPlease move or remove them before you %s."
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при %s:\n%%sПереместите эти файлы или удалите их перед %s."
+#: send-pack.c:410
+msgid "the receiving end does not support --signed push"
+msgstr "принимающая сторона не поддерживает отправку с опцией --signed"
-#: unpack-trees.c:97
-#, c-format
+#: send-pack.c:412
msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%s"
-msgstr "УказаннÑ\8bе неоÑ\82Ñ\81леживаемÑ\8bе Ñ\84айлÑ\8b в Ñ\80абоÑ\87ем каÑ\82алоге бÑ\83дÑ\83Ñ\82 Ñ\83даленÑ\8b пÑ\80и %s:\n%%s"
+"not sending a push certificate since the receiving end does not support "
+"--signed push"
+msgstr "не оÑ\82пÑ\80авлÑ\8fем Ñ\81еÑ\80Ñ\82иÑ\84икаÑ\82 длÑ\8f оÑ\82пÑ\80авки, Ñ\82ак как пÑ\80инимаÑ\8eÑ\89аÑ\8f Ñ\81Ñ\82оÑ\80она не поддеÑ\80живаеÑ\82 оÑ\82пÑ\80авкÑ\83 Ñ\81 опÑ\86ией --signed"
-#: unpack-trees.c:102
-#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by checkout:\n"
-"%%sPlease move or remove them before you switch branches."
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при переключении на состояние:\n%%sПереместите эти файлы или удалите их перед переключением веток."
+#: send-pack.c:424
+msgid "the receiving end does not support --atomic push"
+msgstr "принимающая сторона не поддерживает отправку с опцией --atomic"
-#: unpack-trees.c:104
-#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by checkout:\n"
-"%%s"
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при переключении на состояние:\n%%s"
+#: send-pack.c:429
+msgid "the receiving end does not support push options"
+msgstr "принимающая сторона не поддерживает отправку с опциями"
-#: unpack-trees.c:107
-#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%sPlease move or remove them before you merge."
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при слиянии:\n%%sПереместите эти файлы или удалите их перед переключением веток."
+#: sequencer.c:171
+msgid "revert"
+msgstr "обратить изменения"
-#: unpack-trees.c:109
-#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%s"
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при слиянии:\n%%s"
+#: sequencer.c:171
+msgid "cherry-pick"
+msgstr "копировать коммит"
-#: unpack-trees.c:112
-#, c-format
+#: sequencer.c:228
msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%sPlease move or remove them before you %s."
-msgstr "УказаннÑ\8bе неоÑ\82Ñ\81леживаемÑ\8bе Ñ\84айлÑ\8b в Ñ\80абоÑ\87ем каÑ\82алоге бÑ\83дÑ\83Ñ\82 пеÑ\80езапиÑ\81анÑ\8b пÑ\80и %s:\n%%sÐ\9fеÑ\80емеÑ\81Ñ\82иÑ\82е Ñ\8dÑ\82и Ñ\84айлÑ\8b или Ñ\83далиÑ\82е иÑ\85 пеÑ\80ед %s."
+"after resolving the conflicts, mark the corrected paths\n"
+"with 'git add <paths>' or 'git rm <paths>'"
+msgstr "поÑ\81ле Ñ\80азÑ\80еÑ\88ениÑ\8f конÑ\84ликÑ\82ов, помеÑ\82Ñ\8cÑ\82е иÑ\81пÑ\80авленнÑ\8bе пÑ\83Ñ\82и\nÑ\81 помоÑ\89Ñ\8cÑ\8e «git add <пÑ\83Ñ\82и>» или «git rm <пÑ\83Ñ\82и>»"
-#: unpack-trees.c:114
-#, c-format
+#: sequencer.c:231
msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%s"
-msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при %s:\n%%s"
+"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 "после разрешения конфликтов, пометьте исправленные пути\nс помощью «git add <пути>» или «git rm <пути>»\nи сделайте коммит с помощью «git commit»"
-#: unpack-trees.c:121
+#: sequencer.c:244 sequencer.c:1209
#, c-format
-msgid "Entry '%s' overlaps with '%s'. Cannot bind."
-msgstr "Ð\97апиÑ\81Ñ\8c «%s» Ñ\87аÑ\81Ñ\82иÑ\87но Ñ\81овпадаеÑ\82 Ñ\81 «%s». Ð\9dе Ñ\83далоÑ\81Ñ\8c назнаÑ\87иÑ\82Ñ\8c Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вие."
+msgid "could not lock '%s'"
+msgstr "не Ñ\83далоÑ\81Ñ\8c заблокиÑ\80оваÑ\82Ñ\8c «%s»"
-#: unpack-trees.c:124
+#: sequencer.c:247 sequencer.c:1125 sequencer.c:1214
#, c-format
-msgid ""
-"Cannot update sparse checkout: the following entries are not up-to-date:\n"
-"%s"
-msgstr "Не удалось обновить частичное состояние: следующие элементы не последней версии:\n%s"
+msgid "could not write to '%s'"
+msgstr "не удалось записать в «%s»"
-#: unpack-trees.c:126
+#: sequencer.c:251
#, c-format
-msgid ""
-"The following Working tree files would be overwritten by sparse checkout update:\n"
-"%s"
-msgstr "Указанные файлы из рабочего каталога будут перезаписаны при обновлении частичного состояния:\n%s"
+msgid "could not write eol to '%s'"
+msgstr "не удалось записать eol в «%s»"
-#: unpack-trees.c:128
+#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
#, c-format
-msgid ""
-"The following Working tree files would be removed by sparse checkout update:\n"
-"%s"
-msgstr "Указанные файлы из рабочего каталога будут удалены при обновлении частичного состояния:\n%s"
+msgid "failed to finalize '%s'."
+msgstr "не удалось завершить «%s»."
-#: unpack-trees.c:205
+#: sequencer.c:279 builtin/am.c:259 builtin/commit.c:749 builtin/merge.c:1032
#, c-format
-msgid "Aborting\n"
-msgstr "Прерываю\n"
-
-#: unpack-trees.c:237
-msgid "Checking out files"
-msgstr "Распаковка файлов"
-
-#: urlmatch.c:120
-msgid "invalid URL scheme name or missing '://' suffix"
-msgstr "Неправильная имя URL схемы или пропущен суффикс «://»"
+msgid "could not read '%s'"
+msgstr "не удалось прочитать «%s»"
-#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
+#: sequencer.c:305
#, c-format
-msgid "invalid %XX escape sequence"
-msgstr "непÑ\80авилÑ\8cнаÑ\8f Ñ\83пÑ\80авлÑ\8fÑ\8eÑ\89аÑ\8f поÑ\81ледоваÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c %XX"
+msgid "your local changes would be overwritten by %s."
+msgstr "ваÑ\88и локалÑ\8cнÑ\8bе изменениÑ\8f бÑ\83дÑ\83Ñ\82 пеÑ\80езапиÑ\81анÑ\8b %s."
-#: urlmatch.c:172
-msgid "missing host and scheme is not 'file:'"
-msgstr "пÑ\80опÑ\83Ñ\89ено имÑ\8f Ñ\81еÑ\80веÑ\80а и Ñ\81Ñ\85ема доÑ\81Ñ\82Ñ\83па не «file:»"
+#: sequencer.c:309
+msgid "commit your changes or stash them to proceed."
+msgstr "длÑ\8f пÑ\80одолжениÑ\8f закоммиÑ\82Ñ\8cÑ\82е ваÑ\88и изменениÑ\8f или Ñ\81пÑ\80Ñ\8fÑ\87Ñ\8cÑ\82е иÑ\85."
-#: urlmatch.c:189
-msgid "a 'file:' URL may not have a port number"
-msgstr "URL со схемой «file:» не может содержать номер порта"
+#: sequencer.c:324
+#, c-format
+msgid "%s: fast-forward"
+msgstr "%s: перемотка вперед"
-#: urlmatch.c:199
-msgid "invalid characters in host name"
-msgstr "неправильные символы в имени сервера"
+#. TRANSLATORS: %s will be "revert" or "cherry-pick"
+#: sequencer.c:399
+#, c-format
+msgid "%s: Unable to write new index file"
+msgstr "%s: Не удалось записать файл индекса"
-#: urlmatch.c:244 urlmatch.c:255
-msgid "invalid port number"
-msgstr "неправильный номер порта"
+#: sequencer.c:418
+msgid "could not resolve HEAD commit\n"
+msgstr "не удалось распознать HEAD коммит\n"
-#: urlmatch.c:322
-msgid "invalid '..' path segment"
-msgstr "неправильная часть пути «..»"
+#: sequencer.c:438
+msgid "unable to update cache tree\n"
+msgstr "не удалось обновить дерево кэша\n"
-#: worktree.c:282
+#: sequencer.c:483
#, c-format
-msgid "failed to read '%s'"
-msgstr "не удалось прочитать «%s»"
+msgid ""
+"you have staged changes in your working tree\n"
+"If these changes are meant to be squashed into the previous commit, run:\n"
+"\n"
+" git commit --amend %s\n"
+"\n"
+"If they are meant to go into a new commit, run:\n"
+"\n"
+" git commit %s\n"
+"\n"
+"In both cases, once you're done, continue with:\n"
+"\n"
+" git rebase --continue\n"
+msgstr "у вас имеются проиндексированные изменения в рабочем каталоге. Если эти изменения должны быть объеденены с предыдущим коммитом, то запустите:\n\n git commit --amend %s\n\nЕсли же они должны быть помещены в новый коммит, то запустите:\n\n git commit %s\n\nВ любом случае, после того как вы закончите, продолжить перемещение можно выполнив:\n\n git rebase --continue\n"
-#: wrapper.c:222 wrapper.c:392
+#: sequencer.c:567
#, c-format
-msgid "could not open '%s' for reading and writing"
-msgstr "не удалось открыть «%s» для чтения и записи"
+msgid "could not parse commit %s\n"
+msgstr "не удалось разобрать коммит %s\n"
-#: wrapper.c:224 wrapper.c:394 builtin/am.c:778
+#: sequencer.c:572
#, c-format
-msgid "could not open '%s' for writing"
-msgstr "не удалось открыть «%s» для записи"
+msgid "could not parse parent commit %s\n"
+msgstr "не удалось разобрать родительский коммит %s\n"
-#: wrapper.c:226 wrapper.c:396 builtin/am.c:324 builtin/am.c:771
-#: builtin/am.c:859 builtin/commit.c:1712 builtin/merge.c:1029
-#: builtin/pull.c:407
-#, c-format
-msgid "could not open '%s' for reading"
-msgstr "не удалось открыть «%s» для чтения"
+#: sequencer.c:656
+msgid "your index file is unmerged."
+msgstr "ваш индекс не слит."
-#: wrapper.c:605 wrapper.c:626
+#: sequencer.c:675
#, c-format
-msgid "unable to access '%s'"
-msgstr "«%s» недоступно"
-
-#: wrapper.c:634
-msgid "unable to get current working directory"
-msgstr "не удалось получить текущий рабочий каталог"
+msgid "commit %s is a merge but no -m option was given."
+msgstr "коммит %s — это коммит-слияние, но опция -m не указана."
-#: wrapper.c:658
+#: sequencer.c:683
#, c-format
-msgid "could not write to %s"
-msgstr "не удалось записать в %s"
+msgid "commit %s does not have parent %d"
+msgstr "у коммита %s нет предка %d"
-#: wrapper.c:660
+#: sequencer.c:687
#, c-format
-msgid "could not close %s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c закÑ\80Ñ\8bÑ\82Ñ\8c %s"
+msgid "mainline was specified but commit %s is not a merge."
+msgstr "оÑ\81новнаÑ\8f веÑ\82ка Ñ\83казана, но коммиÑ\82 %s не Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ñ\81лиÑ\8fнием."
-#: wt-status.c:150
-msgid "Unmerged paths:"
-msgstr "Не слитые пути:"
-
-#: wt-status.c:177 wt-status.c:204
+#. TRANSLATORS: The first %s will be a "todo" command like
+#. "revert" or "pick", the second %s a SHA1.
+#: sequencer.c:700
#, c-format
-msgid " (use \"git reset %s <file>...\" to unstage)"
-msgstr " (используйте «git reset %s <файл>…», чтобы убрать из индекса)"
-
-#: wt-status.c:179 wt-status.c:206
-msgid " (use \"git rm --cached <file>...\" to unstage)"
-msgstr " (используйте «git rm --cached <файл>…», чтобы убрать из индекса)"
+msgid "%s: cannot parse parent commit %s"
+msgstr "%s: не удалось разобрать родительский коммит для %s"
-#: wt-status.c:183
-msgid " (use \"git add <file>...\" to mark resolution)"
-msgstr " (используйте «git add <файл>…», чтобы пометить разрешение конфликта)"
+#: sequencer.c:705
+#, c-format
+msgid "cannot get commit message for %s"
+msgstr "не удалось получить сообщение коммита для %s"
-#: wt-status.c:185 wt-status.c:189
-msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
-msgstr " (используйте «git add/rm <файл>…», чтобы пометить выбранное разрешение конфликта)"
+#: sequencer.c:797
+#, c-format
+msgid "could not revert %s... %s"
+msgstr "не удалось обратить изменения коммита %s… %s"
-#: wt-status.c:187
-msgid " (use \"git rm <file>...\" to mark resolution)"
-msgstr " (используйте «git rm <файл>…», чтобы пометить разрешение конфликта)"
+#: sequencer.c:798
+#, c-format
+msgid "could not apply %s... %s"
+msgstr "не удалось применить коммит %s… %s"
-#: wt-status.c:198 wt-status.c:882
-msgid "Changes to be committed:"
-msgstr "Ð\98зменениÑ\8f, коÑ\82оÑ\80Ñ\8bе бÑ\83дÑ\83Ñ\82 вклÑ\8eÑ\87енÑ\8b в коммиÑ\82:"
+#: sequencer.c:833
+msgid "empty commit set passed"
+msgstr "пеÑ\80едан пÑ\83Ñ\81Ñ\82ой набоÑ\80 коммиÑ\82ов"
-#: wt-status.c:216 wt-status.c:891
-msgid "Changes not staged for commit:"
-msgstr "Изменения, которые не в индексе для коммита:"
+#: sequencer.c:843
+#, c-format
+msgid "git %s: failed to read the index"
+msgstr "git %s: сбой чтения индекса"
-#: wt-status.c:220
-msgid " (use \"git add <file>...\" to update what will be committed)"
-msgstr " (используйте «git add <файл>…», чтобы добавить файл в индекс)"
+#: sequencer.c:850
+#, c-format
+msgid "git %s: failed to refresh the index"
+msgstr "git %s: сбой обновления индекса"
-#: wt-status.c:222
-msgid " (use \"git add/rm <file>...\" to update what will be committed)"
-msgstr " (используйте «git add/rm <файл>…», чтобы добавить или удалить файл из индекса)"
+#: sequencer.c:944
+#, c-format
+msgid "invalid line %d: %.*s"
+msgstr "неправильная строка %d: %.*s"
-#: wt-status.c:223
-msgid ""
-" (use \"git checkout -- <file>...\" to discard changes in working "
-"directory)"
-msgstr " (используйте «git checkout -- <файл>…», чтобы отменить изменения\n в рабочем каталоге)"
+#: sequencer.c:950
+msgid "no commits parsed."
+msgstr "коммиты не разобраны."
-#: wt-status.c:225
-msgid " (commit or discard the untracked or modified content in submodules)"
-msgstr " (сделайте коммит или отмените изменения в неотслеживаемом или измененном содержимом в подмодулях)"
+#: sequencer.c:966
+#, c-format
+msgid "could not read '%s'."
+msgstr "не удалось прочитать «%s»."
-#: wt-status.c:237
+#: sequencer.c:972
#, c-format
-msgid " (use \"git %s <file>...\" to include in what will be committed)"
-msgstr " (используйте «git %s <файл>…», чтобы добавить в то, что будет включено в коммит)"
+msgid "unusable instruction sheet: '%s'"
+msgstr "непригодная для использования карта с инструкциями: «%s»"
-#: wt-status.c:252
-msgid "both deleted:"
-msgstr "оба Ñ\83даленÑ\8b:"
+#: sequencer.c:983
+msgid "cannot cherry-pick during a revert."
+msgstr "нелÑ\8cзÑ\8f Ñ\81копиÑ\80оваÑ\82Ñ\8c коммиÑ\82 во вÑ\80емÑ\8f пÑ\80оÑ\86еÑ\81Ñ\81а обÑ\80аÑ\89ениÑ\8f коммиÑ\82а."
-#: wt-status.c:254
-msgid "added by us:"
-msgstr "добавлено нами:"
+#: sequencer.c:985
+msgid "cannot revert during a cherry-pick."
+msgstr "нелÑ\8cзÑ\8f обÑ\80аÑ\82иÑ\82Ñ\8c изменениÑ\8f коммиÑ\82а во вÑ\80емÑ\8f копиÑ\80ованиÑ\8f коммиÑ\82а."
-#: wt-status.c:256
-msgid "deleted by them:"
-msgstr "удалено ими:"
+#: sequencer.c:1028
+#, c-format
+msgid "invalid key: %s"
+msgstr "недействительный ключ: %s"
-#: wt-status.c:258
-msgid "added by them:"
-msgstr "добавлено ими:"
+#: sequencer.c:1031
+#, c-format
+msgid "invalid value for %s: %s"
+msgstr "неправильное значение %s: %s"
-#: wt-status.c:260
-msgid "deleted by us:"
-msgstr "удалено нами:"
+#: sequencer.c:1063
+#, c-format
+msgid "malformed options sheet: '%s'"
+msgstr "испорченная карта с опциями: «%s»"
-#: wt-status.c:262
-msgid "both added:"
-msgstr "оба добавленÑ\8b:"
+#: sequencer.c:1101
+msgid "a cherry-pick or revert is already in progress"
+msgstr "копиÑ\80ование или обÑ\80аÑ\89ение изменений коммиÑ\82а Ñ\83же вÑ\8bполнÑ\8fÑ\8eÑ\82Ñ\81Ñ\8f"
-#: wt-status.c:264
-msgid "both modified:"
-msgstr "оба изменÑ\8b:"
+#: sequencer.c:1102
+msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
+msgstr "попÑ\80обÑ\83йÑ\82е «git cherry-pick (--continue | --quit | --abort)»"
-#: wt-status.c:274
-msgid "new file:"
-msgstr "новый файл:"
+#: sequencer.c:1106
+#, c-format
+msgid "could not create sequencer directory '%s'"
+msgstr "не удалось создать каталог для указателя следования коммитов «%s»"
-#: wt-status.c:276
-msgid "copied:"
-msgstr "скопировано:"
+#: sequencer.c:1120
+msgid "could not lock HEAD"
+msgstr "не удалось заблокировать HEAD"
-#: wt-status.c:278
-msgid "deleted:"
-msgstr "удалено:"
+#: sequencer.c:1151 sequencer.c:1289
+msgid "no cherry-pick or revert in progress"
+msgstr "копирование или обращение изменений коммита уже выполняются"
-#: wt-status.c:280
-msgid "modified:"
-msgstr "изменено:"
+#: sequencer.c:1153
+msgid "cannot resolve HEAD"
+msgstr "не Ñ\83далоÑ\81Ñ\8c опÑ\80еделиÑ\82Ñ\8c HEAD"
-#: wt-status.c:282
-msgid "renamed:"
-msgstr "пеÑ\80еименовано:"
+#: sequencer.c:1155 sequencer.c:1189
+msgid "cannot abort from a branch yet to be born"
+msgstr "нелÑ\8cзÑ\8f оÑ\82мениÑ\82Ñ\8c изменениÑ\8f Ñ\81 веÑ\82ки, коÑ\82оÑ\80аÑ\8f еÑ\89е не Ñ\81оздана"
-#: wt-status.c:284
-msgid "typechange:"
-msgstr "изменен тип:"
+#: sequencer.c:1175 builtin/grep.c:578
+#, c-format
+msgid "cannot open '%s'"
+msgstr "не удалось открыть «%s»"
-#: wt-status.c:286
-msgid "unknown:"
-msgstr "неизвестно:"
+#: sequencer.c:1177
+#, c-format
+msgid "cannot read '%s': %s"
+msgstr "не удалось прочитать «%s»: %s"
-#: wt-status.c:288
-msgid "unmerged:"
-msgstr "не слитые:"
+#: sequencer.c:1178
+msgid "unexpected end of file"
+msgstr "неожиданный конец файла"
-#: wt-status.c:370
-msgid "new commits, "
-msgstr "новые коммиты, "
+#: sequencer.c:1184
+#, c-format
+msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
+msgstr "сохраненный файл с HEAD перед копированием коммита «%s» поврежден"
-#: wt-status.c:372
-msgid "modified content, "
-msgstr "изменено содержимое, "
+#: sequencer.c:1354
+#, c-format
+msgid "%s: can't cherry-pick a %s"
+msgstr "%s: не удалось скопировать коммит %s"
-#: wt-status.c:374
-msgid "untracked content, "
-msgstr "неотслеживаемое содержимое, "
+#: sequencer.c:1358
+#, c-format
+msgid "%s: bad revision"
+msgstr "%s: плохая редакция"
-#: wt-status.c:756
-msgid "Submodules changed but not updated:"
-msgstr "Ð\98змененнÑ\8bе, но не обновленнÑ\8bе подмодÑ\83ли:"
+#: sequencer.c:1391
+msgid "can't revert as initial commit"
+msgstr "нелÑ\8cзÑ\8f возвÑ\80аÑ\82иÑ\82Ñ\8c изнаÑ\87алÑ\8cнÑ\8bй коммиÑ\82"
-#: wt-status.c:758
-msgid "Submodule changes to be committed:"
-msgstr "Изменения в подмодулях, которые будут закоммичены:"
+#: setup.c:160
+#, c-format
+msgid ""
+"%s: no such path in the working tree.\n"
+"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
+msgstr "%s: нет такого пути в рабочем каталоге.\nИспользуйте «git <команда> -- <путь>…» для указания путей, которые не существуют локально."
-#: wt-status.c:839
+#: setup.c:173
+#, c-format
msgid ""
-"Do not touch the line above.\n"
-"Everything below will be removed."
-msgstr "Не трогайте строку выше этой.\nВсё, что ниже — будет удалено."
+"ambiguous argument '%s': unknown revision or path not in the working tree.\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
+msgstr "неоднозначный аргумент «%s»: неизвестная редакция или не путь в рабочем каталоге.\nИспользуйте «--» для отделения путей от редакций, вот так:\n«git <команда> [<редакция>…] -- [<файл>…]»"
-#: wt-status.c:950
-msgid "You have unmerged paths."
-msgstr "У вас есть не слитые пути."
+#: setup.c:223
+#, c-format
+msgid ""
+"ambiguous argument '%s': both revision and filename\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
+msgstr "неоднозначный аргумент «%s»: является одновременно и редакцией и именем файла.\nИспользуйте «--» для отделения путей от редакций, вот так:\n«git <команда> [<редакция>…] -- [<файл>…]»"
-#: wt-status.c:953
-msgid " (fix conflicts and run \"git commit\")"
-msgstr " (разрешите конфликты, затем запустите «git commit»)"
+#: setup.c:468
+#, c-format
+msgid "Expected git repo version <= %d, found %d"
+msgstr "Ожидаемая версия git репозитория <= %d, а обнаружена %d"
-#: wt-status.c:955
-msgid " (use \"git merge --abort\" to abort the merge)"
-msgstr " (используйте «git merge --abort», чтобы остановить операцию слияния)"
+#: setup.c:476
+msgid "unknown repository extensions found:"
+msgstr "обнаружены неизвестные расширения репозитория:"
-#: wt-status.c:960
-msgid "All conflicts fixed but you are still merging."
-msgstr "Все конфликты исправлены, но вы все еще в процессе слияния."
+#: setup.c:762
+#, c-format
+msgid "Not a git repository (or any of the parent directories): %s"
+msgstr "Не найден git репозитоий (или один из его каталогов): %s"
-#: wt-status.c:963
-msgid " (use \"git commit\" to conclude merge)"
-msgstr " (используйте «git commit», чтобы завершить слияние)"
+#: setup.c:764 setup.c:915 builtin/index-pack.c:1641
+msgid "Cannot come back to cwd"
+msgstr "Не удалось вернуться в текущий рабочий каталог"
-#: wt-status.c:973
-msgid "You are in the middle of an am session."
-msgstr "Ð\92Ñ\8b в пÑ\80оÑ\86еÑ\81Ñ\81е Ñ\81еÑ\81Ñ\81ии am."
+#: setup.c:845
+msgid "Unable to read current working directory"
+msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c Ñ\82екÑ\83Ñ\89ий Ñ\80абоÑ\87ий каÑ\82алог"
-#: wt-status.c:976
-msgid "The current patch is empty."
-msgstr "Текущий патч пустой."
+#: setup.c:920
+#, c-format
+msgid ""
+"Not a git repository (or any parent up to mount point %s)\n"
+"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
+msgstr "Не найден git репозитоий (или один из его каталогов вплоть до точки монтирования %s)\nОстанавливаю поиск на границе файловой системы (так как GIT_DISCOVERY_ACROSS_FILESYSTEM не установлен)."
-#: wt-status.c:980
-msgid " (fix conflicts and then run \"git am --continue\")"
-msgstr " (разрешите конфликты, затем запустите «git am --continue»)"
+#: setup.c:927
+#, c-format
+msgid "Cannot change to '%s/..'"
+msgstr "Перейти в «%s/..»"
-#: wt-status.c:982
-msgid " (use \"git am --skip\" to skip this patch)"
-msgstr " (используйте «git am --skip», чтобы пропустить этот патч)"
+#: setup.c:989
+#, c-format
+msgid ""
+"Problem with core.sharedRepository filemode value (0%.3o).\n"
+"The owner of files must always have read and write permissions."
+msgstr "Проблема со значением режима доступа к файлу core.sharedRepository (0%.3o).\nВладелец файлов должен всегда иметь права на чтение и на запись."
-#: wt-status.c:984
-msgid " (use \"git am --abort\" to restore the original branch)"
-msgstr " (используйте «git am --abort», чтобы восстановить оригинальную ветку)"
+#: sha1_file.c:473
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "путь «%s» не существует"
-#: wt-status.c:1109
-msgid "No commands done."
-msgstr "Команды не выполнены."
+#: sha1_file.c:499
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "ссылаемый репозиторий «%s» как связанное состояние, пока не поддерживается."
-#: wt-status.c:1112
+#: sha1_file.c:505
#, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Последняя команда выполнена (%d команда выполнена):"
-msgstr[1] "Последняя команда выполнена (%d команды выполнено):"
-msgstr[2] "Последняя команда выполнена (%d команд выполнено):"
-msgstr[3] "Последняя команда выполнена (%d команд выполнено):"
+msgid "reference repository '%s' is not a local repository."
+msgstr "ссылаемый репозиторий «%s» не является локальным."
-#: wt-status.c:1123
+#: sha1_file.c:511
#, c-format
-msgid " (see more in file %s)"
-msgstr " (смотрите дополнительно в файле %s)"
+msgid "reference repository '%s' is shallow"
+msgstr "ссылаемый репозиторий «%s» является частичным"
-#: wt-status.c:1128
-msgid "No commands remaining."
-msgstr "Команд больше не осталось."
+#: sha1_file.c:519
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "ссылаемый репозиторий «%s» является сращенным"
+
+#: sha1_file.c:1159
+msgid "offset before end of packfile (broken .idx?)"
+msgstr "сдвиг до конца файла пакета (возможно, повреждён файл .idx?)"
-#: wt-status.c:1131
+#: sha1_file.c:2592
#, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Следующая команда для выполнения (%d команда осталась):"
-msgstr[1] "Следующая команда для выполнения (%d команды осталось):"
-msgstr[2] "Следующая команда для выполнения (%d команд осталось):"
-msgstr[3] "Следующая команда для выполнения (%d команд осталось):"
+msgid "offset before start of pack index for %s (corrupt index?)"
+msgstr "сдвиг до начала индекса пакета для %s (повреждён индекс?)"
-#: wt-status.c:1139
-msgid " (use \"git rebase --edit-todo\" to view and edit)"
-msgstr " (используйте «git rebase --edit-todo», чтобы просмотреть и изменить)"
+#: sha1_file.c:2596
+#, c-format
+msgid "offset beyond end of pack index for %s (truncated index?)"
+msgstr "сдвиг за пределами индекса пакета для %s (обрезан индекс?)"
-#: wt-status.c:1152
+#: sha1_name.c:407
#, c-format
-msgid "You are currently rebasing branch '%s' on '%s'."
-msgstr "Вы сейчас перемещаете ветку «%s» над «%s»."
+msgid "short SHA1 %s is ambiguous"
+msgstr "сокращённый SHA1 идентификатор %s неоднозначен"
-#: wt-status.c:1157
-msgid "You are currently rebasing."
-msgstr "Вы сейчас перемещаете ветку."
+#: sha1_name.c:418
+msgid "The candidates are:"
+msgstr "Возможно, вы имели в виду:"
-#: wt-status.c:1171
-msgid " (fix conflicts and then run \"git rebase --continue\")"
-msgstr " (разрешите конфликты, затем запустите «git rebase --continue»)"
+#: sha1_name.c:578
+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 "Обычно Git не создает ссылки, оканчивающиеся на 40 шестнадцатеричных\nсимволов, потому, что они будут игнорироваться, когда вы просто\nукажете это 40-символьное шестнадцатеричное число. Такие ссылки\nмогли быть созданы по ошибке. Например, с помощью:\n\n git checkout -b $br $(git rev-parse …)\n\n, если «$br» оказался пустым, то ссылка с 40-символьным\nшестнадцатеричным числом будет создана. Пожалуйста, просмотрите эти\nссылки и, возможно, удалите их. Вы можете отключить это сообщение\nзапустив «git config advice.objectNameWarning false»"
-#: wt-status.c:1173
-msgid " (use \"git rebase --skip\" to skip this patch)"
-msgstr " (используйте «git rebase --skip», чтобы пропустить этот патч)"
+#: submodule.c:64 submodule.c:98
+msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
+msgstr "Не удалось изменить не слитый .gitmodules, сначала разрешите конфликты"
-#: wt-status.c:1175
-msgid " (use \"git rebase --abort\" to check out the original branch)"
-msgstr " (используйте «git rebase --abort», чтобы перейти на оригинальную ветку)"
+#: submodule.c:68 submodule.c:102
+#, c-format
+msgid "Could not find section in .gitmodules where path=%s"
+msgstr "Не удалось найти раздел в .gitmodules, где путь равен %s"
-#: wt-status.c:1181
-msgid " (all conflicts fixed: run \"git rebase --continue\")"
-msgstr " (все конфликты разрешены: запустите «git rebase --continue»)"
+#: submodule.c:76
+#, c-format
+msgid "Could not update .gitmodules entry %s"
+msgstr " Не удалось обновить .gitmodules запись %s"
-#: wt-status.c:1185
+#: submodule.c:109
#, c-format
-msgid ""
-"You are currently splitting a commit while rebasing branch '%s' on '%s'."
-msgstr "Вы сейчас разделяете коммит при перемещении ветки «%s» над «%s»."
+msgid "Could not remove .gitmodules entry for %s"
+msgstr "Не удалось удалить запись в .gitmodules для %s"
-#: wt-status.c:1190
-msgid "You are currently splitting a commit during a rebase."
-msgstr "Вы сейчас разделяете коммит при перемещении ветки."
+#: submodule.c:120
+msgid "staging updated .gitmodules failed"
+msgstr "сбой индексирования обновленного .gitmodules"
-#: wt-status.c:1193
-msgid " (Once your working directory is clean, run \"git rebase --continue\")"
-msgstr "(Как только ваш рабочий каталог будет чистый, запустите «git rebase --continue»)"
+#: submodule.c:158
+msgid "negative values not allowed for submodule.fetchJobs"
+msgstr "нельзя использовать отприцательные значения для submodule.fetchJobs"
-#: wt-status.c:1197
+#: submodule-config.c:358
#, c-format
-msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
-msgstr "Вы сейчас редактируете коммит при перемещении ветки «%s» над «%s»."
-
-#: wt-status.c:1202
-msgid "You are currently editing a commit during a rebase."
-msgstr "Вы сейчас редактируете коммит при перемещении ветки."
+msgid "invalid value for %s"
+msgstr "неправильное значение %s"
-#: wt-status.c:1205
-msgid " (use \"git commit --amend\" to amend the current commit)"
-msgstr " (используйте «git commit --amend», чтобы исправить текущий коммит)"
+#: trailer.c:238
+#, c-format
+msgid "running trailer command '%s' failed"
+msgstr "сбой при запуске команды завершителя «%s»"
-#: wt-status.c:1207
-msgid " (use \"git rebase --continue\" once you are satisfied with your changes)"
-msgstr " (используйте «git rebase --continue», когда будете довольны изменениями)"
+#: trailer.c:471 trailer.c:475 trailer.c:479 trailer.c:533 trailer.c:537
+#: trailer.c:541
+#, c-format
+msgid "unknown value '%s' for key '%s'"
+msgstr "неизвестное значение «%s» для ключа «%s»"
-#: wt-status.c:1217
+#: trailer.c:523 trailer.c:528 builtin/remote.c:289
#, c-format
-msgid "You are currently cherry-picking commit %s."
-msgstr "Ð\92Ñ\8b копиÑ\80Ñ\83еÑ\82е коммиÑ\82 %s."
+msgid "more than one %s"
+msgstr "болÑ\8cÑ\88е одного %s"
-#: wt-status.c:1222
-msgid " (fix conflicts and run \"git cherry-pick --continue\")"
-msgstr " (разрешите конфликты, затем запустите «git cherry-pick --continue»)"
+#: trailer.c:672
+#, c-format
+msgid "empty trailer token in trailer '%.*s'"
+msgstr "пустая последняя лексема в завершителе «%.*s»"
-#: wt-status.c:1225
-msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
-msgstr " (все конфликты разрешены: запустите «git cherry-pick --continue»)"
+#: trailer.c:695
+#, c-format
+msgid "could not read input file '%s'"
+msgstr "не удалось прочитать входной файл «%s»"
-#: wt-status.c:1227
-msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
-msgstr " (используйте «git cherry-pick --abort», чтобы отменить копирования коммита)"
+#: trailer.c:698
+msgid "could not read from stdin"
+msgstr "не удалось прочитать из стандартного ввода"
-#: wt-status.c:1236
+#: trailer.c:929 builtin/am.c:44
#, c-format
-msgid "You are currently reverting commit %s."
-msgstr "Ð\92Ñ\8b Ñ\81ейÑ\87аÑ\81 обÑ\80аÑ\89аеÑ\82е изменениÑ\8f коммиÑ\82а %s."
+msgid "could not stat %s"
+msgstr "не Ñ\83далоÑ\81Ñ\8c вÑ\8bполниÑ\82Ñ\8c stat длÑ\8f %s"
-#: wt-status.c:1241
-msgid " (fix conflicts and run \"git revert --continue\")"
-msgstr " (разрешите конфликты, затем запустите «git revert --continue»)"
+#: trailer.c:931
+#, c-format
+msgid "file %s is not a regular file"
+msgstr "файл %s не является обычным файлом"
-#: wt-status.c:1244
-msgid " (all conflicts fixed: run \"git revert --continue\")"
-msgstr " (все конфликты разрешены: запустите «git revert --continue»)"
+#: trailer.c:933
+#, c-format
+msgid "file %s is not writable by user"
+msgstr "файл %s не доступен на запись пользователю"
-#: wt-status.c:1246
-msgid " (use \"git revert --abort\" to cancel the revert operation)"
-msgstr " (используйте «git revert --abort», чтобы отменить операцию обращения изменений коммита)"
+#: trailer.c:945
+msgid "could not open temporary file"
+msgstr "не удалось создать временный файл"
-#: wt-status.c:1257
+#: trailer.c:983
#, c-format
-msgid "You are currently bisecting, started from branch '%s'."
-msgstr "Вы сейчас в процессе двоичного поиска, начатого с ветки «%s»."
-
-#: wt-status.c:1261
-msgid "You are currently bisecting."
-msgstr "Вы сейчас в процессе двоичного поиска."
+msgid "could not rename temporary file to %s"
+msgstr "не удалось переименовать временный файл в %s"
-#: wt-status.c:1264
-msgid " (use \"git bisect reset\" to get back to the original branch)"
-msgstr " (используйте «git bisect reset», чтобы вернуться на исходную ветку)"
+#: transport.c:62
+#, c-format
+msgid "Would set upstream of '%s' to '%s' of '%s'\n"
+msgstr "Будет установлен вышестоящий репозиторий для «%s» на «%s» с «%s»\n"
-#: wt-status.c:1464
-msgid "On branch "
-msgstr "На ветке "
+#: transport.c:151
+#, c-format
+msgid "transport: invalid depth option '%s'"
+msgstr "транспорт: неправильный параметр глубины «%s»"
-#: wt-status.c:1470
-msgid "interactive rebase in progress; onto "
-msgstr "интерактивное перемещение в процессе; над "
+#: transport.c:817
+#, c-format
+msgid ""
+"The following submodule paths contain changes that can\n"
+"not be found on any remote:\n"
+msgstr "Подмодули по указанным путям содержат изменения, которые не найдены ни на одном из внешних репозиториев:\n"
-#: wt-status.c:1472
-msgid "rebase in progress; onto "
-msgstr "перемещение в процессе; над "
+#: transport.c:821
+#, c-format
+msgid ""
+"\n"
+"Please try\n"
+"\n"
+"\tgit push --recurse-submodules=on-demand\n"
+"\n"
+"or cd to the path and use\n"
+"\n"
+"\tgit push\n"
+"\n"
+"to push them to a remote.\n"
+"\n"
+msgstr "\nПопробуйте выполнить\n\n\tgit push --recurse-submodules=on-demand\n\nили перейти в каталог с помощью команды cd и выполнить\n\n\tgit push\n\nдля их отправки на внешний репозиторий.\n"
-#: wt-status.c:1477
-msgid "HEAD detached at "
-msgstr "HEAD отделён на "
+#: transport.c:829
+msgid "Aborting."
+msgstr "Прерываю."
-#: wt-status.c:1479
-msgid "HEAD detached from "
-msgstr "HEAD отделён начиная с "
+#: transport-helper.c:1075
+#, c-format
+msgid "Could not read ref %s"
+msgstr "Не удалось прочитать ссылку %s"
-#: wt-status.c:1482
-msgid "Not currently on any branch."
-msgstr "Сейчас ни на одной из веток"
+#: tree-walk.c:31
+msgid "too-short tree object"
+msgstr "слишком короткий объект дерева"
-#: wt-status.c:1500
-msgid "Initial commit"
-msgstr "Ð\9dаÑ\87алÑ\8cнÑ\8bй коммиÑ\82"
+#: tree-walk.c:37
+msgid "malformed mode in tree entry"
+msgstr "непÑ\80авилÑ\8cнÑ\8bй Ñ\80ежим в запиÑ\81и деÑ\80ева"
-#: wt-status.c:1514
-msgid "Untracked files"
-msgstr "Ð\9dеоÑ\82Ñ\81леживаемÑ\8bе Ñ\84айлÑ\8b"
+#: tree-walk.c:41
+msgid "empty filename in tree entry"
+msgstr "пÑ\83Ñ\81Ñ\82ое имÑ\8f Ñ\84айла в запиÑ\81и деÑ\80ева"
-#: wt-status.c:1516
-msgid "Ignored files"
-msgstr "Игнорируемые файлы"
+#: tree-walk.c:113
+msgid "too-short tree file"
+msgstr "слишком короткий файл дерева"
-#: wt-status.c:1520
+#: unpack-trees.c:64
#, 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 "%.2f секунды занял вывод списка неотслеживаемых файлов. «status -uno» возможно может ускорить это, но будьте внимательны, и не забудьте добавить новые файлы вручную (смотрите «git help status» для подробностей)."
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%sPlease commit your changes or stash them before you switch branches."
+msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при переключении на состояние:\n%%sСделайте коммит или спрячьте ваши изменения перед переключением веток."
-#: wt-status.c:1526
+#: unpack-trees.c:66
#, c-format
-msgid "Untracked files not listed%s"
-msgstr "Неотслеживаемые файлы не показаны%s"
-
-#: wt-status.c:1528
-msgid " (use -u option to show untracked files)"
-msgstr "(используйте опцию «-u», чтобы показать неотслеживаемые файлы)"
-
-#: wt-status.c:1534
-msgid "No changes"
-msgstr "Нет изменений"
+msgid ""
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%s"
+msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при переключении на состояние:\n%%s"
-#: wt-status.c:1539
+#: unpack-trees.c:69
#, c-format
-msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
-msgstr "нет изменений добавленных для коммита\n(используйте «git add» и/или «git commit -a»)\n"
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%sPlease commit your changes or stash them before you merge."
+msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:\n%%sСделайте коммит или спрячьте ваши изменения перед слиянием веток."
-#: wt-status.c:1542
+#: unpack-trees.c:71
#, c-format
-msgid "no changes added to commit\n"
-msgstr "нет изменений добавленных для коммита\n"
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%s"
+msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:\n%%s"
-#: wt-status.c:1545
+#: unpack-trees.c:74
#, c-format
msgid ""
-"nothing added to commit but untracked files present (use \"git add\" to "
-"track)\n"
-msgstr "ниÑ\87его не добавлено в коммиÑ\82, но еÑ\81Ñ\82Ñ\8c неоÑ\82Ñ\81леживаемÑ\8bе Ñ\84айлÑ\8b (иÑ\81полÑ\8cзÑ\83йÑ\82е «git add», Ñ\87Ñ\82обÑ\8b оÑ\82Ñ\81леживаÑ\82Ñ\8c иÑ\85)\n"
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%sPlease commit your changes or stash them before you %s."
+msgstr "Ð\92аÑ\88и локалÑ\8cнÑ\8bе изменениÑ\8f в Ñ\83казаннÑ\8bÑ\85 Ñ\84айлаÑ\85 бÑ\83дÑ\83Ñ\82 пеÑ\80езапиÑ\81анÑ\8b пÑ\80и %s:\n%%sСделайÑ\82е коммиÑ\82 или Ñ\81пÑ\80Ñ\8fÑ\87Ñ\8cÑ\82е ваÑ\88и изменениÑ\8f пеÑ\80ед %s."
-#: wt-status.c:1548
+#: unpack-trees.c:76
#, c-format
-msgid "nothing added to commit but untracked files present\n"
-msgstr "ничего не добавлено в коммит, но есть неотслеживаемые файлы\n"
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%s"
+msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при %s:\n%%s"
-#: wt-status.c:1551
+#: unpack-trees.c:81
#, c-format
-msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
-msgstr "нечего коммитить (создайте/скопируйте файлы, затем запустите «git add», чтобы отслеживать их)\n"
+msgid ""
+"Updating the following directories would lose untracked files in it:\n"
+"%s"
+msgstr "Обновление указанных каталогов приведет к потере неотслеживаемых файлов в них:\n%s"
-#: wt-status.c:1554 wt-status.c:1559
+#: unpack-trees.c:85
#, c-format
-msgid "nothing to commit\n"
-msgstr "нечего коммитить\n"
+msgid ""
+"The following untracked working tree files would be removed by checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при переключении на состояние:\n%%sПереместите эти файлы или удалите их перед переключением веток."
-#: wt-status.c:1557
+#: unpack-trees.c:87
#, c-format
-msgid "nothing to commit (use -u to show untracked files)\n"
-msgstr "нечего коммитить (используйте опцию «-u», чтобы показать неотслеживаемые файлы)\n"
+msgid ""
+"The following untracked working tree files would be removed by checkout:\n"
+"%%s"
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при переключении на состояние:\n%%s"
-#: wt-status.c:1561
+#: unpack-trees.c:90
#, c-format
-msgid "nothing to commit, working tree clean\n"
-msgstr "нечего коммитить, нет изменений в рабочем каталоге\n"
-
-#: wt-status.c:1668
-msgid "Initial commit on "
-msgstr "Начальный коммит на "
-
-#: wt-status.c:1672
-msgid "HEAD (no branch)"
-msgstr "HEAD (нет ветки)"
-
-#: wt-status.c:1701
-msgid "gone"
-msgstr "исчез"
-
-#: wt-status.c:1703 wt-status.c:1711
-msgid "behind "
-msgstr "позади"
-
-#: wt-status.c:1706 wt-status.c:1709
-msgid "ahead "
-msgstr "впереди "
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%sPlease move or remove them before you merge."
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при слиянии:\n%%sПереместите эти файлы или удалите их перед переключением веток."
-#: compat/precompose_utf8.c:57 builtin/clone.c:415
+#: unpack-trees.c:92
#, c-format
-msgid "failed to unlink '%s'"
-msgstr "сбой отсоединения «%s»"
-
-#: builtin/add.c:22
-msgid "git add [<options>] [--] <pathspec>..."
-msgstr "git add [<опции>] [--] <спецификация-пути>…"
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%s"
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при слиянии:\n%%s"
-#: builtin/add.c:65
+#: unpack-trees.c:95
#, c-format
-msgid "unexpected diff status %c"
-msgstr "неожиданный статус различий %c"
-
-#: builtin/add.c:71 builtin/commit.c:281
-msgid "updating files failed"
-msgstr "сбой при обновлении файлов"
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при %s:\n%%sПереместите эти файлы или удалите их перед %s."
-#: builtin/add.c:81
+#: unpack-trees.c:97
#, c-format
-msgid "remove '%s'\n"
-msgstr "удалить «%s»\n"
-
-#: builtin/add.c:136
-msgid "Unstaged changes after refreshing the index:"
-msgstr "Непроиндексированные изменения после обновления индекса:"
-
-#: builtin/add.c:196 builtin/rev-parse.c:811
-msgid "Could not read the index"
-msgstr "Не удалось прочитать индекс"
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%s"
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при %s:\n%%s"
-#: builtin/add.c:207
+#: unpack-trees.c:102
#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "Не удалось открыть «%s» для записи."
-
-#: builtin/add.c:211
-msgid "Could not write patch"
-msgstr "Не удалось записать патч"
-
-#: builtin/add.c:214
-msgid "editing patch failed"
-msgstr "сбой при редактировании патча"
+msgid ""
+"The following untracked working tree files would be overwritten by checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при переключении на состояние:\n%%sПереместите эти файлы или удалите их перед переключением веток."
-#: builtin/add.c:217
+#: unpack-trees.c:104
#, c-format
-msgid "Could not stat '%s'"
-msgstr "Не удалось выполнить stat для «%s»"
-
-#: builtin/add.c:219
-msgid "Empty patch. Aborted."
-msgstr "Пустой патч. Операция прервана."
+msgid ""
+"The following untracked working tree files would be overwritten by checkout:\n"
+"%%s"
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при переключении на состояние:\n%%s"
-#: builtin/add.c:224
+#: unpack-trees.c:107
#, c-format
-msgid "Could not apply '%s'"
-msgstr "Не удалось применить «%s»"
+msgid ""
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%sPlease move or remove them before you merge."
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при слиянии:\n%%sПереместите эти файлы или удалите их перед переключением веток."
-#: builtin/add.c:234
-msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr "Следующие пути игнорируются одним из ваших файлов .gitignore:\n"
+#: unpack-trees.c:109
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%s"
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при слиянии:\n%%s"
-#: builtin/add.c:253 builtin/clean.c:870 builtin/fetch.c:113 builtin/mv.c:111
-#: builtin/prune-packed.c:55 builtin/pull.c:197 builtin/push.c:521
-#: builtin/remote.c:1327 builtin/rm.c:268 builtin/send-pack.c:162
-msgid "dry run"
-msgstr "пробный запуск"
+#: unpack-trees.c:112
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при %s:\n%%sПереместите эти файлы или удалите их перед %s."
-#: builtin/add.c:254 builtin/apply.c:4854 builtin/check-ignore.c:19
-#: builtin/commit.c:1334 builtin/count-objects.c:85 builtin/fsck.c:593
-#: builtin/log.c:1852 builtin/mv.c:110 builtin/read-tree.c:114
-msgid "be verbose"
-msgstr "быть многословнее"
+#: unpack-trees.c:114
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%s"
+msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при %s:\n%%s"
-#: builtin/add.c:256
-msgid "interactive picking"
-msgstr "интерактивный выбор"
+#: unpack-trees.c:121
+#, c-format
+msgid "Entry '%s' overlaps with '%s'. Cannot bind."
+msgstr "Запись «%s» частично совпадает с «%s». Не удалось назначить соответствие."
-#: builtin/add.c:257 builtin/checkout.c:1157 builtin/reset.c:286
-msgid "select hunks interactively"
-msgstr "интерактивный выбор блоков"
+#: unpack-trees.c:124
+#, c-format
+msgid ""
+"Cannot update sparse checkout: the following entries are not up-to-date:\n"
+"%s"
+msgstr "Не удалось обновить частичное состояние: следующие элементы не последней версии:\n%s"
-#: builtin/add.c:258
-msgid "edit current diff and apply"
-msgstr "отредактировать текущий файл различий и применить его"
+#: unpack-trees.c:126
+#, c-format
+msgid ""
+"The following working tree files would be overwritten by sparse checkout update:\n"
+"%s"
+msgstr "Указанные файлы из рабочего каталога будут перезаписаны при обновлении частичного состояния:\n%s"
-#: builtin/add.c:259
-msgid "allow adding otherwise ignored files"
-msgstr "разрешить добавление игнорируемых иначе файлов"
+#: unpack-trees.c:128
+#, c-format
+msgid ""
+"The following working tree files would be removed by sparse checkout update:\n"
+"%s"
+msgstr "Указанные файлы из рабочего каталога будут удалены при обновлении частичного состояния:\n%s"
-#: builtin/add.c:260
-msgid "update tracked files"
-msgstr "обновить отслеживаемые файлы"
+#: unpack-trees.c:205
+#, c-format
+msgid "Aborting\n"
+msgstr "Прерываю\n"
-#: builtin/add.c:261
-msgid "record only the fact that the path will be added later"
-msgstr "запиÑ\81аÑ\82Ñ\8c Ñ\82олÑ\8cко Ñ\84акÑ\82, Ñ\87Ñ\82о пÑ\83Ñ\82Ñ\8c бÑ\83деÑ\82 добавлен позже"
+#: unpack-trees.c:237
+msgid "Checking out files"
+msgstr "РаÑ\81паковка Ñ\84айлов"
-#: builtin/add.c:262
-msgid "add changes from all tracked and untracked files"
-msgstr "добавиÑ\82Ñ\8c изменениÑ\8f из вÑ\81еÑ\85 оÑ\82Ñ\81леживаемÑ\8bÑ\85 и неоÑ\82Ñ\81леживаемÑ\8bÑ\85 Ñ\84айлов"
+#: urlmatch.c:120
+msgid "invalid URL scheme name or missing '://' suffix"
+msgstr "Ð\9dепÑ\80авилÑ\8cнаÑ\8f имÑ\8f URL Ñ\81Ñ\85емÑ\8b или пÑ\80опÑ\83Ñ\89ен Ñ\81Ñ\83Ñ\84Ñ\84икÑ\81 «://»"
-#: builtin/add.c:265
-msgid "ignore paths removed in the working tree (same as --no-all)"
-msgstr "игнорировать пути удаленные из рабочего каталога (тоже, что и --no-all)"
+#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356
+#, c-format
+msgid "invalid %XX escape sequence"
+msgstr "неправильная управляющая последовательность %XX"
-#: builtin/add.c:267
-msgid "don't add, only refresh the index"
-msgstr "не добавлÑ\8fÑ\82Ñ\8c, Ñ\82олÑ\8cко обновиÑ\82Ñ\8c индекÑ\81"
+#: urlmatch.c:172
+msgid "missing host and scheme is not 'file:'"
+msgstr "пÑ\80опÑ\83Ñ\89ено имÑ\8f Ñ\81еÑ\80веÑ\80а и Ñ\81Ñ\85ема доÑ\81Ñ\82Ñ\83па не «file:»"
-#: builtin/add.c:268
-msgid "just skip files which cannot be added because of errors"
-msgstr "пропускать файлы, которые не могут быть добавлены из-за ошибок"
+#: urlmatch.c:189
+msgid "a 'file:' URL may not have a port number"
+msgstr "URL со схемой «file:» не может содержать номер порта"
-#: builtin/add.c:269
-msgid "check if - even missing - files are ignored in dry run"
-msgstr "удостовериться, что даже недостающие файлы будут проигнорированы при пробном запуске"
+#: urlmatch.c:199
+msgid "invalid characters in host name"
+msgstr "неправильные символы в имени сервера"
-#: builtin/add.c:270 builtin/update-index.c:958
-msgid "(+/-)x"
-msgstr "(+/-)x"
+#: urlmatch.c:244 urlmatch.c:255
+msgid "invalid port number"
+msgstr "неправильный номер порта"
-#: builtin/add.c:270 builtin/update-index.c:959
-msgid "override the executable bit of the listed files"
-msgstr "пеÑ\80еопÑ\80еделиÑ\82Ñ\8c биÑ\82 вÑ\8bполнениÑ\8f на Ñ\83казаннÑ\8bÑ\85 Ñ\84айлаÑ\85"
+#: urlmatch.c:322
+msgid "invalid '..' path segment"
+msgstr "непÑ\80авилÑ\8cнаÑ\8f Ñ\87аÑ\81Ñ\82Ñ\8c пÑ\83Ñ\82и «..»"
-#: builtin/add.c:292
+#: worktree.c:282
#, c-format
-msgid "Use -f if you really want to add them.\n"
-msgstr "Используйте -f, если вы действительно хотите добавить их.\n"
-
-#: builtin/add.c:300
-msgid "adding files failed"
-msgstr "ошибка при добавлении файлов"
-
-#: builtin/add.c:336
-msgid "-A and -u are mutually incompatible"
-msgstr "-A и -u нельзя использовать одновременно"
+msgid "failed to read '%s'"
+msgstr "не удалось прочитать «%s»"
-#: builtin/add.c:343
-msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr "Опция --ignore-missing может использоваться только вместе с --dry-run"
+#: wrapper.c:222 wrapper.c:392
+#, c-format
+msgid "could not open '%s' for reading and writing"
+msgstr "не удалось открыть «%s» для чтения и записи"
-#: builtin/add.c:352
+#: wrapper.c:224 wrapper.c:394 builtin/am.c:766
#, c-format
-msgid "--chmod param '%s' must be either -x or +x"
-msgstr "паÑ\80амеÑ\82Ñ\80 --chmod «%s» должен бÑ\8bÑ\82Ñ\8c -x или +x"
+msgid "could not open '%s' for writing"
+msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c «%s» длÑ\8f запиÑ\81и"
-#: builtin/add.c:367
+#: wrapper.c:226 wrapper.c:396 builtin/am.c:320 builtin/am.c:759
+#: builtin/am.c:847 builtin/commit.c:1705 builtin/merge.c:1029
+#: builtin/pull.c:341
#, c-format
-msgid "Nothing specified, nothing added.\n"
-msgstr "Ð\9dиÑ\87его не Ñ\83казано, ниÑ\87его не добавлено.\n"
+msgid "could not open '%s' for reading"
+msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c «%s» длÑ\8f Ñ\87Ñ\82ениÑ\8f"
-#: builtin/add.c:368
+#: wrapper.c:605 wrapper.c:626
#, c-format
-msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr "Возможно, вы имели в виду «git add .»?\n"
+msgid "unable to access '%s'"
+msgstr "«%s» недоступно"
-#: builtin/add.c:373 builtin/check-ignore.c:172 builtin/checkout.c:279
-#: builtin/checkout.c:473 builtin/clean.c:914 builtin/commit.c:340
-#: builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298
-#: builtin/submodule--helper.c:240
-msgid "index file corrupt"
-msgstr "файл индекса поврежден"
+#: wrapper.c:634
+msgid "unable to get current working directory"
+msgstr "не удалось получить текущий рабочий каталог"
-#: builtin/add.c:454 builtin/apply.c:4784 builtin/mv.c:286 builtin/rm.c:431
-msgid "Unable to write new index file"
-msgstr "Не удалось записать новый файл индекса"
+#: wrapper.c:658
+#, c-format
+msgid "could not write to %s"
+msgstr "не удалось записать в %s"
-#: builtin/am.c:257 builtin/commit.c:750 builtin/merge.c:1032
+#: wrapper.c:660
#, c-format
-msgid "could not read '%s'"
-msgstr "не Ñ\83далоÑ\81Ñ\8c пÑ\80оÑ\87иÑ\82аÑ\82Ñ\8c «%s»"
+msgid "could not close %s"
+msgstr "не Ñ\83далоÑ\81Ñ\8c закÑ\80Ñ\8bÑ\82Ñ\8c %s"
-#: builtin/am.c:426
-msgid "could not parse author script"
-msgstr "не Ñ\83далоÑ\81Ñ\8c Ñ\80азобÑ\80аÑ\82Ñ\8c Ñ\81Ñ\86енаÑ\80ий авÑ\82оÑ\80Ñ\81Ñ\82ва"
+#: wt-status.c:151
+msgid "Unmerged paths:"
+msgstr "Ð\9dе Ñ\81лиÑ\82Ñ\8bе пÑ\83Ñ\82и:"
-#: builtin/am.c:503
+#: wt-status.c:178 wt-status.c:205
#, c-format
-msgid "'%s' was deleted by the applypatch-msg hook"
-msgstr "«%s» был удален перехватчиком applypatch-msg"
+msgid " (use \"git reset %s <file>...\" to unstage)"
+msgstr " (используйте «git reset %s <файл>…», чтобы убрать из индекса)"
-#: builtin/am.c:544 builtin/notes.c:301
-#, c-format
-msgid "Malformed input line: '%s'."
-msgstr "Неправильная строка ввода: «%s»."
+#: wt-status.c:180 wt-status.c:207
+msgid " (use \"git rm --cached <file>...\" to unstage)"
+msgstr " (используйте «git rm --cached <файл>…», чтобы убрать из индекса)"
-#: builtin/am.c:581 builtin/notes.c:316
-#, c-format
-msgid "Failed to copy notes from '%s' to '%s'"
-msgstr "Не удалось скопировать заметку из «%s» в «%s»"
+#: wt-status.c:184
+msgid " (use \"git add <file>...\" to mark resolution)"
+msgstr " (используйте «git add <файл>…», чтобы пометить разрешение конфликта)"
-#: builtin/am.c:607
-msgid "fseek failed"
-msgstr "сбой при выполнении fseek"
+#: wt-status.c:186 wt-status.c:190
+msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
+msgstr " (используйте «git add/rm <файл>…», чтобы пометить выбранное разрешение конфликта)"
-#: builtin/am.c:787
-#, c-format
-msgid "could not parse patch '%s'"
-msgstr "не удалось разобрать патч «%s»"
+#: wt-status.c:188
+msgid " (use \"git rm <file>...\" to mark resolution)"
+msgstr " (используйте «git rm <файл>…», чтобы пометить разрешение конфликта)"
-#: builtin/am.c:852
-msgid "Only one StGIT patch series can be applied at once"
-msgstr "ТолÑ\8cко Ñ\81еÑ\80иÑ\8f паÑ\82Ñ\87ей StGIT можеÑ\82 бÑ\8bÑ\82Ñ\8c пÑ\80именена за Ñ\80аз"
+#: wt-status.c:199 wt-status.c:945
+msgid "Changes to be committed:"
+msgstr "Ð\98зменениÑ\8f, коÑ\82оÑ\80Ñ\8bе бÑ\83дÑ\83Ñ\82 вклÑ\8eÑ\87енÑ\8b в коммиÑ\82:"
-#: builtin/am.c:899
-msgid "invalid timestamp"
-msgstr "недопÑ\83Ñ\81Ñ\82имаÑ\8f меÑ\82ка даÑ\82Ñ\8b/вÑ\80емени"
+#: wt-status.c:217 wt-status.c:954
+msgid "Changes not staged for commit:"
+msgstr "Ð\98зменениÑ\8f, коÑ\82оÑ\80Ñ\8bе не в индекÑ\81е длÑ\8f коммиÑ\82а:"
-#: builtin/am.c:902 builtin/am.c:910
-msgid "invalid Date line"
-msgstr "недопустимая строка даты"
+#: wt-status.c:221
+msgid " (use \"git add <file>...\" to update what will be committed)"
+msgstr " (используйте «git add <файл>…», чтобы добавить файл в индекс)"
-#: builtin/am.c:907
-msgid "invalid timezone offset"
-msgstr "недопустимое смещение часового пояса"
+#: wt-status.c:223
+msgid " (use \"git add/rm <file>...\" to update what will be committed)"
+msgstr " (используйте «git add/rm <файл>…», чтобы добавить или удалить файл из индекса)"
-#: builtin/am.c:996
-msgid "Patch format detection failed."
-msgstr "Сбой определения формата патча."
+#: wt-status.c:224
+msgid ""
+" (use \"git checkout -- <file>...\" to discard changes in working "
+"directory)"
+msgstr " (используйте «git checkout -- <файл>…», чтобы отменить изменения\n в рабочем каталоге)"
+
+#: wt-status.c:226
+msgid " (commit or discard the untracked or modified content in submodules)"
+msgstr " (сделайте коммит или отмените изменения в неотслеживаемом или измененном содержимом в подмодулях)"
-#: builtin/am.c:1001 builtin/clone.c:380
+#: wt-status.c:238
#, c-format
-msgid "failed to create directory '%s'"
-msgstr "не удалось создать каталог «%s»"
+msgid " (use \"git %s <file>...\" to include in what will be committed)"
+msgstr " (используйте «git %s <файл>…», чтобы добавить в то, что будет включено в коммит)"
-#: builtin/am.c:1005
-msgid "Failed to split patches."
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\80азделиÑ\82Ñ\8c паÑ\82Ñ\87и на Ñ\87аÑ\81Ñ\82и."
+#: wt-status.c:253
+msgid "both deleted:"
+msgstr "оба Ñ\83даленÑ\8b:"
-#: builtin/am.c:1137 builtin/commit.c:366
-msgid "unable to write index file"
-msgstr "не Ñ\83далоÑ\81Ñ\8c запиÑ\81аÑ\82Ñ\8c индекÑ\81"
+#: wt-status.c:255
+msgid "added by us:"
+msgstr "добавлено нами:"
-#: builtin/am.c:1188
-#, c-format
-msgid "When you have resolved this problem, run \"%s --continue\"."
-msgstr "Когда вы устраните эту проблему, запустите «%s --continue»."
+#: wt-status.c:257
+msgid "deleted by them:"
+msgstr "удалено ими:"
-#: builtin/am.c:1189
-#, c-format
-msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
-msgstr "Если вы хотите пропустить этот патч, то запустите «%s --skip»."
+#: wt-status.c:259
+msgid "added by them:"
+msgstr "добавлено ими:"
-#: builtin/am.c:1190
-#, c-format
-msgid "To restore the original branch and stop patching, run \"%s --abort\"."
-msgstr "Чтобы вернуться на предыдущую ветку и остановить применение изменений, запустите «%s --abort»."
+#: wt-status.c:261
+msgid "deleted by us:"
+msgstr "удалено нами:"
+
+#: wt-status.c:263
+msgid "both added:"
+msgstr "оба добавлены:"
+
+#: wt-status.c:265
+msgid "both modified:"
+msgstr "оба измены:"
+
+#: wt-status.c:275
+msgid "new file:"
+msgstr "новый файл:"
-#: builtin/am.c:1328
-msgid "Patch is empty. Was it split wrong?"
-msgstr "Патч пуст. Возможно, он был неправильно разделён?"
+#: wt-status.c:277
+msgid "copied:"
+msgstr "скопировано:"
-#: builtin/am.c:1402 builtin/log.c:1543
-#, c-format
-msgid "invalid ident line: %s"
-msgstr "неправильная строка идентификации: %s"
+#: wt-status.c:279
+msgid "deleted:"
+msgstr "удалено:"
-#: builtin/am.c:1429
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "не удалось разобрать коммит %s"
+#: wt-status.c:281
+msgid "modified:"
+msgstr "изменено:"
-#: builtin/am.c:1602
-msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr "Ð\92 Ñ\80епозиÑ\82оÑ\80ии оÑ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\82 двоиÑ\87нÑ\8bе обÑ\8aекÑ\82Ñ\8b, необÑ\85одимÑ\8bе длÑ\8f оÑ\82каÑ\82а к Ñ\82Ñ\80еÑ\85Ñ\85одовомÑ\83 Ñ\81лиÑ\8fниÑ\8e."
+#: wt-status.c:283
+msgid "renamed:"
+msgstr "пеÑ\80еименовано:"
-#: builtin/am.c:1604
-msgid "Using index info to reconstruct a base tree..."
-msgstr "Ð\98Ñ\81полÑ\8cзÑ\83Ñ\8e индекÑ\81 длÑ\8f Ñ\80еконÑ\81Ñ\82Ñ\80Ñ\83кÑ\86ии базового деÑ\80еваâ\80¦"
+#: wt-status.c:285
+msgid "typechange:"
+msgstr "изменен Ñ\82ип:"
-#: builtin/am.c:1623
-msgid ""
-"Did you hand edit your patch?\n"
-"It does not apply to blobs recorded in its index."
-msgstr "Вы вручную изменяли патч?\nОн не накладывается без ошибок на двоичные объекты, записанные в его заголовке."
+#: wt-status.c:287
+msgid "unknown:"
+msgstr "неизвестно:"
-#: builtin/am.c:1629
-msgid "Falling back to patching base and 3-way merge..."
-msgstr "Ð\9eÑ\82каÑ\82 к пÑ\80именениÑ\8e изменений к базовомÑ\83 коммиÑ\82Ñ\83 Ñ\81 помоÑ\89Ñ\8cÑ\8e Ñ\82Ñ\80еÑ\85Ñ\85одового Ñ\81лиÑ\8fниÑ\8fâ\80¦"
+#: wt-status.c:289
+msgid "unmerged:"
+msgstr "не Ñ\81лиÑ\82Ñ\8bе:"
-#: builtin/am.c:1654
-msgid "Failed to merge in the changes."
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c Ñ\81лиÑ\82Ñ\8c изменениÑ\8f."
+#: wt-status.c:371
+msgid "new commits, "
+msgstr "новÑ\8bе коммиÑ\82Ñ\8b, "
-#: builtin/am.c:1679 builtin/merge.c:628
-msgid "git write-tree failed to write a tree"
-msgstr "git write-tree не удалось записать дерево"
+#: wt-status.c:373
+msgid "modified content, "
+msgstr "изменено содержимое, "
-#: builtin/am.c:1686
-msgid "applying to an empty history"
-msgstr "пÑ\80именение к пÑ\83Ñ\81Ñ\82ой иÑ\81Ñ\82оÑ\80ии"
+#: wt-status.c:375
+msgid "untracked content, "
+msgstr "неоÑ\82Ñ\81леживаемое Ñ\81одеÑ\80жимое, "
-#: builtin/am.c:1699 builtin/commit.c:1776 builtin/merge.c:798
-#: builtin/merge.c:823
-msgid "failed to write commit object"
-msgstr "сбой записи объекта коммита"
+#: wt-status.c:818
+msgid "Submodules changed but not updated:"
+msgstr "Измененные, но не обновленные подмодули:"
-#: builtin/am.c:1731 builtin/am.c:1735
-#, c-format
-msgid "cannot resume: %s does not exist."
-msgstr "нельзя продолжнить: %s не существует "
+#: wt-status.c:820
+msgid "Submodule changes to be committed:"
+msgstr "Изменения в подмодулях, которые будут закоммичены:"
-#: builtin/am.c:1751
-msgid "cannot be interactive without stdin connected to a terminal."
-msgstr "не удалось использовать интерактивное поведение, без stdin подключенного к терминалу."
+#: wt-status.c:901
+msgid ""
+"Do not touch the line above.\n"
+"Everything below will be removed."
+msgstr "Не трогайте строку выше этой.\nВсё, что ниже — будет удалено."
-#: builtin/am.c:1756
-msgid "Commit Body is:"
-msgstr "Тело коммиÑ\82а:"
+#: wt-status.c:1013
+msgid "You have unmerged paths."
+msgstr "У ваÑ\81 еÑ\81Ñ\82Ñ\8c не Ñ\81лиÑ\82Ñ\8bе пÑ\83Ñ\82и."
-#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
-#. in your translation. The program will only accept English
-#. input at this point.
-#: builtin/am.c:1766
-msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
-msgstr "Применить? [y] - да/[n] - нет/[e] - редактировать/[v] - просмотреть патч/[a] - применить всё: "
+#: wt-status.c:1016
+msgid " (fix conflicts and run \"git commit\")"
+msgstr " (разрешите конфликты, затем запустите «git commit»)"
-#: builtin/am.c:1816
-#, c-format
-msgid "Dirty index: cannot apply patches (dirty: %s)"
-msgstr "Индекс не пустой: нельзя применять патчи (в индексе: %s)"
+#: wt-status.c:1018
+msgid " (use \"git merge --abort\" to abort the merge)"
+msgstr " (используйте «git merge --abort», чтобы остановить операцию слияния)"
-#: builtin/am.c:1853 builtin/am.c:1925
-#, c-format
-msgid "Applying: %.*s"
-msgstr "Применение: %.*s"
+#: wt-status.c:1023
+msgid "All conflicts fixed but you are still merging."
+msgstr "Все конфликты исправлены, но вы все еще в процессе слияния."
-#: builtin/am.c:1869
-msgid "No changes -- Patch already applied."
-msgstr "Нет изменений — Патч уже применен."
+#: wt-status.c:1026
+msgid " (use \"git commit\" to conclude merge)"
+msgstr " (используйте «git commit», чтобы завершить слияние)"
-#: builtin/am.c:1877
-#, c-format
-msgid "Patch failed at %s %.*s"
-msgstr "Ошибка применения изменений на %s %.*s"
+#: wt-status.c:1036
+msgid "You are in the middle of an am session."
+msgstr "Вы в процессе сессии am."
-#: builtin/am.c:1883
-#, c-format
-msgid "The copy of the patch that failed is found in: %s"
-msgstr "Копию изменений, которые не удалось применить, вы можете найти в: %s"
+#: wt-status.c:1039
+msgid "The current patch is empty."
+msgstr "Текущий патч пустой."
-#: builtin/am.c:1928
-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 add»?\nЕсли ничего не осталось для индексации, то, скорее всего, что-то другое уже сделало те же изменения; возможно, вам следует пропустить этот патч."
+#: wt-status.c:1043
+msgid " (fix conflicts and then run \"git am --continue\")"
+msgstr " (разрешите конфликты, затем запустите «git am --continue»)"
-#: builtin/am.c:1935
-msgid ""
-"You still have unmerged paths in your index.\n"
-"Did you forget to use 'git add'?"
-msgstr "У вас все еще имеются не слитые пути в индексе.\nВозможно, вы забыли вызвать «git add»?"
+#: wt-status.c:1045
+msgid " (use \"git am --skip\" to skip this patch)"
+msgstr " (используйте «git am --skip», чтобы пропустить этот патч)"
-#: builtin/am.c:2043 builtin/am.c:2047 builtin/am.c:2059 builtin/reset.c:308
-#: builtin/reset.c:316
-#, c-format
-msgid "Could not parse object '%s'."
-msgstr "Не удалось разобрать объект «%s»."
+#: wt-status.c:1047
+msgid " (use \"git am --abort\" to restore the original branch)"
+msgstr " (используйте «git am --abort», чтобы восстановить оригинальную ветку)"
-#: builtin/am.c:2095
-msgid "failed to clean index"
-msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\87иÑ\81Ñ\82иÑ\82Ñ\8c индекÑ\81"
+#: wt-status.c:1172
+msgid "No commands done."
+msgstr "Ð\9aомандÑ\8b не вÑ\8bполненÑ\8b."
-#: builtin/am.c:2129
-msgid ""
-"You seem to have moved HEAD since the last 'am' failure.\n"
-"Not rewinding to ORIG_HEAD"
-msgstr "Похоже, что вы переместили HEAD с момента последней ошибки выполнения «am».\nПеремотка на ORIG_HEAD не выполняется"
+#: wt-status.c:1175
+#, c-format
+msgid "Last command done (%d command done):"
+msgid_plural "Last commands done (%d commands done):"
+msgstr[0] "Последняя команда выполнена (%d команда выполнена):"
+msgstr[1] "Последняя команда выполнена (%d команды выполнено):"
+msgstr[2] "Последняя команда выполнена (%d команд выполнено):"
+msgstr[3] "Последняя команда выполнена (%d команд выполнено):"
-#: builtin/am.c:2192
+#: wt-status.c:1186
#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Неправильное значение для --patch-format: %s"
+msgid " (see more in file %s)"
+msgstr " (смотрите дополнительно в файле %s)"
-#: builtin/am.c:2225
-msgid "git am [<options>] [(<mbox>|<Maildir>)...]"
-msgstr "git am [<опции>] [(<mbox>|<Maildir>)…]"
+#: wt-status.c:1191
+msgid "No commands remaining."
+msgstr "Команд больше не осталось."
-#: builtin/am.c:2226
-msgid "git am [<options>] (--continue | --skip | --abort)"
-msgstr "git am [<опции>] (--continue | --skip | --abort)"
+#: wt-status.c:1194
+#, c-format
+msgid "Next command to do (%d remaining command):"
+msgid_plural "Next commands to do (%d remaining commands):"
+msgstr[0] "Следующая команда для выполнения (%d команда осталась):"
+msgstr[1] "Следующая команда для выполнения (%d команды осталось):"
+msgstr[2] "Следующая команда для выполнения (%d команд осталось):"
+msgstr[3] "Следующая команда для выполнения (%d команд осталось):"
-#: builtin/am.c:2232
-msgid "run interactively"
-msgstr "запустить в интерактивном режиме"
+#: wt-status.c:1202
+msgid " (use \"git rebase --edit-todo\" to view and edit)"
+msgstr " (используйте «git rebase --edit-todo», чтобы просмотреть и изменить)"
-#: builtin/am.c:2234
-msgid "historical option -- no-op"
-msgstr "историческая опция — ничего не делает"
+#: wt-status.c:1215
+#, c-format
+msgid "You are currently rebasing branch '%s' on '%s'."
+msgstr "Вы сейчас перемещаете ветку «%s» над «%s»."
-#: builtin/am.c:2236
-msgid "allow fall back on 3way merging if needed"
-msgstr "разрешить откатиться к трехходовому слиянию, если нужно"
+#: wt-status.c:1220
+msgid "You are currently rebasing."
+msgstr "Вы сейчас перемещаете ветку."
-#: builtin/am.c:2237 builtin/init-db.c:481 builtin/prune-packed.c:57
-#: builtin/repack.c:172
-msgid "be quiet"
-msgstr "тихий режим"
+#: wt-status.c:1234
+msgid " (fix conflicts and then run \"git rebase --continue\")"
+msgstr " (разрешите конфликты, затем запустите «git rebase --continue»)"
-#: builtin/am.c:2239
-msgid "add a Signed-off-by line to the commit message"
-msgstr "добавить строку Signed-off-by к сообщению коммита"
+#: wt-status.c:1236
+msgid " (use \"git rebase --skip\" to skip this patch)"
+msgstr " (используйте «git rebase --skip», чтобы пропустить этот патч)"
-#: builtin/am.c:2242
-msgid "recode into utf8 (default)"
-msgstr "перекодировать в utf8 (по умолчанию)"
+#: wt-status.c:1238
+msgid " (use \"git rebase --abort\" to check out the original branch)"
+msgstr " (используйте «git rebase --abort», чтобы перейти на оригинальную ветку)"
-#: builtin/am.c:2244
-msgid "pass -k flag to git-mailinfo"
-msgstr "передать флаг -k в git-mailinfo"
+#: wt-status.c:1244
+msgid " (all conflicts fixed: run \"git rebase --continue\")"
+msgstr " (все конфликты разрешены: запустите «git rebase --continue»)"
-#: builtin/am.c:2246
-msgid "pass -b flag to git-mailinfo"
-msgstr "передать флаг -b в git-mailinfo"
+#: wt-status.c:1248
+#, c-format
+msgid ""
+"You are currently splitting a commit while rebasing branch '%s' on '%s'."
+msgstr "Вы сейчас разделяете коммит при перемещении ветки «%s» над «%s»."
-#: builtin/am.c:2248
-msgid "pass -m flag to git-mailinfo"
-msgstr "пеÑ\80едаÑ\82Ñ\8c Ñ\84лаг -m в git-mailinfo"
+#: wt-status.c:1253
+msgid "You are currently splitting a commit during a rebase."
+msgstr "Ð\92Ñ\8b Ñ\81ейÑ\87аÑ\81 Ñ\80азделÑ\8fеÑ\82е коммиÑ\82 пÑ\80и пеÑ\80емеÑ\89ении веÑ\82ки."
-#: builtin/am.c:2250
-msgid "pass --keep-cr flag to git-mailsplit for mbox format"
-msgstr "передать флаг --keep-cr в git-mailsplit для формата mbox"
+#: wt-status.c:1256
+msgid " (Once your working directory is clean, run \"git rebase --continue\")"
+msgstr "(Как только ваш рабочий каталог будет чистый, запустите «git rebase --continue»)"
-#: builtin/am.c:2253
-msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
-msgstr "не передавать --keep-cr флаг в git-mailsplit вне зависимости от am.keepcr"
+#: wt-status.c:1260
+#, c-format
+msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
+msgstr "Вы сейчас редактируете коммит при перемещении ветки «%s» над «%s»."
-#: builtin/am.c:2256
-msgid "strip everything before a scissors line"
-msgstr "обÑ\80езаÑ\82Ñ\8c вÑ\81е до Ñ\81Ñ\82Ñ\80оки обÑ\80езки"
+#: wt-status.c:1265
+msgid "You are currently editing a commit during a rebase."
+msgstr "Ð\92Ñ\8b Ñ\81ейÑ\87аÑ\81 Ñ\80едакÑ\82иÑ\80Ñ\83еÑ\82е коммиÑ\82 пÑ\80и пеÑ\80емеÑ\89ении веÑ\82ки."
-#: builtin/am.c:2257 builtin/apply.c:4837
-msgid "action"
-msgstr "действие"
+#: wt-status.c:1268
+msgid " (use \"git commit --amend\" to amend the current commit)"
+msgstr " (используйте «git commit --amend», чтобы исправить текущий коммит)"
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2270 builtin/am.c:2273 builtin/am.c:2276 builtin/am.c:2279
-#: builtin/am.c:2285
-msgid "pass it through git-apply"
-msgstr "передать его в git-apply"
+#: wt-status.c:1270
+msgid " (use \"git rebase --continue\" once you are satisfied with your changes)"
+msgstr " (используйте «git rebase --continue», когда будете довольны изменениями)"
-#: builtin/am.c:2266 builtin/apply.c:4861
-msgid "root"
-msgstr "корень"
+#: wt-status.c:1280
+#, c-format
+msgid "You are currently cherry-picking commit %s."
+msgstr "Вы копируете коммит %s."
-#: builtin/am.c:2269 builtin/am.c:2272 builtin/apply.c:4799
-#: builtin/apply.c:4802 builtin/clone.c:90 builtin/fetch.c:96
-#: builtin/pull.c:179 builtin/submodule--helper.c:277
-#: builtin/submodule--helper.c:402 builtin/submodule--helper.c:482
-#: builtin/submodule--helper.c:485 builtin/submodule--helper.c:823
-#: builtin/submodule--helper.c:826
-msgid "path"
-msgstr "путь"
+#: wt-status.c:1285
+msgid " (fix conflicts and run \"git cherry-pick --continue\")"
+msgstr " (разрешите конфликты, затем запустите «git cherry-pick --continue»)"
-#: builtin/am.c:2275 builtin/fmt-merge-msg.c:666 builtin/fmt-merge-msg.c:669
-#: builtin/grep.c:706 builtin/merge.c:200 builtin/pull.c:134
-#: builtin/pull.c:193 builtin/repack.c:181 builtin/repack.c:185
-#: builtin/show-branch.c:645 builtin/show-ref.c:175 builtin/tag.c:340
-#: parse-options.h:132 parse-options.h:134 parse-options.h:244
-msgid "n"
-msgstr "n"
+#: wt-status.c:1288
+msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
+msgstr " (все конфликты разрешены: запустите «git cherry-pick --continue»)"
-#: builtin/am.c:2278 builtin/apply.c:4805
-msgid "num"
-msgstr "количество"
+#: wt-status.c:1290
+msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
+msgstr " (используйте «git cherry-pick --abort», чтобы отменить копирования коммита)"
-#: builtin/am.c:2281 builtin/for-each-ref.c:37 builtin/replace.c:438
-#: builtin/tag.c:372
-msgid "format"
-msgstr "формат"
+#: wt-status.c:1299
+#, c-format
+msgid "You are currently reverting commit %s."
+msgstr "Вы сейчас обращаете изменения коммита %s."
-#: builtin/am.c:2282
-msgid "format the patch(es) are in"
-msgstr "формат, в котором находятся патчи"
+#: wt-status.c:1304
+msgid " (fix conflicts and run \"git revert --continue\")"
+msgstr " (разрешите конфликты, затем запустите «git revert --continue»)"
-#: builtin/am.c:2288
-msgid "override error message when patch failure occurs"
-msgstr "переопределить сообщение об ошибке, если не удалось наложить изменения"
+#: wt-status.c:1307
+msgid " (all conflicts fixed: run \"git revert --continue\")"
+msgstr " (все конфликты разрешены: запустите «git revert --continue»)"
-#: builtin/am.c:2290
-msgid "continue applying patches after resolving a conflict"
-msgstr "продолжить применение изменений после разрешения конфиликта"
+#: wt-status.c:1309
+msgid " (use \"git revert --abort\" to cancel the revert operation)"
+msgstr " (используйте «git revert --abort», чтобы отменить операцию обращения изменений коммита)"
-#: builtin/am.c:2293
-msgid "synonyms for --continue"
-msgstr "синоним для --continue"
+#: wt-status.c:1320
+#, c-format
+msgid "You are currently bisecting, started from branch '%s'."
+msgstr "Вы сейчас в процессе двоичного поиска, начатого с ветки «%s»."
-#: builtin/am.c:2296
-msgid "skip the current patch"
-msgstr "пÑ\80опÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\82екÑ\83Ñ\89ий паÑ\82Ñ\87"
+#: wt-status.c:1324
+msgid "You are currently bisecting."
+msgstr "Ð\92Ñ\8b Ñ\81ейÑ\87аÑ\81 в пÑ\80оÑ\86еÑ\81Ñ\81е двоиÑ\87ного поиÑ\81ка."
-#: builtin/am.c:2299
-msgid "restore the original branch and abort the patching operation."
-msgstr "восстановить оригинальную ветку и отменить операцию применения изменений."
+#: wt-status.c:1327
+msgid " (use \"git bisect reset\" to get back to the original branch)"
+msgstr " (используйте «git bisect reset», чтобы вернуться на исходную ветку)"
-#: builtin/am.c:2303
-msgid "lie about committer date"
-msgstr "соврать о дате коммитера"
+#: wt-status.c:1524
+msgid "On branch "
+msgstr "На ветке "
-#: builtin/am.c:2305
-msgid "use current timestamp for author date"
-msgstr "использовать текущее время как время авторства"
+#: wt-status.c:1530
+msgid "interactive rebase in progress; onto "
+msgstr "интерактивное перемещение в процессе; над "
-#: builtin/am.c:2307 builtin/commit.c:1610 builtin/merge.c:229
-#: builtin/pull.c:164 builtin/revert.c:92 builtin/tag.c:355
-msgid "key-id"
-msgstr "key-id"
+#: wt-status.c:1532
+msgid "rebase in progress; onto "
+msgstr "перемещение в процессе; над "
-#: builtin/am.c:2308
-msgid "GPG-sign commits"
-msgstr "подписать коммиты с помощью GPG"
+#: wt-status.c:1537
+msgid "HEAD detached at "
+msgstr "HEAD отделён на "
-#: builtin/am.c:2311
-msgid "(internal use for git-rebase)"
-msgstr "(внутреннее использование для git-rebase)"
+#: wt-status.c:1539
+msgid "HEAD detached from "
+msgstr "HEAD отделён начиная с "
-#: builtin/am.c:2326
-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 "Опция -b/--binary уже долгое время ничего не делает и будет удалена с следующих версиях Git. Пожалуйста, не используйте ее."
+#: wt-status.c:1542
+msgid "Not currently on any branch."
+msgstr "Сейчас ни на одной из веток"
-#: builtin/am.c:2333
-msgid "failed to read the index"
-msgstr "сбой чтения индекса"
+#: wt-status.c:1560
+msgid "Initial commit"
+msgstr "Начальный коммит"
-#: builtin/am.c:2348
-#, c-format
-msgid "previous rebase directory %s still exists but mbox given."
-msgstr "предыдущий каталог перемещения %s еще существует, но передан mbox."
+#: wt-status.c:1574
+msgid "Untracked files"
+msgstr "Неотслеживаемые файлы"
-#: builtin/am.c:2372
+#: wt-status.c:1576
+msgid "Ignored files"
+msgstr "Игнорируемые файлы"
+
+#: wt-status.c:1580
#, c-format
msgid ""
-"Stray %s directory found.\n"
-"Use \"git am --abort\" to remove it."
-msgstr "Найден забытый каталог %s.\nИспользуйте «git am --abort», чтобы удалить его."
+"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 "%.2f секунды занял вывод списка неотслеживаемых файлов. «status -uno» возможно может ускорить это, но будьте внимательны, и не забудьте добавить новые файлы вручную (смотрите «git help status» для подробностей)."
-#: builtin/am.c:2378
-msgid "Resolve operation not in progress, we are not resuming."
-msgstr "Операция разрешения конфликтов не в процессе выполнения, не продолжаем."
+#: wt-status.c:1586
+#, c-format
+msgid "Untracked files not listed%s"
+msgstr "Неотслеживаемые файлы не показаны%s"
-#: builtin/apply.c:122
-msgid "git apply [<options>] [<patch>...]"
-msgstr "git apply [<опции>] [<патч>…]"
+#: wt-status.c:1588
+msgid " (use -u option to show untracked files)"
+msgstr "(используйте опцию «-u», чтобы показать неотслеживаемые файлы)"
-#: builtin/apply.c:153
-#, c-format
-msgid "unrecognized whitespace option '%s'"
-msgstr "неопознанная опция для пробелов «%s»"
+#: wt-status.c:1594
+msgid "No changes"
+msgstr "Нет изменений"
-#: builtin/apply.c:169
+#: wt-status.c:1599
#, c-format
-msgid "unrecognized whitespace ignore option '%s'"
-msgstr "неопознанная опция для игнорирования пробелов «%s»"
+msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+msgstr "нет изменений добавленных для коммита\n(используйте «git add» и/или «git commit -a»)\n"
-#: builtin/apply.c:854
+#: wt-status.c:1602
#, c-format
-msgid "Cannot prepare timestamp regexp %s"
-msgstr "Ð\9dе Ñ\83далоÑ\81Ñ\8c подгоÑ\82овиÑ\82Ñ\8c Ñ\80егÑ\83лÑ\8fÑ\80ное вÑ\8bÑ\80ажение длÑ\8f меÑ\82ки вÑ\80емени %s"
+msgid "no changes added to commit\n"
+msgstr "неÑ\82 изменений добавленнÑ\8bÑ\85 длÑ\8f коммиÑ\82а\n"
-#: builtin/apply.c:863
+#: wt-status.c:1605
#, c-format
-msgid "regexec returned %d for input: %s"
-msgstr "regexec возвратил %d для ввода: %s"
+msgid ""
+"nothing added to commit but untracked files present (use \"git add\" to "
+"track)\n"
+msgstr "ничего не добавлено в коммит, но есть неотслеживаемые файлы (используйте «git add», чтобы отслеживать их)\n"
-#: builtin/apply.c:947
+#: wt-status.c:1608
#, c-format
-msgid "unable to find filename in patch at line %d"
-msgstr "не Ñ\83далоÑ\81Ñ\8c найÑ\82и имÑ\8f Ñ\84айла в Ñ\81Ñ\82Ñ\80оке паÑ\82Ñ\87а %d"
+msgid "nothing added to commit but untracked files present\n"
+msgstr "ниÑ\87его не добавлено в коммиÑ\82, но еÑ\81Ñ\82Ñ\8c неоÑ\82Ñ\81леживаемÑ\8bе Ñ\84айлÑ\8b\n"
-#: builtin/apply.c:984
+#: wt-status.c:1611
#, c-format
-msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
-msgstr "git apply: плохой git-diff — ожидалось /dev/null, получено %s на строке %d"
+msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
+msgstr "нечего коммитить (создайте/скопируйте файлы, затем запустите «git add», чтобы отслеживать их)\n"
-#: builtin/apply.c:989
+#: wt-status.c:1614 wt-status.c:1619
#, c-format
-msgid "git apply: bad git-diff - inconsistent new filename on line %d"
-msgstr "git apply: плохой git-diff — не согласующееся новое имя файла на строке %d"
+msgid "nothing to commit\n"
+msgstr "нечего коммитить\n"
-#: builtin/apply.c:990
+#: wt-status.c:1617
#, c-format
-msgid "git apply: bad git-diff - inconsistent old filename on line %d"
-msgstr "git apply: плохой git-diff — не согласующееся старое имя файла на строке %d"
+msgid "nothing to commit (use -u to show untracked files)\n"
+msgstr "нечего коммитить (используйте опцию «-u», чтобы показать неотслеживаемые файлы)\n"
-#: builtin/apply.c:995
+#: wt-status.c:1621
#, c-format
-msgid "git apply: bad git-diff - expected /dev/null on line %d"
-msgstr "git apply: плохой git-diff — ожидалось /dev/null на строке %d"
+msgid "nothing to commit, working tree clean\n"
+msgstr "нечего коммитить, нет изменений в рабочем каталоге\n"
-#: builtin/apply.c:1489
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount: не ожидаемая строка: %.*s"
+#: wt-status.c:1728
+msgid "Initial commit on "
+msgstr "Начальный коммит на "
-#: builtin/apply.c:1550
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "фрагмент изменений без заголовка на строке %d: %.*s"
+#: wt-status.c:1732
+msgid "HEAD (no branch)"
+msgstr "HEAD (нет ветки)"
-#: builtin/apply.c:1567
-#, 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] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущего компонента пути к файлу (строка %d)"
-msgstr[1] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
-msgstr[2] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
-msgstr[3] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
+#: wt-status.c:1761
+msgid "gone"
+msgstr "исчез"
-#: builtin/apply.c:1743
-msgid "new file depends on old contents"
-msgstr "новÑ\8bй Ñ\84айл завиÑ\81иÑ\82 оÑ\82 Ñ\81Ñ\82аÑ\80ого Ñ\81одеÑ\80жимого"
+#: wt-status.c:1763 wt-status.c:1771
+msgid "behind "
+msgstr "позади"
-#: builtin/apply.c:1745
-msgid "deleted file still has contents"
-msgstr "удаленный файл все еще имеет содержимое"
+#: wt-status.c:1766 wt-status.c:1769
+msgid "ahead "
+msgstr "впереди "
-#: builtin/apply.c:1774
+#. TRANSLATORS: the action is e.g. "pull with rebase"
+#: wt-status.c:2270
#, c-format
-msgid "corrupt patch at line %d"
-msgstr "паÑ\82Ñ\87 повÑ\80ежден на Ñ\81Ñ\82Ñ\80оке %d"
+msgid "cannot %s: You have unstaged changes."
+msgstr "не Ñ\83далоÑ\81Ñ\8c вÑ\8bполниÑ\82Ñ\8c %s: У ваÑ\81 еÑ\81Ñ\82Ñ\8c непÑ\80оиндекÑ\81иÑ\80ованнÑ\8bе изменениÑ\8f."
-#: builtin/apply.c:1810
-#, c-format
-msgid "new file %s depends on old contents"
-msgstr "новый файл %s зависит от старого содержимого"
+#: wt-status.c:2276
+msgid "additionally, your index contains uncommitted changes."
+msgstr "к тому же, в вашем индексе есть незакоммиченные изменения."
-#: builtin/apply.c:1812
+#: wt-status.c:2278
#, c-format
-msgid "deleted file %s still has contents"
-msgstr "удаленный файл %s все еще имеет содержимое"
+msgid "cannot %s: Your index contains uncommitted changes."
+msgstr "не удалось выполнить %s: В вашем индексе есть незакоммиченные изменения."
-#: builtin/apply.c:1815
+#: compat/precompose_utf8.c:57 builtin/clone.c:414
#, c-format
-msgid "** warning: file %s becomes empty but is not deleted"
-msgstr "** предупреждение: файл %s становится пустым, но не удаляется"
+msgid "failed to unlink '%s'"
+msgstr "сбой отсоединения «%s»"
-#: builtin/apply.c:1962
-#, c-format
-msgid "corrupt binary patch at line %d: %.*s"
-msgstr "поврежденный двоичный патч на строке %d: %.*s"
+#: builtin/add.c:22
+msgid "git add [<options>] [--] <pathspec>..."
+msgstr "git add [<опции>] [--] <спецификация-пути>…"
-#: builtin/apply.c:1999
+#: builtin/add.c:80
#, c-format
-msgid "unrecognized binary patch at line %d"
-msgstr "неопознанный двоичный патч на строке %d"
+msgid "unexpected diff status %c"
+msgstr "неожиданный статус различий %c"
+
+#: builtin/add.c:85 builtin/commit.c:291
+msgid "updating files failed"
+msgstr "сбой при обновлении файлов"
-#: builtin/apply.c:2154
+#: builtin/add.c:95
#, c-format
-msgid "patch with only garbage at line %d"
-msgstr "патч с мусором на строке %d"
+msgid "remove '%s'\n"
+msgstr "удалить «%s»\n"
+
+#: builtin/add.c:149
+msgid "Unstaged changes after refreshing the index:"
+msgstr "Непроиндексированные изменения после обновления индекса:"
-#: builtin/apply.c:2244
+#: builtin/add.c:209 builtin/rev-parse.c:840
+msgid "Could not read the index"
+msgstr "Не удалось прочитать индекс"
+
+#: builtin/add.c:220
#, c-format
-msgid "unable to read symlink %s"
-msgstr "не удалось прочитать символьную ссылку %s"
+msgid "Could not open '%s' for writing."
+msgstr "Не удалось открыть «%s» для записи."
+
+#: builtin/add.c:224
+msgid "Could not write patch"
+msgstr "Не удалось записать патч"
+
+#: builtin/add.c:227
+msgid "editing patch failed"
+msgstr "сбой при редактировании патча"
-#: builtin/apply.c:2248
+#: builtin/add.c:230
#, c-format
-msgid "unable to open or read %s"
-msgstr "не удалось открыть или прочесть %s"
+msgid "Could not stat '%s'"
+msgstr "Не удалось выполнить stat для «%s»"
+
+#: builtin/add.c:232
+msgid "Empty patch. Aborted."
+msgstr "Пустой патч. Операция прервана."
-#: builtin/apply.c:2901
+#: builtin/add.c:237
#, c-format
-msgid "invalid start of line: '%c'"
-msgstr "неправильное начало строки: «%c»"
+msgid "Could not apply '%s'"
+msgstr "Не удалось применить «%s»"
+
+#: builtin/add.c:247
+msgid "The following paths are ignored by one of your .gitignore files:\n"
+msgstr "Следующие пути игнорируются одним из ваших файлов .gitignore:\n"
+
+#: builtin/add.c:266 builtin/clean.c:870 builtin/fetch.c:115 builtin/mv.c:111
+#: builtin/prune-packed.c:55 builtin/pull.c:198 builtin/push.c:521
+#: builtin/remote.c:1326 builtin/rm.c:268 builtin/send-pack.c:162
+msgid "dry run"
+msgstr "пробный запуск"
+
+#: builtin/add.c:269
+msgid "interactive picking"
+msgstr "интерактивный выбор"
+
+#: builtin/add.c:270 builtin/checkout.c:1156 builtin/reset.c:286
+msgid "select hunks interactively"
+msgstr "интерактивный выбор блоков"
+
+#: builtin/add.c:271
+msgid "edit current diff and apply"
+msgstr "отредактировать текущий файл различий и применить его"
+
+#: builtin/add.c:272
+msgid "allow adding otherwise ignored files"
+msgstr "разрешить добавление игнорируемых иначе файлов"
+
+#: builtin/add.c:273
+msgid "update tracked files"
+msgstr "обновить отслеживаемые файлы"
+
+#: builtin/add.c:274
+msgid "record only the fact that the path will be added later"
+msgstr "записать только факт, что путь будет добавлен позже"
+
+#: builtin/add.c:275
+msgid "add changes from all tracked and untracked files"
+msgstr "добавить изменения из всех отслеживаемых и неотслеживаемых файлов"
+
+#: builtin/add.c:278
+msgid "ignore paths removed in the working tree (same as --no-all)"
+msgstr "игнорировать пути удаленные из рабочего каталога (тоже, что и --no-all)"
-#: builtin/apply.c:3020
+#: builtin/add.c:280
+msgid "don't add, only refresh the index"
+msgstr "не добавлять, только обновить индекс"
+
+#: builtin/add.c:281
+msgid "just skip files which cannot be added because of errors"
+msgstr "пропускать файлы, которые не могут быть добавлены из-за ошибок"
+
+#: builtin/add.c:282
+msgid "check if - even missing - files are ignored in dry run"
+msgstr "удостовериться, что даже недостающие файлы будут проигнорированы при пробном запуске"
+
+#: builtin/add.c:283 builtin/update-index.c:947
+msgid "(+/-)x"
+msgstr "(+/-)x"
+
+#: builtin/add.c:283 builtin/update-index.c:948
+msgid "override the executable bit of the listed files"
+msgstr "переопределить бит выполнения на указанных файлах"
+
+#: builtin/add.c:305
#, c-format
-msgid "Hunk #%d succeeded at %d (offset %d line)."
-msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
-msgstr[0] "Часть #%d успешно применена на %d (со сдвигом в %d строку)."
-msgstr[1] "Часть #%d успешно применена на %d (со сдвигом в %d строки)."
-msgstr[2] "Часть #%d успешно применена на %d (со сдвигом в %d строк)."
-msgstr[3] "Часть #%d успешно применена на %d (со сдвигом в %d строк)."
+msgid "Use -f if you really want to add them.\n"
+msgstr "Используйте -f, если вы действительно хотите добавить их.\n"
+
+#: builtin/add.c:312
+msgid "adding files failed"
+msgstr "ошибка при добавлении файлов"
+
+#: builtin/add.c:348
+msgid "-A and -u are mutually incompatible"
+msgstr "-A и -u нельзя использовать одновременно"
+
+#: builtin/add.c:355
+msgid "Option --ignore-missing can only be used together with --dry-run"
+msgstr "Опция --ignore-missing может использоваться только вместе с --dry-run"
-#: builtin/apply.c:3032
+#: builtin/add.c:359
#, c-format
-msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
-msgstr "Ð\9aонÑ\82екÑ\81Ñ\82 Ñ\81Ñ\83жен до (%ld/%ld), Ñ\87Ñ\82обÑ\8b пÑ\80имениÑ\82Ñ\8c Ñ\84Ñ\80агменÑ\82 на %d Ñ\81Ñ\82Ñ\80оке"
+msgid "--chmod param '%s' must be either -x or +x"
+msgstr "паÑ\80амеÑ\82Ñ\80 --chmod «%s» должен бÑ\8bÑ\82Ñ\8c -x или +x"
-#: builtin/apply.c:3038
+#: builtin/add.c:374
#, c-format
-msgid ""
-"while searching for:\n"
-"%.*s"
-msgstr "при поиске:\n%.*s"
+msgid "Nothing specified, nothing added.\n"
+msgstr "Ничего не указано, ничего не добавлено.\n"
-#: builtin/apply.c:3060
+#: builtin/add.c:375
#, c-format
-msgid "missing binary patch data for '%s'"
-msgstr "пÑ\80опÑ\83Ñ\89енÑ\8b даннÑ\8bе двоиÑ\87ного паÑ\82Ñ\87а длÑ\8f «%s»"
+msgid "Maybe you wanted to say 'git add .'?\n"
+msgstr "Ð\92озможно, вÑ\8b имели в видÑ\83 «git add .»?\n"
-#: builtin/apply.c:3163
-#, c-format
-msgid "binary patch does not apply to '%s'"
-msgstr "не удалось применить двоичный патч к «%s»"
+#: builtin/add.c:380 builtin/check-ignore.c:172 builtin/checkout.c:279
+#: builtin/checkout.c:472 builtin/clean.c:914 builtin/commit.c:350
+#: builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298
+#: builtin/submodule--helper.c:244
+msgid "index file corrupt"
+msgstr "файл индекса поврежден"
-#: builtin/apply.c:3169
-#, c-format
-msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
-msgstr "после применения двоичного патча для «%s» был получен неправильный результат (ожидалось %s, получено %s)"
+#: builtin/am.c:414
+msgid "could not parse author script"
+msgstr "не удалось разобрать сценарий авторства"
-#: builtin/apply.c:3190
+#: builtin/am.c:491
#, c-format
-msgid "patch failed: %s:%ld"
-msgstr "ошибка применения изменений: %s:%ld"
+msgid "'%s' was deleted by the applypatch-msg hook"
+msgstr "«%s» был удален перехватчиком applypatch-msg"
-#: builtin/apply.c:3314
+#: builtin/am.c:532
#, c-format
-msgid "cannot checkout %s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c пеÑ\80еклÑ\8eÑ\87иÑ\82Ñ\8c Ñ\81оÑ\81Ñ\82оÑ\8fние на %s"
+msgid "Malformed input line: '%s'."
+msgstr "Ð\9dепÑ\80авилÑ\8cнаÑ\8f Ñ\81Ñ\82Ñ\80ока ввода: «%s»."
-#: builtin/apply.c:3370
+#: builtin/am.c:569
#, c-format
-msgid "reading from '%s' beyond a symbolic link"
-msgstr "чтение из «%s» за символической ссылкой"
+msgid "Failed to copy notes from '%s' to '%s'"
+msgstr "Не удалось скопировать заметку из «%s» в «%s»"
-#: builtin/apply.c:3399 builtin/apply.c:3630
-#, c-format
-msgid "path %s has been renamed/deleted"
-msgstr "путь %s был переименован/удален"
+#: builtin/am.c:595
+msgid "fseek failed"
+msgstr "сбой при выполнении fseek"
-#: builtin/apply.c:3482 builtin/apply.c:3644
+#: builtin/am.c:775
#, c-format
-msgid "%s: does not exist in index"
-msgstr "%s: нет в индексе"
+msgid "could not parse patch '%s'"
+msgstr "не удалось разобрать патч «%s»"
-#: builtin/apply.c:3486 builtin/apply.c:3636 builtin/apply.c:3658
-#, c-format
-msgid "%s: %s"
-msgstr "%s: %s"
+#: builtin/am.c:840
+msgid "Only one StGIT patch series can be applied at once"
+msgstr "Только серия патчей StGIT может быть применена за раз"
-#: builtin/apply.c:3491 builtin/apply.c:3652
-#, c-format
-msgid "%s: does not match index"
-msgstr "%s: не совпадает с индексом"
+#: builtin/am.c:887
+msgid "invalid timestamp"
+msgstr "недопустимая метка даты/времени"
-#: builtin/apply.c:3597
-msgid "removal patch leaves file contents"
-msgstr "паÑ\82Ñ\87 Ñ\83далениÑ\8f не Ñ\83далил Ñ\81одеÑ\80жимое Ñ\84айла"
+#: builtin/am.c:890 builtin/am.c:898
+msgid "invalid Date line"
+msgstr "недопÑ\83Ñ\81Ñ\82имаÑ\8f Ñ\81Ñ\82Ñ\80ока даÑ\82Ñ\8b"
-#: builtin/apply.c:3669
-#, c-format
-msgid "%s: wrong type"
-msgstr "%s: неправильный тип"
+#: builtin/am.c:895
+msgid "invalid timezone offset"
+msgstr "недопустимое смещение часового пояса"
-#: builtin/apply.c:3671
-#, c-format
-msgid "%s has type %o, expected %o"
-msgstr "%s имеет тип %o, а ожидался %o"
+#: builtin/am.c:984
+msgid "Patch format detection failed."
+msgstr "Сбой определения формата патча."
-#: builtin/apply.c:3822 builtin/apply.c:3824
+#: builtin/am.c:989 builtin/clone.c:379
#, c-format
-msgid "invalid path '%s'"
-msgstr "неправильный путь «%s»"
+msgid "failed to create directory '%s'"
+msgstr "не удалось создать каталог «%s»"
-#: builtin/apply.c:3879
-#, c-format
-msgid "%s: already exists in index"
-msgstr "%s: уже содержится в индексе"
+#: builtin/am.c:993
+msgid "Failed to split patches."
+msgstr "Не удалось разделить патчи на части."
-#: builtin/apply.c:3882
-#, c-format
-msgid "%s: already exists in working directory"
-msgstr "%s: уже содержится в рабочем каталоге"
+#: builtin/am.c:1125 builtin/commit.c:376
+msgid "unable to write index file"
+msgstr "не удалось записать индекс"
-#: builtin/apply.c:3902
+#: builtin/am.c:1176
#, c-format
-msgid "new mode (%o) of %s does not match old mode (%o)"
-msgstr "новÑ\8bй Ñ\80ежим доÑ\81Ñ\82Ñ\83па (%o) длÑ\8f %s не Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83еÑ\82 Ñ\81Ñ\82аÑ\80омÑ\83 Ñ\80ежимÑ\83 доÑ\81Ñ\82Ñ\83па (%o)"
+msgid "When you have resolved this problem, run \"%s --continue\"."
+msgstr "Ð\9aогда вÑ\8b Ñ\83Ñ\81Ñ\82Ñ\80аниÑ\82е Ñ\8dÑ\82Ñ\83 пÑ\80облемÑ\83, запÑ\83Ñ\81Ñ\82иÑ\82е «%s --continue»."
-#: builtin/apply.c:3907
+#: builtin/am.c:1177
#, c-format
-msgid "new mode (%o) of %s does not match old mode (%o) of %s"
-msgstr "новÑ\8bй Ñ\80ежим доÑ\81Ñ\82Ñ\83па (%o) длÑ\8f %s не Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83еÑ\82 Ñ\81Ñ\82аÑ\80омÑ\83 Ñ\80ежимÑ\83 доÑ\81Ñ\82Ñ\83па (%o) длÑ\8f %s"
+msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
+msgstr "Ð\95Ñ\81ли вÑ\8b Ñ\85оÑ\82иÑ\82е пÑ\80опÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\8dÑ\82оÑ\82 паÑ\82Ñ\87, Ñ\82о запÑ\83Ñ\81Ñ\82иÑ\82е «%s --skip»."
-#: builtin/apply.c:3927
+#: builtin/am.c:1178
#, c-format
-msgid "affected file '%s' is beyond a symbolic link"
-msgstr "заÑ\82Ñ\80онÑ\83Ñ\82Ñ\8bй Ñ\84айл «%s» наÑ\85одиÑ\82Ñ\81Ñ\8f за Ñ\81имволиÑ\87еÑ\81кой Ñ\81Ñ\81Ñ\8bлкой"
+msgid "To restore the original branch and stop patching, run \"%s --abort\"."
+msgstr "ЧÑ\82обÑ\8b веÑ\80нÑ\83Ñ\82Ñ\8cÑ\81Ñ\8f на пÑ\80едÑ\8bдÑ\83Ñ\89Ñ\83Ñ\8e веÑ\82кÑ\83 и оÑ\81Ñ\82ановиÑ\82Ñ\8c пÑ\80именение изменений, запÑ\83Ñ\81Ñ\82иÑ\82е «%s --abort»."
-#: builtin/apply.c:3931
-#, c-format
-msgid "%s: patch does not apply"
-msgstr "%s: не удалось применить патч"
+#: builtin/am.c:1316
+msgid "Patch is empty. Was it split wrong?"
+msgstr "Патч пуст. Возможно, он был неправильно разделён?"
-#: builtin/apply.c:3945
+#: builtin/am.c:1390 builtin/log.c:1550
#, c-format
-msgid "Checking patch %s..."
-msgstr "Ð\9fÑ\80овеÑ\80ка паÑ\82Ñ\87а %sâ\80¦"
+msgid "invalid ident line: %s"
+msgstr "непÑ\80авилÑ\8cнаÑ\8f Ñ\81Ñ\82Ñ\80ока иденÑ\82иÑ\84икаÑ\86ии: %s"
-#: builtin/apply.c:4038 builtin/checkout.c:233 builtin/reset.c:135
+#: builtin/am.c:1417
#, c-format
-msgid "make_cache_entry failed for path '%s'"
-msgstr "сбой make_cache_entry для пути «%s»"
+msgid "unable to parse commit %s"
+msgstr "не удалось разобрать коммит %s"
-#: builtin/apply.c:4182
-#, c-format
-msgid "unable to remove %s from index"
-msgstr "не удалось удалить %s из индекса"
+#: builtin/am.c:1610
+msgid "Repository lacks necessary blobs to fall back on 3-way merge."
+msgstr "В репозитории отсутствуют двоичные объекты, необходимые для отката к трехходовому слиянию."
-#: builtin/apply.c:4215
-#, c-format
-msgid "corrupt patch for submodule %s"
-msgstr "поврежденный патч для подмодуля %s"
+#: builtin/am.c:1612
+msgid "Using index info to reconstruct a base tree..."
+msgstr "Использую индекс для реконструкции базового дерева…"
-#: builtin/apply.c:4219
-#, c-format
-msgid "unable to stat newly created file '%s'"
-msgstr "не удалось выполнить stat для созданного файла «%s»"
+#: builtin/am.c:1631
+msgid ""
+"Did you hand edit your patch?\n"
+"It does not apply to blobs recorded in its index."
+msgstr "Вы вручную изменяли патч?\nОн не накладывается без ошибок на двоичные объекты, записанные в его заголовке."
-#: builtin/apply.c:4224
-#, c-format
-msgid "unable to create backing store for newly created file %s"
-msgstr "не удалось создать вспомогательный файл для созданного файла %s"
+#: builtin/am.c:1637
+msgid "Falling back to patching base and 3-way merge..."
+msgstr "Откат к применению изменений к базовому коммиту с помощью трехходового слияния…"
-#: builtin/apply.c:4227 builtin/apply.c:4340
-#, c-format
-msgid "unable to add cache entry for %s"
-msgstr "не удалось создать запись в кэше для %s"
+#: builtin/am.c:1662
+msgid "Failed to merge in the changes."
+msgstr "Не удалось слить изменения."
-#: builtin/apply.c:4260
-#, c-format
-msgid "closing file '%s'"
-msgstr "закрытие файла «%s»"
+#: builtin/am.c:1686 builtin/merge.c:628
+msgid "git write-tree failed to write a tree"
+msgstr "git write-tree не удалось записать дерево"
-#: builtin/apply.c:4313
-#, c-format
-msgid "unable to write file '%s' mode %o"
-msgstr "не удалось записать файл «%s» с режимом доступа %o"
+#: builtin/am.c:1693
+msgid "applying to an empty history"
+msgstr "применение к пустой истории"
-#: builtin/apply.c:4403
+#: builtin/am.c:1706 builtin/commit.c:1769 builtin/merge.c:798
+#: builtin/merge.c:823
+msgid "failed to write commit object"
+msgstr "сбой записи объекта коммита"
+
+#: builtin/am.c:1739 builtin/am.c:1743
#, c-format
-msgid "Applied patch %s cleanly."
-msgstr "Ð\9fаÑ\82Ñ\87 %s пÑ\80именен без оÑ\88ибок."
+msgid "cannot resume: %s does not exist."
+msgstr "нелÑ\8cзÑ\8f пÑ\80одолжниÑ\82Ñ\8c: %s не Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 "
-#: builtin/apply.c:4411
-msgid "internal error"
-msgstr "внутренняя ошибка"
+#: builtin/am.c:1759
+msgid "cannot be interactive without stdin connected to a terminal."
+msgstr "не удалось использовать интерактивное поведение, без stdin подключенного к терминалу."
+
+#: builtin/am.c:1764
+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.
+#: builtin/am.c:1774
+msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
+msgstr "Применить? [y] - да/[n] - нет/[e] - редактировать/[v] - просмотреть патч/[a] - применить всё: "
-#: builtin/apply.c:4414
+#: builtin/am.c:1824
#, c-format
-msgid "Applying patch %%s with %d reject..."
-msgid_plural "Applying patch %%s with %d rejects..."
-msgstr[0] "Применение патча %%s с %d отказом…"
-msgstr[1] "Применение патча %%s с %d отказами…"
-msgstr[2] "Применение патча %%s с %d отказами…"
-msgstr[3] "Применение патча %%s с %d отказами…"
+msgid "Dirty index: cannot apply patches (dirty: %s)"
+msgstr "Индекс не пустой: нельзя применять патчи (в индексе: %s)"
-#: builtin/apply.c:4424
+#: builtin/am.c:1861 builtin/am.c:1933
#, c-format
-msgid "truncating .rej filename to %.*s.rej"
-msgstr "усечение имени .rej файла до %.*s.rej"
+msgid "Applying: %.*s"
+msgstr "Применение: %.*s"
+
+#: builtin/am.c:1877
+msgid "No changes -- Patch already applied."
+msgstr "Нет изменений — Патч уже применен."
-#: builtin/apply.c:4432
+#: builtin/am.c:1885
#, c-format
-msgid "cannot open %s: %s"
-msgstr "не Ñ\83далоÑ\81Ñ\8c оÑ\82кÑ\80Ñ\8bÑ\82Ñ\8c %s: %s"
+msgid "Patch failed at %s %.*s"
+msgstr "Ð\9eÑ\88ибка пÑ\80именениÑ\8f изменений на %s %.*s"
-#: builtin/apply.c:4445
+#: builtin/am.c:1891
#, c-format
-msgid "Hunk #%d applied cleanly."
-msgstr "Блок №%d применен без ошибок."
+msgid "The copy of the patch that failed is found in: %s"
+msgstr "Копию изменений, которые не удалось применить, вы можете найти в: %s"
+
+#: builtin/am.c:1936
+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 add»?\nЕсли ничего не осталось для индексации, то, скорее всего, что-то другое уже сделало те же изменения; возможно, вам следует пропустить этот патч."
+
+#: builtin/am.c:1943
+msgid ""
+"You still have unmerged paths in your index.\n"
+"Did you forget to use 'git add'?"
+msgstr "У вас все еще имеются не слитые пути в индексе.\nВозможно, вы забыли вызвать «git add»?"
-#: builtin/apply.c:4448
+#: builtin/am.c:2051 builtin/am.c:2055 builtin/am.c:2067 builtin/reset.c:308
+#: builtin/reset.c:316
#, c-format
-msgid "Rejected hunk #%d."
-msgstr "Блок №%d отклонен."
+msgid "Could not parse object '%s'."
+msgstr "Не удалось разобрать объект «%s»."
+
+#: builtin/am.c:2103
+msgid "failed to clean index"
+msgstr "не удалось очистить индекс"
+
+#: builtin/am.c:2137
+msgid ""
+"You seem to have moved HEAD since the last 'am' failure.\n"
+"Not rewinding to ORIG_HEAD"
+msgstr "Похоже, что вы переместили HEAD с момента последней ошибки выполнения «am».\nПеремотка на ORIG_HEAD не выполняется"
-#: builtin/apply.c:4537
+#: builtin/am.c:2200
#, c-format
-msgid "Skipped patch '%s'."
-msgstr "Ð\9fаÑ\82Ñ\87 «%s» пÑ\80опÑ\83Ñ\89ен."
+msgid "Invalid value for --patch-format: %s"
+msgstr "Ð\9dепÑ\80авилÑ\8cное знаÑ\87ение длÑ\8f --patch-format: %s"
-#: builtin/apply.c:4545
-msgid "unrecognized input"
-msgstr "не распознанный ввод"
+#: builtin/am.c:2233
+msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
+msgstr "git am [<опции>] [(<mbox> | <Maildir>)…]"
-#: builtin/apply.c:4556
-msgid "unable to read index file"
-msgstr "не удалось прочитать файл индекса"
+#: builtin/am.c:2234
+msgid "git am [<options>] (--continue | --skip | --abort)"
+msgstr "git am [<опции>] (--continue | --skip | --abort)"
-#: builtin/apply.c:4701
-msgid "--3way outside a repository"
-msgstr "--3way вне репозитория"
+#: builtin/am.c:2240
+msgid "run interactively"
+msgstr "запустить в интерактивном режиме"
-#: builtin/apply.c:4709
-msgid "--index outside a repository"
-msgstr "--index вне репозитория"
+#: builtin/am.c:2242
+msgid "historical option -- no-op"
+msgstr "историческая опция — ничего не делает"
-#: builtin/apply.c:4712
-msgid "--cached outside a repository"
-msgstr "--cached вне репозитория"
+#: builtin/am.c:2244
+msgid "allow fall back on 3way merging if needed"
+msgstr "разрешить откатиться к трехходовому слиянию, если нужно"
-#: builtin/apply.c:4745
-#, c-format
-msgid "can't open patch '%s'"
-msgstr "не удалось открыть патч «%s»"
+#: builtin/am.c:2245 builtin/init-db.c:483 builtin/prune-packed.c:57
+#: builtin/repack.c:172
+msgid "be quiet"
+msgstr "тихий режим"
-#: builtin/apply.c:4760
-#, c-format
-msgid "squelched %d whitespace error"
-msgid_plural "squelched %d whitespace errors"
-msgstr[0] "пропущена %d ошибка в пробельных символах"
-msgstr[1] "пропущено %d ошибки в пробельных символах"
-msgstr[2] "пропущено %d ошибок в пробельных символах"
-msgstr[3] "пропущено %d ошибок в пробельных символах"
+#: builtin/am.c:2247
+msgid "add a Signed-off-by line to the commit message"
+msgstr "добавить строку Signed-off-by к сообщению коммита"
-#: builtin/apply.c:4766 builtin/apply.c:4776
-#, c-format
-msgid "%d line adds whitespace errors."
-msgid_plural "%d lines add whitespace errors."
-msgstr[0] "%d строка добавила ошибки в пробельных символах."
-msgstr[1] "%d строки добавили ошибки в пробельных символах."
-msgstr[2] "%d строк добавили ошибки в пробельных символах."
-msgstr[3] "%d строк добавили ошибки в пробельных символах."
+#: builtin/am.c:2250
+msgid "recode into utf8 (default)"
+msgstr "перекодировать в utf8 (по умолчанию)"
-#: builtin/apply.c:4800
-msgid "don't apply changes matching the given path"
-msgstr "не пÑ\80именÑ\8fÑ\82Ñ\8c изменениÑ\8f по Ñ\83казанномÑ\83 пÑ\83Ñ\82и"
+#: builtin/am.c:2252
+msgid "pass -k flag to git-mailinfo"
+msgstr "пеÑ\80едаÑ\82Ñ\8c Ñ\84лаг -k в git-mailinfo"
-#: builtin/apply.c:4803
-msgid "apply changes matching the given path"
-msgstr "применять изменения по указанному пути"
+#: builtin/am.c:2254
+msgid "pass -b flag to git-mailinfo"
+msgstr "передать флаг -b в git-mailinfo"
-#: builtin/apply.c:4806
-msgid "remove <num> leading slashes from traditional diff paths"
-msgstr "удалить <количество> ведущих косых черт из традиционных путей списка изменений"
+#: builtin/am.c:2256
+msgid "pass -m flag to git-mailinfo"
+msgstr "передать флаг -m в git-mailinfo"
-#: builtin/apply.c:4809
-msgid "ignore additions made by the patch"
-msgstr "игноÑ\80иÑ\80оваÑ\82Ñ\8c добавлениÑ\8f, Ñ\81деланнÑ\8bе Ñ\8dÑ\82им паÑ\82Ñ\87ем"
+#: builtin/am.c:2258
+msgid "pass --keep-cr flag to git-mailsplit for mbox format"
+msgstr "пеÑ\80едаÑ\82Ñ\8c Ñ\84лаг --keep-cr в git-mailsplit длÑ\8f Ñ\84оÑ\80маÑ\82а mbox"
-#: builtin/apply.c:4811
-msgid "instead of applying the patch, output diffstat for the input"
-msgstr "вмеÑ\81Ñ\82о пÑ\80именениÑ\8f паÑ\82Ñ\87а вÑ\8bвеÑ\81Ñ\82и Ñ\81Ñ\82аÑ\82иÑ\81Ñ\82икÑ\83 добавлений и Ñ\83далений длÑ\8f ввода"
+#: builtin/am.c:2261
+msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
+msgstr "не пеÑ\80едаваÑ\82Ñ\8c --keep-cr Ñ\84лаг в git-mailsplit вне завиÑ\81имоÑ\81Ñ\82и оÑ\82 am.keepcr"
-#: builtin/apply.c:4815
-msgid "show number of added and deleted lines in decimal notation"
-msgstr "показаÑ\82Ñ\8c колиÑ\87еÑ\81Ñ\82во добавленнÑ\8bÑ\85 и Ñ\83даленнÑ\8bÑ\85 Ñ\81Ñ\82Ñ\80ок в деÑ\81Ñ\8fÑ\82иÑ\87ном пÑ\80едÑ\81Ñ\82авлении"
+#: builtin/am.c:2264
+msgid "strip everything before a scissors line"
+msgstr "обÑ\80езаÑ\82Ñ\8c вÑ\81е до Ñ\81Ñ\82Ñ\80оки обÑ\80езки"
-#: builtin/apply.c:4817
-msgid "instead of applying the patch, output a summary for the input"
-msgstr "вместо применения патча вывести статистику изменений для ввода"
+#: builtin/am.c:2266 builtin/am.c:2269 builtin/am.c:2272 builtin/am.c:2275
+#: builtin/am.c:2278 builtin/am.c:2281 builtin/am.c:2284 builtin/am.c:2287
+#: builtin/am.c:2293
+msgid "pass it through git-apply"
+msgstr "передать его в git-apply"
-#: builtin/apply.c:4819
-msgid "instead of applying the patch, see if the patch is applicable"
-msgstr "вместо применения патча проверить подходит ли он"
+#: builtin/am.c:2283 builtin/fmt-merge-msg.c:662 builtin/fmt-merge-msg.c:665
+#: builtin/grep.c:707 builtin/merge.c:200 builtin/pull.c:135
+#: builtin/pull.c:194 builtin/repack.c:181 builtin/repack.c:185
+#: builtin/show-branch.c:644 builtin/show-ref.c:175 builtin/tag.c:340
+#: parse-options.h:132 parse-options.h:134 parse-options.h:245
+msgid "n"
+msgstr "n"
-#: builtin/apply.c:4821
-msgid "make sure the patch is applicable to the current index"
-msgstr "проверить, что патч применяется к текущему индексу"
+#: builtin/am.c:2289 builtin/for-each-ref.c:37 builtin/replace.c:438
+#: builtin/tag.c:372
+msgid "format"
+msgstr "формат"
-#: builtin/apply.c:4823
-msgid "apply a patch without touching the working tree"
-msgstr "применить патч, не изменяя рабочий каталог"
+#: builtin/am.c:2290
+msgid "format the patch(es) are in"
+msgstr "формат, в котором находятся патчи"
-#: builtin/apply.c:4825
-msgid "accept a patch that touches outside the working area"
-msgstr "принять патч, который затрагивает файлы за рабочим каталогом"
+#: builtin/am.c:2296
+msgid "override error message when patch failure occurs"
+msgstr "переопределить сообщение об ошибке, если не удалось наложить изменения"
-#: builtin/apply.c:4827
-msgid "also apply the patch (use with --stat/--summary/--check)"
-msgstr "а Ñ\82акже пÑ\80имениÑ\82Ñ\8c паÑ\82Ñ\87 (иÑ\81полÑ\8cзÑ\83йÑ\82е Ñ\81 --stat/--summary/--check)"
+#: builtin/am.c:2298
+msgid "continue applying patches after resolving a conflict"
+msgstr "пÑ\80одолжиÑ\82Ñ\8c пÑ\80именение изменений поÑ\81ле Ñ\80азÑ\80еÑ\88ениÑ\8f конÑ\84иликÑ\82а"
-#: builtin/apply.c:4829
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "попытаться сделать трехходовое слияние, если патч не применяется"
+#: builtin/am.c:2301
+msgid "synonyms for --continue"
+msgstr "синоним для --continue"
-#: builtin/apply.c:4831
-msgid "build a temporary index based on embedded index information"
-msgstr "построить временный индекс, основанный на встроенной информации об индексе"
+#: builtin/am.c:2304
+msgid "skip the current patch"
+msgstr "пропустить текущий патч"
-#: builtin/apply.c:4834 builtin/checkout-index.c:169 builtin/ls-files.c:426
-msgid "paths are separated with NUL character"
-msgstr "пÑ\83Ñ\82и, оÑ\82делÑ\91ннÑ\8bе Ð\9dУÐ\9bÐ\95Ð\92ЫÐ\9c Ñ\81имволом"
+#: builtin/am.c:2307
+msgid "restore the original branch and abort the patching operation."
+msgstr "воÑ\81Ñ\81Ñ\82ановиÑ\82Ñ\8c оÑ\80игиналÑ\8cнÑ\83Ñ\8e веÑ\82кÑ\83 и оÑ\82мениÑ\82Ñ\8c опеÑ\80аÑ\86иÑ\8e пÑ\80именениÑ\8f изменений."
-#: builtin/apply.c:4836
-msgid "ensure at least <n> lines of context match"
-msgstr "Ñ\83доÑ\81Ñ\82овеÑ\80иÑ\82Ñ\8cÑ\81Ñ\8f, Ñ\87Ñ\82о по кÑ\80айней меÑ\80е <n> Ñ\81Ñ\82Ñ\80ок конÑ\82екÑ\81Ñ\82а Ñ\81овпадаÑ\8eÑ\82"
+#: builtin/am.c:2311
+msgid "lie about committer date"
+msgstr "Ñ\81овÑ\80аÑ\82Ñ\8c о даÑ\82е коммиÑ\82еÑ\80а"
-#: builtin/apply.c:4838
-msgid "detect new or modified lines that have whitespace errors"
-msgstr "опÑ\80еделÑ\8fÑ\82Ñ\8c новÑ\8bе или модиÑ\84иÑ\86иÑ\80ованнÑ\8bе Ñ\81Ñ\82Ñ\80оки, Ñ\83 коÑ\82оÑ\80Ñ\8bÑ\85 еÑ\81Ñ\82Ñ\8c оÑ\88ибки в пÑ\80обелÑ\8cнÑ\8bÑ\85 Ñ\81имволаÑ\85"
+#: builtin/am.c:2313
+msgid "use current timestamp for author date"
+msgstr "иÑ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\82екÑ\83Ñ\89ее вÑ\80емÑ\8f как вÑ\80емÑ\8f авÑ\82оÑ\80Ñ\81Ñ\82ва"
-#: builtin/apply.c:4841 builtin/apply.c:4844
-msgid "ignore changes in whitespace when finding context"
-msgstr "игнорировать изменения в пробельных символах при поиске контекста"
+#: builtin/am.c:2315 builtin/commit.c:1605 builtin/merge.c:229
+#: builtin/pull.c:165 builtin/revert.c:92 builtin/tag.c:355
+msgid "key-id"
+msgstr "key-id"
-#: builtin/apply.c:4847
-msgid "apply the patch in reverse"
-msgstr "применить патч с обращением изменений"
+#: builtin/am.c:2316
+msgid "GPG-sign commits"
+msgstr "подписать коммиты с помощью GPG"
-#: builtin/apply.c:4849
-msgid "don't expect at least one line of context"
-msgstr "не ожидать как минимум одной строки контекста"
+#: builtin/am.c:2319
+msgid "(internal use for git-rebase)"
+msgstr "(внутреннее использование для git-rebase)"
-#: builtin/apply.c:4851
-msgid "leave the rejected hunks in corresponding *.rej files"
-msgstr "оставить отклоненные блоки изменений в соответствующих *.rej файлах"
+#: builtin/am.c:2334
+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 "Опция -b/--binary уже долгое время ничего не делает и будет удалена с следующих версиях Git. Пожалуйста, не используйте ее."
-#: builtin/apply.c:4853
-msgid "allow overlapping hunks"
-msgstr "Ñ\80азÑ\80еÑ\88иÑ\82Ñ\8c пеÑ\80екÑ\80Ñ\8bваÑ\8eÑ\89иеÑ\81Ñ\8f блоки изменений"
+#: builtin/am.c:2341
+msgid "failed to read the index"
+msgstr "Ñ\81бой Ñ\87Ñ\82ениÑ\8f индекÑ\81а"
-#: builtin/apply.c:4856
-msgid "tolerate incorrectly detected missing new-line at the end of file"
-msgstr "разрешить некорректно определенные пропущенные пустые строки в конце файла"
+#: builtin/am.c:2356
+#, c-format
+msgid "previous rebase directory %s still exists but mbox given."
+msgstr "предыдущий каталог перемещения %s еще существует, но передан mbox."
-#: builtin/apply.c:4859
-msgid "do not trust the line counts in the hunk headers"
-msgstr "не доверять количеству строк из заголовка блока изменений"
+#: builtin/am.c:2380
+#, c-format
+msgid ""
+"Stray %s directory found.\n"
+"Use \"git am --abort\" to remove it."
+msgstr "Найден забытый каталог %s.\nИспользуйте «git am --abort», чтобы удалить его."
-#: builtin/apply.c:4862
-msgid "prepend <root> to all filenames"
-msgstr "добавить <корень> спереди ко всем именам файлов"
+#: builtin/am.c:2386
+msgid "Resolve operation not in progress, we are not resuming."
+msgstr "Операция разрешения конфликтов не в процессе выполнения, не продолжаем."
+
+#: builtin/apply.c:8
+msgid "git apply [<options>] [<patch>...]"
+msgstr "git apply [<опции>] [<патч>…]"
#: builtin/archive.c:17
#, c-format
msgid "Blaming lines"
msgstr "Просмотр авторов строк"
-#: builtin/blame.c:2536
+#: builtin/blame.c:2577
msgid "Show blame entries as we find them, incrementally"
msgstr "Показать записи авторства постепенно, в процессе нахождения"
-#: builtin/blame.c:2537
+#: builtin/blame.c:2578
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr "Не показывать SHA-1 для коммитов, не входящих в границы запроса (По умолчанию: отключено)"
-#: builtin/blame.c:2538
+#: builtin/blame.c:2579
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr "Не воспринимать корневые коммиты как граничные (По умолчанию: отключено)"
-#: builtin/blame.c:2539
+#: builtin/blame.c:2580
msgid "Show work cost statistics"
msgstr "Показать статистику расходов на выполнение запроса"
-#: builtin/blame.c:2540
+#: builtin/blame.c:2581
msgid "Force progress reporting"
msgstr "Принудительно выводить прогресс выполнения"
-#: builtin/blame.c:2541
+#: builtin/blame.c:2582
msgid "Show output score for blame entries"
msgstr "Показать оценку для записей авторства"
-#: builtin/blame.c:2542
+#: builtin/blame.c:2583
msgid "Show original filename (Default: auto)"
msgstr "Показать оригинальное имя файла (По умолчанию: автоматически)"
-#: builtin/blame.c:2543
+#: builtin/blame.c:2584
msgid "Show original linenumber (Default: off)"
msgstr "Показать оригинальные номера строк (По умолчанию: отключено)"
-#: builtin/blame.c:2544
+#: builtin/blame.c:2585
msgid "Show in a format designed for machine consumption"
msgstr "Показать в формате для программного разбора"
-#: builtin/blame.c:2545
+#: builtin/blame.c:2586
msgid "Show porcelain format with per-line commit information"
msgstr "Показать в машиночитаемом формате, с построчной информацией о коммите"
-#: builtin/blame.c:2546
+#: builtin/blame.c:2587
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr "Использовать такой же формат вывода, как и git-annotate (По умолчанию: отключено)"
-#: builtin/blame.c:2547
+#: builtin/blame.c:2588
msgid "Show raw timestamp (Default: off)"
msgstr "Показать необработанные временные метки (По умолчанию: отключено)"
-#: builtin/blame.c:2548
+#: builtin/blame.c:2589
msgid "Show long commit SHA1 (Default: off)"
msgstr "Показать длинный SHA1 идентификатор коммита (По умолчанию: отключено)"
-#: builtin/blame.c:2549
+#: builtin/blame.c:2590
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Не показывать имя автора и временные метки (По умолчанию: отключено)"
-#: builtin/blame.c:2550
+#: builtin/blame.c:2591
msgid "Show author email instead of name (Default: off)"
msgstr "Показать почту автора вместо имени (По умолчанию: отключено)"
-#: builtin/blame.c:2551
+#: builtin/blame.c:2592
msgid "Ignore whitespace differences"
msgstr "Игнорировать различия в пробелах"
-#: builtin/blame.c:2552
+#: builtin/blame.c:2599
+msgid "Use an experimental indent-based heuristic to improve diffs"
+msgstr "Использовать эксперементальную эвристику, основанную на отступах, чтобы улучшить файлы различий"
+
+#: builtin/blame.c:2600
+msgid "Use an experimental blank-line-based heuristic to improve diffs"
+msgstr "Использовать эксперементальную эвристику, основанную на пустых строках, чтобы улучшить файлы различий"
+
+#: builtin/blame.c:2602
msgid "Spend extra cycles to find better match"
msgstr "Потратить больше времени, для нахождения лучших совпадений"
-#: builtin/blame.c:2553
+#: builtin/blame.c:2603
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Использовать редакции из <файла> вместо вызова git-rev-list"
-#: builtin/blame.c:2554
+#: builtin/blame.c:2604
msgid "Use <file>'s contents as the final image"
msgstr "Использовать содержимое <файла> как финальный снимок"
-#: builtin/blame.c:2555 builtin/blame.c:2556
+#: builtin/blame.c:2605 builtin/blame.c:2606
msgid "score"
msgstr "мин-длина"
-#: builtin/blame.c:2555
+#: builtin/blame.c:2605
msgid "Find line copies within and across files"
msgstr "Найти копирование строк в пределах и между файлами"
-#: builtin/blame.c:2556
+#: builtin/blame.c:2606
msgid "Find line movements within and across files"
msgstr "Найти перемещения строк в пределах и между файлами"
-#: builtin/blame.c:2557
+#: builtin/blame.c:2607
msgid "n,m"
msgstr "начало,конец"
-#: builtin/blame.c:2557
+#: builtin/blame.c:2607
msgid "Process only line range n,m, counting from 1"
msgstr "Обработать только строки в диапазоне начало,конец, начиная с 1"
+#: builtin/blame.c:2654
+msgid "--progress can't be used with --incremental or porcelain formats"
+msgstr "--progress нельзя использовать одновременно с --incremental или машиночитаемым (porcelain) форматом"
+
#. TRANSLATORS: This string is used to tell us the maximum
#. display width for a relative timestamp in "git blame"
#. output. For C locale, "4 years, 11 months ago", which
#. takes 22 places, is the longest among various forms of
#. relative timestamps, but your language may need more or
#. fewer display columns.
-#: builtin/blame.c:2649
+#: builtin/blame.c:2700
msgid "4 years, 11 months ago"
msgstr "4 года и 11 месяцев назад"
+#: builtin/blame.c:2780
+msgid "--contents and --reverse do not blend well."
+msgstr "--contents и --reverse не очень сочетаются."
+
+#: builtin/blame.c:2800
+msgid "cannot use --contents with final commit object name"
+msgstr "нельзя использовать --contents с указанием финального имени объекта"
+
+#: builtin/blame.c:2805
+msgid "--reverse and --first-parent together require specified latest commit"
+msgstr "при --reverse и --first-parent вместе нужно указывать конкретный последний коммит"
+
+#: builtin/blame.c:2832
+msgid ""
+"--reverse --first-parent together require range along first-parent chain"
+msgstr "при указании --reverse и --first-parent вместе, требуется также указать диапазон по цепочке первого родителя"
+
+#: builtin/blame.c:2843
+#, c-format
+msgid "no such path %s in %s"
+msgstr "нет такого пути %s в %s"
+
+#: builtin/blame.c:2854
+#, c-format
+msgid "cannot read blob %s for path %s"
+msgstr "невозможно прочитать объект %s для пути %s"
+
+#: builtin/blame.c:2873
+#, c-format
+msgid "file %s has only %lu line"
+msgid_plural "file %s has only %lu lines"
+msgstr[0] "файл %s содержит только %lu строку"
+msgstr[1] "файл %s содержит только %lu строки"
+msgstr[2] "файл %s содержит только %lu строк"
+msgstr[3] "файл %s содержит только %lu строки"
+
#: builtin/branch.c:26
msgid "git branch [<options>] [-r | -a] [--merged | --no-merged]"
msgstr "git branch [<опции>] [-r | -a] [--merged | --no-merged]"
msgid "change the upstream info"
msgstr "изменить информацию о вышестоящей ветке"
+#: builtin/branch.c:660
+msgid "Unset the upstream info"
+msgstr "Убрать информацию о вышестоящей ветке"
+
#: builtin/branch.c:661
msgid "use colored output"
msgstr "использовать цветной вывод"
msgid "field name to sort on"
msgstr "имя поля, по которому выполнить сортировку"
-#: builtin/branch.c:686 builtin/for-each-ref.c:41 builtin/notes.c:402
-#: builtin/notes.c:405 builtin/notes.c:565 builtin/notes.c:568
+#: builtin/branch.c:686 builtin/for-each-ref.c:41 builtin/notes.c:404
+#: builtin/notes.c:407 builtin/notes.c:567 builtin/notes.c:570
#: builtin/tag.c:369
msgid "object"
msgstr "объект"
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Не удалось определить HEAD как действительную ссылку."
-#: builtin/branch.c:709 builtin/clone.c:707
+#: builtin/branch.c:709 builtin/clone.c:706
msgid "HEAD not found below refs/heads!"
msgstr "HEAD не найден в refs/heads!"
msgid "Need a repository to unbundle."
msgstr "Требуется репозиторий для распаковки."
-#: builtin/cat-file.c:443
+#: builtin/cat-file.c:513
msgid ""
-"git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-"
-"type]|-e|-p|<type>|--textconv) <object>"
-msgstr "git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|<тип>|--textconv) <объект>"
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
+"-p | <type> | --textconv | --filters) [--path=<path>] <object>"
+msgstr "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -p | <тип> | --textconv | --filters) [--path=<путь>] <объект>"
-#: builtin/cat-file.c:444
-msgid "git cat-file (--batch | --batch-check) [--follow-symlinks]"
-msgstr "git cat-file (--batch | --batch-check) [--follow-symlinks]"
+#: builtin/cat-file.c:514
+msgid ""
+"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | "
+"--filters]"
+msgstr "git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --filters]"
-#: builtin/cat-file.c:481
+#: builtin/cat-file.c:551
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr "<тип> может быть одним из: blob, tree, commit, tag"
-#: builtin/cat-file.c:482
+#: builtin/cat-file.c:552
msgid "show object type"
msgstr "показать тип объекта"
-#: builtin/cat-file.c:483
+#: builtin/cat-file.c:553
msgid "show object size"
msgstr "показать размер объекта"
-#: builtin/cat-file.c:485
+#: builtin/cat-file.c:555
msgid "exit with zero when there's no error"
msgstr "выйти с нулевым кодом возврата, если нет ошибки"
-#: builtin/cat-file.c:486
+#: builtin/cat-file.c:556
msgid "pretty-print object's content"
msgstr "структурированный вывод содержимого объекта"
-#: builtin/cat-file.c:488
+#: builtin/cat-file.c:558
msgid "for blob objects, run textconv on object's content"
msgstr "запустить texconv на содержимом двоичных объектов "
-#: builtin/cat-file.c:490
+#: builtin/cat-file.c:560
+msgid "for blob objects, run filters on object's content"
+msgstr "запуск фильтров на содержимом двоичных объектов "
+
+#: builtin/cat-file.c:561 git-submodule.sh:923
+msgid "blob"
+msgstr "двоичный объект"
+
+#: builtin/cat-file.c:562
+msgid "use a specific path for --textconv/--filters"
+msgstr "использовать определенный путь для --textconv/--filters"
+
+#: builtin/cat-file.c:564
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "разрешить -s и -t работать с повреждёнными объектами"
-#: builtin/cat-file.c:491
+#: builtin/cat-file.c:565
msgid "buffer --batch output"
msgstr "буфферировать вывод --batch"
-#: builtin/cat-file.c:493
+#: builtin/cat-file.c:567
msgid "show info and content of objects fed from the standard input"
msgstr "показать информацию и содержимое объектов, переданных из стандартного ввода"
-#: builtin/cat-file.c:496
+#: builtin/cat-file.c:570
msgid "show info about objects fed from the standard input"
msgstr "показать информацию об объектах, переданных из стандартного ввода"
-#: builtin/cat-file.c:499
+#: builtin/cat-file.c:573
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr "переходить по символьным ссылкам внутри дерева (используется с опциями --batch и --batch-check)"
-#: builtin/cat-file.c:501
+#: builtin/cat-file.c:575
msgid "show all objects with --batch or --batch-check"
msgstr "показать все объекты с опциями --batch или --batch-check"
msgid "use .gitattributes only from the index"
msgstr "использовать только .gitattributes из индекса"
-#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:97
+#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:98
msgid "read file names from stdin"
msgstr "прочитать имена файлов из стандартного ввода"
msgid "terminate input and output records by a NUL character"
msgstr "окончание ввода и вывода записей по НУЛЕВОМУ символу"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1138 builtin/gc.c:325
+#: builtin/check-ignore.c:18 builtin/checkout.c:1137 builtin/gc.c:325
msgid "suppress progress reporting"
msgstr "не выводить прогресс выполнения"
msgstr "записать содержимое во временные файлы"
#: builtin/checkout-index.c:174 builtin/column.c:30
-#: builtin/submodule--helper.c:488 builtin/submodule--helper.c:491
-#: builtin/submodule--helper.c:494 builtin/submodule--helper.c:497
-#: builtin/submodule--helper.c:830 builtin/worktree.c:469
+#: builtin/submodule--helper.c:595 builtin/submodule--helper.c:598
+#: builtin/submodule--helper.c:604 builtin/submodule--helper.c:951
+#: builtin/worktree.c:469
msgid "string"
msgstr "строка"
msgid "path '%s' is unmerged"
msgstr "путь «%s» не слит"
-#: builtin/checkout.c:495
+#: builtin/checkout.c:494
msgid "you need to resolve your current index first"
msgstr "сначала нужно разрешить конфликты в вашем текущем индексе"
-#: builtin/checkout.c:625
+#: builtin/checkout.c:624
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Не удалось создать журнал ссылок для «%s»: %s\n"
-#: builtin/checkout.c:664
+#: builtin/checkout.c:663
msgid "HEAD is now at"
msgstr "HEAD сейчас на"
-#: builtin/checkout.c:668 builtin/clone.c:661
+#: builtin/checkout.c:667 builtin/clone.c:660
msgid "unable to update HEAD"
msgstr "не удалось обновить HEAD"
-#: builtin/checkout.c:672
+#: builtin/checkout.c:671
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Сброс ветки «%s»\n"
-#: builtin/checkout.c:675
+#: builtin/checkout.c:674
#, c-format
msgid "Already on '%s'\n"
msgstr "Уже на «%s»\n"
-#: builtin/checkout.c:679
+#: builtin/checkout.c:678
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Переключение и сброс ветки «%s»\n"
-#: builtin/checkout.c:681 builtin/checkout.c:1070
+#: builtin/checkout.c:680 builtin/checkout.c:1069
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Переключено на новую ветку «%s»\n"
-#: builtin/checkout.c:683
+#: builtin/checkout.c:682
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Переключено на ветку «%s»\n"
-#: builtin/checkout.c:734
+#: builtin/checkout.c:733
#, c-format
msgid " ... and %d more.\n"
msgstr " … и еще %d.\n"
-#: builtin/checkout.c:740
+#: builtin/checkout.c:739
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
msgstr[2] "Предупреждение: вы оставляете позади %d коммитов не соединенные ни с одной из ваших веток:\n\n%s\n"
msgstr[3] "Предупреждение: вы оставляете позади %d коммитов не соединенные ни с одной из ваших веток:\n\n%s\n"
-#: builtin/checkout.c:759
+#: builtin/checkout.c:758
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
msgstr[2] "Если вы хотите сохранить их с помощью создания новой ветки, то сейчас самое время\nсделать это с помощью:\n\n git branch <имя-новой-ветки> %s\n"
msgstr[3] "Если вы хотите сохранить их с помощью создания новой ветки, то сейчас самое время\nсделать это с помощью:\n\n git branch <имя-новой-ветки> %s\n"
-#: builtin/checkout.c:795
+#: builtin/checkout.c:794
msgid "internal error in revision walk"
msgstr "внутренняя ошибка при хождении по редакциям"
-#: builtin/checkout.c:799
+#: builtin/checkout.c:798
msgid "Previous HEAD position was"
msgstr "Предыдущая позиция HEAD была"
-#: builtin/checkout.c:826 builtin/checkout.c:1065
+#: builtin/checkout.c:825 builtin/checkout.c:1064
msgid "You are on a branch yet to be born"
msgstr "Вы находитесь на еще не созданной ветке"
-#: builtin/checkout.c:971
+#: builtin/checkout.c:970
#, c-format
msgid "only one reference expected, %d given."
msgstr "ожидается только одна ссылка, а передано %d."
-#: builtin/checkout.c:1011 builtin/worktree.c:214
+#: builtin/checkout.c:1010 builtin/worktree.c:214
#, c-format
msgid "invalid reference: %s"
msgstr "неправильная ссылка: %s"
-#: builtin/checkout.c:1040
+#: builtin/checkout.c:1039
#, c-format
msgid "reference is not a tree: %s"
msgstr "в дереве нет такой ссылки: %s"
-#: builtin/checkout.c:1079
+#: builtin/checkout.c:1078
msgid "paths cannot be used with switching branches"
msgstr "нельзя использовать пути при переключении веток"
-#: builtin/checkout.c:1082 builtin/checkout.c:1086
+#: builtin/checkout.c:1081 builtin/checkout.c:1085
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "нельзя использовать «%s» при переключении веток"
-#: builtin/checkout.c:1090 builtin/checkout.c:1093 builtin/checkout.c:1098
-#: builtin/checkout.c:1101
+#: builtin/checkout.c:1089 builtin/checkout.c:1092 builtin/checkout.c:1097
+#: builtin/checkout.c:1100
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "«%s» нельзя использовать одновременно с «%s»"
-#: builtin/checkout.c:1106
+#: builtin/checkout.c:1105
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Нельзя переключить ветку на не коммит «%s»"
-#: builtin/checkout.c:1139 builtin/checkout.c:1141 builtin/clone.c:88
+#: builtin/checkout.c:1138 builtin/checkout.c:1140 builtin/clone.c:93
#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:324
#: builtin/worktree.c:326
msgid "branch"
msgstr "ветка"
-#: builtin/checkout.c:1140
+#: builtin/checkout.c:1139
msgid "create and checkout a new branch"
msgstr "создать и переключиться на новую ветку"
-#: builtin/checkout.c:1142
+#: builtin/checkout.c:1141
msgid "create/reset and checkout a branch"
msgstr "создать/сбросить и перключиться на новую ветку"
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1142
msgid "create reflog for new branch"
msgstr "создать журнал ссылок для новой ветки"
-#: builtin/checkout.c:1144 builtin/worktree.c:328
+#: builtin/checkout.c:1143 builtin/worktree.c:328
msgid "detach HEAD at named commit"
msgstr "отсоединить HEAD на указанном коммите"
-#: builtin/checkout.c:1145
+#: builtin/checkout.c:1144
msgid "set upstream info for new branch"
msgstr "установить информацию о вышестоящей ветке для новой ветки"
-#: builtin/checkout.c:1147
+#: builtin/checkout.c:1146
msgid "new-branch"
msgstr "новая-ветка"
-#: builtin/checkout.c:1147
+#: builtin/checkout.c:1146
msgid "new unparented branch"
msgstr "новая ветка без родителей"
-#: builtin/checkout.c:1148
+#: builtin/checkout.c:1147
msgid "checkout our version for unmerged files"
msgstr "переключиться на нашу версию для не слитых файлов"
-#: builtin/checkout.c:1150
+#: builtin/checkout.c:1149
msgid "checkout their version for unmerged files"
msgstr "переключиться на их версию для не слитых файлов"
-#: builtin/checkout.c:1152
+#: builtin/checkout.c:1151
msgid "force checkout (throw away local modifications)"
msgstr "принудительное переключение на состояние (отбрасывает все локальные изменения)"
-#: builtin/checkout.c:1153
+#: builtin/checkout.c:1152
msgid "perform a 3-way merge with the new branch"
msgstr "выполнить трехходовое слияние с новой веткой"
-#: builtin/checkout.c:1154 builtin/merge.c:231
+#: builtin/checkout.c:1153 builtin/merge.c:231
msgid "update ignored files (default)"
msgstr "обновить игнорируемые файлы (по умолчанию)"
-#: builtin/checkout.c:1155 builtin/log.c:1459 parse-options.h:250
+#: builtin/checkout.c:1154 builtin/log.c:1466 parse-options.h:251
msgid "style"
msgstr "стиль"
-#: builtin/checkout.c:1156
+#: builtin/checkout.c:1155
msgid "conflict style (merge or diff3)"
msgstr "стиль конфликтов слияния (merge или diff3)"
-#: builtin/checkout.c:1159
+#: builtin/checkout.c:1158
msgid "do not limit pathspecs to sparse entries only"
msgstr "не ограничивать спецификаторы пути только частичными записями"
-#: builtin/checkout.c:1161
+#: builtin/checkout.c:1160
msgid "second guess 'git checkout <no-such-branch>'"
msgstr "пересмотр «git checkout <нет-такой-ветки>»"
-#: builtin/checkout.c:1163
+#: builtin/checkout.c:1162
msgid "do not check if another worktree is holding the given ref"
msgstr "не проверять, что другое дерево уже содержит указанную ссылку"
-#: builtin/checkout.c:1164 builtin/clone.c:60 builtin/fetch.c:117
-#: builtin/merge.c:228 builtin/pull.c:116 builtin/push.c:536
+#: builtin/checkout.c:1163 builtin/clone.c:63 builtin/fetch.c:119
+#: builtin/merge.c:228 builtin/pull.c:117 builtin/push.c:536
#: builtin/send-pack.c:168
msgid "force progress reporting"
msgstr "принудительно выводить прогресс"
-#: builtin/checkout.c:1195
+#: builtin/checkout.c:1194
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "-b, -B и --orphan нельзя использовать одновременно"
-#: builtin/checkout.c:1212
+#: builtin/checkout.c:1211
msgid "--track needs a branch name"
msgstr "--track требует имя ветки"
-#: builtin/checkout.c:1217
+#: builtin/checkout.c:1216
msgid "Missing branch name; try -b"
msgstr "Пропущено имя ветки; попробуйте -b"
-#: builtin/checkout.c:1253
+#: builtin/checkout.c:1252
msgid "invalid path specification"
msgstr "неправильная спецификация пути"
-#: builtin/checkout.c:1260
+#: builtin/checkout.c:1259
#, 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 "Нельзя обновить пути и одновременно переключиться на ветку «%s».\nВы хотели переключиться на «%s», что не может быть определено как коммит?"
-#: builtin/checkout.c:1265
+#: builtin/checkout.c:1264
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach не принимает путь «%s» как аргумент"
-#: builtin/checkout.c:1269
+#: builtin/checkout.c:1268
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
msgid "remove whole directories"
msgstr "удалить каталоги полностью"
-#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:724
-#: builtin/ls-files.c:457 builtin/name-rev.c:314 builtin/show-ref.c:182
+#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:725
+#: builtin/ls-files.c:536 builtin/name-rev.c:313 builtin/show-ref.c:182
msgid "pattern"
msgstr "шаблон"
msgid "git clone [<options>] [--] <repo> [<dir>]"
msgstr "git clone [<опции>] [--] <репозиторий> [<каталог>]"
-#: builtin/clone.c:62
+#: builtin/clone.c:65
msgid "don't create a checkout"
msgstr "не переключать рабочую копию на HEAD"
-#: builtin/clone.c:63 builtin/clone.c:65 builtin/init-db.c:476
+#: builtin/clone.c:66 builtin/clone.c:68 builtin/init-db.c:478
msgid "create a bare repository"
msgstr "создать голый репозиторий"
-#: builtin/clone.c:67
+#: builtin/clone.c:70
msgid "create a mirror repository (implies bare)"
msgstr "создать зеркало репозитория (включает в себя и параметр bare)"
-#: builtin/clone.c:69
+#: builtin/clone.c:72
msgid "to clone from a local repository"
msgstr "для клонирования из локального репозитория"
-#: builtin/clone.c:71
+#: builtin/clone.c:74
msgid "don't use local hardlinks, always copy"
msgstr "не использовать жесткие ссылки, всегда копировать файлы"
-#: builtin/clone.c:73
+#: builtin/clone.c:76
msgid "setup as shared repository"
msgstr "настроить как общедоступный репозиторий"
-#: builtin/clone.c:75 builtin/clone.c:77
+#: builtin/clone.c:78 builtin/clone.c:80
msgid "initialize submodules in the clone"
msgstr "инициализировать подмодули в клоне"
-#: builtin/clone.c:79
+#: builtin/clone.c:82
msgid "number of submodules cloned in parallel"
msgstr "количество подмодулей, которые будут клонированы парралельно"
-#: builtin/clone.c:80 builtin/init-db.c:473
+#: builtin/clone.c:83 builtin/init-db.c:475
msgid "template-directory"
msgstr "каталог-шаблонов"
-#: builtin/clone.c:81 builtin/init-db.c:474
+#: builtin/clone.c:84 builtin/init-db.c:476
msgid "directory from which templates will be used"
msgstr "каталог, шаблоны из которого будут использованы"
-#: builtin/clone.c:83 builtin/submodule--helper.c:495
-#: builtin/submodule--helper.c:833
+#: builtin/clone.c:86 builtin/clone.c:88 builtin/submodule--helper.c:602
+#: builtin/submodule--helper.c:954
msgid "reference repository"
msgstr "ссылаемый репозиторий"
-#: builtin/clone.c:85
+#: builtin/clone.c:90
msgid "use --reference only while cloning"
msgstr "используйте --reference только при клонировании"
-#: builtin/clone.c:86 builtin/column.c:26 builtin/merge-file.c:44
+#: builtin/clone.c:91 builtin/column.c:26 builtin/merge-file.c:44
msgid "name"
msgstr "имя"
-#: builtin/clone.c:87
+#: builtin/clone.c:92
msgid "use <name> instead of 'origin' to track upstream"
msgstr "использовать <имя> вместо «origin» для отслеживания вышестоящего репозитория"
-#: builtin/clone.c:89
+#: builtin/clone.c:94
msgid "checkout <branch> instead of the remote's HEAD"
msgstr "переключиться на <ветку>, вместо HEAD внешнего репозитория"
-#: builtin/clone.c:91
+#: builtin/clone.c:96
msgid "path to git-upload-pack on the remote"
msgstr "путь к git-upload-pack на внешнем репозитории"
-#: builtin/clone.c:92 builtin/fetch.c:118 builtin/grep.c:667
-#: builtin/pull.c:201
+#: builtin/clone.c:97 builtin/fetch.c:120 builtin/grep.c:668
+#: builtin/pull.c:202
msgid "depth"
msgstr "глубина"
-#: builtin/clone.c:93
+#: builtin/clone.c:98
msgid "create a shallow clone of that depth"
msgstr "сделать частичный клон указанной глубины"
-#: builtin/clone.c:95
+#: builtin/clone.c:99 builtin/fetch.c:122 builtin/pack-objects.c:2848
+#: parse-options.h:142
+msgid "time"
+msgstr "время"
+
+#: builtin/clone.c:100
+msgid "create a shallow clone since a specific time"
+msgstr "сделать частичный клон до определенного времени"
+
+#: builtin/clone.c:101 builtin/fetch.c:124
+msgid "revision"
+msgstr "редакция"
+
+#: builtin/clone.c:102 builtin/fetch.c:125
+msgid "deepen history of shallow clone by excluding rev"
+msgstr "углубить историю частичного клона исключая редакцию"
+
+#: builtin/clone.c:104
msgid "clone only one branch, HEAD or --branch"
msgstr "клонировать только одну ветку, HEAD или --branch"
-#: builtin/clone.c:97
+#: builtin/clone.c:106
msgid "any cloned submodules will be shallow"
msgstr "все склонированные подмодули будут частичными клонами"
-#: builtin/clone.c:98 builtin/init-db.c:482
+#: builtin/clone.c:107 builtin/init-db.c:484
msgid "gitdir"
msgstr "каталог-git"
-#: builtin/clone.c:99 builtin/init-db.c:483
+#: builtin/clone.c:108 builtin/init-db.c:485
msgid "separate git dir from working tree"
msgstr "разместить каталог git отдельно от рабочей копии"
-#: builtin/clone.c:100
+#: builtin/clone.c:109
msgid "key=value"
msgstr "ключ=значение"
-#: builtin/clone.c:101
+#: builtin/clone.c:110
msgid "set config inside the new repository"
msgstr "установить параметры внутри нового репозитория"
-#: builtin/clone.c:102 builtin/fetch.c:132 builtin/push.c:547
+#: builtin/clone.c:111 builtin/fetch.c:140 builtin/push.c:547
msgid "use IPv4 addresses only"
msgstr "использовать только IPv4 адреса"
-#: builtin/clone.c:104 builtin/fetch.c:134 builtin/push.c:549
+#: builtin/clone.c:113 builtin/fetch.c:142 builtin/push.c:549
msgid "use IPv6 addresses only"
msgstr "использовать только IPv6 адреса"
-#: builtin/clone.c:241
+#: builtin/clone.c:250
msgid ""
"No directory name could be guessed.\n"
"Please specify a directory on the command line"
msgstr "Имя каталога не может быть угадано.\nУкажите имя каталога с помощью параметра командной строки"
-#: builtin/clone.c:307
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr "ссылаемый репозиторий «%s» как связанное состояние, пока не поддерживается."
-
-#: builtin/clone.c:309
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "ссылаемый репозиторий «%s» не является локальным."
-
-#: builtin/clone.c:314
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "ссылаемый репозиторий «%s» является частичным"
-
-#: builtin/clone.c:317
+#: builtin/clone.c:303
#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "ссылаемый репозиторий «%s» является сращенным"
+msgid "info: Could not add alternate for '%s': %s\n"
+msgstr "информация: Не удалось добавить альтернативу для «%s»: %s\n"
-#: builtin/clone.c:376
+#: builtin/clone.c:375
#, c-format
msgid "failed to open '%s'"
msgstr "не удалось открыть «%s»"
-#: builtin/clone.c:384
+#: builtin/clone.c:383
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s уже существует и не является каталогом"
-#: builtin/clone.c:398
+#: builtin/clone.c:397
#, c-format
msgid "failed to stat %s\n"
msgstr "не удалось выполнить stat %s\n"
-#: builtin/clone.c:420
+#: builtin/clone.c:419
#, c-format
msgid "failed to create link '%s'"
msgstr "не удалось создать ссылку «%s»"
-#: builtin/clone.c:424
+#: builtin/clone.c:423
#, c-format
msgid "failed to copy file to '%s'"
msgstr "не удалось копировать файл в «%s»"
-#: builtin/clone.c:449
+#: builtin/clone.c:448
#, c-format
msgid "done.\n"
msgstr "готово.\n"
-#: builtin/clone.c:461
+#: builtin/clone.c:460
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 "Клонирование прошло успешно, но во время переключения состояния произошла ошибка.\nС помощь команды «git status» вы можете просмотреть, какие файлы были обновлены, а повторить попытку переключения на ветку с помощью «git checkout -f HEAD»\n"
-#: builtin/clone.c:538
+#: builtin/clone.c:537
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "Не удалось найти внешнюю ветку %s для клонирования."
-#: builtin/clone.c:633
+#: builtin/clone.c:632
msgid "remote did not send all necessary objects"
msgstr "внешний репозиторий прислал не все необходимые объекты"
-#: builtin/clone.c:649
+#: builtin/clone.c:648
#, c-format
msgid "unable to update %s"
msgstr "не удалось обновить %s"
-#: builtin/clone.c:698
+#: builtin/clone.c:697
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr "внешний HEAD ссылается на несуществующую ссылку, нельзя переключиться на такую версию.\n"
-#: builtin/clone.c:729
+#: builtin/clone.c:728
msgid "unable to checkout working tree"
msgstr "не удалось переключиться на версию в рабочем каталоге"
-#: builtin/clone.c:766
+#: builtin/clone.c:768
msgid "unable to write parameters to config file"
msgstr "не удалось записать параметры в файл конфигурации"
-#: builtin/clone.c:829
+#: builtin/clone.c:831
msgid "cannot repack to clean up"
msgstr "не удалось выполнить перепаковку для очистки"
-#: builtin/clone.c:831
+#: builtin/clone.c:833
msgid "cannot unlink temporary alternates file"
msgstr "не удалось отсоединить временные альтернативные файлы"
-#: builtin/clone.c:863 builtin/receive-pack.c:1855
+#: builtin/clone.c:866 builtin/receive-pack.c:1895
msgid "Too many arguments."
msgstr "Слишком много аргументов."
-#: builtin/clone.c:867
+#: builtin/clone.c:870
msgid "You must specify a repository to clone."
msgstr "Вы должны указать репозиторий для клонирования."
-#: builtin/clone.c:878
+#: builtin/clone.c:883
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "--bare и --origin %s нельзя использовать одновременно."
-#: builtin/clone.c:881
+#: builtin/clone.c:886
msgid "--bare and --separate-git-dir are incompatible."
msgstr "--bare и --separate-git-dir нельзя использовать одновременно."
-#: builtin/clone.c:894
+#: builtin/clone.c:899
#, c-format
msgid "repository '%s' does not exist"
msgstr "репозиторий «%s» не существует"
-#: builtin/clone.c:900 builtin/fetch.c:1293
+#: builtin/clone.c:905 builtin/fetch.c:1338
#, c-format
msgid "depth %s is not a positive number"
msgstr "глубина %s не является положительным числом"
-#: builtin/clone.c:910
+#: builtin/clone.c:915
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "целевой путь «%s» уже существует и не является пустым каталогом."
-#: builtin/clone.c:920
+#: builtin/clone.c:925
#, c-format
msgid "working tree '%s' already exists."
msgstr "рабочий каталог «%s» уже существует."
-#: builtin/clone.c:935 builtin/clone.c:946 builtin/submodule--helper.c:544
+#: builtin/clone.c:940 builtin/clone.c:951 builtin/submodule--helper.c:657
#: builtin/worktree.c:222 builtin/worktree.c:249
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "не удалось создать родительские каталоги для «%s»"
-#: builtin/clone.c:938
+#: builtin/clone.c:943
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "не удалось создать рабочий каталог «%s»"
-#: builtin/clone.c:956
+#: builtin/clone.c:955
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Клонирование в голый репозиторий «%s»…\n"
-#: builtin/clone.c:958
+#: builtin/clone.c:957
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Клонирование в «%s»…\n"
-#: builtin/clone.c:997
+#: builtin/clone.c:963
+msgid ""
+"clone --recursive is not compatible with both --reference and --reference-"
+"if-able"
+msgstr "клонирование с параметром --recursive нельзя использовать одновременно ни с --reference, ни с --reference-if-able"
+
+#: builtin/clone.c:1019
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth игнорируется на локальных клонах; вместо этого используйте file://."
-#: builtin/clone.c:1000
+#: builtin/clone.c:1021
+msgid "--shallow-since is ignored in local clones; use file:// instead."
+msgstr "--shallow-since игнорируется на локальных клонах; используйте file:// вместо этого."
+
+#: builtin/clone.c:1023
+msgid "--shallow-exclude is ignored in local clones; use file:// instead."
+msgstr "--shallow-exclude игнорируется на локальных клонах; используйте file:// вместо этого."
+
+#: builtin/clone.c:1026
msgid "source repository is shallow, ignoring --local"
msgstr "исходный репозиторий является частичным, --local игнорируется"
-#: builtin/clone.c:1005
+#: builtin/clone.c:1031
msgid "--local is ignored"
msgstr "--local игнорируется"
-#: builtin/clone.c:1009
+#: builtin/clone.c:1035
#, c-format
msgid "Don't know how to clone %s"
msgstr "Не знаю как клонировать %s"
-#: builtin/clone.c:1058 builtin/clone.c:1066
+#: builtin/clone.c:1090 builtin/clone.c:1098
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Внешняя ветка %s не найдена в вышестоящем репозитории %s"
-#: builtin/clone.c:1069
+#: builtin/clone.c:1101
msgid "You appear to have cloned an empty repository."
msgstr "Похоже, что вы клонировали пустой репозиторий."
"the remaining commits.\n"
msgstr "Если вы хотите пропустит этот коммит, используйте команду:\n\n git reset\n\nПосле этого «git cherry-pick --continue» продолжит копирование оставшихся коммитов.\n"
-#: builtin/commit.c:308
+#: builtin/commit.c:318
msgid "failed to unpack HEAD tree object"
msgstr "сбой распаковки объекта дерева HEAD"
-#: builtin/commit.c:349
+#: builtin/commit.c:359
msgid "unable to create temporary index"
msgstr "не удалось создать временный индекс"
-#: builtin/commit.c:355
+#: builtin/commit.c:365
msgid "interactive add failed"
msgstr "сбой интерактивного добавления"
-#: builtin/commit.c:368
+#: builtin/commit.c:378
msgid "unable to update temporary index"
msgstr "не удалось обновить временный индекс"
-#: builtin/commit.c:370
+#: builtin/commit.c:380
msgid "Failed to update main cache tree"
msgstr "Сбой при обновлении основного кэша дерева"
-#: builtin/commit.c:394 builtin/commit.c:417 builtin/commit.c:466
+#: builtin/commit.c:404 builtin/commit.c:427 builtin/commit.c:476
msgid "unable to write new_index file"
msgstr "не удалось записать файл new_index"
-#: builtin/commit.c:448
+#: builtin/commit.c:458
msgid "cannot do a partial commit during a merge."
msgstr "нельзя создать частичный коммит во время слияния."
-#: builtin/commit.c:450
+#: builtin/commit.c:460
msgid "cannot do a partial commit during a cherry-pick."
msgstr "нельзя создать частичный коммит во время копирования коммита."
-#: builtin/commit.c:459
+#: builtin/commit.c:469
msgid "cannot read the index"
msgstr "не удалось прочитать индекс"
-#: builtin/commit.c:478
+#: builtin/commit.c:488
msgid "unable to write temporary index file"
msgstr "не удалось записать временный файл индекса"
-#: builtin/commit.c:583
+#: builtin/commit.c:582
#, c-format
msgid "commit '%s' lacks author header"
msgstr "у коммита «%s» отсутствует автор в заголовке"
-#: builtin/commit.c:585
+#: builtin/commit.c:584
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "у коммита «%s» строка автора в неправильном формате"
-#: builtin/commit.c:604
+#: builtin/commit.c:603
msgid "malformed --author parameter"
msgstr "параметр --author в неправильном формате"
-#: builtin/commit.c:612
+#: builtin/commit.c:611
#, c-format
msgid "invalid date format: %s"
msgstr "неправильный формат даты: %s"
-#: builtin/commit.c:656
+#: builtin/commit.c:655
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
msgstr "нельзя выбрать символ комментария, который\nне используется в текущем сообщении коммита"
-#: builtin/commit.c:693 builtin/commit.c:726 builtin/commit.c:1092
+#: builtin/commit.c:692 builtin/commit.c:725 builtin/commit.c:1096
#, c-format
msgid "could not lookup commit %s"
msgstr "не удалось запросить коммит %s"
-#: builtin/commit.c:705 builtin/shortlog.c:286
+#: builtin/commit.c:704 builtin/shortlog.c:286
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(чтение файла журнала из стандартного ввода)\n"
-#: builtin/commit.c:707
+#: builtin/commit.c:706
msgid "could not read log from standard input"
msgstr "не удалось прочитать файл журнала из стандартного ввода"
-#: builtin/commit.c:711
+#: builtin/commit.c:710
#, c-format
msgid "could not read log file '%s'"
msgstr "не удалось прочитать файл журнала «%s»"
-#: builtin/commit.c:738 builtin/commit.c:746
+#: builtin/commit.c:737 builtin/commit.c:745
msgid "could not read SQUASH_MSG"
msgstr "не удалось прочитать SQUASH_MSG"
-#: builtin/commit.c:743
+#: builtin/commit.c:742
msgid "could not read MERGE_MSG"
msgstr "не удалось прочитать MERGE_MSG"
-#: builtin/commit.c:797
+#: builtin/commit.c:796
msgid "could not write commit template"
msgstr "не удалось записать шаблон описания коммита"
-#: builtin/commit.c:815
+#: builtin/commit.c:814
#, c-format
msgid ""
"\n"
"and try again.\n"
msgstr "\nПохоже, что вы пытаетесь закоммитить слияние.\nЕсли это ошибка, пожалуйста удалите файл\n\t%s\nи попробуйте снова.\n"
-#: builtin/commit.c:820
+#: builtin/commit.c:819
#, c-format
msgid ""
"\n"
"and try again.\n"
msgstr "\nПохоже, что вы пытаетесь закоммитить при копировании коммита.\nЕсли это не так, то удалите файл\n\t%s\nи попробуйте снова.\n"
-#: builtin/commit.c:833
+#: builtin/commit.c:832
#, 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 "Пожалуйста, введите сообщение коммита для ваших изменений. Строки,\nначинающиеся с «%c» будут проигнорированы, а пустое сообщение\nотменяет процесс коммита.\n"
-#: builtin/commit.c:840
+#: builtin/commit.c:839
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
"An empty message aborts the commit.\n"
msgstr "Пожалуйста, введите сообщение коммита для ваших изменений. Строки,\nначинающиеся с «%c» будут оставлены; вы можете удалить их вручную,\nесли хотите. Пустое сообщение отменяет процесс коммита.\n"
-#: builtin/commit.c:860
+#: builtin/commit.c:859
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sАвтор: %.*s <%.*s>"
-#: builtin/commit.c:868
+#: builtin/commit.c:867
#, c-format
msgid "%sDate: %s"
msgstr "%sДата: %s"
-#: builtin/commit.c:875
+#: builtin/commit.c:874
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sКоммитер: %.*s <%.*s>"
-#: builtin/commit.c:893
+#: builtin/commit.c:892
msgid "Cannot read index"
msgstr "Не удалось прочитать индекс"
-#: builtin/commit.c:950
+#: builtin/commit.c:954
msgid "Error building trees"
msgstr "Ошибка при построении деревьев"
-#: builtin/commit.c:965 builtin/tag.c:266
+#: builtin/commit.c:969 builtin/tag.c:266
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Пожалуйста, укажите сообщение, при указании опций -m или -F.\n"
-#: builtin/commit.c:1067
+#: builtin/commit.c:1071
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr "--author «%s» не в формате «Имя <почта>» и не совпадает с существующим автором"
-#: builtin/commit.c:1082 builtin/commit.c:1322
+#: builtin/commit.c:1086 builtin/commit.c:1327
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Неправильный режим неотслеживаемых файлов «%s»"
-#: builtin/commit.c:1119
+#: builtin/commit.c:1124
msgid "--long and -z are incompatible"
msgstr "--long и -z нельзя использовать одновременно"
-#: builtin/commit.c:1149
+#: builtin/commit.c:1154
msgid "Using both --reset-author and --author does not make sense"
msgstr "Указание одновременно опций --reset-author и --author не имеет смысла"
-#: builtin/commit.c:1158
+#: builtin/commit.c:1163
msgid "You have nothing to amend."
msgstr "Нечего исправлять."
-#: builtin/commit.c:1161
+#: builtin/commit.c:1166
msgid "You are in the middle of a merge -- cannot amend."
msgstr "Вы в процессе слияния — сейчас нельзя исправлять."
-#: builtin/commit.c:1163
+#: builtin/commit.c:1168
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "Вы в процессе копирования коммита — сейчас нельзя исправлять."
-#: builtin/commit.c:1166
+#: builtin/commit.c:1171
msgid "Options --squash and --fixup cannot be used together"
msgstr "Опции --squash и --fixup не могут использоваться одновременно"
-#: builtin/commit.c:1176
+#: builtin/commit.c:1181
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Может использоваться только одна из опций -c/-C/-F/--fixup."
-#: builtin/commit.c:1178
+#: builtin/commit.c:1183
msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
msgstr "Опция -m не может использоваться с -c/-C/-F/--fixup."
-#: builtin/commit.c:1186
+#: builtin/commit.c:1191
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr "--reset-author может использоваться только одновременно с опциями -C, -c или --amend."
-#: builtin/commit.c:1203
+#: builtin/commit.c:1208
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr "Может использоваться только одна из опций --include/--only/--all/--interactive/--patch."
-#: builtin/commit.c:1205
+#: builtin/commit.c:1210
msgid "No paths with --include/--only does not make sense."
msgstr "Указание путей каталогов с опциями --include/--only не имеет смысла."
-#: builtin/commit.c:1207
+#: builtin/commit.c:1212
msgid "Clever... amending the last one with dirty index."
msgstr "Умно… отмена последнего с измененным индексом."
-#: builtin/commit.c:1209
+#: builtin/commit.c:1214
msgid "Explicit paths specified without -i or -o; assuming --only paths..."
msgstr "Пути явно указаны пути без опций -i или -o; предполагаю опцию --only…"
-#: builtin/commit.c:1221 builtin/tag.c:474
+#: builtin/commit.c:1226 builtin/tag.c:474
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Неправильное значение режима очистки %s"
-#: builtin/commit.c:1226
+#: builtin/commit.c:1231
msgid "Paths with -a does not make sense."
msgstr "С опцией -a указание пути не имеет смысла."
-#: builtin/commit.c:1336 builtin/commit.c:1622
+#: builtin/commit.c:1341 builtin/commit.c:1617
msgid "show status concisely"
msgstr "кратко показать статус"
-#: builtin/commit.c:1338 builtin/commit.c:1624
+#: builtin/commit.c:1343 builtin/commit.c:1619
msgid "show branch information"
msgstr "показать информацию о версии"
-#: builtin/commit.c:1340 builtin/commit.c:1626 builtin/push.c:522
+#: builtin/commit.c:1345
+msgid "version"
+msgstr "версия"
+
+#: builtin/commit.c:1345 builtin/commit.c:1621 builtin/push.c:522
#: builtin/worktree.c:440
msgid "machine-readable output"
msgstr "машиночитаемый вывод"
-#: builtin/commit.c:1343 builtin/commit.c:1628
+#: builtin/commit.c:1348 builtin/commit.c:1623
msgid "show status in long format (default)"
msgstr "показать статус в длинном формате (по умолчанию)"
-#: builtin/commit.c:1346 builtin/commit.c:1631
+#: builtin/commit.c:1351 builtin/commit.c:1626
msgid "terminate entries with NUL"
msgstr "завершать записи НУЛЕВЫМ байтом"
-#: builtin/commit.c:1348 builtin/commit.c:1634 builtin/fast-export.c:981
+#: builtin/commit.c:1353 builtin/commit.c:1629 builtin/fast-export.c:981
#: builtin/fast-export.c:984 builtin/tag.c:353
msgid "mode"
msgstr "режим"
-#: builtin/commit.c:1349 builtin/commit.c:1634
+#: builtin/commit.c:1354 builtin/commit.c:1629
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr "показать неотслеживаемые файлы, опциональные режимы: all (все), normal (как обычно), no (нет). (По умолчанию: all)"
-#: builtin/commit.c:1352
+#: builtin/commit.c:1357
msgid "show ignored files"
msgstr "показать игнорируемые файлы"
-#: builtin/commit.c:1353 parse-options.h:155
+#: builtin/commit.c:1358 parse-options.h:155
msgid "when"
msgstr "когда"
-#: builtin/commit.c:1354
+#: builtin/commit.c:1359
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
msgstr "игнорировать изменения в подмодулях, опционально когда: all (всегда), dirty (измененные), untracked (неотслеживаемые). (По умолчанию: all)"
-#: builtin/commit.c:1356
+#: builtin/commit.c:1361
msgid "list untracked files in columns"
msgstr "показать неотслеживаемые файлы по столбцам"
-#: builtin/commit.c:1442
+#: builtin/commit.c:1437
msgid "couldn't look up newly created commit"
msgstr "нельзя запросить новосозданный коммит"
-#: builtin/commit.c:1444
+#: builtin/commit.c:1439
msgid "could not parse newly created commit"
msgstr "нельзя разобрать новосозданный коммит"
-#: builtin/commit.c:1489
+#: builtin/commit.c:1484
msgid "detached HEAD"
msgstr "отделённый HEAD"
-#: builtin/commit.c:1492
+#: builtin/commit.c:1487
msgid " (root-commit)"
msgstr " (корневой коммит)"
-#: builtin/commit.c:1592
+#: builtin/commit.c:1587
msgid "suppress summary after successful commit"
msgstr "не выводить сводку после успешного коммита"
-#: builtin/commit.c:1593
+#: builtin/commit.c:1588
msgid "show diff in commit message template"
msgstr "добавить список изменений в шаблон сообщения коммита"
-#: builtin/commit.c:1595
+#: builtin/commit.c:1590
msgid "Commit message options"
msgstr "Опции сообщения коммита"
-#: builtin/commit.c:1596 builtin/tag.c:351
+#: builtin/commit.c:1591 builtin/tag.c:351
msgid "read message from file"
msgstr "прочитать сообщение из файла"
-#: builtin/commit.c:1597
+#: builtin/commit.c:1592
msgid "author"
msgstr "автор"
-#: builtin/commit.c:1597
+#: builtin/commit.c:1592
msgid "override author for commit"
msgstr "подменить автора коммита"
-#: builtin/commit.c:1598 builtin/gc.c:326
+#: builtin/commit.c:1593 builtin/gc.c:326
msgid "date"
msgstr "дата"
-#: builtin/commit.c:1598
+#: builtin/commit.c:1593
msgid "override date for commit"
msgstr "подменить дату коммита"
-#: builtin/commit.c:1599 builtin/merge.c:220 builtin/notes.c:396
-#: builtin/notes.c:559 builtin/tag.c:349
+#: builtin/commit.c:1594 builtin/merge.c:220 builtin/notes.c:398
+#: builtin/notes.c:561 builtin/tag.c:349
msgid "message"
msgstr "сообщение"
-#: builtin/commit.c:1599
+#: builtin/commit.c:1594
msgid "commit message"
msgstr "сообщение коммита"
-#: builtin/commit.c:1600 builtin/commit.c:1601 builtin/commit.c:1602
-#: builtin/commit.c:1603 parse-options.h:256 ref-filter.h:79
+#: builtin/commit.c:1595 builtin/commit.c:1596 builtin/commit.c:1597
+#: builtin/commit.c:1598 parse-options.h:257 ref-filter.h:79
msgid "commit"
msgstr "коммит"
-#: builtin/commit.c:1600
+#: builtin/commit.c:1595
msgid "reuse and edit message from specified commit"
msgstr "использовать и отредактировать сообщение от указанного коммита"
-#: builtin/commit.c:1601
+#: builtin/commit.c:1596
msgid "reuse message from specified commit"
msgstr "использовать сообщение указанного коммита"
-#: builtin/commit.c:1602
+#: builtin/commit.c:1597
msgid "use autosquash formatted message to fixup specified commit"
msgstr "использовать форматированное сообщение автоуплотнения для исправления указанного коммита"
-#: builtin/commit.c:1603
+#: builtin/commit.c:1598
msgid "use autosquash formatted message to squash specified commit"
msgstr "использовать форматированное сообщение автоуплотнения для уплотнения указанного коммита"
-#: builtin/commit.c:1604
+#: builtin/commit.c:1599
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr "коммит теперь за моим авторством (с использованием -C/-c/--amend)"
-#: builtin/commit.c:1605 builtin/log.c:1409 builtin/revert.c:86
+#: builtin/commit.c:1600 builtin/log.c:1413 builtin/revert.c:86
msgid "add Signed-off-by:"
msgstr "добавить Signed-off-by:"
-#: builtin/commit.c:1606
+#: builtin/commit.c:1601
msgid "use specified template file"
msgstr "использовать указанный файл шаблона"
-#: builtin/commit.c:1607
+#: builtin/commit.c:1602
msgid "force edit of commit"
msgstr "принудительно редактировать коммит"
-#: builtin/commit.c:1608
+#: builtin/commit.c:1603
msgid "default"
msgstr "по-умолчанию"
-#: builtin/commit.c:1608 builtin/tag.c:354
+#: builtin/commit.c:1603 builtin/tag.c:354
msgid "how to strip spaces and #comments from message"
msgstr "как удалять пробелы и #комментарии из сообщения коммита"
-#: builtin/commit.c:1609
+#: builtin/commit.c:1604
msgid "include status in commit message template"
msgstr "включить статус файлов в шаблон сообщения коммита"
-#: builtin/commit.c:1611 builtin/merge.c:230 builtin/pull.c:165
+#: builtin/commit.c:1606 builtin/merge.c:230 builtin/pull.c:166
#: builtin/revert.c:93
msgid "GPG sign commit"
msgstr "подписать коммит с помощью GPG"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1609
msgid "Commit contents options"
msgstr "Опции содержимого коммита"
-#: builtin/commit.c:1615
+#: builtin/commit.c:1610
msgid "commit all changed files"
msgstr "закоммитить все измененные файлы"
-#: builtin/commit.c:1616
+#: builtin/commit.c:1611
msgid "add specified files to index for commit"
msgstr "добавить указанные файлы в индекс для коммита"
-#: builtin/commit.c:1617
+#: builtin/commit.c:1612
msgid "interactively add files"
msgstr "интерактивное добавление файлов"
-#: builtin/commit.c:1618
+#: builtin/commit.c:1613
msgid "interactively add changes"
msgstr "интерактивное добавление изменений"
-#: builtin/commit.c:1619
+#: builtin/commit.c:1614
msgid "commit only specified files"
msgstr "закоммитить только указанные файлы"
-#: builtin/commit.c:1620
+#: builtin/commit.c:1615
msgid "bypass pre-commit and commit-msg hooks"
msgstr "пропустить перехватчик pre-commit и commit-msg"
-#: builtin/commit.c:1621
+#: builtin/commit.c:1616
msgid "show what would be committed"
msgstr "показать, что будет закоммичено"
-#: builtin/commit.c:1632
+#: builtin/commit.c:1627
msgid "amend previous commit"
msgstr "исправить предыдущий коммит"
-#: builtin/commit.c:1633
+#: builtin/commit.c:1628
msgid "bypass post-rewrite hook"
msgstr "пропустить перехватчик post-rewrite"
-#: builtin/commit.c:1638
+#: builtin/commit.c:1633
msgid "ok to record an empty change"
msgstr "разрешить запись пустого коммита"
-#: builtin/commit.c:1640
+#: builtin/commit.c:1635
msgid "ok to record a change with an empty message"
msgstr "разрешить запись изменений с пустым сообщением"
-#: builtin/commit.c:1669
+#: builtin/commit.c:1664
msgid "could not parse HEAD commit"
msgstr "не удалось разобрать HEAD коммит"
-#: builtin/commit.c:1719
+#: builtin/commit.c:1712
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Файл MERGE_HEAD поврежден (%s)"
-#: builtin/commit.c:1726
+#: builtin/commit.c:1719
msgid "could not read MERGE_MODE"
msgstr "не удалось прочитать MERGE_MODE"
-#: builtin/commit.c:1745
+#: builtin/commit.c:1738
#, c-format
msgid "could not read commit message: %s"
msgstr "не удалось открыть сообщение коммита: %s"
-#: builtin/commit.c:1756
+#: builtin/commit.c:1749
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Отмена коммита; вы не изменили сообщение.\n"
-#: builtin/commit.c:1761
+#: builtin/commit.c:1754
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Отмена коммита из-за пустого сообщения коммита.\n"
-#: builtin/commit.c:1809
+#: builtin/commit.c:1802
msgid ""
"Repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
msgid "cannot create configuration file %s"
msgstr "не удалось создать файл конфигурации %s"
-#: builtin/count-objects.c:77
+#: builtin/config.c:625
+#, c-format
+msgid ""
+"cannot overwrite multiple values with a single value\n"
+" Use a regexp, --add or --replace-all to change %s."
+msgstr "нельзя перезаписать несколько значений одним\n Используйте регулярные выражения, параметры --add или --replace-all, чтобы изменить %s."
+
+#: builtin/count-objects.c:86
msgid "git count-objects [-v] [-H | --human-readable]"
msgstr "git count-objects [-v] [-H | --human-readable]"
-#: builtin/count-objects.c:87
+#: builtin/count-objects.c:96
msgid "print sizes in human readable format"
msgstr "вывод размеров в удобочитаемом для человека виде"
msgid "only consider tags matching <pattern>"
msgstr "рассматривать только метки по <шаблону>"
-#: builtin/describe.c:410 builtin/name-rev.c:321
+#: builtin/describe.c:410 builtin/name-rev.c:320
msgid "show abbreviated commit object as fallback"
msgstr "если не найдено, показать сокращенный номер редакции коммита"
msgid "invalid option: %s"
msgstr "неправильный параметр: %s"
-#: builtin/diff.c:360
+#: builtin/diff.c:361
msgid "Not a git repository"
msgstr "Не найден git репозитоий"
-#: builtin/diff.c:403
+#: builtin/diff.c:404
#, c-format
msgid "invalid object '%s' given."
msgstr "передан неправильный объект «%s»."
-#: builtin/diff.c:412
+#: builtin/diff.c:413
#, c-format
msgid "more than two blobs given: '%s'"
msgstr "передано больше двух двоичных объектов: «%s»"
-#: builtin/diff.c:419
+#: builtin/diff.c:420
#, c-format
msgid "unhandled object '%s' given."
msgstr "передан необработанный объект «%s»."
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<опции>]"
-#: builtin/fetch.c:93 builtin/pull.c:174
+#: builtin/fetch.c:95 builtin/pull.c:175
msgid "fetch from all remotes"
msgstr "извлечь со всех внешних репозиториев"
-#: builtin/fetch.c:95 builtin/pull.c:177
+#: builtin/fetch.c:97 builtin/pull.c:178
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "дописать к .git/FETCH_HEAD вместо перезаписи"
-#: builtin/fetch.c:97 builtin/pull.c:180
+#: builtin/fetch.c:99 builtin/pull.c:181
msgid "path to upload pack on remote end"
msgstr "путь к программе упаковки пакета на машине с внешним репозиторием"
-#: builtin/fetch.c:98 builtin/pull.c:182
+#: builtin/fetch.c:100 builtin/pull.c:183
msgid "force overwrite of local branch"
msgstr "принудительная перезапись локальной ветки"
-#: builtin/fetch.c:100
+#: builtin/fetch.c:102
msgid "fetch from multiple remotes"
msgstr "извлечь с нескольких внешних репозиториев"
-#: builtin/fetch.c:102 builtin/pull.c:184
+#: builtin/fetch.c:104 builtin/pull.c:185
msgid "fetch all tags and associated objects"
msgstr "извлечь все метки и связанные объекты"
-#: builtin/fetch.c:104
+#: builtin/fetch.c:106
msgid "do not fetch all tags (--no-tags)"
msgstr "не извлекать все метки (--no-tags)"
-#: builtin/fetch.c:106
+#: builtin/fetch.c:108
msgid "number of submodules fetched in parallel"
msgstr "количество подмодулей, которые будут скачаны парралельно"
-#: builtin/fetch.c:108 builtin/pull.c:187
+#: builtin/fetch.c:110 builtin/pull.c:188
msgid "prune remote-tracking branches no longer on remote"
msgstr "почистить отслеживаемые внешние ветки, которых уже нет на внешнем репозитории"
-#: builtin/fetch.c:109 builtin/pull.c:190
+#: builtin/fetch.c:111 builtin/pull.c:191
msgid "on-demand"
msgstr "по требованию"
-#: builtin/fetch.c:110 builtin/pull.c:191
+#: builtin/fetch.c:112 builtin/pull.c:192
msgid "control recursive fetching of submodules"
msgstr "управление рекурсивным извлечением подмодулей"
-#: builtin/fetch.c:114 builtin/pull.c:199
+#: builtin/fetch.c:116 builtin/pull.c:200
msgid "keep downloaded pack"
msgstr "оставить загруженный пакет данных"
-#: builtin/fetch.c:116
+#: builtin/fetch.c:118
msgid "allow updating of HEAD ref"
msgstr "разрешить обновление ссылки HEAD"
-#: builtin/fetch.c:119 builtin/pull.c:202
+#: builtin/fetch.c:121 builtin/fetch.c:127 builtin/pull.c:203
msgid "deepen history of shallow clone"
-msgstr "глубокая история частичного клона"
+msgstr "улугубить историю частичного клона"
-#: builtin/fetch.c:121 builtin/pull.c:205
+#: builtin/fetch.c:123
+msgid "deepen history of shallow repository based on time"
+msgstr "углубить историю частичного клона основываясь на времени"
+
+#: builtin/fetch.c:129 builtin/pull.c:206
msgid "convert to a complete repository"
msgstr "преобразовать в полный репозиторий"
-#: builtin/fetch.c:123 builtin/log.c:1426
+#: builtin/fetch.c:131 builtin/log.c:1433
msgid "dir"
msgstr "каталог"
-#: builtin/fetch.c:124
+#: builtin/fetch.c:132
msgid "prepend this to submodule path output"
msgstr "присоединять это спереди к выводу путей подмодуля"
-#: builtin/fetch.c:127
+#: builtin/fetch.c:135
msgid "default mode for recursion"
msgstr "режим по умолчанию для рекурсии"
-#: builtin/fetch.c:129 builtin/pull.c:208
+#: builtin/fetch.c:137 builtin/pull.c:209
msgid "accept refs that update .git/shallow"
msgstr "принимать ссылки, которые обновляют .git/shallow"
-#: builtin/fetch.c:130 builtin/pull.c:210
+#: builtin/fetch.c:138 builtin/pull.c:211
msgid "refmap"
msgstr "соответствие-ссылок"
-#: builtin/fetch.c:131 builtin/pull.c:211
+#: builtin/fetch.c:139 builtin/pull.c:212
msgid "specify fetch refmap"
msgstr "указать соответствие ссылок при извлечении"
-#: builtin/fetch.c:387
+#: builtin/fetch.c:398
msgid "Couldn't find remote ref HEAD"
msgstr "Не удалось найти ссылку HEAD на внешнем репозитории"
-#: builtin/fetch.c:503
+#: builtin/fetch.c:514
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "опция fetch.output содержит неправильное значение для %s"
-#: builtin/fetch.c:592
+#: builtin/fetch.c:607
#, c-format
msgid "object %s not found"
msgstr "объект %s не найден"
-#: builtin/fetch.c:596
+#: builtin/fetch.c:611
msgid "[up to date]"
msgstr "[актуально]"
-#: builtin/fetch.c:609 builtin/fetch.c:689
+#: builtin/fetch.c:624 builtin/fetch.c:704
msgid "[rejected]"
msgstr "[отклонено]"
-#: builtin/fetch.c:610
+#: builtin/fetch.c:625
msgid "can't fetch in current branch"
msgstr "нельзя извлечь текущую ветку"
-#: builtin/fetch.c:619
+#: builtin/fetch.c:634
msgid "[tag update]"
msgstr "[обновление метки]"
-#: builtin/fetch.c:620 builtin/fetch.c:653 builtin/fetch.c:669
-#: builtin/fetch.c:684
+#: builtin/fetch.c:635 builtin/fetch.c:668 builtin/fetch.c:684
+#: builtin/fetch.c:699
msgid "unable to update local ref"
msgstr "не удалось обновить локальную ссылку"
-#: builtin/fetch.c:639
+#: builtin/fetch.c:654
msgid "[new tag]"
msgstr "[новая метка]"
-#: builtin/fetch.c:642
+#: builtin/fetch.c:657
msgid "[new branch]"
msgstr "[новая ветка]"
-#: builtin/fetch.c:645
+#: builtin/fetch.c:660
msgid "[new ref]"
msgstr "[новая ссылка]"
-#: builtin/fetch.c:684
+#: builtin/fetch.c:699
msgid "forced update"
msgstr "принудительное обновление"
-#: builtin/fetch.c:689
+#: builtin/fetch.c:704
msgid "non-fast-forward"
msgstr "без перемотки вперед"
-#: builtin/fetch.c:733
+#: builtin/fetch.c:749
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s не отправил все необходимые объекты\n"
-#: builtin/fetch.c:753
+#: builtin/fetch.c:769
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr "%s отклонено из-за того, что частичные корни не разрешено обновлять"
-#: builtin/fetch.c:839 builtin/fetch.c:934
+#: builtin/fetch.c:856 builtin/fetch.c:952
#, c-format
msgid "From %.*s\n"
msgstr "Из %.*s\n"
-#: builtin/fetch.c:850
+#: builtin/fetch.c:867
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
" 'git remote prune %s' to remove any old, conflicting branches"
msgstr "не удалось обновить некоторые локальные ссылки; попробуйте запустить «git remote prune %s», чтобы почистить старые, конфликтующие ветки"
-#: builtin/fetch.c:904
+#: builtin/fetch.c:922
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s будет висящей веткой)"
-#: builtin/fetch.c:905
+#: builtin/fetch.c:923
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s стала висящей веткой)"
-#: builtin/fetch.c:937
+#: builtin/fetch.c:955
msgid "[deleted]"
msgstr "[удалено]"
-#: builtin/fetch.c:938 builtin/remote.c:1020
+#: builtin/fetch.c:956 builtin/remote.c:1020
msgid "(none)"
msgstr "(нет)"
-#: builtin/fetch.c:960
+#: builtin/fetch.c:979
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Отказ получения в текущую ветку %s не голого репозитория"
-#: builtin/fetch.c:979
+#: builtin/fetch.c:998
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Неправильное значение «%2$s» для параметра «%1$s» для %3$s"
-#: builtin/fetch.c:982
+#: builtin/fetch.c:1001
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Параметр «%s» игнорируется для %s\n"
-#: builtin/fetch.c:1039
+#: builtin/fetch.c:1077
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "Не знаю как извлечь с %s"
-#: builtin/fetch.c:1199
+#: builtin/fetch.c:1237
#, c-format
msgid "Fetching %s\n"
msgstr "Извлечение из %s\n"
-#: builtin/fetch.c:1201 builtin/remote.c:96
+#: builtin/fetch.c:1239 builtin/remote.c:96
#, c-format
msgid "Could not fetch %s"
msgstr "Не удалось извлечь %s"
-#: builtin/fetch.c:1219
+#: builtin/fetch.c:1257
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:1242
+#: builtin/fetch.c:1280
msgid "You need to specify a tag name."
msgstr "Вам нужно указать имя метки."
-#: builtin/fetch.c:1284
+#: builtin/fetch.c:1322
+msgid "Negative depth in --deepen is not supported"
+msgstr "Отрицательная грубина для --deepen не поддерживается"
+
+#: builtin/fetch.c:1324
+msgid "--deepen and --depth are mutually exclusive"
+msgstr "--deepen и --depth нельзя использовать одновременно"
+
+#: builtin/fetch.c:1329
msgid "--depth and --unshallow cannot be used together"
msgstr "нельзя использовать одновременно --depth и --unshallow"
-#: builtin/fetch.c:1286
+#: builtin/fetch.c:1331
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow не имеет смысла на полном репозитории"
-#: builtin/fetch.c:1306
+#: builtin/fetch.c:1353
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all не принимает имя репозитория как аргумент"
-#: builtin/fetch.c:1308
+#: builtin/fetch.c:1355
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all не имеет смысла при указании спецификаций ссылок"
-#: builtin/fetch.c:1319
+#: builtin/fetch.c:1366
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Нет такого внешнего репозитория или группы: %s"
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1374
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Получение группы и указание спецификаций ссылок не имеет смысла"
"git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
msgstr "git fmt-merge-msg [-m <сообщение>] [--log[=<n>] | --no-log] [--file <файл>]"
-#: builtin/fmt-merge-msg.c:667
+#: builtin/fmt-merge-msg.c:663
msgid "populate log with at most <n> entries from shortlog"
msgstr "отправить в журнал <n> записей из короткого журнала"
-#: builtin/fmt-merge-msg.c:670
+#: builtin/fmt-merge-msg.c:666
msgid "alias for --log (deprecated)"
msgstr "сокращение для --log (устаревшее)"
-#: builtin/fmt-merge-msg.c:673
+#: builtin/fmt-merge-msg.c:669
msgid "text"
msgstr "текст"
-#: builtin/fmt-merge-msg.c:674
+#: builtin/fmt-merge-msg.c:670
msgid "use <text> as start of message"
msgstr "использовать <текст> как начальное сообщение"
-#: builtin/fmt-merge-msg.c:675
+#: builtin/fmt-merge-msg.c:671
msgid "file to read from"
msgstr "файл для чтения"
msgid "show verbose names for reachable objects"
msgstr "показать подробные имена для недоступных объектов"
-#: builtin/fsck.c:671
+#: builtin/fsck.c:665
msgid "Checking objects"
msgstr "Проверка объектов"
msgid "invalid number of threads specified (%d) for %s"
msgstr "указано недопустимое количество потоков (%d) для %s"
-#: builtin/grep.c:452 builtin/grep.c:487
+#: builtin/grep.c:453 builtin/grep.c:488
#, c-format
msgid "unable to read tree (%s)"
msgstr "не удалось прочитать дерево (%s)"
-#: builtin/grep.c:502
+#: builtin/grep.c:503
#, c-format
msgid "unable to grep from object of type %s"
msgstr "не удалось выполнить grep из объекта типа %s"
-#: builtin/grep.c:560
+#: builtin/grep.c:561
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "параметр «%c» ожидает числовое значение"
-#: builtin/grep.c:577
-#, c-format
-msgid "cannot open '%s'"
-msgstr "не удалось открыть «%s»"
-
-#: builtin/grep.c:646
+#: builtin/grep.c:647
msgid "search in index instead of in the work tree"
msgstr "искать в индексе, а не в рабочем каталоге"
-#: builtin/grep.c:648
+#: builtin/grep.c:649
msgid "find in contents not managed by git"
msgstr "искать в содержимом не управляемым git"
-#: builtin/grep.c:650
+#: builtin/grep.c:651
msgid "search in both tracked and untracked files"
msgstr "искать и в отслеживаемых, и в неотслеживаемых файлах"
-#: builtin/grep.c:652
+#: builtin/grep.c:653
msgid "ignore files specified via '.gitignore'"
msgstr "игнорировать файлы указанные в «.gitignore»"
-#: builtin/grep.c:655
+#: builtin/grep.c:656
msgid "show non-matching lines"
msgstr "искать в несовпадающих строках"
-#: builtin/grep.c:657
+#: builtin/grep.c:658
msgid "case insensitive matching"
msgstr "без учета регистра"
-#: builtin/grep.c:659
+#: builtin/grep.c:660
msgid "match patterns only at word boundaries"
msgstr "искать совпадения шаблона только на границах слов"
-#: builtin/grep.c:661
+#: builtin/grep.c:662
msgid "process binary files as text"
msgstr "обработка двоичных файлов как текста"
-#: builtin/grep.c:663
+#: builtin/grep.c:664
msgid "don't match patterns in binary files"
msgstr "не искать совпадения шаблона в двоичных файлах"
-#: builtin/grep.c:666
+#: builtin/grep.c:667
msgid "process binary files with textconv filters"
msgstr "обрабатываться двоичные файлы с помощью фильтров textconv"
-#: builtin/grep.c:668
+#: builtin/grep.c:669
msgid "descend at most <depth> levels"
msgstr "на глубине максиму <глубина> уровней"
-#: builtin/grep.c:672
+#: builtin/grep.c:673
msgid "use extended POSIX regular expressions"
msgstr "использовать расширенные регулярные выражения POSIX"
-#: builtin/grep.c:675
+#: builtin/grep.c:676
msgid "use basic POSIX regular expressions (default)"
msgstr "использовать базовые регулярные выражения POSIX (по умолчанию)"
-#: builtin/grep.c:678
+#: builtin/grep.c:679
msgid "interpret patterns as fixed strings"
msgstr "интерпретировать шаблоны как фиксированные строки"
-#: builtin/grep.c:681
+#: builtin/grep.c:682
msgid "use Perl-compatible regular expressions"
msgstr "использовать Perl-совместимые регулярные выражения"
-#: builtin/grep.c:684
+#: builtin/grep.c:685
msgid "show line numbers"
msgstr "вывести номера строк"
-#: builtin/grep.c:685
+#: builtin/grep.c:686
msgid "don't show filenames"
msgstr "не выводить имена файлов"
-#: builtin/grep.c:686
+#: builtin/grep.c:687
msgid "show filenames"
msgstr "выводить имена файлов"
-#: builtin/grep.c:688
+#: builtin/grep.c:689
msgid "show filenames relative to top directory"
msgstr "выводить имена файлов относительно каталога репозитория"
-#: builtin/grep.c:690
+#: builtin/grep.c:691
msgid "show only filenames instead of matching lines"
msgstr "выводить только имена файлов, а не совпадающие строки"
-#: builtin/grep.c:692
+#: builtin/grep.c:693
msgid "synonym for --files-with-matches"
msgstr "синоним для --files-with-matches"
-#: builtin/grep.c:695
+#: builtin/grep.c:696
msgid "show only the names of files without match"
msgstr "выводить только несовпадающие имена файлов"
-#: builtin/grep.c:697
+#: builtin/grep.c:698
msgid "print NUL after filenames"
msgstr "выводить двоичный НОЛЬ после списка имен файлов"
-#: builtin/grep.c:699
+#: builtin/grep.c:700
msgid "show the number of matches instead of matching lines"
msgstr "выводить количество совпадений, а не совпадающие строки"
-#: builtin/grep.c:700
+#: builtin/grep.c:701
msgid "highlight matches"
msgstr "подсвечивать совпадения"
-#: builtin/grep.c:702
+#: builtin/grep.c:703
msgid "print empty line between matches from different files"
msgstr "выводить пустую строку после совпадений из разных файлов"
-#: builtin/grep.c:704
+#: builtin/grep.c:705
msgid "show filename only once above matches from same file"
msgstr "выводить имя файла только раз на несколько совпадений в одном файле"
-#: builtin/grep.c:707
+#: builtin/grep.c:708
msgid "show <n> context lines before and after matches"
msgstr "показать <n> строк контекста перед и после совпадения"
-#: builtin/grep.c:710
+#: builtin/grep.c:711
msgid "show <n> context lines before matches"
msgstr "показать <n> строк контекста перед совпадением"
-#: builtin/grep.c:712
+#: builtin/grep.c:713
msgid "show <n> context lines after matches"
msgstr "показать <n> строк контекста после совпадения"
-#: builtin/grep.c:714
+#: builtin/grep.c:715
msgid "use <n> worker threads"
msgstr "использовать <кол> рабочих потоков"
-#: builtin/grep.c:715
+#: builtin/grep.c:716
msgid "shortcut for -C NUM"
msgstr "тоже, что и -C КОЛИЧЕСТВО"
-#: builtin/grep.c:718
+#: builtin/grep.c:719
msgid "show a line with the function name before matches"
msgstr "показать строку с именем функции перед совпадением"
-#: builtin/grep.c:720
+#: builtin/grep.c:721
msgid "show the surrounding function"
msgstr "показать окружающую функцию"
-#: builtin/grep.c:723
+#: builtin/grep.c:724
msgid "read patterns from file"
msgstr "прочитать шаблоны из файла"
-#: builtin/grep.c:725
+#: builtin/grep.c:726
msgid "match <pattern>"
msgstr "поиск соответствий с <шаблоном>"
-#: builtin/grep.c:727
+#: builtin/grep.c:728
msgid "combine patterns specified with -e"
msgstr "объединить шаблоны указанные с помощью -e"
-#: builtin/grep.c:739
+#: builtin/grep.c:740
msgid "indicate hit with exit status without output"
msgstr "ничего не выводить, указать на совпадение с помощью кода выхода"
-#: builtin/grep.c:741
+#: builtin/grep.c:742
msgid "show only matches from files that match all patterns"
msgstr "показать только совпадения из файлов в которых совпадают все шаблоны"
-#: builtin/grep.c:743
+#: builtin/grep.c:744
msgid "show parse tree for grep expression"
msgstr "показать дерево разбора для выражения поиска"
-#: builtin/grep.c:747
+#: builtin/grep.c:748
msgid "pager"
msgstr "пейджер"
-#: builtin/grep.c:747
+#: builtin/grep.c:748
msgid "show matching files in the pager"
msgstr "показать совпадающие файлы с помощью программы-пейджера"
-#: builtin/grep.c:750
+#: builtin/grep.c:751
msgid "allow calling of grep(1) (ignored by this build)"
msgstr "разрешить вызов grep(1) (игнорируется в этой сборке)"
-#: builtin/grep.c:813
+#: builtin/grep.c:814
msgid "no pattern given."
msgstr "не задан шаблон."
-#: builtin/grep.c:845 builtin/index-pack.c:1479
+#: builtin/grep.c:846 builtin/index-pack.c:1480
#, c-format
msgid "invalid number of threads specified (%d)"
msgstr "указано неправильное количество потоков (%d)"
-#: builtin/grep.c:875
+#: builtin/grep.c:876
msgid "--open-files-in-pager only works on the worktree"
msgstr "--open-files-in-pager работает только в рабочем каталоге"
-#: builtin/grep.c:901
+#: builtin/grep.c:902
msgid "--cached or --untracked cannot be used with --no-index."
msgstr "--cached или --untracked нельзя использовать одновременно с --no-index."
-#: builtin/grep.c:906
+#: builtin/grep.c:907
msgid "--no-index or --untracked cannot be used with revs."
msgstr "--no-index или --untracked нельзя использовать одновременно с указанием редакции."
-#: builtin/grep.c:909
+#: builtin/grep.c:910
msgid "--[no-]exclude-standard cannot be used for tracked contents."
msgstr "--[no-]exclude-standard не может использоваться для отслеживаемого содержимого."
-#: builtin/grep.c:917
+#: builtin/grep.c:918
msgid "both --cached and trees are given."
msgstr "указано одновременно --cached и дерево."
msgid "git hash-object --stdin-paths"
msgstr "git hash-object --stdin-paths"
-#: builtin/hash-object.c:93
+#: builtin/hash-object.c:94
msgid "type"
msgstr "тип"
-#: builtin/hash-object.c:93
+#: builtin/hash-object.c:94
msgid "object type"
msgstr "тип объекта"
-#: builtin/hash-object.c:94
+#: builtin/hash-object.c:95
msgid "write the object into the object database"
msgstr "запись объекта в базу данных объектов"
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
msgid "read the object from stdin"
msgstr "прочитать объект из стандартного ввода"
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:99
msgid "store file as is without filters"
msgstr "сохранить файл без использования фильтров"
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
msgid ""
"just hash any random garbage to create corrupt objects for debugging Git"
msgstr "хэшировать любой мусор и создавать поврежденные объекты для отладки Git"
-#: builtin/hash-object.c:100
+#: builtin/hash-object.c:101
msgid "process file as it were from this path"
msgstr "обработать файл так, будто он находится по указанному пути"
-#: builtin/help.c:41
+#: builtin/help.c:42
msgid "print all available commands"
msgstr "вывести список всех доступных команд"
-#: builtin/help.c:42
+#: builtin/help.c:43
+msgid "exclude guides"
+msgstr "исключить руководства"
+
+#: builtin/help.c:44
msgid "print list of useful guides"
msgstr "вывести список полезных руководств"
-#: builtin/help.c:43
+#: builtin/help.c:45
msgid "show man page"
msgstr "открыть руководство в формате man"
-#: builtin/help.c:44
+#: builtin/help.c:46
msgid "show manual in web browser"
msgstr "открыть руководство в веб-браузере"
-#: builtin/help.c:46
+#: builtin/help.c:48
msgid "show info page"
msgstr "открыть руководство в формате info"
-#: builtin/help.c:52
+#: builtin/help.c:54
msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
msgstr "git help [--all] [--guides] [--man | --web | --info] [<команда>]"
-#: builtin/help.c:64
+#: builtin/help.c:66
#, c-format
msgid "unrecognized help format '%s'"
msgstr "неопознанный формат руководства «%s»"
-#: builtin/help.c:91
+#: builtin/help.c:93
msgid "Failed to start emacsclient."
msgstr "Сбой при запуске emacsclient."
-#: builtin/help.c:104
+#: builtin/help.c:106
msgid "Failed to parse emacsclient version."
msgstr "Сбой при определении версии emacsclient."
-#: builtin/help.c:112
+#: builtin/help.c:114
#, c-format
msgid "emacsclient version '%d' too old (< 22)."
msgstr "версия emacsclient «%d» слишком старая (< 22)."
-#: builtin/help.c:130 builtin/help.c:151 builtin/help.c:160 builtin/help.c:168
+#: builtin/help.c:132 builtin/help.c:153 builtin/help.c:162 builtin/help.c:170
#, c-format
msgid "failed to exec '%s'"
msgstr "сбой при запуске «%s»"
-#: builtin/help.c:205
+#: builtin/help.c:207
#, c-format
msgid ""
"'%s': path for unsupported man viewer.\n"
"Please consider using 'man.<tool>.cmd' instead."
msgstr "«%s»: путь для неподдерживаемой программы просмотра man.\nВместо этого используйте «man.<программа>.cmd»."
-#: builtin/help.c:217
+#: builtin/help.c:219
#, c-format
msgid ""
"'%s': cmd for supported man viewer.\n"
"Please consider using 'man.<tool>.path' instead."
msgstr "«%s»: команда для неподдерживаемой программы просмотра man.\nВместо этого используйте «man.<программа>.path»."
-#: builtin/help.c:334
+#: builtin/help.c:336
#, c-format
msgid "'%s': unknown man viewer."
msgstr "«%s»: неизвестная программа просмотра man."
-#: builtin/help.c:351
+#: builtin/help.c:353
msgid "no man viewer handled the request"
msgstr "программа просмотра man не обработала запрос"
-#: builtin/help.c:359
+#: builtin/help.c:361
msgid "no info viewer handled the request"
msgstr "программа просмотра info не обработала запрос"
-#: builtin/help.c:401
+#: builtin/help.c:403
msgid "Defining attributes per path"
msgstr "Определение атрибутов для путей файлов или каталогов"
-#: builtin/help.c:402
+#: builtin/help.c:404
msgid "Everyday Git With 20 Commands Or So"
msgstr "Повседневный Git с 20 командами или около того"
-#: builtin/help.c:403
+#: builtin/help.c:405
msgid "A Git glossary"
msgstr "Глоссарий Git"
-#: builtin/help.c:404
+#: builtin/help.c:406
msgid "Specifies intentionally untracked files to ignore"
msgstr "Указание специально игнорируемых файлов"
-#: builtin/help.c:405
+#: builtin/help.c:407
msgid "Defining submodule properties"
msgstr "Определение свойств подмодулей"
-#: builtin/help.c:406
+#: builtin/help.c:408
msgid "Specifying revisions and ranges for Git"
msgstr "Указание редакций и диапазонов для Git"
-#: builtin/help.c:407
+#: builtin/help.c:409
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "Учебное введение в Git (для версии 1.5.1 или новее)"
-#: builtin/help.c:408
+#: builtin/help.c:410
msgid "An overview of recommended workflows with Git"
msgstr "Обзор рекомендуемых последовательностей выполняемых действий с Git"
-#: builtin/help.c:420
+#: builtin/help.c:422
msgid "The common Git guides are:\n"
msgstr "Основные руководства Git:\n"
-#: builtin/help.c:441 builtin/help.c:458
-#, c-format
-msgid "usage: %s%s"
-msgstr "использование: %s%s"
-
-#: builtin/help.c:474
+#: builtin/help.c:440
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "«git %s» — это сокращение для «%s»"
-#: builtin/index-pack.c:153
+#: builtin/help.c:462 builtin/help.c:479
+#, c-format
+msgid "usage: %s%s"
+msgstr "использование: %s%s"
+
+#: builtin/index-pack.c:154
#, c-format
msgid "unable to open %s"
msgstr "не удалось открыть %s"
-#: builtin/index-pack.c:203
+#: builtin/index-pack.c:204
#, c-format
msgid "object type mismatch at %s"
msgstr "несоответствие типа объекта на %s"
-#: builtin/index-pack.c:223
+#: builtin/index-pack.c:224
#, c-format
msgid "did not receive expected object %s"
msgstr "ожидаемый объект не получен на %s"
-#: builtin/index-pack.c:226
+#: builtin/index-pack.c:227
#, c-format
msgid "object %s: expected type %s, found %s"
msgstr "объект %s: ожидаемый тип %s, получен %s"
-#: builtin/index-pack.c:268
+#: builtin/index-pack.c:269
#, c-format
msgid "cannot fill %d byte"
msgid_plural "cannot fill %d bytes"
msgstr[2] "не удалось заполнить %d байтов"
msgstr[3] "не удалось заполнить %d байтов"
-#: builtin/index-pack.c:278
+#: builtin/index-pack.c:279
msgid "early EOF"
msgstr "неожиданный конец файла"
-#: builtin/index-pack.c:279
+#: builtin/index-pack.c:280
msgid "read error on input"
msgstr "ошибка чтения ввода"
-#: builtin/index-pack.c:291
+#: builtin/index-pack.c:292
msgid "used more bytes than were available"
msgstr "использовано больше байт, чем было доступно"
-#: builtin/index-pack.c:298
+#: builtin/index-pack.c:299
msgid "pack too large for current definition of off_t"
msgstr "пакет слишком большой для текущего определения off_t"
-#: builtin/index-pack.c:314
+#: builtin/index-pack.c:302 builtin/unpack-objects.c:92
+msgid "pack exceeds maximum allowed size"
+msgstr "размер пакета превышает максимальный допустимый"
+
+#: builtin/index-pack.c:317
#, c-format
msgid "unable to create '%s'"
msgstr "не удалось создать «%s»"
-#: builtin/index-pack.c:319
+#: builtin/index-pack.c:322
#, c-format
msgid "cannot open packfile '%s'"
msgstr "не удалось открыть файл пакета «%s»"
-#: builtin/index-pack.c:333
+#: builtin/index-pack.c:336
msgid "pack signature mismatch"
msgstr "несоответствие подписи пакета"
-#: builtin/index-pack.c:335
+#: builtin/index-pack.c:338
#, c-format
msgid "pack version %<PRIu32> unsupported"
msgstr "версия пакета %<PRIu32> не поддерживается"
-#: builtin/index-pack.c:353
+#: builtin/index-pack.c:356
#, c-format
msgid "pack has bad object at offset %<PRIuMAX>: %s"
msgstr "пакет содержит плохой объект по смещению %<PRIuMAX>: %s"
-#: builtin/index-pack.c:475
+#: builtin/index-pack.c:478
#, c-format
msgid "inflate returned %d"
msgstr "программа сжатия вернула %d"
-#: builtin/index-pack.c:524
+#: builtin/index-pack.c:527
msgid "offset value overflow for delta base object"
msgstr "переполнение значения смещения у базового объекта дельты"
-#: builtin/index-pack.c:532
+#: builtin/index-pack.c:535
msgid "delta base offset is out of bound"
msgstr "смещение базовой дельты вышло за допустимые пределы"
-#: builtin/index-pack.c:540
+#: builtin/index-pack.c:543
#, c-format
msgid "unknown object type %d"
msgstr "неизвестный тип объекта %d"
-#: builtin/index-pack.c:571
+#: builtin/index-pack.c:574
msgid "cannot pread pack file"
msgstr "не удалось выполнить pread для файла пакета"
-#: builtin/index-pack.c:573
+#: builtin/index-pack.c:576
#, c-format
msgid "premature end of pack file, %<PRIuMAX> byte missing"
msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
msgstr[2] "преждевременное окончание файла пакета, %<PRIuMAX> байтов отсутствует"
msgstr[3] "преждевременное окончание файла пакета, %<PRIuMAX> байтов отсутствует"
-#: builtin/index-pack.c:599
+#: builtin/index-pack.c:602
msgid "serious inflate inconsistency"
msgstr "серьезное несоответствие при распаковке"
-#: builtin/index-pack.c:745 builtin/index-pack.c:751 builtin/index-pack.c:774
-#: builtin/index-pack.c:808 builtin/index-pack.c:817
+#: builtin/index-pack.c:748 builtin/index-pack.c:754 builtin/index-pack.c:777
+#: builtin/index-pack.c:811 builtin/index-pack.c:820
#, c-format
msgid "SHA1 COLLISION FOUND WITH %s !"
msgstr "НАЙДЕНА КОЛЛИЗИЯ SHA1 С %s !"
-#: builtin/index-pack.c:748 builtin/pack-objects.c:164
-#: builtin/pack-objects.c:256
+#: builtin/index-pack.c:751 builtin/pack-objects.c:166
+#: builtin/pack-objects.c:258
#, c-format
msgid "unable to read %s"
msgstr "не удалось прочитать %s"
-#: builtin/index-pack.c:814
+#: builtin/index-pack.c:817
#, c-format
msgid "cannot read existing object %s"
msgstr "не удалось прочитать существующий объект %s"
-#: builtin/index-pack.c:828
+#: builtin/index-pack.c:831
#, c-format
msgid "invalid blob object %s"
msgstr "неправильный файл двоичного объекта %s"
-#: builtin/index-pack.c:842
+#: builtin/index-pack.c:845
#, c-format
msgid "invalid %s"
msgstr "неправильный %s"
-#: builtin/index-pack.c:845
+#: builtin/index-pack.c:848
msgid "Error in object"
msgstr "Ошибка в объекте"
-#: builtin/index-pack.c:847
+#: builtin/index-pack.c:850
#, c-format
msgid "Not all child objects of %s are reachable"
msgstr "Не все дочерние объекты %s достижимы"
-#: builtin/index-pack.c:919 builtin/index-pack.c:950
+#: builtin/index-pack.c:922 builtin/index-pack.c:953
msgid "failed to apply delta"
msgstr "сбой при применении дельты"
-#: builtin/index-pack.c:1120
+#: builtin/index-pack.c:1123
msgid "Receiving objects"
msgstr "Получение объектов"
-#: builtin/index-pack.c:1120
+#: builtin/index-pack.c:1123
msgid "Indexing objects"
msgstr "Индексирование объектов"
-#: builtin/index-pack.c:1152
+#: builtin/index-pack.c:1155
msgid "pack is corrupted (SHA1 mismatch)"
msgstr "пакет поврежден (несоответствие SHA1)"
-#: builtin/index-pack.c:1157
+#: builtin/index-pack.c:1160
msgid "cannot fstat packfile"
msgstr "не удалось выполнить fstat для файла пакета"
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1163
msgid "pack has junk at the end"
msgstr "файл пакета содержит мусор в конце"
-#: builtin/index-pack.c:1171
+#: builtin/index-pack.c:1174
msgid "confusion beyond insanity in parse_pack_objects()"
msgstr "безумная путаница в parse_pack_objects()"
-#: builtin/index-pack.c:1196
+#: builtin/index-pack.c:1197
msgid "Resolving deltas"
msgstr "Определение изменений"
-#: builtin/index-pack.c:1207
+#: builtin/index-pack.c:1208
#, c-format
msgid "unable to create thread: %s"
msgstr "не удалось создать поток: %s"
-#: builtin/index-pack.c:1249
+#: builtin/index-pack.c:1250
msgid "confusion beyond insanity"
msgstr "безумная путаница"
-#: builtin/index-pack.c:1255
+#: builtin/index-pack.c:1256
#, c-format
msgid "completed with %d local object"
msgid_plural "completed with %d local objects"
msgstr[2] "завершено с %d локальными объектами"
msgstr[3] "завершено с %d локальными объектами"
-#: builtin/index-pack.c:1267
+#: builtin/index-pack.c:1268
#, c-format
msgid "Unexpected tail checksum for %s (disk corruption?)"
msgstr "Неожиданная контрольная сумма в конце %s (диск поврежден?)"
-#: builtin/index-pack.c:1271
+#: builtin/index-pack.c:1272
#, c-format
msgid "pack has %d unresolved delta"
msgid_plural "pack has %d unresolved deltas"
msgstr[2] "пакет содержит %d неразрешенных дельт"
msgstr[3] "пакет содержит %d неразрешенных дельт"
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1296
#, c-format
msgid "unable to deflate appended object (%d)"
msgstr "нельзя сжать присоединенный объект (%d)"
-#: builtin/index-pack.c:1371
+#: builtin/index-pack.c:1372
#, c-format
msgid "local object %s is corrupt"
msgstr "локальный объект %s поврежден"
-#: builtin/index-pack.c:1395
+#: builtin/index-pack.c:1396
msgid "error while closing pack file"
msgstr "ошибка при закрытии файла пакета"
-#: builtin/index-pack.c:1408
+#: builtin/index-pack.c:1409
#, c-format
msgid "cannot write keep file '%s'"
msgstr "не удалось записать файл удержания «%s»"
-#: builtin/index-pack.c:1416
+#: builtin/index-pack.c:1417
#, c-format
msgid "cannot close written keep file '%s'"
msgstr "не удалось закрыть записанный файл удержания «%s»"
-#: builtin/index-pack.c:1429
+#: builtin/index-pack.c:1430
msgid "cannot store pack file"
msgstr "не удалось сохранить файл пакета"
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1441
msgid "cannot store index file"
msgstr "не удалось сохранить файл индекса"
-#: builtin/index-pack.c:1473
+#: builtin/index-pack.c:1474
#, c-format
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "плохой pack.indexversion=%<PRIu32>"
-#: builtin/index-pack.c:1483 builtin/index-pack.c:1681
+#: builtin/index-pack.c:1484 builtin/index-pack.c:1681
#, c-format
msgid "no threads support, ignoring %s"
msgstr "нет поддержки потоков, игнорирование %s"
msgid "bad %s"
msgstr "плохой %s"
-#: builtin/index-pack.c:1730
+#: builtin/index-pack.c:1732
msgid "--fix-thin cannot be used without --stdin"
msgstr "--fix-thin нельзя использовать без --stdin"
-#: builtin/index-pack.c:1738
+#: builtin/index-pack.c:1740
msgid "--verify with no packfile name given"
msgstr "--verify без указания имени файла пакета"
-#: builtin/init-db.c:55
+#: builtin/init-db.c:54
#, c-format
msgid "cannot stat '%s'"
msgstr "не удалось выполнить stat для «%s»"
-#: builtin/init-db.c:61
+#: builtin/init-db.c:60
#, c-format
msgid "cannot stat template '%s'"
msgstr "не удалось выполнить stat для шаблона «%s»"
-#: builtin/init-db.c:66
+#: builtin/init-db.c:65
#, c-format
msgid "cannot opendir '%s'"
msgstr "не удалось выполнить opendir для «%s»"
-#: builtin/init-db.c:77
+#: builtin/init-db.c:76
#, c-format
msgid "cannot readlink '%s'"
msgstr "не удалось выполнить readlink для «%s»"
-#: builtin/init-db.c:79
+#: builtin/init-db.c:78
#, c-format
msgid "cannot symlink '%s' '%s'"
msgstr "не удалось создать символьную ссылку «%s» на «%s»"
-#: builtin/init-db.c:85
+#: builtin/init-db.c:84
#, c-format
msgid "cannot copy '%s' to '%s'"
msgstr "не удалось скопировать файл «%s» в «%s»"
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
#, c-format
msgid "ignoring template %s"
msgstr "игнорирование шаблона %s"
-#: builtin/init-db.c:120
+#: builtin/init-db.c:119
#, c-format
msgid "templates not found %s"
msgstr "шаблоны не найдены %s"
-#: builtin/init-db.c:135
+#: builtin/init-db.c:134
#, c-format
msgid "not copying templates from '%s': %s"
msgstr "не копирую шаблоны из «%s»: %s"
-#: builtin/init-db.c:312 builtin/init-db.c:315
-#, c-format
-msgid "%s already exists"
-msgstr "%s уже существует"
-
-#: builtin/init-db.c:344
+#: builtin/init-db.c:327
#, c-format
msgid "unable to handle file type %d"
msgstr "не удается обработать файл типа %d"
-#: builtin/init-db.c:347
+#: builtin/init-db.c:330
#, c-format
msgid "unable to move %s to %s"
msgstr "не удается переместить файл %s в %s"
-#: builtin/init-db.c:402
+#: builtin/init-db.c:347 builtin/init-db.c:350
+#, c-format
+msgid "%s already exists"
+msgstr "%s уже существует"
+
+#: builtin/init-db.c:403
#, c-format
msgid "Reinitialized existing shared Git repository in %s%s\n"
msgstr "Переинициализирован существующий общий репозиторий Git в %s%s\n"
-#: builtin/init-db.c:403
+#: builtin/init-db.c:404
#, c-format
msgid "Reinitialized existing Git repository in %s%s\n"
msgstr "Переинициализирован существующий репозиторий Git в %s%s\n"
-#: builtin/init-db.c:407
+#: builtin/init-db.c:408
#, c-format
msgid "Initialized empty shared Git repository in %s%s\n"
msgstr "Инициализирован пустой общий репозиторий Git в %s%s\n"
-#: builtin/init-db.c:408
+#: builtin/init-db.c:409
#, c-format
msgid "Initialized empty Git repository in %s%s\n"
msgstr "Инициализирован пустой репозиторий Git в %s%s\n"
-#: builtin/init-db.c:455
+#: builtin/init-db.c:457
msgid ""
"git init [-q | --quiet] [--bare] [--template=<template-directory>] "
"[--shared[=<permissions>]] [<directory>]"
msgstr "git init [-q | --quiet] [--bare] [--template=<каталог-шаблонов>] [--shared[=<права-доступа>]] [<каталог>]"
-#: builtin/init-db.c:478
+#: builtin/init-db.c:480
msgid "permissions"
msgstr "права-доступа"
-#: builtin/init-db.c:479
+#: builtin/init-db.c:481
msgid "specify that the git repository is to be shared amongst several users"
msgstr "укажите, если репозиторий git будет использоваться несколькими пользователями"
-#: builtin/init-db.c:513 builtin/init-db.c:518
+#: builtin/init-db.c:515 builtin/init-db.c:520
#, c-format
msgid "cannot mkdir %s"
msgstr "не удалось выполнить mkdir %s"
-#: builtin/init-db.c:522
+#: builtin/init-db.c:524
#, c-format
msgid "cannot chdir to %s"
msgstr "не удалось выполнить chdir в %s"
-#: builtin/init-db.c:543
+#: builtin/init-db.c:545
#, c-format
msgid ""
"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
"dir=<directory>)"
msgstr "%s (или --work-tree=<каталог>) нельзя использовать без указания %s (или --git-dir=<каталог>)"
-#: builtin/init-db.c:571
+#: builtin/init-db.c:573
#, c-format
msgid "Cannot access work tree '%s'"
msgstr "Не удалось получить доступ к рабочему каталогу «%s»"
msgid "Cover letter needs email format"
msgstr "Сопроводительное письмо должно быть в формате электронной почты"
-#: builtin/log.c:1064
+#: builtin/log.c:1063
#, c-format
msgid "insane in-reply-to: %s"
msgstr "ошибка в поле in-reply-to: %s"
-#: builtin/log.c:1092
+#: builtin/log.c:1091
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [<опции>] [<начиная-с> | <диапазон-редакций>]"
-#: builtin/log.c:1137
+#: builtin/log.c:1141
msgid "Two output directories?"
msgstr "Два выходных каталога?"
-#: builtin/log.c:1244 builtin/log.c:1883 builtin/log.c:1885 builtin/log.c:1897
+#: builtin/log.c:1248 builtin/log.c:1891 builtin/log.c:1893 builtin/log.c:1905
#, c-format
msgid "Unknown commit %s"
msgstr "Неизвестный коммит %s"
-#: builtin/log.c:1254 builtin/notes.c:254 builtin/notes.c:305
-#: builtin/notes.c:307 builtin/notes.c:370 builtin/notes.c:425
-#: builtin/notes.c:511 builtin/notes.c:516 builtin/notes.c:594
-#: builtin/notes.c:657 builtin/notes.c:882 builtin/tag.c:455
+#: builtin/log.c:1258 builtin/notes.c:884 builtin/tag.c:455
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "Не удалось разрешить «%s» как ссылку."
-#: builtin/log.c:1259
+#: builtin/log.c:1263
msgid "Could not find exact merge base."
msgstr "Не удалось найти точную базу слияния."
-#: builtin/log.c:1263
+#: builtin/log.c:1267
msgid ""
"Failed to get upstream, if you want to record base commit automatically,\n"
"please use git branch --set-upstream-to to track a remote branch.\n"
"Or you could specify base commit by --base=<base-commit-id> manually."
msgstr "Не удалось получить вышестоящую ветку. Если вы хотите записать базовый коммит автомитически, то используйте git branch --set-upstream-to для отслеживания внешней ветки.\nИли же вы можете указать базовый коммит указанием --base=<идентификатор-базового-коммита> вручную."
-#: builtin/log.c:1283
+#: builtin/log.c:1287
msgid "Failed to find exact merge base"
msgstr "Не удалось найти точную базу слияния"
-#: builtin/log.c:1294
+#: builtin/log.c:1298
msgid "base commit should be the ancestor of revision list"
msgstr "базовый коммит должен быть предком списка редакций"
-#: builtin/log.c:1298
+#: builtin/log.c:1302
msgid "base commit shouldn't be in revision list"
msgstr "базовый коммит не должен быть в списке редакций"
-#: builtin/log.c:1347
+#: builtin/log.c:1351
msgid "cannot get patch id"
msgstr "не удалось получить идентификатор патча"
-#: builtin/log.c:1404
+#: builtin/log.c:1408
msgid "use [PATCH n/m] even with a single patch"
msgstr "выводить [PATCH n/m] даже когда один патч"
-#: builtin/log.c:1407
+#: builtin/log.c:1411
msgid "use [PATCH] even with multiple patches"
msgstr "выводить [PATCH] даже когда несколько патчей"
-#: builtin/log.c:1411
+#: builtin/log.c:1415
msgid "print patches to standard out"
msgstr "выводить патчи на стандартный вывод"
-#: builtin/log.c:1413
+#: builtin/log.c:1417
msgid "generate a cover letter"
msgstr "генерировать сопроводительное письмо"
-#: builtin/log.c:1415
+#: builtin/log.c:1419
msgid "use simple number sequence for output file names"
msgstr "использовать простую последовательность чисел для имен выходных файлов"
-#: builtin/log.c:1416
+#: builtin/log.c:1420
msgid "sfx"
msgstr "суффикс"
-#: builtin/log.c:1417
+#: builtin/log.c:1421
msgid "use <sfx> instead of '.patch'"
msgstr "использовать суффикс <суффикс> вместо «.patch»"
-#: builtin/log.c:1419
+#: builtin/log.c:1423
msgid "start numbering patches at <n> instead of 1"
msgstr "начать нумерацию патчей с <n>, а не с 1"
-#: builtin/log.c:1421
+#: builtin/log.c:1425
msgid "mark the series as Nth re-roll"
msgstr "пометить серию как энную попытку"
-#: builtin/log.c:1423
+#: builtin/log.c:1427
+msgid "Use [RFC PATCH] instead of [PATCH]"
+msgstr "Использовать [RFC PATCH] вместо [PATCH]"
+
+#: builtin/log.c:1430
msgid "Use [<prefix>] instead of [PATCH]"
msgstr "Использовать [<префикс>] вместо [PATCH]"
-#: builtin/log.c:1426
+#: builtin/log.c:1433
msgid "store resulting files in <dir>"
msgstr "сохранить результирующие файлы в <каталог>"
-#: builtin/log.c:1429
+#: builtin/log.c:1436
msgid "don't strip/add [PATCH]"
msgstr "не обрезать/добавлять [PATCH]"
-#: builtin/log.c:1432
+#: builtin/log.c:1439
msgid "don't output binary diffs"
msgstr "не выводить двоичные различия"
-#: builtin/log.c:1434
+#: builtin/log.c:1441
msgid "output all-zero hash in From header"
msgstr "выводить нулевую хэш-сумму в заголовке From"
-#: builtin/log.c:1436
+#: builtin/log.c:1443
msgid "don't include a patch matching a commit upstream"
msgstr "не включать патч, если коммит уже есть в вышестоящей ветке"
-#: builtin/log.c:1438
+#: builtin/log.c:1445
msgid "show patch format instead of default (patch + stat)"
msgstr "выводить в формате патча, а не в стандартном (патч + статистика)"
-#: builtin/log.c:1440
+#: builtin/log.c:1447
msgid "Messaging"
msgstr "Передача сообщений"
-#: builtin/log.c:1441
+#: builtin/log.c:1448
msgid "header"
msgstr "заголовок"
-#: builtin/log.c:1442
+#: builtin/log.c:1449
msgid "add email header"
msgstr "добавить заголовок сообщения"
-#: builtin/log.c:1443 builtin/log.c:1445
+#: builtin/log.c:1450 builtin/log.c:1452
msgid "email"
msgstr "почта"
-#: builtin/log.c:1443
+#: builtin/log.c:1450
msgid "add To: header"
msgstr "добавить заголовок To:"
-#: builtin/log.c:1445
+#: builtin/log.c:1452
msgid "add Cc: header"
msgstr "добавить заголовок Cc:"
-#: builtin/log.c:1447
+#: builtin/log.c:1454
msgid "ident"
msgstr "идентификатор"
-#: builtin/log.c:1448
+#: builtin/log.c:1455
msgid "set From address to <ident> (or committer ident if absent)"
msgstr "установить адрес отправителя на <идентификатор> (или на идентификатор коммитера, если отсутствует)"
-#: builtin/log.c:1450
+#: builtin/log.c:1457
msgid "message-id"
msgstr "идентификатор-сообщения"
-#: builtin/log.c:1451
+#: builtin/log.c:1458
msgid "make first mail a reply to <message-id>"
msgstr "сделать первое письмо ответом на <идентификатор-сообщения>"
-#: builtin/log.c:1452 builtin/log.c:1455
+#: builtin/log.c:1459 builtin/log.c:1462
msgid "boundary"
msgstr "вложение"
-#: builtin/log.c:1453
+#: builtin/log.c:1460
msgid "attach the patch"
msgstr "приложить патч"
-#: builtin/log.c:1456
+#: builtin/log.c:1463
msgid "inline the patch"
msgstr "включить патч в текст письма"
-#: builtin/log.c:1460
+#: builtin/log.c:1467
msgid "enable message threading, styles: shallow, deep"
msgstr "включить в письмах иерархичность, стили: shallow (частичную), deep (глубокую)"
-#: builtin/log.c:1462
+#: builtin/log.c:1469
msgid "signature"
msgstr "подпись"
-#: builtin/log.c:1463
+#: builtin/log.c:1470
msgid "add a signature"
msgstr "добавить подпись"
-#: builtin/log.c:1464
+#: builtin/log.c:1471
msgid "base-commit"
msgstr "базовый коммит"
-#: builtin/log.c:1465
+#: builtin/log.c:1472
msgid "add prerequisite tree info to the patch series"
msgstr "добавить информацию о требовании дерева к серии патчей"
-#: builtin/log.c:1467
+#: builtin/log.c:1474
msgid "add a signature from a file"
msgstr "добавить подпись из файла"
-#: builtin/log.c:1468
+#: builtin/log.c:1475
msgid "don't print the patch filenames"
msgstr "не выводить имена файлов патчей"
-#: builtin/log.c:1558
+#: builtin/log.c:1565
msgid "-n and -k are mutually exclusive."
msgstr "-n и -k нельзя использовать одновременно"
-#: builtin/log.c:1560
-msgid "--subject-prefix and -k are mutually exclusive."
-msgstr "--subject-prefix и -k нельзя использовать одновременно."
+#: builtin/log.c:1567
+msgid "--subject-prefix/--rfc and -k are mutually exclusive."
+msgstr "--subject-prefix/--rfc и -k нельзя использовать одновременно."
-#: builtin/log.c:1568
+#: builtin/log.c:1575
msgid "--name-only does not make sense"
msgstr "--name-only не имеет смысла"
-#: builtin/log.c:1570
+#: builtin/log.c:1577
msgid "--name-status does not make sense"
msgstr "--name-status не имеет смысла"
-#: builtin/log.c:1572
+#: builtin/log.c:1579
msgid "--check does not make sense"
msgstr "--check не имеет смысла"
-#: builtin/log.c:1602
+#: builtin/log.c:1609
msgid "standard output, or directory, which one?"
msgstr "стандартный вывод или каталог?"
-#: builtin/log.c:1604
+#: builtin/log.c:1611
#, c-format
msgid "Could not create directory '%s'"
msgstr "Не удалось создать каталог «%s»"
-#: builtin/log.c:1698
+#: builtin/log.c:1705
#, c-format
msgid "unable to read signature file '%s'"
msgstr "не удалось прочитать файл подписи «%s»"
-#: builtin/log.c:1769
+#: builtin/log.c:1777
msgid "Failed to create output files"
msgstr "Сбой при создании выходных файлов"
-#: builtin/log.c:1818
+#: builtin/log.c:1826
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [<вышестоящая-ветка> [<голова> [<ограничение>]]]"
-#: builtin/log.c:1872
+#: builtin/log.c:1880
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> "
"manually.\n"
msgstr "Не удалось найти отслеживаемую внешнюю ветку, укажите <вышестоящую-ветку> вручную.\n"
-#: builtin/ls-files.c:379
+#: builtin/ls-files.c:458
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [<опции>] [<файл>…]"
-#: builtin/ls-files.c:428
+#: builtin/ls-files.c:507
msgid "identify the file status with tags"
msgstr "выводить имена файлов с метками"
-#: builtin/ls-files.c:430
+#: builtin/ls-files.c:509
msgid "use lowercase letters for 'assume unchanged' files"
msgstr "использовать символы в нижнем регистре для «предположительно без изменений» файлов"
-#: builtin/ls-files.c:432
+#: builtin/ls-files.c:511
msgid "show cached files in the output (default)"
msgstr "показывать кэшированные файлы при выводе (по умолчанию)"
-#: builtin/ls-files.c:434
+#: builtin/ls-files.c:513
msgid "show deleted files in the output"
msgstr "показывать удаленные файлы при выводе"
-#: builtin/ls-files.c:436
+#: builtin/ls-files.c:515
msgid "show modified files in the output"
msgstr "показывать измененные файлы при выводе"
-#: builtin/ls-files.c:438
+#: builtin/ls-files.c:517
msgid "show other files in the output"
msgstr "показывать другие файлы при выводе"
-#: builtin/ls-files.c:440
+#: builtin/ls-files.c:519
msgid "show ignored files in the output"
msgstr "показывать игнорируемые файлы при выводе"
-#: builtin/ls-files.c:443
+#: builtin/ls-files.c:522
msgid "show staged contents' object name in the output"
msgstr "показывать имя индексированного объекта на выводе"
-#: builtin/ls-files.c:445
+#: builtin/ls-files.c:524
msgid "show files on the filesystem that need to be removed"
msgstr "показывать файлы в файловой системе, которые должны быть удалены"
-#: builtin/ls-files.c:447
+#: builtin/ls-files.c:526
msgid "show 'other' directories' names only"
msgstr "показывать только имена у «других» каталогов"
-#: builtin/ls-files.c:449
+#: builtin/ls-files.c:528
msgid "show line endings of files"
msgstr "показать концы строк файлов"
-#: builtin/ls-files.c:451
+#: builtin/ls-files.c:530
msgid "don't show empty directories"
msgstr "не показывать пустые каталоги"
-#: builtin/ls-files.c:454
+#: builtin/ls-files.c:533
msgid "show unmerged files in the output"
msgstr "показывать не слитые файлы на выводе"
-#: builtin/ls-files.c:456
+#: builtin/ls-files.c:535
msgid "show resolve-undo information"
msgstr "показывать информации о разрешении конфликтов и отмене"
-#: builtin/ls-files.c:458
+#: builtin/ls-files.c:537
msgid "skip files matching pattern"
msgstr "пропустить файлы, соответствующие шаблону"
-#: builtin/ls-files.c:461
+#: builtin/ls-files.c:540
msgid "exclude patterns are read from <file>"
msgstr "прочитать шаблоны исключения из <файл>"
-#: builtin/ls-files.c:464
+#: builtin/ls-files.c:543
msgid "read additional per-directory exclude patterns in <file>"
msgstr "прочитать дополнительные покаталожные шаблоны исключения из <файл>"
-#: builtin/ls-files.c:466
+#: builtin/ls-files.c:545
msgid "add the standard git exclusions"
msgstr "добавить стандартные исключения git"
-#: builtin/ls-files.c:469
+#: builtin/ls-files.c:548
msgid "make the output relative to the project top directory"
msgstr "выводить пути относительно корневого каталога проекта"
-#: builtin/ls-files.c:472
+#: builtin/ls-files.c:551
+msgid "recurse through submodules"
+msgstr "рекурсивно по подмодулям"
+
+#: builtin/ls-files.c:553
msgid "if any <file> is not in the index, treat this as an error"
msgstr "если какой-либо <файл> не в индексе, считать это ошибкой"
-#: builtin/ls-files.c:473
+#: builtin/ls-files.c:554
msgid "tree-ish"
msgstr "указатель-дерева"
-#: builtin/ls-files.c:474
+#: builtin/ls-files.c:555
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr "притвориться, что пути удалены, т.к. <указатель-дерева> еще существует"
-#: builtin/ls-files.c:476
+#: builtin/ls-files.c:557
msgid "show debugging data"
msgstr "показать отладочную информацию"
msgid "Available custom strategies are:"
msgstr "Доступные пользовательские стратегии:"
-#: builtin/merge.c:195 builtin/pull.c:126
+#: builtin/merge.c:195 builtin/pull.c:127
msgid "do not show a diffstat at the end of the merge"
msgstr "не выводить статистику изменений после окончания слияния"
-#: builtin/merge.c:198 builtin/pull.c:129
+#: builtin/merge.c:198 builtin/pull.c:130
msgid "show a diffstat at the end of the merge"
msgstr "вывести статистику изменений после окончания слияния"
-#: builtin/merge.c:199 builtin/pull.c:132
+#: builtin/merge.c:199 builtin/pull.c:133
msgid "(synonym to --stat)"
msgstr "(синоним для --stat)"
-#: builtin/merge.c:201 builtin/pull.c:135
+#: builtin/merge.c:201 builtin/pull.c:136
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr "добавить (максимум <n>) записей из короткого журнала в сообщение коммита у слияния"
-#: builtin/merge.c:204 builtin/pull.c:138
+#: builtin/merge.c:204 builtin/pull.c:139
msgid "create a single commit instead of doing a merge"
msgstr "создать один коммит, вместо выполнения слияния"
-#: builtin/merge.c:206 builtin/pull.c:141
+#: builtin/merge.c:206 builtin/pull.c:142
msgid "perform a commit if the merge succeeds (default)"
msgstr "сделать коммит, если слияние прошло успешно (по умолчанию)"
-#: builtin/merge.c:208 builtin/pull.c:144
+#: builtin/merge.c:208 builtin/pull.c:145
msgid "edit message before committing"
msgstr "отредактировать сообщение перед выполнением коммита"
msgid "allow fast-forward (default)"
msgstr "разрешить перемотку вперед (по умолчанию)"
-#: builtin/merge.c:211 builtin/pull.c:150
+#: builtin/merge.c:211 builtin/pull.c:151
msgid "abort if fast-forward is not possible"
msgstr "отменить выполнение слияния, если перемотка вперед невозможна"
-#: builtin/merge.c:215 builtin/pull.c:153
+#: builtin/merge.c:215 builtin/pull.c:154
msgid "verify that the named commit has a valid GPG signature"
msgstr "проверить, что указанный коммит имеет верную электронную подпись GPG"
-#: builtin/merge.c:216 builtin/notes.c:772 builtin/pull.c:157
+#: builtin/merge.c:216 builtin/notes.c:774 builtin/pull.c:158
#: builtin/revert.c:89
msgid "strategy"
msgstr "стратегия"
-#: builtin/merge.c:217 builtin/pull.c:158
+#: builtin/merge.c:217 builtin/pull.c:159
msgid "merge strategy to use"
msgstr "используемая стратегия слияния"
-#: builtin/merge.c:218 builtin/pull.c:161
+#: builtin/merge.c:218 builtin/pull.c:162
msgid "option=value"
msgstr "опция=значение"
-#: builtin/merge.c:219 builtin/pull.c:162
+#: builtin/merge.c:219 builtin/pull.c:163
msgid "option for selected merge strategy"
msgstr "опции для выбранной стратегии слияния"
msgid "abort the current in-progress merge"
msgstr "отменить выполнение происходящего слияния"
-#: builtin/merge.c:227 builtin/pull.c:169
+#: builtin/merge.c:227 builtin/pull.c:170
msgid "allow merging unrelated histories"
msgstr "разрешить слияние несвязанных историй изменений"
msgid "Already up-to-date."
msgstr "Уже обновлено."
-#: builtin/merge.c:1382
+#: builtin/merge.c:1377
#, c-format
msgid "Updating %s..%s\n"
msgstr "Обновление %s..%s\n"
-#: builtin/merge.c:1419
+#: builtin/merge.c:1418
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Попытка тривиального слияния в индексе…\n"
-#: builtin/merge.c:1426
+#: builtin/merge.c:1425
#, c-format
msgid "Nope.\n"
msgstr "Не вышло.\n"
-#: builtin/merge.c:1451
+#: builtin/merge.c:1450
msgid "Already up-to-date. Yeeah!"
msgstr "Уже обновлено. Круто!"
-#: builtin/merge.c:1457
+#: builtin/merge.c:1456
msgid "Not possible to fast-forward, aborting."
msgstr "Перемотка вперед невозможна, отмена."
-#: builtin/merge.c:1480 builtin/merge.c:1559
+#: builtin/merge.c:1479 builtin/merge.c:1558
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Перемотка дерева к исходному состоянию…\n"
-#: builtin/merge.c:1484
+#: builtin/merge.c:1483
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Попытка слияния с помощью стратегии %s…\n"
-#: builtin/merge.c:1550
+#: builtin/merge.c:1549
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Ни одна стратегия слияния не обработала слияние.\n"
-#: builtin/merge.c:1552
+#: builtin/merge.c:1551
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "Сбой при слиянии с помощью стратегии %s.\n"
-#: builtin/merge.c:1561
+#: builtin/merge.c:1560
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Использую %s для подготовки ручного разрешения конфликтов.\n"
-#: builtin/merge.c:1573
+#: builtin/merge.c:1572
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr "Автоматическое слияние прошло успешно; как и запрашивали, остановлено перед выполнением коммита\n"
msgid "git merge-base --fork-point <ref> [<commit>]"
msgstr "git merge-base --fork-point <ссылка> [<коммит>]"
-#: builtin/merge-base.c:214
+#: builtin/merge-base.c:217
msgid "output all common ancestors"
msgstr "вывести всех общих предков"
-#: builtin/merge-base.c:216
+#: builtin/merge-base.c:219
msgid "find ancestors for a single n-way merge"
msgstr "вывести предков для одного многоходового слияния"
-#: builtin/merge-base.c:218
+#: builtin/merge-base.c:221
msgid "list revs not reachable from others"
msgstr "вывести список редаций, которые не достижимы из друг друга"
-#: builtin/merge-base.c:220
+#: builtin/merge-base.c:223
msgid "is the first one ancestor of the other?"
msgstr "является первым предком второго указанного коммита?"
-#: builtin/merge-base.c:222
+#: builtin/merge-base.c:225
msgid "find where <commit> forked from reflog of <ref>"
msgstr "найти журнале ссылок <ссылка> где именно <коммит> разветвился"
msgid "set labels for file1/orig-file/file2"
msgstr "установить метки для файл1/ориг-файл/файл2"
+#: builtin/merge-recursive.c:45
+#, c-format
+msgid "unknown option %s"
+msgstr "неизвестная опция %s"
+
+#: builtin/merge-recursive.c:51
+#, c-format
+msgid "could not parse object '%s'"
+msgstr "не удалось разобрать объект «%s»"
+
+#: builtin/merge-recursive.c:55
+#, c-format
+msgid "cannot handle more than %d base. Ignoring %s."
+msgid_plural "cannot handle more than %d bases. Ignoring %s."
+msgstr[0] "невозможно обработать больше %d базы. Игнорирую %s."
+msgstr[1] "невозможно обработать больше %d баз. Игнорирую %s."
+msgstr[2] "невозможно обработать больше %d баз. Игнорирую %s."
+msgstr[3] "невозможно обработать больше %d базы. Игнорирую %s."
+
+#: builtin/merge-recursive.c:63
+msgid "not handling anything other than two heads merge."
+msgstr "не обрабатываю ничего, кроме слияния двух указателей на ветки."
+
+#: builtin/merge-recursive.c:69 builtin/merge-recursive.c:71
+#, c-format
+msgid "could not resolve ref '%s'"
+msgstr "не удалось распознать ссылку «%s»"
+
+#: builtin/merge-recursive.c:77
+#, c-format
+msgid "Merging %s with %s\n"
+msgstr "Слияние %s и %s\n"
+
#: builtin/mktree.c:65
msgid "git mktree [-z] [--missing] [--batch]"
msgstr "git mktree [-z] [--missing] [--batch]"
msgid "renaming '%s' failed"
msgstr "сбой при переименовании «%s»"
-#: builtin/name-rev.c:258
+#: builtin/name-rev.c:257
msgid "git name-rev [<options>] <commit>..."
msgstr "git name-rev [<опции>] <коммит>…"
-#: builtin/name-rev.c:259
+#: builtin/name-rev.c:258
msgid "git name-rev [<options>] --all"
msgstr "git name-rev [<опции>] --all"
-#: builtin/name-rev.c:260
+#: builtin/name-rev.c:259
msgid "git name-rev [<options>] --stdin"
msgstr "git name-rev [<опции>] --stdin"
-#: builtin/name-rev.c:312
+#: builtin/name-rev.c:311
msgid "print only names (no SHA-1)"
msgstr "выводить только имена (без SHA-1)"
-#: builtin/name-rev.c:313
+#: builtin/name-rev.c:312
msgid "only use tags to name the commits"
msgstr "использовать только метки для именования коммитов"
-#: builtin/name-rev.c:315
+#: builtin/name-rev.c:314
msgid "only use refs matching <pattern>"
msgstr "использовать только ссылки, соответствующие <шаблону> "
-#: builtin/name-rev.c:317
+#: builtin/name-rev.c:316
msgid "list all commits reachable from all refs"
msgstr "вывести список всех коммитов, достижимых со всех ссылок"
-#: builtin/name-rev.c:318
+#: builtin/name-rev.c:317
msgid "read from stdin"
msgstr "прочитать из стандартного ввода"
-#: builtin/name-rev.c:319
+#: builtin/name-rev.c:318
msgid "allow to print `undefined` names (default)"
msgstr "разрешить вывод «undefined», если не найдено (по умолчанию)"
-#: builtin/name-rev.c:325
+#: builtin/name-rev.c:324
msgid "dereference tags in the input (internal use)"
msgstr "разыменовывать введенные метки (для внутреннего использования)"
msgstr "не удалось завершить «show» для объекта «%s»"
#: builtin/notes.c:194
-msgid "Please supply the note contents using either -m or -F option"
-msgstr "Ð\9fожалуйста, укажите содержимое заметки, используя опцию -m или -F"
+msgid "please supply the note contents using either -m or -F option"
+msgstr "пожалуйста, укажите содержимое заметки, используя опцию -m или -F"
#: builtin/notes.c:203
msgid "unable to write note object"
#: builtin/notes.c:205
#, c-format
-msgid "The note contents have been left in %s"
-msgstr "Содержимое заметки осталось в %s"
+msgid "the note contents have been left in %s"
+msgstr "содержимое заметки осталось в %s"
#: builtin/notes.c:233 builtin/tag.c:439
#, c-format
msgid "could not open or read '%s'"
msgstr "не удалось открыть или прочитать «%s»"
+#: builtin/notes.c:254 builtin/notes.c:305 builtin/notes.c:307
+#: builtin/notes.c:372 builtin/notes.c:427 builtin/notes.c:513
+#: builtin/notes.c:518 builtin/notes.c:596 builtin/notes.c:659
+#, c-format
+msgid "failed to resolve '%s' as a valid ref."
+msgstr "не удалось разрешить «%s» как ссылку."
+
#: builtin/notes.c:257
#, c-format
-msgid "Failed to read object '%s'."
-msgstr "Ð\9dе удалось прочитать объект «%s»."
+msgid "failed to read object '%s'."
+msgstr "не удалось прочитать объект «%s»."
#: builtin/notes.c:261
#, c-format
-msgid "Cannot read note data from non-blob object '%s'."
-msgstr "Не удалось прочитать данные заметки из недвоичного объекта «%s»."
+msgid "cannot read note data from non-blob object '%s'."
+msgstr "не удалось прочитать данные заметки из недвоичного объекта «%s»."
+
+#: builtin/notes.c:301
+#, c-format
+msgid "malformed input line: '%s'."
+msgstr "неправильная введенная строка: «%s»."
+
+#: builtin/notes.c:316
+#, c-format
+msgid "failed to copy notes from '%s' to '%s'"
+msgstr "не удалось скопировать заметку из «%s» в «%s»"
+
+#. TRANSLATORS: the first %s will be replaced by a
+#. git notes command: 'add', 'merge', 'remove', etc.
+#: builtin/notes.c:345
+#, c-format
+msgid "refusing to %s notes in %s (outside of refs/notes/)"
+msgstr "отказ в перезаписи %s заметок в %s (за пределами refs/notes/)"
-#: builtin/notes.c:363 builtin/notes.c:418 builtin/notes.c:494
-#: builtin/notes.c:506 builtin/notes.c:582 builtin/notes.c:650
-#: builtin/notes.c:800 builtin/notes.c:947 builtin/notes.c:968
+#: builtin/notes.c:365 builtin/notes.c:420 builtin/notes.c:496
+#: builtin/notes.c:508 builtin/notes.c:584 builtin/notes.c:652
+#: builtin/notes.c:802 builtin/notes.c:949 builtin/notes.c:970
msgid "too many parameters"
msgstr "передано слишком много параметров"
-#: builtin/notes.c:376 builtin/notes.c:663
+#: builtin/notes.c:378 builtin/notes.c:665
#, c-format
-msgid "No note found for object %s."
-msgstr "Ð\9dе найдена заметка для объекта %s."
+msgid "no note found for object %s."
+msgstr "не найдена заметка для объекта %s."
-#: builtin/notes.c:397 builtin/notes.c:560
+#: builtin/notes.c:399 builtin/notes.c:562
msgid "note contents as a string"
msgstr "текстовое содержимое заметки"
-#: builtin/notes.c:400 builtin/notes.c:563
+#: builtin/notes.c:402 builtin/notes.c:565
msgid "note contents in a file"
msgstr "содержимое заметки в файле"
-#: builtin/notes.c:403 builtin/notes.c:566
+#: builtin/notes.c:405 builtin/notes.c:568
msgid "reuse and edit specified note object"
msgstr "использовать и отредактировать указанный объект заметки"
-#: builtin/notes.c:406 builtin/notes.c:569
+#: builtin/notes.c:408 builtin/notes.c:571
msgid "reuse specified note object"
msgstr "использовать указанный объект заметки"
-#: builtin/notes.c:409 builtin/notes.c:572
+#: builtin/notes.c:411 builtin/notes.c:574
msgid "allow storing empty note"
msgstr "разрешить сохранение пустой заметки"
-#: builtin/notes.c:410 builtin/notes.c:481
+#: builtin/notes.c:412 builtin/notes.c:483
msgid "replace existing notes"
msgstr "заменить существующие заметки"
-#: builtin/notes.c:435
+#: builtin/notes.c:437
#, c-format
msgid ""
"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
"existing notes"
msgstr "Не удалось добавить заметку. Найдена существующая заметка у объекта %s. Используйте параметр «-f» для перезаписи существующих заметок."
-#: builtin/notes.c:450 builtin/notes.c:529
+#: builtin/notes.c:452 builtin/notes.c:531
#, c-format
msgid "Overwriting existing notes for object %s\n"
msgstr "Перезапись существующих заметок у объекта %s\n"
-#: builtin/notes.c:461 builtin/notes.c:622 builtin/notes.c:887
+#: builtin/notes.c:463 builtin/notes.c:624 builtin/notes.c:889
#, c-format
msgid "Removing note for object %s\n"
msgstr "Удаление заметки у объекта %s\n"
-#: builtin/notes.c:482
+#: builtin/notes.c:484
msgid "read objects from stdin"
msgstr "прочитать объекты из стандартного ввода"
-#: builtin/notes.c:484
+#: builtin/notes.c:486
msgid "load rewriting config for <command> (implies --stdin)"
msgstr "загрузить настройки перезаписи для команды <команда> (включает в себя --stdin)"
-#: builtin/notes.c:502
+#: builtin/notes.c:504
msgid "too few parameters"
msgstr "передано слишком мало параметров"
-#: builtin/notes.c:523
+#: builtin/notes.c:525
#, c-format
msgid ""
"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite"
" existing notes"
msgstr "Не удалось скопировать заметку. Найдена существующая заметка у объекта %s. Используйте параметр «-f» для перезаписи существующих заметок."
-#: builtin/notes.c:535
+#: builtin/notes.c:537
#, c-format
-msgid "Missing notes on source object %s. Cannot copy."
-msgstr "Ð\9dет заметок у исходного объекта %s. Нельзя скопировать."
+msgid "missing notes on source object %s. Cannot copy."
+msgstr "нет заметок у исходного объекта %s. Нельзя скопировать."
-#: builtin/notes.c:587
+#: builtin/notes.c:589
#, 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 "Опции -m/-F/-c/-C для подкоманды «edit» устарели.\nИспользуйте вместо них «git notes add -f -m/-F/-c/-C».\n"
-#: builtin/notes.c:753
+#: builtin/notes.c:685
+msgid "failed to delete ref NOTES_MERGE_PARTIAL"
+msgstr "не удалось удалить ссылку NOTES_MERGE_PARTIAL"
+
+#: builtin/notes.c:687
+msgid "failed to delete ref NOTES_MERGE_REF"
+msgstr "не удалось удалить ссылку NOTES_MERGE_REF"
+
+#: builtin/notes.c:689
+msgid "failed to remove 'git notes merge' worktree"
+msgstr "не удалось удалить рабочий каталог «git notes merge»"
+
+#: builtin/notes.c:709
+msgid "failed to read ref NOTES_MERGE_PARTIAL"
+msgstr "не удалось прочитать ссылку NOTES_MERGE_PARTIAL"
+
+#: builtin/notes.c:711
+msgid "could not find commit from NOTES_MERGE_PARTIAL."
+msgstr "не удалось найти коммит из NOTES_MERGE_PARTIAL."
+
+#: builtin/notes.c:713
+msgid "could not parse commit from NOTES_MERGE_PARTIAL."
+msgstr "не удалось разобрать коммит из NOTES_MERGE_PARTIAL."
+
+#: builtin/notes.c:726
+msgid "failed to resolve NOTES_MERGE_REF"
+msgstr "не удалось разрешить NOTES_MERGE_REF"
+
+#: builtin/notes.c:729
+msgid "failed to finalize notes merge"
+msgstr "не удалось завершить слиние заметок"
+
+#: builtin/notes.c:755
#, c-format
msgid "unknown notes merge strategy %s"
msgstr "неизвестная стратегия слияния заметок %s"
-#: builtin/notes.c:769
+#: builtin/notes.c:771
msgid "General options"
msgstr "Общие опции"
-#: builtin/notes.c:771
+#: builtin/notes.c:773
msgid "Merge options"
msgstr "Опции слияния"
-#: builtin/notes.c:773
+#: builtin/notes.c:775
msgid ""
"resolve notes conflicts using the given strategy "
"(manual/ours/theirs/union/cat_sort_uniq)"
msgstr "разрешить конфликты заметок с помощью указанной стратегии (manual/ours/theirs/union/cat_sort_uniq)"
-#: builtin/notes.c:775
+#: builtin/notes.c:777
msgid "Committing unmerged notes"
msgstr "Коммит не слитых заметок"
-#: builtin/notes.c:777
+#: builtin/notes.c:779
msgid "finalize notes merge by committing unmerged notes"
msgstr "завершить слияние заметок коммитом не слитых заметок"
-#: builtin/notes.c:779
+#: builtin/notes.c:781
msgid "Aborting notes merge resolution"
msgstr "Отмена разрешения слияния заметок"
-#: builtin/notes.c:781
+#: builtin/notes.c:783
msgid "abort notes merge"
msgstr "отменить слияние заметок"
-#: builtin/notes.c:792
+#: builtin/notes.c:794
msgid "cannot mix --commit, --abort or -s/--strategy"
msgstr "нельзя использовать одновременно --commit, --abort и -s/--strategy"
-#: builtin/notes.c:797
-msgid "Must specify a notes ref to merge"
-msgstr "Ð\92ы должны указать ссылку заметки для слияния"
+#: builtin/notes.c:799
+msgid "must specify a notes ref to merge"
+msgstr "вы должны указать ссылку заметки для слияния"
-#: builtin/notes.c:821
+#: builtin/notes.c:823
#, c-format
-msgid "Unknown -s/--strategy: %s"
-msgstr "Ð\9dеизвестный параметр для -s/--strategy: %s"
+msgid "unknown -s/--strategy: %s"
+msgstr "неизвестный параметр для -s/--strategy: %s"
-#: builtin/notes.c:858
+#: builtin/notes.c:860
#, c-format
-msgid "A notes merge into %s is already in-progress at %s"
-msgstr "Слияние заметок в %s уже выполняется на %s"
+msgid "a notes merge into %s is already in-progress at %s"
+msgstr "слияние заметок в %s уже выполняется на %s"
-#: builtin/notes.c:861
+#: builtin/notes.c:863
#, c-format
-msgid "Failed to store link to current notes ref (%s)"
-msgstr "Ð\9dе удалось сохранить адрес текущей ссылки на заметку (%s)"
+msgid "failed to store link to current notes ref (%s)"
+msgstr "не удалось сохранить адрес текущей ссылки на заметку (%s)"
-#: builtin/notes.c:863
+#: builtin/notes.c:865
#, c-format
msgid ""
"Automatic notes merge failed. Fix conflicts in %s and commit the result with"
"--abort'.\n"
msgstr "Не удалось автоматически слить заметки. Исправьте конфликты в %s и закоммитьте результат с помощью «git notes merge --commit», или прервите процесс слияния с помощью «git notes merge --abort».\n"
-#: builtin/notes.c:885
+#: builtin/notes.c:887
#, c-format
msgid "Object %s has no note\n"
msgstr "У объекта %s нет заметки\n"
-#: builtin/notes.c:897
+#: builtin/notes.c:899
msgid "attempt to remove non-existent note is not an error"
msgstr "попытка удаления несуществующей заметки не является ошибкой"
-#: builtin/notes.c:900
+#: builtin/notes.c:902
msgid "read object names from the standard input"
msgstr "прочитать имена объектов из стандартного ввода"
-#: builtin/notes.c:938 builtin/prune.c:105 builtin/worktree.c:127
+#: builtin/notes.c:940 builtin/prune.c:105 builtin/worktree.c:127
msgid "do not remove, show only"
msgstr "не удалять, только показать список"
-#: builtin/notes.c:939
+#: builtin/notes.c:941
msgid "report pruned notes"
msgstr "вывести список удаленных заметок"
-#: builtin/notes.c:981
+#: builtin/notes.c:983
msgid "notes-ref"
msgstr "ссылка-на-заметку"
-#: builtin/notes.c:982
+#: builtin/notes.c:984
msgid "use notes from <notes-ref>"
msgstr "использовать заметку из <ссылка-на-заметку>"
-#: builtin/notes.c:1017 builtin/remote.c:1623
+#: builtin/notes.c:1019
#, c-format
-msgid "Unknown subcommand: %s"
-msgstr "Ð\9dеизвестная подкоманда: %s"
+msgid "unknown subcommand: %s"
+msgstr "неизвестная подкоманда: %s"
-#: builtin/pack-objects.c:28
+#: builtin/pack-objects.c:29
msgid ""
"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
msgstr "git pack-objects --stdout [<опции>…] [< <список-ссылок> | < <список-объектов>]"
-#: builtin/pack-objects.c:29
+#: builtin/pack-objects.c:30
msgid ""
"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
msgstr "git pack-objects [<опции>…] <имя-базы> [< <список-ссылок> | < <список-объектов>]"
-#: builtin/pack-objects.c:177 builtin/pack-objects.c:180
+#: builtin/pack-objects.c:179 builtin/pack-objects.c:182
#, c-format
msgid "deflate error (%d)"
msgstr "ошибка сжатия (%d)"
-#: builtin/pack-objects.c:766
+#: builtin/pack-objects.c:768
msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
msgstr "отключение записи битовых карт, так как карты были разбиты на части из-за pack.packSizeLimit"
-#: builtin/pack-objects.c:779
+#: builtin/pack-objects.c:781
msgid "Writing objects"
msgstr "Запись объектов"
-#: builtin/pack-objects.c:1037
+#: builtin/pack-objects.c:1070
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr "отключение записи битовых карт, так как некоторые объекты не были упакованы"
-#: builtin/pack-objects.c:2197
+#: builtin/pack-objects.c:2346
msgid "Compressing objects"
msgstr "Сжатие объектов"
-#: builtin/pack-objects.c:2611
+#: builtin/pack-objects.c:2759
#, c-format
msgid "unsupported index version %s"
msgstr "неподдерживаемая версия индекса %s"
-#: builtin/pack-objects.c:2615
+#: builtin/pack-objects.c:2763
#, c-format
msgid "bad index version '%s'"
msgstr "плохая версия индекса «%s»"
-#: builtin/pack-objects.c:2645
+#: builtin/pack-objects.c:2793
msgid "do not show progress meter"
msgstr "не выводить прогресс выполнения"
-#: builtin/pack-objects.c:2647
+#: builtin/pack-objects.c:2795
msgid "show progress meter"
msgstr "показать прогресс выполнения"
-#: builtin/pack-objects.c:2649
+#: builtin/pack-objects.c:2797
msgid "show progress meter during object writing phase"
msgstr "показать прогресс выполнения во время записи объектов"
-#: builtin/pack-objects.c:2652
+#: builtin/pack-objects.c:2800
msgid "similar to --all-progress when progress meter is shown"
msgstr "похоже на --all-progress при включенном прогрессе выполнения"
-#: builtin/pack-objects.c:2653
+#: builtin/pack-objects.c:2801
msgid "version[,offset]"
msgstr "версия[,смещение]"
-#: builtin/pack-objects.c:2654
+#: builtin/pack-objects.c:2802
msgid "write the pack index file in the specified idx format version"
msgstr "записать файл индекса пакета в указанной версии формата"
-#: builtin/pack-objects.c:2657
+#: builtin/pack-objects.c:2805
msgid "maximum size of each output pack file"
msgstr "максимальный размер каждого выходного файла пакета"
-#: builtin/pack-objects.c:2659
+#: builtin/pack-objects.c:2807
msgid "ignore borrowed objects from alternate object store"
msgstr "игнорировать чужие объекты, взятые из альтернативного хранилища объектов"
-#: builtin/pack-objects.c:2661
+#: builtin/pack-objects.c:2809
msgid "ignore packed objects"
msgstr "игнорировать упакованные объекты"
-#: builtin/pack-objects.c:2663
+#: builtin/pack-objects.c:2811
msgid "limit pack window by objects"
msgstr "ограничить окно пакета по количеству объектов"
-#: builtin/pack-objects.c:2665
+#: builtin/pack-objects.c:2813
msgid "limit pack window by memory in addition to object limit"
msgstr "дополнительно к количеству объектов ограничить окно пакета по памяти"
-#: builtin/pack-objects.c:2667
+#: builtin/pack-objects.c:2815
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr "максимальная разрешенная длина цепочки дельт в результирующем пакете"
-#: builtin/pack-objects.c:2669
+#: builtin/pack-objects.c:2817
msgid "reuse existing deltas"
msgstr "использовать повторно существующие дельты"
-#: builtin/pack-objects.c:2671
+#: builtin/pack-objects.c:2819
msgid "reuse existing objects"
msgstr "использовать повторно существующие объекты"
-#: builtin/pack-objects.c:2673
+#: builtin/pack-objects.c:2821
msgid "use OFS_DELTA objects"
msgstr "использовать объекты OFS_DELTA"
-#: builtin/pack-objects.c:2675
+#: builtin/pack-objects.c:2823
msgid "use threads when searching for best delta matches"
msgstr "использовать многопоточность при поиске лучших совпадений дельт"
-#: builtin/pack-objects.c:2677
+#: builtin/pack-objects.c:2825
msgid "do not create an empty pack output"
msgstr "не создавать пустые выходные пакеты"
-#: builtin/pack-objects.c:2679
+#: builtin/pack-objects.c:2827
msgid "read revision arguments from standard input"
msgstr "прочитать аргументы редакций из стандартного ввода"
-#: builtin/pack-objects.c:2681
+#: builtin/pack-objects.c:2829
msgid "limit the objects to those that are not yet packed"
msgstr "ограничиться объектами, которые еще не упакованы"
-#: builtin/pack-objects.c:2684
+#: builtin/pack-objects.c:2832
msgid "include objects reachable from any reference"
msgstr "включить объекты, которые достижимы по любой из ссылок"
-#: builtin/pack-objects.c:2687
+#: builtin/pack-objects.c:2835
msgid "include objects referred by reflog entries"
msgstr "включить объекты, на которые ссылаются записи журнала ссылок"
-#: builtin/pack-objects.c:2690
+#: builtin/pack-objects.c:2838
msgid "include objects referred to by the index"
msgstr "включить объекты, на которые ссылается индекс"
-#: builtin/pack-objects.c:2693
+#: builtin/pack-objects.c:2841
msgid "output pack to stdout"
msgstr "вывести пакет на стандартный вывод"
-#: builtin/pack-objects.c:2695
+#: builtin/pack-objects.c:2843
msgid "include tag objects that refer to objects to be packed"
msgstr "включить объекты меток, которые ссылаются на упаковываемые объекты"
-#: builtin/pack-objects.c:2697
+#: builtin/pack-objects.c:2845
msgid "keep unreachable objects"
msgstr "сохранять ссылки на недоступные объекты"
-#: builtin/pack-objects.c:2699
+#: builtin/pack-objects.c:2847
msgid "pack loose unreachable objects"
msgstr "паковать недостижимые объекты"
-#: builtin/pack-objects.c:2700 parse-options.h:142
-msgid "time"
-msgstr "время"
-
-#: builtin/pack-objects.c:2701
+#: builtin/pack-objects.c:2849
msgid "unpack unreachable objects newer than <time>"
msgstr "распаковать недоступные объекты, которые новее, чем <время>"
-#: builtin/pack-objects.c:2704
+#: builtin/pack-objects.c:2852
msgid "create thin packs"
msgstr "создавать тонкие пакеты"
-#: builtin/pack-objects.c:2706
+#: builtin/pack-objects.c:2854
msgid "create packs suitable for shallow fetches"
msgstr "создавать пакеты, подходящие для частичных извлечений"
-#: builtin/pack-objects.c:2708
+#: builtin/pack-objects.c:2856
msgid "ignore packs that have companion .keep file"
msgstr "игнорировать пакеты, рядом с которыми лежит .keep файл"
-#: builtin/pack-objects.c:2710
+#: builtin/pack-objects.c:2858
msgid "pack compression level"
msgstr "уровень сжатия пакета"
-#: builtin/pack-objects.c:2712
+#: builtin/pack-objects.c:2860
msgid "do not hide commits by grafts"
msgstr "не скрывать коммиты сращениями"
-#: builtin/pack-objects.c:2714
+#: builtin/pack-objects.c:2862
msgid "use a bitmap index if available to speed up counting objects"
msgstr "по возможности использовать индекс в битовых картах, для ускорения подсчета объектов"
-#: builtin/pack-objects.c:2716
+#: builtin/pack-objects.c:2864
msgid "write a bitmap index together with the pack index"
msgstr "запись индекса в битовых картах вместе с индексом пакета"
-#: builtin/pack-objects.c:2829
+#: builtin/pack-objects.c:2993
msgid "Counting objects"
msgstr "Подсчет объектов"
msgid "cannot prune in a precious-objects repo"
msgstr "нельзя почистить неиспользуемые объекты в precious-objects репозитории"
-#: builtin/pull.c:72
+#: builtin/pull.c:51 builtin/pull.c:53
+#, c-format
+msgid "Invalid value for %s: %s"
+msgstr "Неправильное значение %s: %s"
+
+#: builtin/pull.c:73
msgid "git pull [<options>] [<repository> [<refspec>...]]"
msgstr "git pull [<опции>] [<репозиторий> [<спецификация-ссылки>…]]"
-#: builtin/pull.c:120
+#: builtin/pull.c:121
msgid "Options related to merging"
msgstr "Опции, связанные со слиянием"
-#: builtin/pull.c:123
+#: builtin/pull.c:124
msgid "incorporate changes by rebasing rather than merging"
msgstr "забрать изменения с помощью перебазирования, а не слияния"
-#: builtin/pull.c:147 builtin/revert.c:101
+#: builtin/pull.c:148 builtin/revert.c:101
msgid "allow fast-forward"
msgstr "разрешить перемотку вперед"
-#: builtin/pull.c:156
+#: builtin/pull.c:157
msgid "automatically stash/stash pop before and after rebase"
msgstr "автоматически выполнять stash/stash pop до и после перемещения"
-#: builtin/pull.c:172
+#: builtin/pull.c:173
msgid "Options related to fetching"
msgstr "Опции, связанные с извлечением изменений"
-#: builtin/pull.c:194
+#: builtin/pull.c:195
msgid "number of submodules pulled in parallel"
msgstr "количество подмодулей, которые будут получены парралельно"
-#: builtin/pull.c:283
+#: builtin/pull.c:284
#, c-format
msgid "Invalid value for pull.ff: %s"
msgstr "Неправильное значение для pull.ff: %s"
-#: builtin/pull.c:379 git-sh-setup.sh:226
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr "Не удалось получить с перемещением: У вас есть непроиндексированные изменения."
-
-#: builtin/pull.c:385 git-sh-setup.sh:252
-msgid "Additionally, your index contains uncommitted changes."
-msgstr "К тому же, в вашем индексе есть незакоммиченные изменения."
-
-#: builtin/pull.c:387 git-sh-setup.sh:245
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr "Не удалось получить с перемещением: В вашем индексе есть незакоммиченные изменения."
-
-#: builtin/pull.c:463
+#: builtin/pull.c:397
msgid ""
"There is no candidate for rebasing against among the refs that you just "
"fetched."
msgstr "Нет претендентов для перемещения среди ссылок, которые вы только что получили."
-#: builtin/pull.c:465
+#: builtin/pull.c:399
msgid ""
"There are no candidates for merging among the refs that you just fetched."
msgstr "Нет претендентов для слияния среди ссылок, которые вы только что получили."
-#: builtin/pull.c:466
+#: builtin/pull.c:400
msgid ""
"Generally this means that you provided a wildcard refspec which had no\n"
"matches on the remote end."
msgstr "Обычно это означает, что вы передали спецификацию ссылки с помощью шаблона и этот шаблон ни с чем не совпал на внешнем репозитории."
-#: builtin/pull.c:469
+#: builtin/pull.c:403
#, c-format
msgid ""
"You asked to pull from the remote '%s', but did not specify\n"
"for your current branch, you must specify a branch on the command line."
msgstr "Вы попросили получить изменения со внешнего репозитория «%s», но не указали ветку. Так как это не репозиторий по умолчанию для вашей текущей ветки, вы должны указать ветку в командной строке."
-#: builtin/pull.c:474 git-parse-remote.sh:73
+#: builtin/pull.c:408 git-parse-remote.sh:73
msgid "You are not currently on a branch."
msgstr "Вы сейчас ни на одной из веток."
-#: builtin/pull.c:476 builtin/pull.c:491 git-parse-remote.sh:79
+#: builtin/pull.c:410 builtin/pull.c:425 git-parse-remote.sh:79
msgid "Please specify which branch you want to rebase against."
msgstr "Пожалуйста, укажите на какую ветку вы хотите переместить изменения."
-#: builtin/pull.c:478 builtin/pull.c:493 git-parse-remote.sh:82
+#: builtin/pull.c:412 builtin/pull.c:427 git-parse-remote.sh:82
msgid "Please specify which branch you want to merge with."
msgstr "Пожалуйста, укажите с какой веткой вы хотите слить изменения."
-#: builtin/pull.c:479 builtin/pull.c:494
+#: builtin/pull.c:413 builtin/pull.c:428
msgid "See git-pull(1) for details."
msgstr "Для дополнительной информации, смотрите git-pull(1)."
-#: builtin/pull.c:481 builtin/pull.c:487 builtin/pull.c:496
+#: builtin/pull.c:415 builtin/pull.c:421 builtin/pull.c:430
#: git-parse-remote.sh:64
msgid "<remote>"
msgstr "<внешний-репозиторий>"
-#: builtin/pull.c:481 builtin/pull.c:496 builtin/pull.c:501 git-rebase.sh:451
+#: builtin/pull.c:415 builtin/pull.c:430 builtin/pull.c:435 git-rebase.sh:451
#: git-parse-remote.sh:65
msgid "<branch>"
msgstr "<ветка>"
-#: builtin/pull.c:489 git-parse-remote.sh:75
+#: builtin/pull.c:423 git-parse-remote.sh:75
msgid "There is no tracking information for the current branch."
msgstr "У текущей ветки нет информации об отслеживании."
-#: builtin/pull.c:498 git-parse-remote.sh:95
+#: builtin/pull.c:432 git-parse-remote.sh:95
msgid ""
"If you wish to set tracking information for this branch you can do so with:"
msgstr "Если вы хотите указать информацию о отслеживаемой ветке, выполните:"
-#: builtin/pull.c:503
+#: builtin/pull.c:437
#, c-format
msgid ""
"Your configuration specifies to merge with the ref '%s'\n"
"from the remote, but no such ref was fetched."
msgstr "Ваша конфигурация указывает, что нужно слить изменения со ссылкой\n«%s» из внешнего репозитория, но такая ссылка не была получена."
-#: builtin/pull.c:820
+#: builtin/pull.c:754
msgid "ignoring --verify-signatures for rebase"
msgstr "игнорирование --verify-signatures при перемещении"
-#: builtin/pull.c:867
+#: builtin/pull.c:801
msgid "--[no-]autostash option is only valid with --rebase."
msgstr "--[no-]autostash можно использовать только вместе с --rebase."
-#: builtin/pull.c:875
+#: builtin/pull.c:809
msgid "Updating an unborn branch with changes added to the index."
msgstr "Обновление еще не начавшейся ветки с изменениями, добавленными в индекс."
-#: builtin/pull.c:903
+#: builtin/pull.c:812
+msgid "pull with rebase"
+msgstr "получение с перемещением"
+
+#: builtin/pull.c:813
+msgid "please commit or stash them."
+msgstr "сделайте коммит или спрячьте их."
+
+#: builtin/pull.c:838
#, c-format
msgid ""
"fetch updated the current branch head.\n"
"commit %s."
msgstr "извлечение обновило указатель на вашу текущую ветку.\nперемотка вашего рабочего каталога\nс коммита %s."
-#: builtin/pull.c:908
+#: builtin/pull.c:843
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
"to recover."
msgstr "Не удалось перемотать вперёд изменения в вашем рабочем каталоге.\nПосле того, как вы убедитесь, что вы сохранили всё необходимое из вывода\n$ git diff %s\n, запустите\n$ git reset --hard\nдля восстановления исходного состояния."
-#: builtin/pull.c:923
+#: builtin/pull.c:858
msgid "Cannot merge multiple branches into empty head."
msgstr "Нельзя слить несколько веток в пустой указатель на ветку."
-#: builtin/pull.c:927
+#: builtin/pull.c:862
msgid "Cannot rebase onto multiple branches."
msgstr "Невозможно переместить над несколькими ветками."
msgid "debug unpack-trees"
msgstr "отладка unpack-trees"
-#: builtin/receive-pack.c:25
+#: builtin/receive-pack.c:26
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack <каталог-git>"
-#: builtin/receive-pack.c:1843
+#: builtin/receive-pack.c:793
+msgid ""
+"By default, updating the current branch in a non-bare repository\n"
+"is denied, because it will make the index and work tree inconsistent\n"
+"with what you pushed, and will require 'git reset --hard' to match\n"
+"the work tree to HEAD.\n"
+"\n"
+"You can set 'receive.denyCurrentBranch' configuration variable to\n"
+"'ignore' or 'warn' in the remote repository to allow pushing into\n"
+"its current branch; however, this is not recommended unless you\n"
+"arranged to update its work tree to match what you pushed in some\n"
+"other way.\n"
+"\n"
+"To squelch this message and still keep the default behaviour, set\n"
+"'receive.denyCurrentBranch' configuration variable to 'refuse'."
+msgstr "По умолчанию, обновлять текущую ветку в репозитории с рабочей\nкопией (не голом) запрещено, так как это сделает состояние индекса\nи рабочего каталога противоречивым, и вам прийдется выполнить\n«git reset --hard», чтобы состояние рабочего каталога снова\nсоответствовало HEAD.\n\nВы можете установить значение опции «receive.denyCurrentBranch»\nв «ignore» или «warn» во внешнем репозитории, чтобы разрешить\nотправку в его текущую ветку; но это не рекомендуется, если только\nвы не намерены обновить его рабочий каталог способом подобным\nвышеописанному.\n\nЧтобы пропустить это сообщение и все равно оставить поведение\nпо умолчанию, установите значение опции «receive.denyCurrentBranch»\nв «refuse»."
+
+#: builtin/receive-pack.c:813
+msgid ""
+"By default, deleting the current branch is denied, because the next\n"
+"'git clone' won't result in any file checked out, causing confusion.\n"
+"\n"
+"You can set 'receive.denyDeleteCurrent' configuration variable to\n"
+"'warn' or 'ignore' in the remote repository to allow deleting the\n"
+"current branch, with or without a warning message.\n"
+"\n"
+"To squelch this message, you can set it to 'refuse'."
+msgstr "По умолчанию, удаление текущей ветки запрещено, так как последующий\n«git clone» не сможет получить никаких файлов, что приведет к путанице.\n\nВы можете установить значение опции «receive.denyDeleteCurrent»\nв «warn» или «ignore», во внешнем репозитории, чтобы разрешить\nудаление текущей ветки с или без предупреждающего сообщения.\n\nЧтобы пропустить это сообщение, вы можете установить значение опции\nв «refuse»."
+
+#: builtin/receive-pack.c:1883
msgid "quiet"
msgstr "тихий режим"
-#: builtin/receive-pack.c:1857
+#: builtin/receive-pack.c:1897
msgid "You must specify a directory."
msgstr "Вы должны указать каталог."
msgid " Fetch URL: %s"
msgstr " URL для извлечения: %s"
-#: builtin/remote.c:1143 builtin/remote.c:1156 builtin/remote.c:1296
+#: builtin/remote.c:1143 builtin/remote.c:1156 builtin/remote.c:1295
msgid "(no URL)"
msgstr "(нет URL)"
msgstr[2] " Внешние ветки:%s"
msgstr[3] " Внешние ветки:%s"
-#: builtin/remote.c:1179 builtin/remote.c:1206
+#: builtin/remote.c:1179 builtin/remote.c:1205
msgid " (status not queried)"
msgstr " (статус не запрашивался)"
msgid " Local refs will be mirrored by 'git push'"
msgstr " Локальные ссылки, зеркалируемые с помощью «git push»"
-#: builtin/remote.c:1203
+#: builtin/remote.c:1202
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[2] " Локальные ссылки, настроенные для «git push»%s:"
msgstr[3] " Локальные ссылки, настроенные для «git push»%s:"
-#: builtin/remote.c:1224
+#: builtin/remote.c:1223
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "установить refs/remotes/<имя>/HEAD в зависимости от внешнего репозитория"
-#: builtin/remote.c:1226
+#: builtin/remote.c:1225
msgid "delete refs/remotes/<name>/HEAD"
msgstr "удалить refs/remotes/<имя>/HEAD"
-#: builtin/remote.c:1241
+#: builtin/remote.c:1240
msgid "Cannot determine remote HEAD"
msgstr "Не удалось определить внешний HEAD"
-#: builtin/remote.c:1243
+#: builtin/remote.c:1242
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr "Несколько внешних HEAD веток. Укажите явно одну из них:"
-#: builtin/remote.c:1253
+#: builtin/remote.c:1252
#, c-format
msgid "Could not delete %s"
msgstr "Не удалось удалить %s"
-#: builtin/remote.c:1261
+#: builtin/remote.c:1260
#, c-format
msgid "Not a valid ref: %s"
msgstr "Недопустимая ссылка: %s"
-#: builtin/remote.c:1263
+#: builtin/remote.c:1262
#, c-format
msgid "Could not setup %s"
msgstr "Не удалось настроить %s"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1280
#, c-format
msgid " %s will become dangling!"
msgstr " %s будет висящей веткой!"
-#: builtin/remote.c:1282
+#: builtin/remote.c:1281
#, c-format
msgid " %s has become dangling!"
msgstr " %s стала висящей веткой!"
-#: builtin/remote.c:1292
+#: builtin/remote.c:1291
#, c-format
msgid "Pruning %s"
msgstr "Очистка %s"
-#: builtin/remote.c:1293
+#: builtin/remote.c:1292
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1309
+#: builtin/remote.c:1308
#, c-format
msgid " * [would prune] %s"
msgstr " * [будет удалена] %s"
-#: builtin/remote.c:1312
+#: builtin/remote.c:1311
#, c-format
msgid " * [pruned] %s"
msgstr " * [удалена] %s"
-#: builtin/remote.c:1357
+#: builtin/remote.c:1356
msgid "prune remotes after fetching"
msgstr "почистить внешние репозитории после извлечения"
-#: builtin/remote.c:1420 builtin/remote.c:1474 builtin/remote.c:1542
+#: builtin/remote.c:1419 builtin/remote.c:1473 builtin/remote.c:1541
#, c-format
msgid "No such remote '%s'"
msgstr "Нет такого внешнего репозитория «%s»"
-#: builtin/remote.c:1436
+#: builtin/remote.c:1435
msgid "add branch"
msgstr "добавить ветку"
-#: builtin/remote.c:1443
+#: builtin/remote.c:1442
msgid "no remote specified"
msgstr "не указан внешний репозиторий"
-#: builtin/remote.c:1460
+#: builtin/remote.c:1459
msgid "query push URLs rather than fetch URLs"
msgstr "запросить URL отправки, вместо URL извлечения"
-#: builtin/remote.c:1462
+#: builtin/remote.c:1461
msgid "return all URLs"
msgstr "вернуть все URL"
-#: builtin/remote.c:1490
+#: builtin/remote.c:1489
#, c-format
msgid "no URLs configured for remote '%s'"
msgstr "URL не настроены для внешнего репозитория «%s»"
-#: builtin/remote.c:1516
+#: builtin/remote.c:1515
msgid "manipulate push URLs"
msgstr "управление URL отправки"
-#: builtin/remote.c:1518
+#: builtin/remote.c:1517
msgid "add URL"
msgstr "добавить URL"
-#: builtin/remote.c:1520
+#: builtin/remote.c:1519
msgid "delete URLs"
msgstr "удалить URL"
-#: builtin/remote.c:1527
+#: builtin/remote.c:1526
msgid "--add --delete doesn't make sense"
msgstr "--add нельзя использовать одновременно с --delete"
-#: builtin/remote.c:1568
+#: builtin/remote.c:1567
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Неправильный шаблон старого URL: %s"
-#: builtin/remote.c:1576
+#: builtin/remote.c:1575
#, c-format
msgid "No such URL found: %s"
msgstr "Не найдены совпадения URL: %s"
-#: builtin/remote.c:1578
+#: builtin/remote.c:1577
msgid "Will not delete all non-push URLs"
msgstr "Нельзя удалить все URL не-отправки"
-#: builtin/remote.c:1592
+#: builtin/remote.c:1591
msgid "be verbose; must be placed before a subcommand"
msgstr "быть многословнее; должно стоять перед подкомандой"
+#: builtin/remote.c:1622
+#, c-format
+msgid "Unknown subcommand: %s"
+msgstr "Неизвестная подкоманда: %s"
+
#: builtin/repack.c:17
msgid "git repack [<options>]"
msgstr "git repack [<опции>]"
msgstr "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<коммит>]"
#: builtin/reset.c:27
-msgid "git reset [-q] <tree-ish> [--] <paths>..."
-msgstr "git reset [-q] <указатель-дерева> [--] <пути>…"
+msgid "git reset [-q] [<tree-ish>] [--] <paths>..."
+msgstr "git reset [-q] [<указатель-дерева>] [--] <пути>…"
#: builtin/reset.c:28
msgid "git reset --patch [<tree-ish>] [--] [<paths>...]"
msgid "Could not write new index file."
msgstr "Не удалось записать новый файл индекса."
-#: builtin/rev-list.c:362
+#: builtin/rev-list.c:354
msgid "rev-list does not support display of notes"
msgstr "rev-list не поддерживает отображение заметок"
-#: builtin/rev-parse.c:358
+#: builtin/rev-parse.c:386
msgid "git rev-parse --parseopt [<options>] -- [<args>...]"
msgstr "git rev-parse --parseopt [<опции>] -- [<аргументы>…]"
-#: builtin/rev-parse.c:363
+#: builtin/rev-parse.c:391
msgid "keep the `--` passed as an arg"
msgstr "передавать далее «--» как аргумент"
-#: builtin/rev-parse.c:365
+#: builtin/rev-parse.c:393
msgid "stop parsing after the first non-option argument"
msgstr "остановить разбор после первого аргумента не являющегося опцией"
-#: builtin/rev-parse.c:368
+#: builtin/rev-parse.c:396
msgid "output in stuck long form"
msgstr "выводить аргументы в длинном формате"
-#: builtin/rev-parse.c:499
+#: builtin/rev-parse.c:527
msgid ""
"git rev-parse --parseopt [<options>] -- [<args>...]\n"
" or: git rev-parse --sq-quote [<arg>...]\n"
msgid "revert failed"
msgstr "сбой обращения изменений коммита"
-#: builtin/revert.c:207
+#: builtin/revert.c:205
msgid "cherry-pick failed"
msgstr "сбой при копировании коммита"
msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
msgstr "git show-branch (-g | --reflog)[=<n>[,<база>]] [--list] [<ссылка>]"
-#: builtin/show-branch.c:640
+#: builtin/show-branch.c:375
+#, c-format
+msgid "ignoring %s; cannot handle more than %d ref"
+msgid_plural "ignoring %s; cannot handle more than %d refs"
+msgstr[0] "игнорирование %s; невозможно обработать больше %d ссылки"
+msgstr[1] "игнорирование %s; невозможно обработать больше %d ссылок"
+msgstr[2] "игнорирование %s; невозможно обработать больше %d ссылок"
+msgstr[3] "игнорирование %s; невозможно обработать больше %d ссылки"
+
+#: builtin/show-branch.c:541
+#, c-format
+msgid "no matching refs with %s"
+msgstr "нет совпадающих записей с %s"
+
+#: builtin/show-branch.c:639
msgid "show remote-tracking and local branches"
msgstr "показать список и отслеживаемых внешних и локальных веток"
-#: builtin/show-branch.c:642
+#: builtin/show-branch.c:641
msgid "show remote-tracking branches"
msgstr "показать список отслеживаемых внешних веток"
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:643
msgid "color '*!+-' corresponding to the branch"
msgstr "окрашивать «*!+-» в соответствии с веткой"
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:645
msgid "show <n> more commits after the common ancestor"
msgstr "показать <n> коммитов после общего предка"
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:647
msgid "synonym to more=-1"
msgstr "синоним для more=-1"
-#: builtin/show-branch.c:649
+#: builtin/show-branch.c:648
msgid "suppress naming strings"
msgstr "не выводить именованные строки"
-#: builtin/show-branch.c:651
+#: builtin/show-branch.c:650
msgid "include the current branch"
msgstr "включить в вывод текущую ветку"
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:652
msgid "name commits with their object names"
msgstr "именовать коммиты их именами объектов"
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:654
msgid "show possible merge bases"
msgstr "вывести возможные базы слияния"
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:656
msgid "show refs unreachable from any other ref"
msgstr "вывести ссылки, недоступные из любых других ссылок"
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
msgid "show commits in topological order"
msgstr "вывести коммиты в топологическом порядке"
-#: builtin/show-branch.c:662
+#: builtin/show-branch.c:661
msgid "show only commits not on the first branch"
msgstr "вывести только коммиты, отсутствующие в первой ветке"
-#: builtin/show-branch.c:664
+#: builtin/show-branch.c:663
msgid "show merges reachable from only one tip"
msgstr "вывести слияния, достижимые только из одной из верхушек"
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:665
msgid "topologically sort, maintaining date order where possible"
msgstr "топологическая сортировка, с сохранением порядка дат, если возможно"
-#: builtin/show-branch.c:669
+#: builtin/show-branch.c:668
msgid "<n>[,<base>]"
msgstr "<n>[,<база>]"
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:669
msgid "show <n> most recent ref-log entries starting at base"
msgstr "показать <n> последних записей в журнале ссылок, начиная с базы"
+#: builtin/show-branch.c:703
+msgid ""
+"--reflog is incompatible with --all, --remotes, --independent or --merge-"
+"base"
+msgstr "--reflog несовместимо с --all, --remotes, --independent и --merge-base"
+
+#: builtin/show-branch.c:727
+msgid "no branches given, and HEAD is not valid"
+msgstr "не указаны ветки и HEAD не действительный"
+
+#: builtin/show-branch.c:730
+msgid "--reflog option needs one branch name"
+msgstr "параметр --reflog требует указания имени одной ветки"
+
+#: builtin/show-branch.c:733
+#, c-format
+msgid "only %d entry can be shown at one time."
+msgid_plural "only %d entries can be shown at one time."
+msgstr[0] "только %d запись может быть показана одновременно."
+msgstr[1] "только %d записи могут быть показаны одновременно."
+msgstr[2] "только %d записей могут быть показаны одновременно."
+msgstr[3] "только %d записи могут быть показаны одновременно."
+
+#: builtin/show-branch.c:737
+#, c-format
+msgid "no such ref %s"
+msgstr "нет такой ссылки %s"
+
+#: builtin/show-branch.c:829
+#, c-format
+msgid "cannot handle more than %d rev."
+msgid_plural "cannot handle more than %d revs."
+msgstr[0] "невозможно обработать больше %d редакции."
+msgstr[1] "невозможно обработать больше %d редакций."
+msgstr[2] "невозможно обработать больше %d редакций."
+msgstr[3] "невозможно обработать больше %d редакции."
+
+#: builtin/show-branch.c:833
+#, c-format
+msgid "'%s' is not a valid ref."
+msgstr "«%s» не является допустимой ссылкой на коммит."
+
+#: builtin/show-branch.c:836
+#, c-format
+msgid "cannot find commit %s (%s)"
+msgstr "не удалось найти коммит %s (%s)"
+
#: builtin/show-ref.c:10
msgid ""
"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | "
msgid "prepend comment character and space to each line"
msgstr "добавить перед каждой строкой символ комметария и пробел"
-#: builtin/submodule--helper.c:24 builtin/submodule--helper.c:923
+#: builtin/submodule--helper.c:24 builtin/submodule--helper.c:1046
#, c-format
msgid "No such ref: %s"
msgstr "Нет такой ссылки: %s"
-#: builtin/submodule--helper.c:31 builtin/submodule--helper.c:932
+#: builtin/submodule--helper.c:31 builtin/submodule--helper.c:1055
#, c-format
msgid "Expecting a full ref name, got %s"
msgstr "Ожидалось полное имя ссылки, а получено %s"
msgid "cannot strip one component off url '%s'"
msgstr "не удалось обрезать один компонент url «%s»"
-#: builtin/submodule--helper.c:278 builtin/submodule--helper.c:403
-#: builtin/submodule--helper.c:483
+#: builtin/submodule--helper.c:282 builtin/submodule--helper.c:408
+#: builtin/submodule--helper.c:590
msgid "alternative anchor for relative paths"
msgstr "альтернативный символ для относительных путей"
-#: builtin/submodule--helper.c:283
+#: builtin/submodule--helper.c:287
msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper list [--prefix=<путь>] [<путь>…]"
-#: builtin/submodule--helper.c:324 builtin/submodule--helper.c:338
+#: builtin/submodule--helper.c:329 builtin/submodule--helper.c:343
#, c-format
msgid "No url found for submodule path '%s' in .gitmodules"
msgstr "URL для подмодуля по пути «%s» не найден в .gitmodules"
-#: builtin/submodule--helper.c:364
+#: builtin/submodule--helper.c:369
#, c-format
msgid "Failed to register url for submodule path '%s'"
msgstr "Сбой регистрации адреса для пути подмодуля «%s»"
-#: builtin/submodule--helper.c:368
+#: builtin/submodule--helper.c:373
#, c-format
msgid "Submodule '%s' (%s) registered for path '%s'\n"
msgstr "Подмодуль «%s» (%s) зарегистрирован по пути «%s»\n"
-#: builtin/submodule--helper.c:378
+#: builtin/submodule--helper.c:383
#, c-format
msgid "warning: command update mode suggested for submodule '%s'\n"
msgstr "внимание: предполагаемый режим обновления для подмодуля «%s»\n"
-#: builtin/submodule--helper.c:385
+#: builtin/submodule--helper.c:390
#, c-format
msgid "Failed to register update mode for submodule path '%s'"
msgstr "Сбой регистрации режима обновления для пути подмодуля «%s»"
-#: builtin/submodule--helper.c:404
+#: builtin/submodule--helper.c:409
msgid "Suppress output for initializing a submodule"
msgstr "Не выводить информацию о инициализации подмодуля"
-#: builtin/submodule--helper.c:409
+#: builtin/submodule--helper.c:414
msgid "git submodule--helper init [<path>]"
msgstr "git submodule--helper init [<путь>]"
-#: builtin/submodule--helper.c:430
+#: builtin/submodule--helper.c:435
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name <путь>"
-#: builtin/submodule--helper.c:436
+#: builtin/submodule--helper.c:441
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr "не найдено соответствие подмодулей в .gitmodules для пути «%s»"
-#: builtin/submodule--helper.c:486
+#: builtin/submodule--helper.c:524 builtin/submodule--helper.c:527
+#, c-format
+msgid "submodule '%s' cannot add alternate: %s"
+msgstr "подмодулю «%s» не удалось добавить альтернативу: %s"
+
+#: builtin/submodule--helper.c:563
+#, c-format
+msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
+msgstr "Значение «%s» для параметра submodule.alternateErrorStrategy не рапознано"
+
+#: builtin/submodule--helper.c:570
+#, c-format
+msgid "Value '%s' for submodule.alternateLocation is not recognized"
+msgstr "Значение «%s» для параметра submodule.alternateLocation не рапознано"
+
+#: builtin/submodule--helper.c:593
msgid "where the new submodule will be cloned to"
msgstr "куда должен быть склонирован новый подмодуль"
-#: builtin/submodule--helper.c:489
+#: builtin/submodule--helper.c:596
msgid "name of the new submodule"
msgstr "имя нового подмодуля"
-#: builtin/submodule--helper.c:492
+#: builtin/submodule--helper.c:599
msgid "url where to clone the submodule from"
msgstr "url откуда должен был склонирован новый подмодуль"
-#: builtin/submodule--helper.c:498
+#: builtin/submodule--helper.c:605
msgid "depth for shallow clones"
msgstr "глубина для частичного клона"
-#: builtin/submodule--helper.c:504
+#: builtin/submodule--helper.c:608 builtin/submodule--helper.c:964
+msgid "force cloning progress"
+msgstr "принудительно выводить прогресс клонирования"
+
+#: builtin/submodule--helper.c:613
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
"<repository>] [--name <name>] [--depth <depth>] --url <url> --path <path>"
msgstr "git submodule--helper clone [--prefix=<путь>] [--quiet] [--reference <репозиторий>] [--name <имя>] [--depth <глубина>] --url <url> --path <путь>"
-#: builtin/submodule--helper.c:529 builtin/submodule--helper.c:535
+#: builtin/submodule--helper.c:638 builtin/submodule--helper.c:648
#, c-format
msgid "could not create directory '%s'"
msgstr "не удалось создать каталог «%s»"
-#: builtin/submodule--helper.c:531
+#: builtin/submodule--helper.c:644
#, c-format
msgid "clone of '%s' into submodule path '%s' failed"
msgstr "не удалось клонировать «%s» в подмодуль по пути «%s»"
-#: builtin/submodule--helper.c:547
+#: builtin/submodule--helper.c:660
#, c-format
msgid "cannot open file '%s'"
msgstr "не удалось открыть файл «%s»"
-#: builtin/submodule--helper.c:552
+#: builtin/submodule--helper.c:665
#, c-format
msgid "could not close file %s"
msgstr "не удалось закрыть файл %s"
-#: builtin/submodule--helper.c:559
+#: builtin/submodule--helper.c:672
#, c-format
msgid "could not get submodule directory for '%s'"
msgstr "не удалось получить каталог для подмодуля «%s»"
-#: builtin/submodule--helper.c:611
+#: builtin/submodule--helper.c:726
#, c-format
msgid "Submodule path '%s' not initialized"
msgstr "Подмодуль по пути «%s» не инициализирован"
-#: builtin/submodule--helper.c:615
+#: builtin/submodule--helper.c:730
msgid "Maybe you want to use 'update --init'?"
msgstr "Возможно, вы хотели использовать «update --init»?"
-#: builtin/submodule--helper.c:641
+#: builtin/submodule--helper.c:756
#, c-format
msgid "Skipping unmerged submodule %s"
msgstr "Пропуск не слитого подмодуля %s"
-#: builtin/submodule--helper.c:662
+#: builtin/submodule--helper.c:777
#, c-format
msgid "Skipping submodule '%s'"
msgstr "Пропуск подмодуля «%s»"
-#: builtin/submodule--helper.c:792
+#: builtin/submodule--helper.c:913
#, c-format
msgid "Failed to clone '%s'. Retry scheduled"
msgstr "Не удалось клонировать «%s». Запланирована повторная попытка"
-#: builtin/submodule--helper.c:803
+#: builtin/submodule--helper.c:924
#, c-format
msgid "Failed to clone '%s' a second time, aborting"
msgstr "Не удалось клонировать «%s» со второй попытки, отмена"
-#: builtin/submodule--helper.c:824
+#: builtin/submodule--helper.c:945
msgid "path into the working tree"
msgstr "путь в рабочем каталоге"
-#: builtin/submodule--helper.c:827
+#: builtin/submodule--helper.c:948
msgid "path into the working tree, across nested submodule boundaries"
msgstr "путь в рабочем каталоге, в пределах границ подмодуля"
-#: builtin/submodule--helper.c:831
+#: builtin/submodule--helper.c:952
msgid "rebase, merge, checkout or none"
msgstr "rebase, merge, checkout или none"
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:956
msgid "Create a shallow clone truncated to the specified number of revisions"
msgstr "Создать частичный клон, ограниченный указанным количеством редакций"
-#: builtin/submodule--helper.c:838
+#: builtin/submodule--helper.c:959
msgid "parallel jobs"
msgstr "параллельные задачи"
-#: builtin/submodule--helper.c:840
+#: builtin/submodule--helper.c:961
msgid "whether the initial clone should follow the shallow recommendation"
msgstr "должен ли изначальный процесс клонирования следовать рекомендации о частичности"
-#: builtin/submodule--helper.c:841
+#: builtin/submodule--helper.c:962
msgid "don't print cloning progress"
msgstr "вы выводить прогресс клонирования"
-#: builtin/submodule--helper.c:846
+#: builtin/submodule--helper.c:969
msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper update_clone [--prefix=<путь>] [<путь>…]"
-#: builtin/submodule--helper.c:856
+#: builtin/submodule--helper.c:979
msgid "bad value for update parameter"
msgstr "плохое значение для параметра update"
-#: builtin/submodule--helper.c:927
+#: builtin/submodule--helper.c:1050
#, c-format
msgid ""
"Submodule (%s) branch configured to inherit branch from superproject, but "
"the superproject is not on any branch"
msgstr "Ветка подмодуля (%s) настроена на наследование ветки из родительского проекта, но он не находится ни на одной ветке"
-#: builtin/submodule--helper.c:977
+#: builtin/submodule--helper.c:1100
msgid "submodule--helper subcommand must be called with a subcommand"
msgstr "подкоманда submodule--helper должна вызываться с указанием подкоманды"
-#: builtin/submodule--helper.c:984
+#: builtin/submodule--helper.c:1107
#, c-format
msgid "'%s' is not a valid submodule--helper subcommand"
msgstr "«%s» не является подкомандой submodule--helper"
msgid "Updated tag '%s' (was %s)\n"
msgstr "Метка «%s» обновлена (была %s)\n"
-#: builtin/unpack-objects.c:490
+#: builtin/unpack-objects.c:493
msgid "Unpacking objects"
msgstr "Распаковка объектов"
msgid " OK"
msgstr " OK"
-#: builtin/update-index.c:575
+#: builtin/update-index.c:564
msgid "git update-index [<options>] [--] [<file>...]"
msgstr "git update-index [<опции>] [--] [<файл>…]"
-#: builtin/update-index.c:930
+#: builtin/update-index.c:919
msgid "continue refresh even when index needs update"
msgstr "продолжить обновление, даже если индекс требует обновления"
-#: builtin/update-index.c:933
+#: builtin/update-index.c:922
msgid "refresh: ignore submodules"
msgstr "обновление: игнорировать подмодули"
-#: builtin/update-index.c:936
+#: builtin/update-index.c:925
msgid "do not ignore new files"
msgstr "не игнорировать новые файлы"
-#: builtin/update-index.c:938
+#: builtin/update-index.c:927
msgid "let files replace directories and vice-versa"
msgstr "разрешить файлам заменять каталоги и наоборот"
-#: builtin/update-index.c:940
+#: builtin/update-index.c:929
msgid "notice files missing from worktree"
msgstr "замечать файлы отсутствующие в рабочем каталоге"
-#: builtin/update-index.c:942
+#: builtin/update-index.c:931
msgid "refresh even if index contains unmerged entries"
msgstr "обновить, даже если в индексе имеются не слитые записи"
-#: builtin/update-index.c:945
+#: builtin/update-index.c:934
msgid "refresh stat information"
msgstr "обновить информацию о статусе файлов"
-#: builtin/update-index.c:949
+#: builtin/update-index.c:938
msgid "like --refresh, but ignore assume-unchanged setting"
msgstr "как --refresh, но игнорировать настройку assume-unchanged"
-#: builtin/update-index.c:953
+#: builtin/update-index.c:942
msgid "<mode>,<object>,<path>"
msgstr "<режим доступа>,<объект>,<путь>"
-#: builtin/update-index.c:954
+#: builtin/update-index.c:943
msgid "add the specified entry to the index"
msgstr "добавить указанную запись в индекс"
-#: builtin/update-index.c:963
+#: builtin/update-index.c:952
msgid "mark files as \"not changing\""
msgstr "пометить файлы как «не измененные»"
-#: builtin/update-index.c:966
+#: builtin/update-index.c:955
msgid "clear assumed-unchanged bit"
msgstr "убрать пометку assumed-unchanged"
-#: builtin/update-index.c:969
+#: builtin/update-index.c:958
msgid "mark files as \"index-only\""
msgstr "пометить файлы как «только в индексе»"
-#: builtin/update-index.c:972
+#: builtin/update-index.c:961
msgid "clear skip-worktree bit"
msgstr "убрать пометку skip-worktree"
-#: builtin/update-index.c:975
+#: builtin/update-index.c:964
msgid "add to index only; do not add content to object database"
msgstr "только добавить в индекс; не добавлять содержимое в базу данных объектов"
-#: builtin/update-index.c:977
+#: builtin/update-index.c:966
msgid "remove named paths even if present in worktree"
msgstr "удалить указанные пути, даже если они существуют в рабочем каталоге"
-#: builtin/update-index.c:979
+#: builtin/update-index.c:968
msgid "with --stdin: input lines are terminated by null bytes"
msgstr "с опцией --stdin: строки на вводе отделяются НУЛЕВЫМ байтом"
-#: builtin/update-index.c:981
+#: builtin/update-index.c:970
msgid "read list of paths to be updated from standard input"
msgstr "прочитать список обновляемых путей из стандартного ввода"
-#: builtin/update-index.c:985
+#: builtin/update-index.c:974
msgid "add entries from standard input to the index"
msgstr "добавить записи из стандартного ввода в индекс"
-#: builtin/update-index.c:989
+#: builtin/update-index.c:978
msgid "repopulate stages #2 and #3 for the listed paths"
msgstr "заново заполнить индекс #2 и #3 для указанных путей"
-#: builtin/update-index.c:993
+#: builtin/update-index.c:982
msgid "only update entries that differ from HEAD"
msgstr "обновить только записи, которые отличаются от HEAD"
-#: builtin/update-index.c:997
+#: builtin/update-index.c:986
msgid "ignore files missing from worktree"
msgstr "игнорировать файлы, отсутствующие в рабочем каталоге"
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:989
msgid "report actions to standard output"
msgstr "вывести выполняемые действия на стандартный вывод"
-#: builtin/update-index.c:1002
+#: builtin/update-index.c:991
msgid "(for porcelains) forget saved unresolved conflicts"
msgstr "(для машинной обработки) забыть сохраненные неразрешенные конфликты"
-#: builtin/update-index.c:1006
+#: builtin/update-index.c:995
msgid "write index in this format"
msgstr "записать индекс в указанном формате"
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:997
msgid "enable or disable split index"
msgstr "разрешить или запретить раздельный индекс"
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:999
msgid "enable/disable untracked cache"
msgstr "включить/отключить кэш неотслеживаемых файлов"
-#: builtin/update-index.c:1012
+#: builtin/update-index.c:1001
msgid "test if the filesystem supports untracked cache"
msgstr "проверить, что файловая система поддерживает кэш неотслеживаемых файлов"
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1003
msgid "enable untracked cache without testing the filesystem"
msgstr "включить кэш неотслеживаемых файлов без проверки файловой системы"
-#: builtin/update-index.c:1134
+#: builtin/update-index.c:1119
+msgid ""
+"core.untrackedCache is set to true; remove or change it, if you really want "
+"to disable the untracked cache"
+msgstr "параметр core.untrackedCache установлен true; удалите или измените его, если вы действительно хотите удалить кэш неотслеживаемых файлов"
+
+#: builtin/update-index.c:1123
msgid "Untracked cache disabled"
msgstr "Кэш неотслеживаемых файлов отключен"
-#: builtin/update-index.c:1146
+#: builtin/update-index.c:1131
+msgid ""
+"core.untrackedCache is set to false; remove or change it, if you really want"
+" to enable the untracked cache"
+msgstr "параметр core.untrackedCache установлен false; удалите или измените его, если вы действительно хотите включить кэш неотслеживаемых файлов"
+
+#: builtin/update-index.c:1135
#, c-format
msgid "Untracked cache enabled for '%s'"
msgstr "Кэш неотслеживаемых файлов включен для «%s»"
msgid "only useful for debugging"
msgstr "используется только при отладке"
-#: upload-pack.c:20
+#: upload-pack.c:22
msgid "git upload-pack [<options>] <dir>"
msgstr "git upload-pack [<опции>] <каталог>"
-#: upload-pack.c:837
+#: upload-pack.c:1028
msgid "quit after a single request/response exchange"
msgstr "выход после обмена одним запросом/ответом"
-#: upload-pack.c:839
+#: upload-pack.c:1030
msgid "exit immediately after initial ref advertisement"
msgstr "выходить сразу после начального объявления списка ссылок"
-#: upload-pack.c:841
+#: upload-pack.c:1032
msgid "do not try <directory>/.git/ if <directory> is no Git directory"
msgstr "не проверять <каталог>/.git/ если <каталог> не является каталогом Git"
-#: upload-pack.c:843
+#: upload-pack.c:1034
msgid "interrupt transfer after <n> seconds of inactivity"
msgstr "прервать передачу после <кол> секунд простоя"
+#: credential-cache--daemon.c:223
+#, c-format
+msgid ""
+"The permissions on your socket directory are too loose; other\n"
+"users may be able to read your cached credentials. Consider running:\n"
+"\n"
+"\tchmod 0700 %s"
+msgstr "Права доступа к вашему каталогу сокетов слишком свободны; друге пользователи могуи читать ваши закэшированные пароли доступа. Обдумайте запуск команды:\n\n\tchmod 0700 %s"
+
#: credential-cache--daemon.c:271
msgid "print debugging messages to stderr"
msgstr "вывод отладочных сообщений на stderr"
"to read about a specific subcommand or concept."
msgstr "«git help -а» и «git help -g» выводит список доступных подкоманд и\nнекоторые руководства по темам. Запустите «git help <команда>» или\n«git help <термин>», чтобы прочесть о конкретных подкоманде или теме."
-#: http.c:323
+#: http.c:342
+msgid "Delegation control is not supported with cURL < 7.22.0"
+msgstr "Делегация проверки полномочий не поддерживается с cURL < 7.22.0"
+
+#: http.c:351
msgid "Public key pinning not supported with cURL < 7.44.0"
msgstr "Public key pinning не поддерживается с cURL < 7.44.0"
msgid "no-op (backward compatibility)"
msgstr "ничего не делает (оставлено для обратной совместимости)"
-#: parse-options.h:237
+#: parse-options.h:238
msgid "be more verbose"
msgstr "быть многословнее"
-#: parse-options.h:239
+#: parse-options.h:240
msgid "be more quiet"
msgstr "тихий режим"
-#: parse-options.h:245
+#: parse-options.h:246
msgid "use <n> digits to display SHA-1s"
msgstr "использовать <n> цифр для вывода SHA-1"
msgstr "Не удалось автоматически слить изменения."
#: git-merge-octopus.sh:62
-msgid "Should not be doing an Octopus."
+msgid "Should not be doing an octopus."
msgstr "Должно быть octopus не подходит."
#: git-merge-octopus.sh:73
msgid "Cannot save the current index state"
msgstr "Не удалось сохранить текущее состояние индекса"
+#: git-stash.sh:103
+msgid "Cannot save the untracked files"
+msgstr "Невозможно сохранить неотслеживаемые файлы"
+
#: git-stash.sh:123 git-stash.sh:136
msgid "Cannot save the current worktree state"
msgstr "Не удалось сохранить текущее состояние рабочего каталога"
" To provide a message, use git stash save -- '$option'"
msgstr "ошибка: неизвестная опция для «stash save»: $option\n Для предоставления сообщения, используйте git stash save -- «$option»"
+#: git-stash.sh:251
+msgid "Can't use --patch and --include-untracked or --all at the same time"
+msgstr "Нельзя использовать --patch и --include-untracked или --all одновременно"
+
#: git-stash.sh:259
msgid "No local changes to save"
msgstr "Нет локальных изменений для сохранения"
msgid "Cannot remove worktree changes"
msgstr "Не удалось удалить изменения рабочего каталога"
-#: git-stash.sh:404
+#: git-stash.sh:403
#, sh-format
msgid "unknown option: $opt"
msgstr "неизвестная опция: $opt"
-#: git-stash.sh:414
+#: git-stash.sh:416
msgid "No stash found."
msgstr "Не найдены спрятанные изменения."
-#: git-stash.sh:421
+#: git-stash.sh:423
#, sh-format
msgid "Too many revisions specified: $REV"
msgstr "Передано слишком много редакций: $REV"
-#: git-stash.sh:427
+#: git-stash.sh:438
#, sh-format
msgid "$reference is not a valid reference"
msgstr "$reference не является действительной ссылкой"
-#: git-stash.sh:455
+#: git-stash.sh:466
#, sh-format
msgid "'$args' is not a stash-like commit"
msgstr "«$args» не похоже на коммит со спрятанными изменениями"
-#: git-stash.sh:466
+#: git-stash.sh:477
#, sh-format
msgid "'$args' is not a stash reference"
msgstr "«$args» не является ссылкой на спрятанные изменения"
-#: git-stash.sh:474
+#: git-stash.sh:485
msgid "unable to refresh index"
msgstr "не удалось обновить индекс"
-#: git-stash.sh:478
+#: git-stash.sh:489
msgid "Cannot apply a stash in the middle of a merge"
msgstr "Нельзя применить спрятанные изменения во время выполнения слияния"
-#: git-stash.sh:486
+#: git-stash.sh:497
msgid "Conflicts in index. Try without --index."
msgstr "Конфликты в индексе. Попробуйте без --index."
-#: git-stash.sh:488
+#: git-stash.sh:499
msgid "Could not save index tree"
msgstr "Не удалось сохранить дерево индекса"
-#: git-stash.sh:522
+#: git-stash.sh:508
+msgid "Could not restore untracked files from stash"
+msgstr "Невозможно восстановить неотслеживаемые файлы из спятанных файлов"
+
+#: git-stash.sh:533
msgid "Cannot unstage modified files"
msgstr "Невозможно убрать из индекса измененные файлы"
-#: git-stash.sh:537
+#: git-stash.sh:548
msgid "Index was not unstashed."
msgstr "Индекс не был извлечён из спрятанных изменений."
-#: git-stash.sh:551
+#: git-stash.sh:562
msgid "The stash is kept in case you need it again."
msgstr "Спрятанные изменения сохранены, на случай если они снова вам понадобятся."
-#: git-stash.sh:560
+#: git-stash.sh:571
#, sh-format
msgid "Dropped ${REV} ($s)"
msgstr "Отброшено ${REV} ($s)"
-#: git-stash.sh:561
+#: git-stash.sh:572
#, sh-format
msgid "${REV}: Could not drop stash entry"
msgstr "${REV}: Не удалось отбросить запись из спрятанных изменений"
-#: git-stash.sh:569
+#: git-stash.sh:580
msgid "No branch name specified"
msgstr "Не указано имя ветки"
-#: git-stash.sh:641
+#: git-stash.sh:652
msgid "(To restore them type \"git stash apply\")"
msgstr "(Чтобы восстановить их, наберите «git stash apply»)"
-#: git-submodule.sh:183
+#: git-submodule.sh:184
msgid "Relative path can only be used from the toplevel of the working tree"
msgstr "Относительный путь можно использовать только находясь на вершине рабочего каталога"
-#: git-submodule.sh:193
+#: git-submodule.sh:194
#, sh-format
msgid "repo URL: '$repo' must be absolute or begin with ./|../"
msgstr "URL репозитория: «$repo» должен быть абсолютным или начинаться с ./|../"
-#: git-submodule.sh:210
+#: git-submodule.sh:211
#, sh-format
msgid "'$sm_path' already exists in the index"
msgstr "«$sm_path» уже содержится в индексе"
-#: git-submodule.sh:214
+#: git-submodule.sh:215
#, sh-format
msgid ""
"The following path is ignored by one of your .gitignore files:\n"
"Use -f if you really want to add it."
msgstr "Следующие пути игнорируются одним из ваших файлов .gitignore:\n$sm_path\nИспользуйте опцию -f, если вы действительно хотите его добавить."
-#: git-submodule.sh:232
+#: git-submodule.sh:233
#, sh-format
msgid "Adding existing repo at '$sm_path' to the index"
msgstr "Добавляю существующий репозиторий из «$sm_path» в индекс"
-#: git-submodule.sh:234
+#: git-submodule.sh:235
#, sh-format
msgid "'$sm_path' already exists and is not a valid git repo"
msgstr "«$sm_path» уже существует и не является действительным репозиторием git"
-#: git-submodule.sh:242
+#: git-submodule.sh:243
#, sh-format
msgid "A git directory for '$sm_name' is found locally with remote(s):"
msgstr "Каталог git для «$sm_name» найден локально на внешних репозиториях:"
-#: git-submodule.sh:244
+#: git-submodule.sh:245
#, sh-format
msgid ""
"If you want to reuse this local git directory instead of cloning again from\n"
"or you are unsure what this means choose another name with the '--name' option."
msgstr "Если вы хотите повторно использовать локальный каталог git вместо повторного клонирования из\n $realrepo\nто используйте параметр «--force». Если же локальный каталог git не является нужным репозиторием или если вы не уверены, что это значит, то укажите другое имя для подмодуля с помощью параметра «--name»."
-#: git-submodule.sh:250
+#: git-submodule.sh:251
#, sh-format
msgid "Reactivating local git directory for submodule '$sm_name'."
msgstr "Восстановление локального каталога git для подмодуля «$sm_name»."
-#: git-submodule.sh:262
+#: git-submodule.sh:263
#, sh-format
msgid "Unable to checkout submodule '$sm_path'"
msgstr "Не удалось переключиться на состояние у подмодуля «$sm_path»"
-#: git-submodule.sh:267
+#: git-submodule.sh:268
#, sh-format
msgid "Failed to add submodule '$sm_path'"
msgstr "Сбой добавления подмодуля «$sm_path»"
-#: git-submodule.sh:276
+#: git-submodule.sh:277
#, sh-format
msgid "Failed to register submodule '$sm_path'"
msgstr "Не удалось зарегистрировать подмодуль «$sm_path»"
-#: git-submodule.sh:323
+#: git-submodule.sh:324
#, sh-format
msgid "Entering '$displaypath'"
msgstr "Заходим в «$displaypath»"
-#: git-submodule.sh:343
+#: git-submodule.sh:344
#, sh-format
msgid "Stopping at '$displaypath'; script returned non-zero status."
msgstr "Останавливаемся на «$displaypath»; сценарий вернул не нулевой код возврата."
-#: git-submodule.sh:414
+#: git-submodule.sh:415
#, sh-format
msgid "pathspec and --all are incompatible"
msgstr "спецификацию пути и --all нельзя использовать одновременно"
-#: git-submodule.sh:419
+#: git-submodule.sh:420
#, sh-format
msgid "Use '--all' if you really want to deinitialize all submodules"
msgstr "Используйте «--all», если вы действительно хотите деинициализировать все подмодули"
-#: git-submodule.sh:439
+#: git-submodule.sh:440
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains a .git directory\n"
"(use 'rm -rf' if you really want to remove it including all of its history)"
msgstr "Рабочий каталог подмодуля «$displaypath» уже содержит каталог .git\n(используйте «rm -rf», если вы действительно хотите удалить его со всей историей изменений)"
-#: git-submodule.sh:447
+#: git-submodule.sh:448
#, sh-format
msgid ""
"Submodule work tree '$displaypath' contains local modifications; use '-f' to"
" discard them"
msgstr "Рабочий каталог подмодуля «$displaypath» содержит локальные изменения; используйте «-f», чтобы отменить их"
-#: git-submodule.sh:450
+#: git-submodule.sh:451
#, sh-format
msgid "Cleared directory '$displaypath'"
msgstr "Очищен каталог «$displaypath»"
-#: git-submodule.sh:451
+#: git-submodule.sh:452
#, sh-format
msgid "Could not remove submodule work tree '$displaypath'"
msgstr "Не удалось удалить рабочий каталог подмодуля «$displaypath»"
-#: git-submodule.sh:454
+#: git-submodule.sh:455
#, sh-format
msgid "Could not create empty submodule directory '$displaypath'"
msgstr "Не удалось создать пустой каталог подмодуля «$displaypath»"
-#: git-submodule.sh:463
+#: git-submodule.sh:464
#, sh-format
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr "Подмодуль «$name» ($url) был снят с регистрации по пути «$displaypath»"
-#: git-submodule.sh:612
+#: git-submodule.sh:617
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr "Не удалось найти текущую редакцию для подмодуля по пути «$displaypath»"
-#: git-submodule.sh:622
+#: git-submodule.sh:627
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "Не удалось выполнить извлечение для подмодуля по пути «$sm_path»"
-#: git-submodule.sh:627
+#: git-submodule.sh:632
#, sh-format
msgid ""
"Unable to find current ${remote_name}/${branch} revision in submodule path "
"'$sm_path'"
msgstr "Не удалось найти текущую редакцию ${remote_name}/${branch} для подмодуля по пути «$sm_path»"
-#: git-submodule.sh:645
+#: git-submodule.sh:650
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "Не удалось выполнить извлечение для подмодуля по пути «$displaypath»"
-#: git-submodule.sh:651
+#: git-submodule.sh:656
#, sh-format
msgid ""
"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
"Direct fetching of that commit failed."
msgstr "Получен по пути подмодуля «$displaypath», но не содержит $sha1. Сбой при прямом получении коммита."
-#: git-submodule.sh:658
+#: git-submodule.sh:663
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "Не удалось переключиться на состояние «$sha1» для подмодуля по пути «$displaypath»"
-#: git-submodule.sh:659
+#: git-submodule.sh:664
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Подмодуль по пути «$displaypath»: забрано состояние «$sha1»"
-#: git-submodule.sh:663
+#: git-submodule.sh:668
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr "Не удалось переместить «$sha1» для подмодуля по пути «$displaypath»"
-#: git-submodule.sh:664
+#: git-submodule.sh:669
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Подмодуль по пути «$displaypath»: перемещен над «$sha1»"
-#: git-submodule.sh:669
+#: git-submodule.sh:674
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr "Не удалось выполнить слияние с «$sha1» для подмодуля по пути «$displaypath»"
-#: git-submodule.sh:670
+#: git-submodule.sh:675
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Подмодуль по пути «$displaypath»: слито с «$sha1»"
-#: git-submodule.sh:675
+#: git-submodule.sh:680
#, sh-format
msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
msgstr "Сбой выполнения «$command $sha1» для подмодуля по пути «$displaypath»"
-#: git-submodule.sh:676
+#: git-submodule.sh:681
#, sh-format
msgid "Submodule path '$displaypath': '$command $sha1'"
msgstr "Подмодуль по пути «$displaypath»: «$command $sha1»"
-#: git-submodule.sh:707
+#: git-submodule.sh:712
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "Не удалось выполнить рекурсивно для подмодуля по пути «$displaypath»"
-#: git-submodule.sh:815
+#: git-submodule.sh:820
msgid "The --cached option cannot be used with the --files option"
msgstr "Опцию --cached нельзя использовать одновременно с опцией --files"
-#: git-submodule.sh:867
+#: git-submodule.sh:872
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "неизвестный режим $mod_dst"
-#: git-submodule.sh:887
+#: git-submodule.sh:892
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " Предупреждение: $display_name не содержит коммит $sha1_src"
-#: git-submodule.sh:890
+#: git-submodule.sh:895
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " Предупреждение: $display_name не содержит коммит $sha1_dst"
-#: git-submodule.sh:893
+#: git-submodule.sh:898
#, 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:918
-msgid "blob"
-msgstr "двоичный объект"
-
-#: git-submodule.sh:1040
+#: git-submodule.sh:1045
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "Не удалось выполнить рекурсивно для подмодуля по пути «$sm_path»"
-#: git-submodule.sh:1107
+#: git-submodule.sh:1112
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "Синхронизация url для подмодуля «$displaypath»"
msgid "See git-${cmd}(1) for details."
msgstr "Для дополнительной информации, смотрите git-${cmd}(1)."
-#: git-rebase--interactive.sh:131
+#: git-rebase--interactive.sh:140
#, sh-format
msgid "Rebasing ($new_count/$total)"
msgstr "Перемещение ($new_count/$total)"
-#: git-rebase--interactive.sh:147
+#: git-rebase--interactive.sh:156
msgid ""
"\n"
"Commands:\n"
"These lines can be re-ordered; they are executed from top to bottom.\n"
msgstr "\nКоманды:\n p, pick = использовать коммит\n r, reword = использовать коммит, но изменить сообщение коммита\n e, edit = использовать коммит, но остановиться для внесения правок\n s, squash = использовать коммит, но объединить его с предыдущим коммитом\n f, fixup = как «squash», но отбросить сообщение этого коммита\n x, exec = выполнить команду (остаток строки) с помощью командной оболочки\n d, drop = удалить коммит\n\nЭти строки могут быть перемещены; выполняются по очереди сверху вниз.\n"
-#: git-rebase--interactive.sh:162
+#: git-rebase--interactive.sh:171
msgid ""
"\n"
"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
msgstr "\nНе удаляйте строки. Используйте «drop», чтобы явно удалить коммит.\n"
-#: git-rebase--interactive.sh:166
+#: git-rebase--interactive.sh:175
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
msgstr "\nЕсли вы удалите строку здесь, то УКАЗАННЫЙ КОММИТ БУДЕТ УТЕРЯН.\n"
-#: git-rebase--interactive.sh:202
+#: git-rebase--interactive.sh:211
#, sh-format
msgid ""
"You can amend the commit now, with\n"
"\tgit rebase --continue"
msgstr "Теперь вы можете исправить коммит с помощью\n\n\tgit commit --amend $gpg_sign_opt_quoted\n\nКак только вы будете довольны результатом, запустите\n\n\tgit rebase --continue"
-#: git-rebase--interactive.sh:227
+#: git-rebase--interactive.sh:236
#, sh-format
msgid "$sha1: not a commit that can be picked"
msgstr "$sha1: не является коммитом, который можно взять"
-#: git-rebase--interactive.sh:266
+#: git-rebase--interactive.sh:275
#, sh-format
msgid "Invalid commit name: $sha1"
msgstr "Недопустимое имя коммита: $sha1"
-#: git-rebase--interactive.sh:308
+#: git-rebase--interactive.sh:317
msgid "Cannot write current commit's replacement sha1"
msgstr "Не удалось записать замену sha1 текущего коммита"
-#: git-rebase--interactive.sh:360
+#: git-rebase--interactive.sh:369
#, sh-format
msgid "Fast-forward to $sha1"
msgstr "Перемотка вперед до $sha1"
-#: git-rebase--interactive.sh:362
+#: git-rebase--interactive.sh:371
#, sh-format
msgid "Cannot fast-forward to $sha1"
msgstr "Не удалось перемотать вперед до $sha1"
-#: git-rebase--interactive.sh:371
+#: git-rebase--interactive.sh:380
#, sh-format
msgid "Cannot move HEAD to $first_parent"
msgstr "Не удалось переместить HEAD на $first_parent"
-#: git-rebase--interactive.sh:376
+#: git-rebase--interactive.sh:385
#, sh-format
msgid "Refusing to squash a merge: $sha1"
msgstr "Нельзя уплотнить слияние: $sha1"
-#: git-rebase--interactive.sh:390
+#: git-rebase--interactive.sh:399
#, sh-format
msgid "Error redoing merge $sha1"
msgstr "Ошибка при повторении слияния $sha1"
-#: git-rebase--interactive.sh:398
+#: git-rebase--interactive.sh:407
#, sh-format
msgid "Could not pick $sha1"
msgstr "Не удалось взять $sha1"
-#: git-rebase--interactive.sh:407
+#: git-rebase--interactive.sh:416
#, sh-format
msgid "This is the commit message #${n}:"
msgstr "Это сообщение коммита номер #${n}:"
-#: git-rebase--interactive.sh:412
+#: git-rebase--interactive.sh:421
#, sh-format
msgid "The commit message #${n} will be skipped:"
msgstr "Сообщение коммита номер #${n} будет пропущено:"
-#: git-rebase--interactive.sh:423
+#: git-rebase--interactive.sh:432
#, sh-format
msgid "This is a combination of $count commit."
msgid_plural "This is a combination of $count commits."
msgstr[2] "Это объединение $count коммитов"
msgstr[3] "Это объединение $count коммитов"
-#: git-rebase--interactive.sh:431
+#: git-rebase--interactive.sh:440
#, sh-format
msgid "Cannot write $fixup_msg"
msgstr "Не удалось записать $fixup_msg"
-#: git-rebase--interactive.sh:434
+#: git-rebase--interactive.sh:443
msgid "This is a combination of 2 commits."
msgstr "Это объединение 2 коммитов"
-#: git-rebase--interactive.sh:435
+#: git-rebase--interactive.sh:444
msgid "This is the 1st commit message:"
msgstr "Это 1-е сообщение коммита:"
-#: git-rebase--interactive.sh:475 git-rebase--interactive.sh:518
-#: git-rebase--interactive.sh:521
+#: git-rebase--interactive.sh:484 git-rebase--interactive.sh:527
+#: git-rebase--interactive.sh:530
#, sh-format
msgid "Could not apply $sha1... $rest"
msgstr "Не удалось применить $sha1… $rest"
-#: git-rebase--interactive.sh:549
+#: git-rebase--interactive.sh:558
#, sh-format
msgid ""
"Could not amend commit after successfully picking $sha1... $rest\n"
"you are able to reword the commit."
msgstr "Не удолось исправить коммит после успешного перехода на $sha1… $rest\nЭто произошло, скорее всего, из-за пустого сообщения коммита или из-за перехватчика перед коммитом. Если же это произошло из-за перехватчика перед коммитом, то вам нужно решить с ним проблему и повторить попытку снова."
-#: git-rebase--interactive.sh:564
+#: git-rebase--interactive.sh:573
#, sh-format
msgid "Stopped at $sha1_abbrev... $rest"
msgstr "Остановлено на $sha1_abbrev… $rest"
-#: git-rebase--interactive.sh:579
+#: git-rebase--interactive.sh:588
#, sh-format
msgid "Cannot '$squash_style' without a previous commit"
msgstr "Нельзя сделать «$squash_style» без указания предыдущего коммита"
-#: git-rebase--interactive.sh:621
+#: git-rebase--interactive.sh:630
#, sh-format
msgid "Executing: $rest"
msgstr "Выполнение: $rest"
-#: git-rebase--interactive.sh:629
+#: git-rebase--interactive.sh:638
#, sh-format
msgid "Execution failed: $rest"
msgstr "Не удалось выполнить: $rest"
-#: git-rebase--interactive.sh:631
+#: git-rebase--interactive.sh:640
msgid "and made changes to the index and/or the working tree"
msgstr "и были сделаны изменения в индексе и/или в рабочем каталоге"
-#: git-rebase--interactive.sh:633
+#: git-rebase--interactive.sh:642
msgid ""
"You can fix the problem, and then run\n"
"\n"
msgstr "Вы можете исправить ошибку, а затем запустить\n\n\tgit rebase --continue"
#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--interactive.sh:646
+#: git-rebase--interactive.sh:655
#, sh-format
msgid ""
"Execution succeeded: $rest\n"
"\tgit rebase --continue"
msgstr "Успешное выполнение: $rest\nно остались изменения в индексе и/или в рабочем каталоге\nСделайте коммит или спрячьте ваши изменения, а затем выполните\n\n\tgit rebase --continue"
-#: git-rebase--interactive.sh:657
+#: git-rebase--interactive.sh:666
#, sh-format
msgid "Unknown command: $command $sha1 $rest"
msgstr "Неопознанная команда: $command $sha1 $rest"
-#: git-rebase--interactive.sh:658
+#: git-rebase--interactive.sh:667
msgid "Please fix this using 'git rebase --edit-todo'."
msgstr "Пожалуйста исправьте это с помощью «git rebase --edit-todo»."
-#: git-rebase--interactive.sh:693
+#: git-rebase--interactive.sh:702
#, sh-format
msgid "Successfully rebased and updated $head_name."
msgstr "Успешно перебазирован и обновлён $head_name."
-#: git-rebase--interactive.sh:740
+#: git-rebase--interactive.sh:749
msgid "Could not skip unnecessary pick commands"
msgstr "Не удалось пропустить ненужные команды отбора (pick)"
-#: git-rebase--interactive.sh:898
+#: git-rebase--interactive.sh:907
#, sh-format
msgid ""
"Warning: the SHA-1 is missing or isn't a commit in the following line:\n"
" - $line"
msgstr "Внимание: не найден SHA-1 или он не указывает на коммит. На строке:\n - $line"
-#: git-rebase--interactive.sh:931
+#: git-rebase--interactive.sh:940
#, sh-format
msgid ""
"Warning: the command isn't recognized in the following line:\n"
" - $line"
msgstr "Внимание: команда не распознана на строке:\n - $line"
-#: git-rebase--interactive.sh:970
+#: git-rebase--interactive.sh:979
msgid "could not detach HEAD"
msgstr "не удалось отделить HEAD"
-#: git-rebase--interactive.sh:1008
+#: git-rebase--interactive.sh:1017
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
"Dropped commits (newer to older):"
msgstr "Внимание: некоторые коммиты могли быть отброшены по ошибке.\nОтброшенные коммиты (от новых к старым):"
-#: git-rebase--interactive.sh:1016
+#: git-rebase--interactive.sh:1025
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
"\n"
"The possible behaviours are: ignore, warn, error."
msgstr "Для избежания этого сообщения, используйте «drop» чтобы явно удалить коммит.\n\nИспользуйте опцию «git config rebase.missingCommitsCheck» для изменения количества предупреждений.\nВозможные значения: ignore, warn, error."
-#: git-rebase--interactive.sh:1027
+#: git-rebase--interactive.sh:1036
#, sh-format
msgid ""
"Unrecognized setting $check_level for option rebase.missingCommitsCheck. "
"Ignoring."
msgstr "Нераспознанная настройка $check_level для опции rebase.missingCommitsCheck. Игнорирую."
-#: git-rebase--interactive.sh:1044
-msgid "You can fix this with 'git rebase --edit-todo'."
-msgstr "Вы можете исправить это с помощью «git rebase --edit-todo»."
+#: git-rebase--interactive.sh:1053
+msgid ""
+"You can fix this with 'git rebase --edit-todo' and then run 'git rebase "
+"--continue'."
+msgstr "Вы можете исправить это с помощью «git rebase --edit-todo», а потом запустив «git rebase --continue»."
-#: git-rebase--interactive.sh:1045
+#: git-rebase--interactive.sh:1054
msgid "Or you can abort the rebase with 'git rebase --abort'."
msgstr "Или вы можете отменить процесс перебазирования с помощью «git rebase --abort»."
-#: git-rebase--interactive.sh:1069
+#: git-rebase--interactive.sh:1078
msgid "Could not remove CHERRY_PICK_HEAD"
msgstr "Не удалось удалить CHERRY_PICK_HEAD"
-#: git-rebase--interactive.sh:1074
+#: git-rebase--interactive.sh:1083
#, sh-format
msgid ""
"You have staged changes in your working tree.\n"
"\n"
" git commit $gpg_sign_opt_quoted\n"
"\n"
-"In both case, once you're done, continue with:\n"
+"In both cases, once you're done, continue with:\n"
"\n"
" git rebase --continue\n"
msgstr "У вас имеются проиндексированные изменения в рабочем каталоге.\nЕсли эти изменения должны быть объеденены с предыдущим коммитом, то запустите:\n\n git commit --amend $gpg_sign_opt_quoted\n\nЕсли же они должны быть помещены в новый коммит, то запустите:\n\n git commit $gpg_sign_opt_quoted\n\nВ любом случае, после того как вы закончите, продолжить перемещение можно выполнив:\n\n git rebase --continue\n"
-#: git-rebase--interactive.sh:1091
+#: git-rebase--interactive.sh:1100
msgid "Error trying to find the author identity to amend commit"
msgstr "Произошла ошибка при поиске автора для исправления коммита"
-#: git-rebase--interactive.sh:1096
+#: git-rebase--interactive.sh:1105
msgid ""
"You have uncommitted changes in your working tree. Please commit them\n"
"first and then run 'git rebase --continue' again."
msgstr "У вас имеются незакоммиченные изменения в рабочем каталоге. Сделайте коммит, а затем запустите «git rebase --continue» снова."
-#: git-rebase--interactive.sh:1101 git-rebase--interactive.sh:1105
+#: git-rebase--interactive.sh:1110 git-rebase--interactive.sh:1114
msgid "Could not commit staged changes."
msgstr "Не удалось закоммитить проиндексированные изменения."
-#: git-rebase--interactive.sh:1129
+#: git-rebase--interactive.sh:1138
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
"\n"
msgstr "\nВы сейчас редактируете файл со списком дел для интерактивного перемещения.\nДля продолжения перемещения, после редактирования файла запустите:\n git rebase --continue\n\n"
-#: git-rebase--interactive.sh:1137 git-rebase--interactive.sh:1298
+#: git-rebase--interactive.sh:1146 git-rebase--interactive.sh:1304
msgid "Could not execute editor"
msgstr "Не удалось запустить редактор"
-#: git-rebase--interactive.sh:1145
-msgid "You need to set your committer info first"
-msgstr "Сначала вам нужно указать вашу информацию коммитера"
-
-#: git-rebase--interactive.sh:1153
+#: git-rebase--interactive.sh:1159
#, sh-format
msgid "Could not checkout $switch_to"
msgstr "Не удалось перейти на версию $switch_to"
-#: git-rebase--interactive.sh:1158
+#: git-rebase--interactive.sh:1164
msgid "No HEAD?"
msgstr "Нет указателя HEAD?"
-#: git-rebase--interactive.sh:1159
+#: git-rebase--interactive.sh:1165
#, sh-format
msgid "Could not create temporary $state_dir"
msgstr "Не удалось создать временный каталог $state_dir"
-#: git-rebase--interactive.sh:1161
+#: git-rebase--interactive.sh:1167
msgid "Could not mark as interactive"
msgstr "Не удалось пометить как интерактивный"
-#: git-rebase--interactive.sh:1171 git-rebase--interactive.sh:1176
+#: git-rebase--interactive.sh:1177 git-rebase--interactive.sh:1182
msgid "Could not init rewritten commits"
msgstr "Не удалось инициализировать перезаписанные коммиты"
-#: git-rebase--interactive.sh:1276
+#: git-rebase--interactive.sh:1282
#, sh-format
msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
msgstr[2] "Перемещение $shortrevisions над $shortonto ($todocount команд)"
msgstr[3] "Перемещение $shortrevisions над $shortonto ($todocount команд)"
-#: git-rebase--interactive.sh:1281
+#: git-rebase--interactive.sh:1287
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
"\n"
msgstr "\nНо если вы удалите все, то процесс перемещения будет будет прерван.\n\n"
-#: git-rebase--interactive.sh:1288
+#: git-rebase--interactive.sh:1294
msgid "Note that empty commits are commented out"
msgstr "Заметьте, что пустые коммиты закомментированны"
msgid "Cannot rewrite branches: You have unstaged changes."
msgstr "Не удалось выполнить перезапись веток: У вас есть непроиндексированные изменения."
+#: git-sh-setup.sh:226
+msgid "Cannot pull with rebase: You have unstaged changes."
+msgstr "Не удалось получить с перемещением: У вас есть непроиндексированные изменения."
+
#: git-sh-setup.sh:229
#, sh-format
msgid "Cannot $action: You have unstaged changes."
msgid "Cannot rebase: Your index contains uncommitted changes."
msgstr "Не удалось выполнить перемещение коммитов: В вашем индексе есть незакоммиченные изменения."
+#: git-sh-setup.sh:245
+msgid "Cannot pull with rebase: Your index contains uncommitted changes."
+msgstr "Не удалось получить с перемещением: В вашем индексе есть незакоммиченные изменения."
+
#: git-sh-setup.sh:248
#, sh-format
msgid "Cannot $action: Your index contains uncommitted changes."
msgstr "Не удалось выполнить $action: В вашем индексе есть незакоммиченные изменения."
+#: git-sh-setup.sh:252
+msgid "Additionally, your index contains uncommitted changes."
+msgstr "К тому же, в вашем индексе есть незакоммиченные изменения."
+
#: git-sh-setup.sh:372
msgid "You need to run this command from the toplevel of the working tree."
msgstr "Вам нужно запускать эту команду находясь на вершине рабочего каталога."
msgstr ""
"Project-Id-Version: git 2.11.0\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-11-22 22:10+0800\n"
-"PO-Revision-Date: 2016-11-22 22:16+0800\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-25 22:59+0800\n"
"Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
"Language-Team: Svenska <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
#: sequencer.c:251
#, c-format
-msgid "could not write eol to '%s"
+msgid "could not write eol to '%s'"
msgstr "kunde inte skriva radslut till \"%s\""
#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
msgstr ""
"Project-Id-Version: git v2.11.0\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-11-22 22:10+0800\n"
-"PO-Revision-Date: 2016-11-22 22:17+0800\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-25 23:00+0800\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"
#: sequencer.c:251
#, c-format
-msgid "could not write eol to '%s"
+msgid "could not write eol to '%s'"
msgstr "không thể ghi eol vào “%s”"
#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-11-22 22:10+0800\n"
-"PO-Revision-Date: 2016-11-22 22:15+0800\n"
+"POT-Creation-Date: 2016-11-25 22:50+0800\n"
+"PO-Revision-Date: 2016-11-25 22:54+0800\n"
"Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n"
"Language-Team: GitHub <https://github.com/jiangxin/git/>\n"
"Language: zh_CN\n"
#: sequencer.c:251
#, c-format
-msgid "could not write eol to '%s"
+msgid "could not write eol to '%s'"
msgstr "不能将换行符写入 '%s'"
#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216
#include "color.h"
#include "reflog-walk.h"
#include "gpg-interface.h"
+#include "trailer.h"
static char *user_format;
static struct cmt_fmt_map {
return msg;
}
+static void format_trailers(struct strbuf *sb, const char *msg)
+{
+ struct trailer_info info;
+
+ trailer_info_get(&info, msg);
+ strbuf_add(sb, info.trailer_start,
+ info.trailer_end - info.trailer_start);
+ trailer_info_release(&info);
+}
+
static void parse_commit_message(struct format_commit_context *c)
{
const char *msg = c->message + c->message_off;
strbuf_addstr(sb, msg + c->body_off);
return 1;
}
+
+ if (starts_with(placeholder, "(trailers)")) {
+ format_trailers(sb, msg + c->subject_off);
+ return strlen("(trailers)");
+ }
+
return 0; /* unknown placeholder */
}
static int ce_compare_data(const struct cache_entry *ce, struct stat *st)
{
int match = -1;
- static int cloexec = O_CLOEXEC;
- int fd = open(ce->name, O_RDONLY | cloexec);
-
- if ((cloexec & O_CLOEXEC) && fd < 0 && errno == EINVAL) {
- /* Try again w/o O_CLOEXEC: the kernel might not support it */
- cloexec &= ~O_CLOEXEC;
- fd = open(ce->name, O_RDONLY | cloexec);
- }
+ int fd = git_open_cloexec(ce->name, O_RDONLY);
if (fd >= 0) {
unsigned char sha1[20];
return index_name_stage_pos(istate, name, namelen, 0);
}
-/* Remove entry, return true if there are more entries to go.. */
int remove_index_entry_at(struct index_state *istate, int pos)
{
struct cache_entry *ce = istate->cache[pos];
return 0;
}
-int hold_locked_index(struct lock_file *lk, int die_on_error)
+int hold_locked_index(struct lock_file *lk, int lock_flags)
{
- return hold_lock_file_for_update(lk, get_index_file(),
- die_on_error
- ? LOCK_DIE_ON_ERROR
- : 0);
+ return hold_lock_file_for_update(lk, get_index_file(), lock_flags);
}
int read_index(struct index_state *istate)
return 1;
}
-void *read_blob_data_from_index(struct index_state *istate, const char *path, unsigned long *size)
+void *read_blob_data_from_index(const struct index_state *istate,
+ const char *path, unsigned long *size)
{
int pos, len;
unsigned long sz;
#include "utf8.h"
#include "git-compat-util.h"
#include "version.h"
+#include "trailer.h"
typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
enum { RR_NORMAL, RR_SHORTEN, RR_TRACK, RR_TRACKSHORT }
remote_ref;
struct {
- enum { C_BARE, C_BODY, C_BODY_DEP, C_LINES, C_SIG, C_SUB } option;
+ enum { C_BARE, C_BODY, C_BODY_DEP, C_LINES, C_SIG, C_SUB, C_TRAILERS } option;
unsigned int nlines;
} contents;
enum { O_FULL, O_SHORT } objectname;
atom->u.contents.option = C_SUB;
}
+static void trailers_atom_parser(struct used_atom *atom, const char *arg)
+{
+ if (arg)
+ die(_("%%(trailers) does not take arguments"));
+ atom->u.contents.option = C_TRAILERS;
+}
+
static void contents_atom_parser(struct used_atom *atom, const char *arg)
{
if (!arg)
atom->u.contents.option = C_SIG;
else if (!strcmp(arg, "subject"))
atom->u.contents.option = C_SUB;
+ else if (!strcmp(arg, "trailers"))
+ atom->u.contents.option = C_TRAILERS;
else if (skip_prefix(arg, "lines=", &arg)) {
atom->u.contents.option = C_LINES;
if (strtoul_ui(arg, 10, &atom->u.contents.nlines))
{ "creatordate", FIELD_TIME },
{ "subject", FIELD_STR, subject_atom_parser },
{ "body", FIELD_STR, body_atom_parser },
+ { "trailers", FIELD_STR, trailers_atom_parser },
{ "contents", FIELD_STR, contents_atom_parser },
{ "upstream", FIELD_STR, remote_ref_atom_parser },
{ "push", FIELD_STR, remote_ref_atom_parser },
name++;
if (strcmp(name, "subject") &&
strcmp(name, "body") &&
+ strcmp(name, "trailers") &&
!starts_with(name, "contents"))
continue;
if (!subpos)
/* Size is the length of the message after removing the signature */
append_lines(&s, subpos, contents_end - subpos, atom->u.contents.nlines);
v->s = strbuf_detach(&s, NULL);
+ } else if (atom->u.contents.option == C_TRAILERS) {
+ struct trailer_info info;
+
+ /* Search for trailer info */
+ trailer_info_get(&info, subpos);
+ v->s = xmemdupz(info.trailer_start,
+ info.trailer_end - info.trailer_start);
+ trailer_info_release(&info);
} else if (atom->u.contents.option == C_BARE)
v->s = xstrdup(subpos);
}
* matches a pattern "refs/heads/mas") or a wildcard (e.g. the same ref
* matches "refs/heads/mas*", too).
*/
-static int match_pattern(const char **patterns, const char *refname)
+static int match_pattern(const struct ref_filter *filter, const char *refname)
{
+ const char **patterns = filter->name_patterns;
+ unsigned flags = 0;
+
+ if (filter->ignore_case)
+ flags |= WM_CASEFOLD;
+
/*
* When no '--format' option is given we need to skip the prefix
* for matching refs of tags and branches.
skip_prefix(refname, "refs/", &refname));
for (; *patterns; patterns++) {
- if (!wildmatch(*patterns, refname, 0, NULL))
+ if (!wildmatch(*patterns, refname, flags, NULL))
return 1;
}
return 0;
* matches a pattern "refs/heads/" but not "refs/heads/m") or a
* wildcard (e.g. the same ref matches "refs/heads/m*", too).
*/
-static int match_name_as_path(const char **pattern, const char *refname)
+static int match_name_as_path(const struct ref_filter *filter, const char *refname)
{
+ const char **pattern = filter->name_patterns;
int namelen = strlen(refname);
+ unsigned flags = WM_PATHNAME;
+
+ if (filter->ignore_case)
+ flags |= WM_CASEFOLD;
+
for (; *pattern; pattern++) {
const char *p = *pattern;
int plen = strlen(p);
if (!*filter->name_patterns)
return 1; /* No pattern always matches */
if (filter->match_as_path)
- return match_name_as_path(filter->name_patterns, refname);
- return match_pattern(filter->name_patterns, refname);
+ return match_name_as_path(filter, refname);
+ return match_pattern(filter, refname);
}
/*
return ref;
}
-static int filter_ref_kind(struct ref_filter *filter, const char *refname)
+static int ref_kind_from_refname(const char *refname)
{
unsigned int i;
{ "refs/tags/", FILTER_REFS_TAGS}
};
- if (filter->kind == FILTER_REFS_BRANCHES ||
- filter->kind == FILTER_REFS_REMOTES ||
- filter->kind == FILTER_REFS_TAGS)
- return filter->kind;
- else if (!strcmp(refname, "HEAD"))
+ if (!strcmp(refname, "HEAD"))
return FILTER_REFS_DETACHED_HEAD;
for (i = 0; i < ARRAY_SIZE(ref_kind); i++) {
return FILTER_REFS_OTHERS;
}
+static int filter_ref_kind(struct ref_filter *filter, const char *refname)
+{
+ if (filter->kind == FILTER_REFS_BRANCHES ||
+ filter->kind == FILTER_REFS_REMOTES ||
+ filter->kind == FILTER_REFS_TAGS)
+ return filter->kind;
+ return ref_kind_from_refname(refname);
+}
+
/*
* A call-back given to for_each_ref(). Filter refs and keep them for
* later object processing.
struct atom_value *va, *vb;
int cmp;
cmp_type cmp_type = used_atom[s->atom].type;
+ int (*cmp_fn)(const char *, const char *);
get_ref_atom_value(a, s->atom, &va);
get_ref_atom_value(b, s->atom, &vb);
+ cmp_fn = s->ignore_case ? strcasecmp : strcmp;
if (s->version)
cmp = versioncmp(va->s, vb->s);
else if (cmp_type == FIELD_STR)
- cmp = strcmp(va->s, vb->s);
+ cmp = cmp_fn(va->s, vb->s);
else {
if (va->ul < vb->ul)
cmp = -1;
else if (va->ul == vb->ul)
- cmp = strcmp(a->refname, b->refname);
+ cmp = cmp_fn(a->refname, b->refname);
else
cmp = 1;
}
return (s->reverse) ? -cmp : cmp;
}
-static struct ref_sorting *ref_sorting;
-static int compare_refs(const void *a_, const void *b_)
+static int compare_refs(const void *a_, const void *b_, void *ref_sorting)
{
struct ref_array_item *a = *((struct ref_array_item **)a_);
struct ref_array_item *b = *((struct ref_array_item **)b_);
void ref_array_sort(struct ref_sorting *sorting, struct ref_array *array)
{
- ref_sorting = sorting;
- QSORT(array->items, array->nr, compare_refs);
+ QSORT_S(array->items, array->nr, compare_refs, sorting);
}
static void append_literal(const char *cp, const char *ep, struct ref_formatting_state *state)
putchar('\n');
}
+void pretty_print_ref(const char *name, const unsigned char *sha1,
+ const char *format)
+{
+ struct ref_array_item *ref_item;
+ ref_item = new_ref_array_item(name, sha1, 0);
+ ref_item->kind = ref_kind_from_refname(name);
+ show_ref_array_item(ref_item, format, 0);
+ free_array_item(ref_item);
+}
+
/* If no sorting option is given, use refname to sort as default */
struct ref_sorting *ref_default_sorting(void)
{
struct ref_sorting *next;
int atom; /* index into used_atom array (internal) */
unsigned reverse : 1,
+ ignore_case : 1,
version : 1;
};
unsigned int with_commit_tag_algo : 1,
match_as_path : 1,
+ ignore_case : 1,
detached : 1;
unsigned int kind,
lines;
/* Function to parse --merged and --no-merged options */
int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset);
+/*
+ * Print a single ref, outside of any ref-filter. Note that the
+ * name must be a fully qualified refname.
+ */
+void pretty_print_ref(const char *name, const unsigned char *sha1,
+ const char *format);
+
#endif /* REF_FILTER_H */
int should_autocreate_reflog(const char *refname)
{
- if (!log_all_ref_updates)
+ switch (log_all_ref_updates) {
+ case LOG_REFS_ALWAYS:
+ return 1;
+ case LOG_REFS_NORMAL:
+ return starts_with(refname, "refs/heads/") ||
+ starts_with(refname, "refs/remotes/") ||
+ starts_with(refname, "refs/notes/") ||
+ !strcmp(refname, "HEAD");
+ default:
return 0;
- return starts_with(refname, "refs/heads/") ||
- starts_with(refname, "refs/remotes/") ||
- starts_with(refname, "refs/notes/") ||
- !strcmp(refname, "HEAD");
+ }
}
int is_branch(const char *refname)
int ref_exists(const char *refname);
+int should_autocreate_reflog(const char *refname);
+
int is_branch(const char *refname);
extern int refs_init_db(struct strbuf *err);
if (peel_entry(entry, 0))
return -1;
- hashcpy(peeled->hash, entry->u.value.peeled.hash);
+ oidcpy(peeled, &entry->u.value.peeled);
return 0;
}
}
flag = log_all_ref_updates;
- log_all_ref_updates = 0;
+ log_all_ref_updates = LOG_REFS_NONE;
if (write_ref_to_lockfile(lock, orig_sha1, &err) ||
commit_ref_update(refs, lock, orig_sha1, NULL, &err)) {
error("unable to write current sha1 into %s: %s", oldrefname, err.buf);
{
int logfd, result, oflags = O_APPEND | O_WRONLY;
- if (log_all_ref_updates < 0)
- log_all_ref_updates = !is_bare_repository();
+ if (log_all_ref_updates == LOG_REFS_UNSET)
+ log_all_ref_updates = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL;
result = log_ref_setup(refname, logfile, err, flags & REF_FORCE_CREATE_REFLOG);
*/
int copy_reflog_msg(char *buf, const char *msg);
-int should_autocreate_reflog(const char *refname);
-
/**
* Information needed for a single ref update. Set new_sha1 to the new
* value or to null_sha1 to delete the ref. To check the old value
struct strbuf effective_url = STRBUF_INIT;
struct discovery *last = last_discovery;
int http_ret, maybe_smart = 0;
- struct http_get_options options;
+ struct http_get_options http_options;
if (last && !strcmp(service, last->service))
return last;
strbuf_addf(&refs_url, "service=%s", service);
}
- memset(&options, 0, sizeof(options));
- options.content_type = &type;
- options.charset = &charset;
- options.effective_url = &effective_url;
- options.base_url = &url;
- options.no_cache = 1;
- options.keep_error = 1;
+ memset(&http_options, 0, sizeof(http_options));
+ http_options.content_type = &type;
+ http_options.charset = &charset;
+ http_options.effective_url = &effective_url;
+ http_options.base_url = &url;
+ http_options.initial_request = 1;
+ http_options.no_cache = 1;
+ http_options.keep_error = 1;
- http_ret = http_get_strbuf(refs_url.buf, &buffer, &options);
+ http_ret = http_get_strbuf(refs_url.buf, &buffer, &http_options);
switch (http_ret) {
case HTTP_OK:
break;
die("unable to access '%s': %s", url.buf, curl_errorstr);
}
+ if (options.verbosity && !starts_with(refs_url.buf, url.buf))
+ warning(_("redirecting to %s"), url.buf);
+
last= xcalloc(1, sizeof(*last_discovery));
last->service = service;
last->buf_alloc = strbuf_detach(&buffer, &last->len);
size_t pos;
int in;
int out;
+ int any_written;
struct strbuf result;
unsigned gzip_request : 1;
unsigned initial_buffer : 1;
{
size_t size = eltsize * nmemb;
struct rpc_state *rpc = buffer_;
+ if (size)
+ rpc->any_written = 1;
write_or_die(rpc->in, ptr, size);
return size;
}
curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, rpc_in);
curl_easy_setopt(slot->curl, CURLOPT_FILE, rpc);
+
+ rpc->any_written = 0;
err = run_slot(slot, NULL);
if (err == HTTP_REAUTH && !large_request) {
credential_fill(&http_auth);
if (err != HTTP_OK)
err = -1;
+ if (!rpc->any_written)
+ err = -1;
+
curl_slist_free_all(headers);
free(gzip_body);
return err;
if (!f)
return;
+ remote->configured_in_repo = 1;
remote->origin = REMOTE_REMOTES;
while (strbuf_getline(&buf, f) != EOF) {
const char *v;
return;
}
+ remote->configured_in_repo = 1;
remote->origin = REMOTE_BRANCHES;
/*
}
remote = make_remote(name, namelen);
remote->origin = REMOTE_CONFIG;
+ if (current_config_scope() == CONFIG_SCOPE_REPO)
+ remote->configured_in_repo = 1;
if (!strcmp(subkey, "mirror"))
remote->mirror = git_config_bool(key, value);
else if (!strcmp(subkey, "skipdefaultupdate"))
return remote_get_1(name, pushremote_for_branch);
}
-int remote_is_configured(struct remote *remote)
+int remote_is_configured(struct remote *remote, int in_repo)
{
- return remote && remote->origin;
+ if (!remote)
+ return 0;
+ if (in_repo)
+ return remote->configured_in_repo;
+ return !!remote->origin;
}
int for_each_remote(each_remote_fn fn, void *priv)
{
struct remote *remote;
- if (!branch)
- return error_buf(err, _("HEAD does not point to a branch"));
-
remote = remote_get(pushremote_for_branch(branch, NULL));
if (!remote)
return error_buf(err,
const char *branch_get_push(struct branch *branch, struct strbuf *err)
{
+ if (!branch)
+ return error_buf(err, _("HEAD does not point to a branch"));
+
if (!branch->push_tracking_ref)
branch->push_tracking_ref = branch_get_push_1(branch, err);
return branch->push_tracking_ref;
struct hashmap_entry ent; /* must be first */
const char *name;
- int origin;
+ int origin, configured_in_repo;
const char *foreign_vcs;
struct remote *remote_get(const char *name);
struct remote *pushremote_get(const char *name);
-int remote_is_configured(struct remote *remote);
+int remote_is_configured(struct remote *remote, int in_repo);
typedef int each_remote_fn(struct remote *remote, void *priv);
int for_each_remote(each_remote_fn fn, void *priv);
{
int i;
- hold_locked_index(&index_lock, 1);
+ hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
for (i = 0; i < update->nr; i++) {
struct string_list_item *item = &update->items[i];
static void cleanup_children(int sig, int in_signal)
{
+ struct child_to_clean *children_to_wait_for = NULL;
+
while (children_to_clean) {
struct child_to_clean *p = children_to_clean;
children_to_clean = p->next;
}
kill(p->pid, sig);
+
+ if (p->process->wait_after_clean) {
+ p->next = children_to_wait_for;
+ children_to_wait_for = p;
+ } else {
+ if (!in_signal)
+ free(p);
+ }
+ }
+
+ while (children_to_wait_for) {
+ struct child_to_clean *p = children_to_wait_for;
+ children_to_wait_for = p->next;
+
+ while (waitpid(p->pid, NULL, 0) < 0 && errno == EINTR)
+ ; /* spin waiting for process exit or error */
+
if (!in_signal)
free(p);
}
strbuf_reset(&path);
strbuf_git_path(&path, "hooks/%s", name);
- if (access(path.buf, X_OK) < 0)
+ if (access(path.buf, X_OK) < 0) {
+#ifdef STRIP_EXTENSION
+ strbuf_addstr(&path, STRIP_EXTENSION);
+ if (access(path.buf, X_OK) >= 0)
+ return path.buf;
+#endif
return NULL;
+ }
return path.buf;
}
unsigned stdout_to_stderr:1;
unsigned use_shell:1;
unsigned clean_on_exit:1;
+ unsigned wait_after_clean:1;
void (*clean_on_exit_handler)(struct child_process *process);
void *clean_on_exit_handler_cbdata;
};
#include "refs.h"
#include "argv-array.h"
#include "quote.h"
+#include "trailer.h"
+#include "log-tree.h"
+#include "wt-status.h"
#define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
static GIT_PATH_FUNC(git_path_head_file, "sequencer/head")
+static GIT_PATH_FUNC(git_path_abort_safety_file, "sequencer/abort-safety")
+static GIT_PATH_FUNC(rebase_path, "rebase-merge")
+/*
+ * The file containing rebase commands, comments, and empty lines.
+ * This file is created by "git rebase -i" then edited by the user. As
+ * the lines are processed, they are removed from the front of this
+ * file and written to the tail of 'done'.
+ */
+static GIT_PATH_FUNC(rebase_path_todo, "rebase-merge/git-rebase-todo")
+/*
+ * The rebase command lines that have already been processed. A line
+ * is moved here when it is first handled, before any associated user
+ * actions.
+ */
+static GIT_PATH_FUNC(rebase_path_done, "rebase-merge/done")
+/*
+ * The file to keep track of how many commands were already processed (e.g.
+ * for the prompt).
+ */
+static GIT_PATH_FUNC(rebase_path_msgnum, "rebase-merge/msgnum");
+/*
+ * The file to keep track of how many commands are to be processed in total
+ * (e.g. for the prompt).
+ */
+static GIT_PATH_FUNC(rebase_path_msgtotal, "rebase-merge/end");
+/*
+ * The commit message that is planned to be used for any changes that
+ * need to be committed following a user interaction.
+ */
+static GIT_PATH_FUNC(rebase_path_message, "rebase-merge/message")
+/*
+ * The file into which is accumulated the suggested commit message for
+ * squash/fixup commands. When the first of a series of squash/fixups
+ * is seen, the file is created and the commit message from the
+ * previous commit and from the first squash/fixup commit are written
+ * to it. The commit message for each subsequent squash/fixup commit
+ * is appended to the file as it is processed.
+ *
+ * The first line of the file is of the form
+ * # This is a combination of $count commits.
+ * where $count is the number of commits whose messages have been
+ * written to the file so far (including the initial "pick" commit).
+ * Each time that a commit message is processed, this line is read and
+ * updated. It is deleted just before the combined commit is made.
+ */
+static GIT_PATH_FUNC(rebase_path_squash_msg, "rebase-merge/message-squash")
+/*
+ * If the current series of squash/fixups has not yet included a squash
+ * command, then this file exists and holds the commit message of the
+ * original "pick" commit. (If the series ends without a "squash"
+ * command, then this can be used as the commit message of the combined
+ * commit without opening the editor.)
+ */
+static GIT_PATH_FUNC(rebase_path_fixup_msg, "rebase-merge/message-fixup")
/*
* A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
* GIT_AUTHOR_DATE that will be used for the commit that is currently
* being rebased.
*/
static GIT_PATH_FUNC(rebase_path_author_script, "rebase-merge/author-script")
+/*
+ * When an "edit" rebase command is being processed, the SHA1 of the
+ * commit to be edited is recorded in this file. When "git rebase
+ * --continue" is executed, if there are any staged changes then they
+ * will be amended to the HEAD commit, but only provided the HEAD
+ * commit is still the commit to be edited. When any other rebase
+ * command is processed, this file is deleted.
+ */
+static GIT_PATH_FUNC(rebase_path_amend, "rebase-merge/amend")
+/*
+ * When we stop at a given patch via the "edit" command, this file contains
+ * the abbreviated commit name of the corresponding patch.
+ */
+static GIT_PATH_FUNC(rebase_path_stopped_sha, "rebase-merge/stopped-sha")
+/*
+ * For the post-rewrite hook, we make a list of rewritten commits and
+ * their new sha1s. The rewritten-pending list keeps the sha1s of
+ * commits that have been processed, but not committed yet,
+ * e.g. because they are waiting for a 'squash' command.
+ */
+static GIT_PATH_FUNC(rebase_path_rewritten_list, "rebase-merge/rewritten-list")
+static GIT_PATH_FUNC(rebase_path_rewritten_pending,
+ "rebase-merge/rewritten-pending")
/*
* The following files are written by git-rebase just after parsing the
* command-line (and are only consumed, not modified, by the sequencer).
*/
static GIT_PATH_FUNC(rebase_path_gpg_sign_opt, "rebase-merge/gpg_sign_opt")
+static GIT_PATH_FUNC(rebase_path_orig_head, "rebase-merge/orig-head")
+static GIT_PATH_FUNC(rebase_path_verbose, "rebase-merge/verbose")
+static GIT_PATH_FUNC(rebase_path_head_name, "rebase-merge/head-name")
+static GIT_PATH_FUNC(rebase_path_onto, "rebase-merge/onto")
+static GIT_PATH_FUNC(rebase_path_autostash, "rebase-merge/autostash")
+static GIT_PATH_FUNC(rebase_path_strategy, "rebase-merge/strategy")
+static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
-/* We will introduce the 'interactive rebase' mode later */
static inline int is_rebase_i(const struct replay_opts *opts)
{
- return 0;
+ return opts->action == REPLAY_INTERACTIVE_REBASE;
}
static const char *get_dir(const struct replay_opts *opts)
{
+ if (is_rebase_i(opts))
+ return rebase_path();
return git_path_seq_dir();
}
static const char *get_todo_path(const struct replay_opts *opts)
{
+ if (is_rebase_i(opts))
+ return rebase_path_todo();
return git_path_todo_file();
}
-static int is_rfc2822_line(const char *buf, int len)
-{
- int i;
-
- for (i = 0; i < len; i++) {
- int ch = buf[i];
- if (ch == ':')
- return 1;
- if (!isalnum(ch) && ch != '-')
- break;
- }
-
- return 0;
-}
-
-static int is_cherry_picked_from_line(const char *buf, int len)
-{
- /*
- * We only care that it looks roughly like (cherry picked from ...)
- */
- return len > strlen(cherry_picked_prefix) + 1 &&
- starts_with(buf, cherry_picked_prefix) && buf[len - 1] == ')';
-}
-
/*
* Returns 0 for non-conforming footer
* Returns 1 for conforming footer
static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
int ignore_footer)
{
- char prev;
- int i, k;
- int len = sb->len - ignore_footer;
- const char *buf = sb->buf;
- int found_sob = 0;
-
- /* footer must end with newline */
- if (!len || buf[len - 1] != '\n')
- return 0;
+ struct trailer_info info;
+ int i;
+ int found_sob = 0, found_sob_last = 0;
- prev = '\0';
- for (i = len - 1; i > 0; i--) {
- char ch = buf[i];
- if (prev == '\n' && ch == '\n') /* paragraph break */
- break;
- prev = ch;
- }
+ trailer_info_get(&info, sb->buf);
- /* require at least one blank line */
- if (prev != '\n' || buf[i] != '\n')
+ if (info.trailer_start == info.trailer_end)
return 0;
- /* advance to start of last paragraph */
- while (i < len - 1 && buf[i] == '\n')
- i++;
-
- for (; i < len; i = k) {
- int found_rfc2822;
-
- for (k = i; k < len && buf[k] != '\n'; k++)
- ; /* do nothing */
- k++;
+ for (i = 0; i < info.trailer_nr; i++)
+ if (sob && !strncmp(info.trailers[i], sob->buf, sob->len)) {
+ found_sob = 1;
+ if (i == info.trailer_nr - 1)
+ found_sob_last = 1;
+ }
- found_rfc2822 = is_rfc2822_line(buf + i, k - i - 1);
- if (found_rfc2822 && sob &&
- !strncmp(buf + i, sob->buf, sob->len))
- found_sob = k;
+ trailer_info_release(&info);
- if (!(found_rfc2822 ||
- is_cherry_picked_from_line(buf + i, k - i - 1)))
- return 0;
- }
- if (found_sob == i)
+ if (found_sob_last)
return 3;
if (found_sob)
return 2;
static const char *action_name(const struct replay_opts *opts)
{
- return opts->action == REPLAY_REVERT ? N_("revert") : N_("cherry-pick");
+ switch (opts->action) {
+ case REPLAY_REVERT:
+ return N_("revert");
+ case REPLAY_PICK:
+ return N_("cherry-pick");
+ case REPLAY_INTERACTIVE_REBASE:
+ return N_("rebase -i");
+ }
+ die(_("Unknown action: %d"), opts->action);
}
struct commit_message {
return -1;
}
+static void update_abort_safety_file(void)
+{
+ struct object_id head;
+
+ /* Do nothing on a single-pick */
+ if (!file_exists(git_path_seq_dir()))
+ return;
+
+ if (!get_oid("HEAD", &head))
+ write_file(git_path_abort_safety_file(), "%s", oid_to_hex(&head));
+ else
+ write_file(git_path_abort_safety_file(), "%s", "");
+}
+
static int fast_forward_to(const unsigned char *to, const unsigned char *from,
int unborn, struct replay_opts *opts)
{
strbuf_release(&sb);
strbuf_release(&err);
ref_transaction_free(transaction);
+ update_abort_safety_file();
return 0;
}
char **xopt;
static struct lock_file index_lock;
- hold_locked_index(&index_lock, 1);
+ hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
read_cache();
o.ancestor = base ? base_label : "(empty tree)";
o.branch1 = "HEAD";
o.branch2 = next ? next_label : "(empty tree)";
+ if (is_rebase_i(opts))
+ o.buffer_output = 2;
head_tree = parse_tree_indirect(head);
next_tree = next ? next->tree : empty_tree();
clean = merge_trees(&o,
head_tree,
next_tree, base_tree, &result);
+ if (is_rebase_i(opts) && clean <= 0)
+ fputs(o.obuf.buf, stdout);
strbuf_release(&o.obuf);
if (clean < 0)
return clean;
if (active_cache_changed &&
write_locked_index(&the_index, &index_lock, COMMIT_LOCK))
- /* TRANSLATORS: %s will be "revert" or "cherry-pick" */
+ /* TRANSLATORS: %s will be "revert", "cherry-pick" or
+ * "rebase -i".
+ */
return error(_("%s: Unable to write new index file"),
_(action_name(opts)));
rollback_lock_file(&index_lock);
return !hashcmp(active_cache_tree->sha1, head_commit->tree->object.oid.hash);
}
+static int write_author_script(const char *message)
+{
+ struct strbuf buf = STRBUF_INIT;
+ const char *eol;
+ int res;
+
+ for (;;)
+ if (!*message || starts_with(message, "\n")) {
+missing_author:
+ /* Missing 'author' line? */
+ unlink(rebase_path_author_script());
+ return 0;
+ } else if (skip_prefix(message, "author ", &message))
+ break;
+ else if ((eol = strchr(message, '\n')))
+ message = eol + 1;
+ else
+ goto missing_author;
+
+ strbuf_addstr(&buf, "GIT_AUTHOR_NAME='");
+ while (*message && *message != '\n' && *message != '\r')
+ if (skip_prefix(message, " <", &message))
+ break;
+ else if (*message != '\'')
+ strbuf_addch(&buf, *(message++));
+ else
+ strbuf_addf(&buf, "'\\\\%c'", *(message++));
+ strbuf_addstr(&buf, "'\nGIT_AUTHOR_EMAIL='");
+ while (*message && *message != '\n' && *message != '\r')
+ if (skip_prefix(message, "> ", &message))
+ break;
+ else if (*message != '\'')
+ strbuf_addch(&buf, *(message++));
+ else
+ strbuf_addf(&buf, "'\\\\%c'", *(message++));
+ strbuf_addstr(&buf, "'\nGIT_AUTHOR_DATE='@");
+ while (*message && *message != '\n' && *message != '\r')
+ if (*message != '\'')
+ strbuf_addch(&buf, *(message++));
+ else
+ strbuf_addf(&buf, "'\\\\%c'", *(message++));
+ res = write_message(buf.buf, buf.len, rebase_path_author_script(), 1);
+ strbuf_release(&buf);
+ return res;
+}
+
/*
- * Read the author-script file into an environment block, ready for use in
- * run_command(), that can be free()d afterwards.
+ * Read a list of environment variable assignments (such as the author-script
+ * file) into an environment block. Returns -1 on error, 0 otherwise.
*/
-static char **read_author_script(void)
+static int read_env_script(struct argv_array *env)
{
struct strbuf script = STRBUF_INIT;
int i, count = 0;
- char *p, *p2, **env;
- size_t env_size;
+ char *p, *p2;
if (strbuf_read_file(&script, rebase_path_author_script(), 256) <= 0)
- return NULL;
+ return -1;
for (p = script.buf; *p; p++)
if (skip_prefix(p, "'\\\\''", (const char **)&p2))
count++;
}
- env_size = (count + 1) * sizeof(*env);
- strbuf_grow(&script, env_size);
- memmove(script.buf + env_size, script.buf, script.len);
- p = script.buf + env_size;
- env = (char **)strbuf_detach(&script, NULL);
-
- for (i = 0; i < count; i++) {
- env[i] = p;
+ for (i = 0, p = script.buf; i < count; i++) {
+ argv_array_push(env, p);
p += strlen(p) + 1;
}
- env[count] = NULL;
- return env;
+ return 0;
}
static const char staged_changes_advice[] =
int allow_empty, int edit, int amend,
int cleanup_commit_message)
{
- char **env = NULL;
- struct argv_array array;
- int rc;
+ struct child_process cmd = CHILD_PROCESS_INIT;
const char *value;
+ cmd.git_cmd = 1;
+
if (is_rebase_i(opts)) {
- env = read_author_script();
- if (!env) {
+ if (!edit) {
+ cmd.stdout_to_stderr = 1;
+ cmd.err = -1;
+ }
+
+ if (read_env_script(&cmd.env_array)) {
const char *gpg_opt = gpg_sign_opt_quoted(opts);
return error(_(staged_changes_advice),
}
}
- argv_array_init(&array);
- argv_array_push(&array, "commit");
- argv_array_push(&array, "-n");
+ argv_array_push(&cmd.args, "commit");
+ argv_array_push(&cmd.args, "-n");
if (amend)
- argv_array_push(&array, "--amend");
+ argv_array_push(&cmd.args, "--amend");
if (opts->gpg_sign)
- argv_array_pushf(&array, "-S%s", opts->gpg_sign);
+ argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
if (opts->signoff)
- argv_array_push(&array, "-s");
+ argv_array_push(&cmd.args, "-s");
if (defmsg)
- argv_array_pushl(&array, "-F", defmsg, NULL);
+ argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
if (cleanup_commit_message)
- argv_array_push(&array, "--cleanup=strip");
+ argv_array_push(&cmd.args, "--cleanup=strip");
if (edit)
- argv_array_push(&array, "-e");
+ argv_array_push(&cmd.args, "-e");
else if (!cleanup_commit_message &&
!opts->signoff && !opts->record_origin &&
git_config_get_value("commit.cleanup", &value))
- argv_array_push(&array, "--cleanup=verbatim");
+ argv_array_push(&cmd.args, "--cleanup=verbatim");
if (allow_empty)
- argv_array_push(&array, "--allow-empty");
+ argv_array_push(&cmd.args, "--allow-empty");
if (opts->allow_empty_message)
- argv_array_push(&array, "--allow-empty-message");
+ argv_array_push(&cmd.args, "--allow-empty-message");
- rc = run_command_v_opt_cd_env(array.argv, RUN_GIT_CMD, NULL,
- (const char *const *)env);
- argv_array_clear(&array);
- free(env);
+ if (cmd.err == -1) {
+ /* hide stderr on success */
+ struct strbuf buf = STRBUF_INIT;
+ int rc = pipe_command(&cmd,
+ NULL, 0,
+ /* stdout is already redirected */
+ NULL, 0,
+ &buf, 0);
+ if (rc)
+ fputs(buf.buf, stderr);
+ strbuf_release(&buf);
+ return rc;
+ }
- return rc;
+ return run_command(&cmd);
}
static int is_original_commit_empty(struct commit *commit)
return 1;
}
+/*
+ * Note that ordering matters in this enum. Not only must it match the mapping
+ * below, it is also divided into several sections that matter. When adding
+ * new commands, make sure you add it in the right section.
+ */
enum todo_command {
+ /* commands that handle commits */
TODO_PICK = 0,
- TODO_REVERT
+ TODO_REVERT,
+ TODO_EDIT,
+ TODO_REWORD,
+ TODO_FIXUP,
+ TODO_SQUASH,
+ /* commands that do something else than handling a single commit */
+ TODO_EXEC,
+ /* commands that do nothing but are counted for reporting progress */
+ TODO_NOOP,
+ TODO_DROP,
+ /* comments (not counted for reporting progress) */
+ TODO_COMMENT
};
-static const char *todo_command_strings[] = {
- "pick",
- "revert"
+static struct {
+ char c;
+ const char *str;
+} todo_command_info[] = {
+ { 'p', "pick" },
+ { 0, "revert" },
+ { 'e', "edit" },
+ { 'r', "reword" },
+ { 'f', "fixup" },
+ { 's', "squash" },
+ { 'x', "exec" },
+ { 0, "noop" },
+ { 'd', "drop" },
+ { 0, NULL }
};
static const char *command_to_string(const enum todo_command command)
{
- if ((size_t)command < ARRAY_SIZE(todo_command_strings))
- return todo_command_strings[command];
+ if (command < TODO_COMMENT)
+ return todo_command_info[command].str;
die("Unknown command: %d", command);
}
+static int is_noop(const enum todo_command command)
+{
+ return TODO_NOOP <= command;
+}
+
+static int is_fixup(enum todo_command command)
+{
+ return command == TODO_FIXUP || command == TODO_SQUASH;
+}
+
+static int update_squash_messages(enum todo_command command,
+ struct commit *commit, struct replay_opts *opts)
+{
+ struct strbuf buf = STRBUF_INIT;
+ int count, res;
+ const char *message, *body;
+
+ if (file_exists(rebase_path_squash_msg())) {
+ struct strbuf header = STRBUF_INIT;
+ char *eol, *p;
+
+ if (strbuf_read_file(&buf, rebase_path_squash_msg(), 2048) <= 0)
+ return error(_("could not read '%s'"),
+ rebase_path_squash_msg());
+
+ p = buf.buf + 1;
+ eol = strchrnul(buf.buf, '\n');
+ if (buf.buf[0] != comment_line_char ||
+ (p += strcspn(p, "0123456789\n")) == eol)
+ return error(_("unexpected 1st line of squash message:"
+ "\n\n\t%.*s"),
+ (int)(eol - buf.buf), buf.buf);
+ count = strtol(p, NULL, 10);
+
+ if (count < 1)
+ return error(_("invalid 1st line of squash message:\n"
+ "\n\t%.*s"),
+ (int)(eol - buf.buf), buf.buf);
+
+ strbuf_addf(&header, "%c ", comment_line_char);
+ strbuf_addf(&header,
+ _("This is a combination of %d commits."), ++count);
+ strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
+ strbuf_release(&header);
+ } else {
+ unsigned char head[20];
+ struct commit *head_commit;
+ const char *head_message, *body;
+
+ if (get_sha1("HEAD", head))
+ return error(_("need a HEAD to fixup"));
+ if (!(head_commit = lookup_commit_reference(head)))
+ return error(_("could not read HEAD"));
+ if (!(head_message = get_commit_buffer(head_commit, NULL)))
+ return error(_("could not read HEAD's commit message"));
+
+ find_commit_subject(head_message, &body);
+ if (write_message(body, strlen(body),
+ rebase_path_fixup_msg(), 0)) {
+ unuse_commit_buffer(head_commit, head_message);
+ return error(_("cannot write '%s'"),
+ rebase_path_fixup_msg());
+ }
+
+ count = 2;
+ strbuf_addf(&buf, "%c ", comment_line_char);
+ strbuf_addf(&buf, _("This is a combination of %d commits."),
+ count);
+ strbuf_addf(&buf, "\n%c ", comment_line_char);
+ strbuf_addstr(&buf, _("This is the 1st commit message:"));
+ strbuf_addstr(&buf, "\n\n");
+ strbuf_addstr(&buf, body);
+
+ unuse_commit_buffer(head_commit, head_message);
+ }
+
+ if (!(message = get_commit_buffer(commit, NULL)))
+ return error(_("could not read commit message of %s"),
+ oid_to_hex(&commit->object.oid));
+ find_commit_subject(message, &body);
+
+ if (command == TODO_SQUASH) {
+ unlink(rebase_path_fixup_msg());
+ strbuf_addf(&buf, "\n%c ", comment_line_char);
+ strbuf_addf(&buf, _("This is the commit message #%d:"), count);
+ strbuf_addstr(&buf, "\n\n");
+ strbuf_addstr(&buf, body);
+ } else if (command == TODO_FIXUP) {
+ strbuf_addf(&buf, "\n%c ", comment_line_char);
+ strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
+ count);
+ strbuf_addstr(&buf, "\n\n");
+ strbuf_add_commented_lines(&buf, body, strlen(body));
+ } else
+ return error(_("unknown command: %d"), command);
+ unuse_commit_buffer(commit, message);
+
+ res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
+ strbuf_release(&buf);
+ return res;
+}
+
+static void flush_rewritten_pending(void) {
+ struct strbuf buf = STRBUF_INIT;
+ unsigned char newsha1[20];
+ FILE *out;
+
+ if (strbuf_read_file(&buf, rebase_path_rewritten_pending(), 82) > 0 &&
+ !get_sha1("HEAD", newsha1) &&
+ (out = fopen(rebase_path_rewritten_list(), "a"))) {
+ char *bol = buf.buf, *eol;
+
+ while (*bol) {
+ eol = strchrnul(bol, '\n');
+ fprintf(out, "%.*s %s\n", (int)(eol - bol),
+ bol, sha1_to_hex(newsha1));
+ if (!*eol)
+ break;
+ bol = eol + 1;
+ }
+ fclose(out);
+ unlink(rebase_path_rewritten_pending());
+ }
+ strbuf_release(&buf);
+}
+
+static void record_in_rewritten(struct object_id *oid,
+ enum todo_command next_command) {
+ FILE *out = fopen(rebase_path_rewritten_pending(), "a");
+
+ if (!out)
+ return;
+
+ fprintf(out, "%s\n", oid_to_hex(oid));
+ fclose(out);
+
+ if (!is_fixup(next_command))
+ flush_rewritten_pending();
+}
static int do_pick_commit(enum todo_command command, struct commit *commit,
- struct replay_opts *opts)
+ struct replay_opts *opts, int final_fixup)
{
+ int edit = opts->edit, cleanup_commit_message = 0;
+ const char *msg_file = edit ? NULL : git_path_merge_msg();
unsigned char head[20];
struct commit *base, *next, *parent;
const char *base_label, *next_label;
struct commit_message msg = { NULL, NULL, NULL, NULL };
struct strbuf msgbuf = STRBUF_INIT;
- int res, unborn = 0, allow;
+ int res, unborn = 0, amend = 0, allow = 0;
if (opts->no_commit) {
/*
}
discard_cache();
- if (!commit->parents) {
+ if (!commit->parents)
parent = NULL;
- }
else if (commit->parents->next) {
/* Reverting or cherry-picking a merge commit */
int cnt;
else
parent = commit->parents->item;
- if (opts->allow_ff &&
- ((parent && !hashcmp(parent->object.oid.hash, head)) ||
- (!parent && unborn)))
- return fast_forward_to(commit->object.oid.hash, head, unborn, opts);
+ if (get_message(commit, &msg) != 0)
+ return error(_("cannot get commit message for %s"),
+ oid_to_hex(&commit->object.oid));
+ if (opts->allow_ff && !is_fixup(command) &&
+ ((parent && !hashcmp(parent->object.oid.hash, head)) ||
+ (!parent && unborn))) {
+ if (is_rebase_i(opts))
+ write_author_script(msg.message);
+ res = fast_forward_to(commit->object.oid.hash, head, unborn,
+ opts);
+ if (res || command != TODO_REWORD)
+ goto leave;
+ edit = amend = 1;
+ msg_file = NULL;
+ goto fast_forward_edit;
+ }
if (parent && parse_commit(parent) < 0)
/* TRANSLATORS: The first %s will be a "todo" command like
"revert" or "pick", the second %s a SHA1. */
command_to_string(command),
oid_to_hex(&parent->object.oid));
- if (get_message(commit, &msg) != 0)
- return error(_("cannot get commit message for %s"),
- oid_to_hex(&commit->object.oid));
-
/*
* "commit" is an existing commit. We would want to apply
* the difference it introduces since its first parent "prev"
next = commit;
next_label = msg.label;
- /*
- * Append the commit log message to msgbuf; it starts
- * after the tree, parent, author, committer
- * information followed by "\n\n".
- */
- p = strstr(msg.message, "\n\n");
- if (p)
- strbuf_addstr(&msgbuf, skip_blank_lines(p + 2));
+ /* Append the commit log message to msgbuf. */
+ if (find_commit_subject(msg.message, &p))
+ strbuf_addstr(&msgbuf, p);
if (opts->record_origin) {
if (!has_conforming_footer(&msgbuf, NULL, 0))
}
}
- if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
+ if (command == TODO_REWORD)
+ edit = 1;
+ else if (is_fixup(command)) {
+ if (update_squash_messages(command, commit, opts))
+ return -1;
+ amend = 1;
+ if (!final_fixup)
+ msg_file = rebase_path_squash_msg();
+ else if (file_exists(rebase_path_fixup_msg())) {
+ cleanup_commit_message = 1;
+ msg_file = rebase_path_fixup_msg();
+ } else {
+ const char *dest = git_path("SQUASH_MSG");
+ unlink(dest);
+ if (copy_file(dest, rebase_path_squash_msg(), 0666))
+ return error(_("could not rename '%s' to '%s'"),
+ rebase_path_squash_msg(), dest);
+ unlink(git_path("MERGE_MSG"));
+ msg_file = dest;
+ edit = 1;
+ }
+ }
+
+ if (is_rebase_i(opts) && write_author_script(msg.message) < 0)
+ res = -1;
+ else if (!opts->strategy || !strcmp(opts->strategy, "recursive") || command == TODO_REVERT) {
res = do_recursive_merge(base, next, base_label, next_label,
head, &msgbuf, opts);
if (res < 0)
goto leave;
}
if (!opts->no_commit)
- res = run_git_commit(opts->edit ? NULL : git_path_merge_msg(),
- opts, allow, opts->edit, 0, 0);
+fast_forward_edit:
+ res = run_git_commit(msg_file, opts, allow, edit, amend,
+ cleanup_commit_message);
+
+ if (!res && final_fixup) {
+ unlink(rebase_path_fixup_msg());
+ unlink(rebase_path_squash_msg());
+ }
leave:
free_message(commit, &msg);
+ update_abort_safety_file();
return res;
}
struct strbuf buf;
struct todo_item *items;
int nr, alloc, current;
+ int done_nr, total_nr;
};
#define TODO_LIST_INIT { STRBUF_INIT }
/* left-trim */
bol += strspn(bol, " \t");
- for (i = 0; i < ARRAY_SIZE(todo_command_strings); i++)
- if (skip_prefix(bol, todo_command_strings[i], &bol)) {
+ if (bol == eol || *bol == '\r' || *bol == comment_line_char) {
+ item->command = TODO_COMMENT;
+ item->commit = NULL;
+ item->arg = bol;
+ item->arg_len = eol - bol;
+ return 0;
+ }
+
+ for (i = 0; i < TODO_COMMENT; i++)
+ if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
+ item->command = i;
+ break;
+ } else if (bol[1] == ' ' && *bol == todo_command_info[i].c) {
+ bol++;
item->command = i;
break;
}
- if (i >= ARRAY_SIZE(todo_command_strings))
+ if (i >= TODO_COMMENT)
return -1;
+ if (item->command == TODO_NOOP) {
+ item->commit = NULL;
+ item->arg = bol;
+ item->arg_len = eol - bol;
+ return 0;
+ }
+
/* Eat up extra spaces/ tabs before object name */
padding = strspn(bol, " \t");
if (!padding)
return -1;
bol += padding;
+ if (item->command == TODO_EXEC) {
+ item->arg = bol;
+ item->arg_len = (int)(eol - bol);
+ return 0;
+ }
+
end_of_object_name = (char *) bol + strcspn(bol, " \t\n");
saved = *end_of_object_name;
*end_of_object_name = '\0';
{
struct todo_item *item;
char *p = buf, *next_p;
- int i, res = 0;
+ int i, res = 0, fixup_okay = file_exists(rebase_path_done());
for (i = 1; *p; i++, p = next_p) {
char *eol = strchrnul(p, '\n');
if (parse_insn_line(item, p, eol)) {
res = error(_("invalid line %d: %.*s"),
i, (int)(eol - p), p);
- item->command = -1;
+ item->command = TODO_NOOP;
}
+
+ if (fixup_okay)
+ ; /* do nothing */
+ else if (is_fixup(item->command))
+ return error(_("cannot '%s' without a previous commit"),
+ command_to_string(item->command));
+ else if (!is_noop(item->command))
+ fixup_okay = 1;
}
- if (!todo_list->nr)
- return error(_("no commits parsed."));
+
return res;
}
+static int count_commands(struct todo_list *todo_list)
+{
+ int count = 0, i;
+
+ for (i = 0; i < todo_list->nr; i++)
+ if (todo_list->items[i].command != TODO_COMMENT)
+ count++;
+
+ return count;
+}
+
static int read_populate_todo(struct todo_list *todo_list,
struct replay_opts *opts)
{
close(fd);
res = parse_insn_buffer(todo_list->buf.buf, todo_list);
- if (res)
+ if (res) {
+ if (is_rebase_i(opts))
+ return error(_("please fix this using "
+ "'git rebase --edit-todo'."));
return error(_("unusable instruction sheet: '%s'"), todo_file);
+ }
+
+ if (!todo_list->nr &&
+ (!is_rebase_i(opts) || !file_exists(rebase_path_done())))
+ return error(_("no commits parsed."));
if (!is_rebase_i(opts)) {
enum todo_command valid =
return error(_("cannot revert during a cherry-pick."));
}
+ if (is_rebase_i(opts)) {
+ struct todo_list done = TODO_LIST_INIT;
+ FILE *f = fopen(rebase_path_msgtotal(), "w");
+
+ if (strbuf_read_file(&done.buf, rebase_path_done(), 0) > 0 &&
+ !parse_insn_buffer(done.buf.buf, &done))
+ todo_list->done_nr = count_commands(&done);
+ else
+ todo_list->done_nr = 0;
+
+ todo_list->total_nr = todo_list->done_nr
+ + count_commands(todo_list);
+ todo_list_release(&done);
+
+ if (f) {
+ fprintf(f, "%d\n", todo_list->total_nr);
+ fclose(f);
+ }
+ }
+
return 0;
}
return 0;
}
+static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
+{
+ int i;
+
+ strbuf_reset(buf);
+ if (!read_oneliner(buf, rebase_path_strategy(), 0))
+ return;
+ opts->strategy = strbuf_detach(buf, NULL);
+ if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
+ return;
+
+ opts->xopts_nr = split_cmdline(buf->buf, (const char ***)&opts->xopts);
+ for (i = 0; i < opts->xopts_nr; i++) {
+ const char *arg = opts->xopts[i];
+
+ skip_prefix(arg, "--", &arg);
+ opts->xopts[i] = xstrdup(arg);
+ }
+}
+
static int read_populate_opts(struct replay_opts *opts)
{
if (is_rebase_i(opts)) {
opts->gpg_sign = xstrdup(buf.buf + 2);
}
}
+
+ if (file_exists(rebase_path_verbose()))
+ opts->verbose = 1;
+
+ read_strategy_opts(opts, &buf);
strbuf_release(&buf);
return 0;
{
enum todo_command command = opts->action == REPLAY_PICK ?
TODO_PICK : TODO_REVERT;
- const char *command_string = todo_command_strings[command];
+ const char *command_string = todo_command_info[command].str;
struct commit *commit;
if (prepare_revs(opts))
error(_("a cherry-pick or revert is already in progress"));
advise(_("try \"git cherry-pick (--continue | --quit | --abort)\""));
return -1;
- }
- else if (mkdir(git_path_seq_dir(), 0777) < 0)
+ } else if (mkdir(git_path_seq_dir(), 0777) < 0)
return error_errno(_("could not create sequencer directory '%s'"),
git_path_seq_dir());
return 0;
return 0;
}
+static int rollback_is_safe(void)
+{
+ struct strbuf sb = STRBUF_INIT;
+ struct object_id expected_head, actual_head;
+
+ if (strbuf_read_file(&sb, git_path_abort_safety_file(), 0) >= 0) {
+ strbuf_trim(&sb);
+ if (get_oid_hex(sb.buf, &expected_head)) {
+ strbuf_release(&sb);
+ die(_("could not parse %s"), git_path_abort_safety_file());
+ }
+ strbuf_release(&sb);
+ }
+ else if (errno == ENOENT)
+ oidclr(&expected_head);
+ else
+ die_errno(_("could not read '%s'"), git_path_abort_safety_file());
+
+ if (get_oid("HEAD", &actual_head))
+ oidclr(&actual_head);
+
+ return !oidcmp(&actual_head, &expected_head);
+}
+
static int reset_for_rollback(const unsigned char *sha1)
{
const char *argv[4]; /* reset --merge <arg> + NULL */
+
argv[0] = "reset";
argv[1] = "--merge";
argv[2] = sha1_to_hex(sha1);
error(_("cannot abort from a branch yet to be born"));
goto fail;
}
+
+ if (!rollback_is_safe()) {
+ /* Do not error, just do not rollback */
+ warning(_("You seem to have moved HEAD. "
+ "Not rewinding, check your HEAD!"));
+ } else
if (reset_for_rollback(sha1))
goto fail;
strbuf_release(&buf);
const char *todo_path = get_todo_path(opts);
int next = todo_list->current, offset, fd;
+ /*
+ * rebase -i writes "git-rebase-todo" without the currently executing
+ * command, appending it to "done" instead.
+ */
+ if (is_rebase_i(opts))
+ next++;
+
fd = hold_lock_file_for_update(&todo_lock, todo_path, 0);
if (fd < 0)
return error_errno(_("could not lock '%s'"), todo_path);
return error_errno(_("could not write to '%s'"), todo_path);
if (commit_lock_file(&todo_lock) < 0)
return error(_("failed to finalize '%s'."), todo_path);
+
+ if (is_rebase_i(opts)) {
+ const char *done_path = rebase_path_done();
+ int fd = open(done_path, O_CREAT | O_WRONLY | O_APPEND, 0666);
+ int prev_offset = !next ? 0 :
+ todo_list->items[next - 1].offset_in_buf;
+
+ if (fd >= 0 && offset > prev_offset &&
+ write_in_full(fd, todo_list->buf.buf + prev_offset,
+ offset - prev_offset) < 0) {
+ close(fd);
+ return error_errno(_("could not write to '%s'"),
+ done_path);
+ }
+ if (fd >= 0)
+ close(fd);
+ }
return 0;
}
return res;
}
+static int make_patch(struct commit *commit, struct replay_opts *opts)
+{
+ struct strbuf buf = STRBUF_INIT;
+ struct rev_info log_tree_opt;
+ const char *subject, *p;
+ int res = 0;
+
+ p = short_commit_name(commit);
+ if (write_message(p, strlen(p), rebase_path_stopped_sha(), 1) < 0)
+ return -1;
+
+ strbuf_addf(&buf, "%s/patch", get_dir(opts));
+ memset(&log_tree_opt, 0, sizeof(log_tree_opt));
+ init_revisions(&log_tree_opt, NULL);
+ log_tree_opt.abbrev = 0;
+ log_tree_opt.diff = 1;
+ log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
+ log_tree_opt.disable_stdin = 1;
+ log_tree_opt.no_commit_id = 1;
+ log_tree_opt.diffopt.file = fopen(buf.buf, "w");
+ log_tree_opt.diffopt.use_color = GIT_COLOR_NEVER;
+ if (!log_tree_opt.diffopt.file)
+ res |= error_errno(_("could not open '%s'"), buf.buf);
+ else {
+ res |= log_tree_commit(&log_tree_opt, commit);
+ fclose(log_tree_opt.diffopt.file);
+ }
+ strbuf_reset(&buf);
+
+ strbuf_addf(&buf, "%s/message", get_dir(opts));
+ if (!file_exists(buf.buf)) {
+ const char *commit_buffer = get_commit_buffer(commit, NULL);
+ find_commit_subject(commit_buffer, &subject);
+ res |= write_message(subject, strlen(subject), buf.buf, 1);
+ unuse_commit_buffer(commit, commit_buffer);
+ }
+ strbuf_release(&buf);
+
+ return res;
+}
+
+static int intend_to_amend(void)
+{
+ unsigned char head[20];
+ char *p;
+
+ if (get_sha1("HEAD", head))
+ return error(_("cannot read HEAD"));
+
+ p = sha1_to_hex(head);
+ return write_message(p, strlen(p), rebase_path_amend(), 1);
+}
+
+static int error_with_patch(struct commit *commit,
+ const char *subject, int subject_len,
+ struct replay_opts *opts, int exit_code, int to_amend)
+{
+ if (make_patch(commit, opts))
+ return -1;
+
+ if (to_amend) {
+ if (intend_to_amend())
+ return -1;
+
+ fprintf(stderr, "You can amend the commit now, with\n"
+ "\n"
+ " git commit --amend %s\n"
+ "\n"
+ "Once you are satisfied with your changes, run\n"
+ "\n"
+ " git rebase --continue\n", gpg_sign_opt_quoted(opts));
+ } else if (exit_code)
+ fprintf(stderr, "Could not apply %s... %.*s\n",
+ short_commit_name(commit), subject_len, subject);
+
+ return exit_code;
+}
+
+static int error_failed_squash(struct commit *commit,
+ struct replay_opts *opts, int subject_len, const char *subject)
+{
+ if (rename(rebase_path_squash_msg(), rebase_path_message()))
+ return error(_("could not rename '%s' to '%s'"),
+ rebase_path_squash_msg(), rebase_path_message());
+ unlink(rebase_path_fixup_msg());
+ unlink(git_path("MERGE_MSG"));
+ if (copy_file(git_path("MERGE_MSG"), rebase_path_message(), 0666))
+ return error(_("could not copy '%s' to '%s'"),
+ rebase_path_message(), git_path("MERGE_MSG"));
+ return error_with_patch(commit, subject, subject_len, opts, 1, 0);
+}
+
+static int do_exec(const char *command_line)
+{
+ const char *child_argv[] = { NULL, NULL };
+ int dirty, status;
+
+ fprintf(stderr, "Executing: %s\n", command_line);
+ child_argv[0] = command_line;
+ status = run_command_v_opt(child_argv, RUN_USING_SHELL);
+
+ /* force re-reading of the cache */
+ if (discard_cache() < 0 || read_cache() < 0)
+ return error(_("could not read index"));
+
+ dirty = require_clean_work_tree("rebase", NULL, 1, 1);
+
+ if (status) {
+ warning(_("execution failed: %s\n%s"
+ "You can fix the problem, and then run\n"
+ "\n"
+ " git rebase --continue\n"
+ "\n"),
+ command_line,
+ dirty ? N_("and made changes to the index and/or the "
+ "working tree\n") : "");
+ if (status == 127)
+ /* command not found */
+ status = 1;
+ } else if (dirty) {
+ warning(_("execution succeeded: %s\nbut "
+ "left changes to the index and/or the working tree\n"
+ "Commit or stash your changes, and then run\n"
+ "\n"
+ " git rebase --continue\n"
+ "\n"), command_line);
+ status = 1;
+ }
+
+ return status;
+}
+
+static int is_final_fixup(struct todo_list *todo_list)
+{
+ int i = todo_list->current;
+
+ if (!is_fixup(todo_list->items[i].command))
+ return 0;
+
+ while (++i < todo_list->nr)
+ if (is_fixup(todo_list->items[i].command))
+ return 0;
+ else if (!is_noop(todo_list->items[i].command))
+ break;
+ return 1;
+}
+
+static enum todo_command peek_command(struct todo_list *todo_list, int offset)
+{
+ int i;
+
+ for (i = todo_list->current + offset; i < todo_list->nr; i++)
+ if (!is_noop(todo_list->items[i].command))
+ return todo_list->items[i].command;
+
+ return -1;
+}
+
+static int apply_autostash(struct replay_opts *opts)
+{
+ struct strbuf stash_sha1 = STRBUF_INIT;
+ struct child_process child = CHILD_PROCESS_INIT;
+ int ret = 0;
+
+ if (!read_oneliner(&stash_sha1, rebase_path_autostash(), 1)) {
+ strbuf_release(&stash_sha1);
+ return 0;
+ }
+ strbuf_trim(&stash_sha1);
+
+ child.git_cmd = 1;
+ argv_array_push(&child.args, "stash");
+ argv_array_push(&child.args, "apply");
+ argv_array_push(&child.args, stash_sha1.buf);
+ if (!run_command(&child))
+ printf(_("Applied autostash."));
+ else {
+ struct child_process store = CHILD_PROCESS_INIT;
+
+ store.git_cmd = 1;
+ argv_array_push(&store.args, "stash");
+ argv_array_push(&store.args, "store");
+ argv_array_push(&store.args, "-m");
+ argv_array_push(&store.args, "autostash");
+ argv_array_push(&store.args, "-q");
+ argv_array_push(&store.args, stash_sha1.buf);
+ if (run_command(&store))
+ ret = error(_("cannot store %s"), stash_sha1.buf);
+ else
+ printf(_("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"));
+ }
+
+ strbuf_release(&stash_sha1);
+ return ret;
+}
+
+static const char *reflog_message(struct replay_opts *opts,
+ const char *sub_action, const char *fmt, ...)
+{
+ va_list ap;
+ static struct strbuf buf = STRBUF_INIT;
+
+ va_start(ap, fmt);
+ strbuf_reset(&buf);
+ strbuf_addstr(&buf, action_name(opts));
+ if (sub_action)
+ strbuf_addf(&buf, " (%s)", sub_action);
+ if (fmt) {
+ strbuf_addstr(&buf, ": ");
+ strbuf_vaddf(&buf, fmt, ap);
+ }
+ va_end(ap);
+
+ return buf.buf;
+}
+
static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
{
- int res;
+ int res = 0;
setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
if (opts->allow_ff)
struct todo_item *item = todo_list->items + todo_list->current;
if (save_todo(todo_list, opts))
return -1;
- res = do_pick_commit(item->command, item->commit, opts);
+ if (is_rebase_i(opts)) {
+ if (item->command != TODO_COMMENT) {
+ FILE *f = fopen(rebase_path_msgnum(), "w");
+
+ todo_list->done_nr++;
+
+ if (f) {
+ fprintf(f, "%d\n", todo_list->done_nr);
+ fclose(f);
+ }
+ fprintf(stderr, "Rebasing (%d/%d)%s",
+ todo_list->done_nr,
+ todo_list->total_nr,
+ opts->verbose ? "\n" : "\r");
+ }
+ unlink(rebase_path_message());
+ unlink(rebase_path_author_script());
+ unlink(rebase_path_stopped_sha());
+ unlink(rebase_path_amend());
+ }
+ if (item->command <= TODO_SQUASH) {
+ if (is_rebase_i(opts))
+ setenv("GIT_REFLOG_ACTION", reflog_message(opts,
+ command_to_string(item->command), NULL),
+ 1);
+ res = do_pick_commit(item->command, item->commit,
+ opts, is_final_fixup(todo_list));
+ if (is_rebase_i(opts) && res < 0) {
+ /* Reschedule */
+ todo_list->current--;
+ if (save_todo(todo_list, opts))
+ return -1;
+ }
+ if (item->command == TODO_EDIT) {
+ struct commit *commit = item->commit;
+ if (!res)
+ warning(_("stopped at %s... %.*s"),
+ short_commit_name(commit),
+ item->arg_len, item->arg);
+ return error_with_patch(commit,
+ item->arg, item->arg_len, opts, res,
+ !res);
+ }
+ if (is_rebase_i(opts) && !res)
+ record_in_rewritten(&item->commit->object.oid,
+ peek_command(todo_list, 1));
+ if (res && is_fixup(item->command)) {
+ if (res == 1)
+ intend_to_amend();
+ return error_failed_squash(item->commit, opts,
+ item->arg_len, item->arg);
+ } else if (res && is_rebase_i(opts))
+ return res | error_with_patch(item->commit,
+ item->arg, item->arg_len, opts, res,
+ item->command == TODO_REWORD);
+ } else if (item->command == TODO_EXEC) {
+ char *end_of_arg = (char *)(item->arg + item->arg_len);
+ int saved = *end_of_arg;
+
+ *end_of_arg = '\0';
+ res = do_exec(item->arg);
+ *end_of_arg = saved;
+ } else if (!is_noop(item->command))
+ return error(_("unknown command %d"), item->command);
+
todo_list->current++;
if (res)
return res;
}
+ if (is_rebase_i(opts)) {
+ struct strbuf head_ref = STRBUF_INIT, buf = STRBUF_INIT;
+ struct stat st;
+
+ /* Stopped in the middle, as planned? */
+ if (todo_list->current < todo_list->nr)
+ return 0;
+
+ if (read_oneliner(&head_ref, rebase_path_head_name(), 0) &&
+ starts_with(head_ref.buf, "refs/")) {
+ const char *msg;
+ unsigned char head[20], orig[20];
+ int res;
+
+ if (get_sha1("HEAD", head)) {
+ res = error(_("cannot read HEAD"));
+cleanup_head_ref:
+ strbuf_release(&head_ref);
+ strbuf_release(&buf);
+ return res;
+ }
+ if (!read_oneliner(&buf, rebase_path_orig_head(), 0) ||
+ get_sha1_hex(buf.buf, orig)) {
+ res = error(_("could not read orig-head"));
+ goto cleanup_head_ref;
+ }
+ if (!read_oneliner(&buf, rebase_path_onto(), 0)) {
+ res = error(_("could not read 'onto'"));
+ goto cleanup_head_ref;
+ }
+ msg = reflog_message(opts, "finish", "%s onto %s",
+ head_ref.buf, buf.buf);
+ if (update_ref(msg, head_ref.buf, head, orig,
+ REF_NODEREF, UPDATE_REFS_MSG_ON_ERR)) {
+ res = error(_("could not update %s"),
+ head_ref.buf);
+ goto cleanup_head_ref;
+ }
+ msg = reflog_message(opts, "finish", "returning to %s",
+ head_ref.buf);
+ if (create_symref("HEAD", head_ref.buf, msg)) {
+ res = error(_("could not update HEAD to %s"),
+ head_ref.buf);
+ goto cleanup_head_ref;
+ }
+ strbuf_reset(&buf);
+ }
+
+ if (opts->verbose) {
+ struct rev_info log_tree_opt;
+ struct object_id orig, head;
+
+ memset(&log_tree_opt, 0, sizeof(log_tree_opt));
+ init_revisions(&log_tree_opt, NULL);
+ log_tree_opt.diff = 1;
+ log_tree_opt.diffopt.output_format =
+ DIFF_FORMAT_DIFFSTAT;
+ log_tree_opt.disable_stdin = 1;
+
+ if (read_oneliner(&buf, rebase_path_orig_head(), 0) &&
+ !get_sha1(buf.buf, orig.hash) &&
+ !get_sha1("HEAD", head.hash)) {
+ diff_tree_sha1(orig.hash, head.hash,
+ "", &log_tree_opt.diffopt);
+ log_tree_diff_flush(&log_tree_opt);
+ }
+ }
+ flush_rewritten_pending();
+ if (!stat(rebase_path_rewritten_list(), &st) &&
+ st.st_size > 0) {
+ struct child_process child = CHILD_PROCESS_INIT;
+ const char *post_rewrite_hook =
+ find_hook("post-rewrite");
+
+ child.in = open(rebase_path_rewritten_list(), O_RDONLY);
+ child.git_cmd = 1;
+ argv_array_push(&child.args, "notes");
+ argv_array_push(&child.args, "copy");
+ argv_array_push(&child.args, "--for-rewrite=rebase");
+ /* we don't care if this copying failed */
+ run_command(&child);
+
+ if (post_rewrite_hook) {
+ struct child_process hook = CHILD_PROCESS_INIT;
+
+ hook.in = open(rebase_path_rewritten_list(),
+ O_RDONLY);
+ hook.stdout_to_stderr = 1;
+ argv_array_push(&hook.args, post_rewrite_hook);
+ argv_array_push(&hook.args, "rebase");
+ /* we don't care if this hook failed */
+ run_command(&hook);
+ }
+ }
+ apply_autostash(opts);
+
+ fprintf(stderr, "Successfully rebased and updated %s.\n",
+ head_ref.buf);
+
+ strbuf_release(&buf);
+ strbuf_release(&head_ref);
+ }
+
/*
* Sequence of picks finished successfully; cleanup by
* removing the .git/sequencer directory
return run_command_v_opt(argv, RUN_GIT_CMD);
}
+static int commit_staged_changes(struct replay_opts *opts)
+{
+ int amend = 0;
+
+ if (has_unstaged_changes(1))
+ return error(_("cannot rebase: You have unstaged changes."));
+ if (!has_uncommitted_changes(0)) {
+ const char *cherry_pick_head = git_path("CHERRY_PICK_HEAD");
+
+ if (file_exists(cherry_pick_head) && unlink(cherry_pick_head))
+ return error(_("could not remove CHERRY_PICK_HEAD"));
+ return 0;
+ }
+
+ if (file_exists(rebase_path_amend())) {
+ struct strbuf rev = STRBUF_INIT;
+ unsigned char head[20], to_amend[20];
+
+ if (get_sha1("HEAD", head))
+ return error(_("cannot amend non-existing commit"));
+ if (!read_oneliner(&rev, rebase_path_amend(), 0))
+ return error(_("invalid file: '%s'"), rebase_path_amend());
+ if (get_sha1_hex(rev.buf, to_amend))
+ return error(_("invalid contents: '%s'"),
+ rebase_path_amend());
+ if (hashcmp(head, to_amend))
+ return error(_("\nYou have uncommitted changes in your "
+ "working tree. Please, commit them\n"
+ "first and then run 'git rebase "
+ "--continue' again."));
+
+ strbuf_release(&rev);
+ amend = 1;
+ }
+
+ if (run_git_commit(rebase_path_message(), opts, 1, 1, amend, 0))
+ return error(_("could not commit staged changes."));
+ unlink(rebase_path_amend());
+ return 0;
+}
+
int sequencer_continue(struct replay_opts *opts)
{
struct todo_list todo_list = TODO_LIST_INIT;
if (read_and_refresh_cache(opts))
return -1;
- if (!file_exists(get_todo_path(opts)))
+ if (is_rebase_i(opts)) {
+ if (commit_staged_changes(opts))
+ return -1;
+ } else if (!file_exists(get_todo_path(opts)))
return continue_single_pick();
if (read_populate_opts(opts))
return -1;
if ((res = read_populate_todo(&todo_list, opts)))
goto release_todo_list;
- /* Verify that the conflict has been resolved */
- if (file_exists(git_path_cherry_pick_head()) ||
- file_exists(git_path_revert_head())) {
- res = continue_single_pick();
- if (res)
+ if (!is_rebase_i(opts)) {
+ /* Verify that the conflict has been resolved */
+ if (file_exists(git_path_cherry_pick_head()) ||
+ file_exists(git_path_revert_head())) {
+ res = continue_single_pick();
+ if (res)
+ goto release_todo_list;
+ }
+ if (index_differs_from("HEAD", 0, 0)) {
+ res = error_dirty_index(opts);
goto release_todo_list;
+ }
+ todo_list.current++;
+ } else if (file_exists(rebase_path_stopped_sha())) {
+ struct strbuf buf = STRBUF_INIT;
+ struct object_id oid;
+
+ if (read_oneliner(&buf, rebase_path_stopped_sha(), 1) &&
+ !get_sha1_committish(buf.buf, oid.hash))
+ record_in_rewritten(&oid, peek_command(&todo_list, 0));
+ strbuf_release(&buf);
}
- if (index_differs_from("HEAD", 0, 0)) {
- res = error_dirty_index(opts);
- goto release_todo_list;
- }
- todo_list.current++;
+
res = pick_commits(&todo_list, opts);
release_todo_list:
todo_list_release(&todo_list);
{
setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
return do_pick_commit(opts->action == REPLAY_PICK ?
- TODO_PICK : TODO_REVERT, cmit, opts);
+ TODO_PICK : TODO_REVERT, cmit, opts, 0);
}
int sequencer_pick_revisions(struct replay_opts *opts)
return -1;
if (save_opts(opts))
return -1;
+ update_abort_safety_file();
res = pick_commits(&todo_list, opts);
todo_list_release(&todo_list);
return res;
enum replay_action {
REPLAY_REVERT,
- REPLAY_PICK
+ REPLAY_PICK,
+ REPLAY_INTERACTIVE_REBASE
};
struct replay_opts {
int allow_empty;
int allow_empty_message;
int keep_redundant_commits;
+ int verbose;
int mainline;
strbuf_addbuf(&path, &data);
strbuf_addstr(sb, real_path(path.buf));
ret = 1;
- } else
+ } else {
strbuf_addstr(sb, gitdir);
+ }
+
strbuf_release(&data);
strbuf_release(&path);
return ret;
return 0;
}
+void read_gitfile_error_die(int error_code, const char *path, const char *dir)
+{
+ switch (error_code) {
+ case READ_GITFILE_ERR_STAT_FAILED:
+ case READ_GITFILE_ERR_NOT_A_FILE:
+ /* non-fatal; follow return path */
+ break;
+ case READ_GITFILE_ERR_OPEN_FAILED:
+ die_errno("Error opening '%s'", path);
+ case READ_GITFILE_ERR_TOO_LARGE:
+ die("Too large to be a .git file: '%s'", path);
+ case READ_GITFILE_ERR_READ_FAILED:
+ die("Error reading %s", path);
+ case READ_GITFILE_ERR_INVALID_FORMAT:
+ die("Invalid gitfile format: %s", path);
+ case READ_GITFILE_ERR_NO_PATH:
+ die("No path in gitfile: %s", path);
+ case READ_GITFILE_ERR_NOT_A_REPO:
+ die("Not a git repository: %s", dir);
+ default:
+ die("BUG: unknown error code");
+ }
+}
+
/*
* Try to read the location of the git directory from the .git file,
* return path to git directory if found.
cleanup_return:
if (return_error_code)
*return_error_code = error_code;
- else if (error_code) {
- switch (error_code) {
- case READ_GITFILE_ERR_STAT_FAILED:
- case READ_GITFILE_ERR_NOT_A_FILE:
- /* non-fatal; follow return path */
- break;
- case READ_GITFILE_ERR_OPEN_FAILED:
- die_errno("Error opening '%s'", path);
- case READ_GITFILE_ERR_TOO_LARGE:
- die("Too large to be a .git file: '%s'", path);
- case READ_GITFILE_ERR_READ_FAILED:
- die("Error reading %s", path);
- case READ_GITFILE_ERR_INVALID_FORMAT:
- die("Invalid gitfile format: %s", path);
- case READ_GITFILE_ERR_NO_PATH:
- die("No path in gitfile: %s", path);
- case READ_GITFILE_ERR_NOT_A_REPO:
- die("Not a git repository: %s", dir);
- default:
- assert(0);
- }
- }
+ else if (error_code)
+ read_gitfile_error_die(error_code, path, dir);
free(buf);
return error_code ? NULL : path;
/* --work-tree is set without --git-dir; use discovered one */
if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
if (offset != cwd->len && !is_absolute_path(gitdir))
- gitdir = xstrdup(real_path(gitdir));
+ gitdir = real_pathdup(gitdir);
if (chdir(cwd->buf))
die_errno("Could not come back to cwd");
return setup_explicit_git_dir(gitdir, cwd, nongit_ok);
/* Keep entry but do not canonicalize it */
return 1;
} else {
- const char *real_path = real_path_if_valid(ceil);
- if (!real_path)
+ char *real_path = real_pathdup(ceil);
+ if (!real_path) {
return 0;
+ }
free(item->string);
- item->string = xstrdup(real_path);
+ item->string = real_path;
return 1;
}
}
return setup_git_directory_gently(NULL);
}
-const char *resolve_gitdir(const char *suspect)
+const char *resolve_gitdir_gently(const char *suspect, int *return_error_code)
{
if (is_git_directory(suspect))
return suspect;
- return read_gitfile(suspect);
+ return read_gitfile_gently(suspect, return_error_code);
}
/* if any standard file descriptor is missing open it to /dev/null */
#include "mru.h"
#include "list.h"
#include "mergesort.h"
-
-#ifndef O_NOATIME
-#if defined(__linux__) && (defined(__i386__) || defined(__PPC__))
-#define O_NOATIME 01000000
-#else
-#define O_NOATIME 0
-#endif
-#endif
+#include "quote.h"
#define SZ_FMT PRIuMAX
static inline uintmax_t sz_fmt(size_t s) { return s; }
struct strbuf pathbuf = STRBUF_INIT;
if (!is_absolute_path(entry) && relative_base) {
- strbuf_addstr(&pathbuf, real_path(relative_base));
+ strbuf_realpath(&pathbuf, relative_base, 1);
strbuf_addch(&pathbuf, '/');
}
strbuf_addstr(&pathbuf, entry);
return 0;
}
+static const char *parse_alt_odb_entry(const char *string,
+ int sep,
+ struct strbuf *out)
+{
+ const char *end;
+
+ strbuf_reset(out);
+
+ if (*string == '#') {
+ /* comment; consume up to next separator */
+ end = strchrnul(string, sep);
+ } else if (*string == '"' && !unquote_c_style(out, string, &end)) {
+ /*
+ * quoted path; unquote_c_style has copied the
+ * data for us and set "end". Broken quoting (e.g.,
+ * an entry that doesn't end with a quote) falls
+ * back to the unquoted case below.
+ */
+ } else {
+ /* normal, unquoted path */
+ end = strchrnul(string, sep);
+ strbuf_add(out, string, end - string);
+ }
+
+ if (*end)
+ end++;
+ return end;
+}
+
static void link_alt_odb_entries(const char *alt, int len, int sep,
const char *relative_base, int depth)
{
- struct string_list entries = STRING_LIST_INIT_NODUP;
- char *alt_copy;
- int i;
struct strbuf objdirbuf = STRBUF_INIT;
+ struct strbuf entry = STRBUF_INIT;
if (depth > 5) {
error("%s: ignoring alternate object stores, nesting too deep.",
die("unable to normalize object directory: %s",
objdirbuf.buf);
- alt_copy = xmemdupz(alt, len);
- string_list_split_in_place(&entries, alt_copy, sep, -1);
- for (i = 0; i < entries.nr; i++) {
- const char *entry = entries.items[i].string;
- if (entry[0] == '\0' || entry[0] == '#')
+ while (*alt) {
+ alt = parse_alt_odb_entry(alt, sep, &entry);
+ if (!entry.len)
continue;
- link_alt_odb_entry(entry, relative_base, depth, objdirbuf.buf);
+ link_alt_odb_entry(entry.buf, relative_base, depth, objdirbuf.buf);
}
- string_list_clear(&entries, 0);
- free(alt_copy);
+ strbuf_release(&entry);
strbuf_release(&objdirbuf);
}
return hashcmp(sha1, real_sha1) ? -1 : 0;
}
-int git_open(const char *name)
+int git_open_cloexec(const char *name, int flags)
{
- static int sha1_file_open_flag = O_NOATIME | O_CLOEXEC;
-
- for (;;) {
- int fd;
-
- errno = 0;
- fd = open(name, O_RDONLY | sha1_file_open_flag);
- if (fd >= 0)
- return fd;
+ int fd;
+ static int o_cloexec = O_CLOEXEC;
+ fd = open(name, flags | o_cloexec);
+ if ((o_cloexec & O_CLOEXEC) && fd < 0 && errno == EINVAL) {
/* Try again w/o O_CLOEXEC: the kernel might not support it */
- if ((sha1_file_open_flag & O_CLOEXEC) && errno == EINVAL) {
- sha1_file_open_flag &= ~O_CLOEXEC;
- continue;
- }
+ o_cloexec &= ~O_CLOEXEC;
+ fd = open(name, flags | o_cloexec);
+ }
- /* Might the failure be due to O_NOATIME? */
- if (errno != ENOENT && (sha1_file_open_flag & O_NOATIME)) {
- sha1_file_open_flag &= ~O_NOATIME;
- continue;
+#if defined(F_GETFL) && defined(F_SETFL) && defined(FD_CLOEXEC)
+ {
+ static int fd_cloexec = FD_CLOEXEC;
+
+ if (!o_cloexec && 0 <= fd && fd_cloexec) {
+ /* Opened w/o O_CLOEXEC? try with fcntl(2) to add it */
+ int flags = fcntl(fd, F_GETFL);
+ if (fcntl(fd, F_SETFL, flags | fd_cloexec))
+ fd_cloexec = 0;
}
- return -1;
}
+#endif
+ return fd;
}
-static int stat_sha1_file(const unsigned char *sha1, struct stat *st)
+/*
+ * Find "sha1" as a loose object in the local repository or in an alternate.
+ * Returns 0 on success, negative on failure.
+ *
+ * The "path" out-parameter will give the path of the object we found (if any).
+ * Note that it may point to static storage and is only valid until another
+ * call to sha1_file_name(), etc.
+ */
+static int stat_sha1_file(const unsigned char *sha1, struct stat *st,
+ const char **path)
{
struct alternate_object_database *alt;
- if (!lstat(sha1_file_name(sha1), st))
+ *path = sha1_file_name(sha1);
+ if (!lstat(*path, st))
return 0;
prepare_alt_odb();
errno = ENOENT;
for (alt = alt_odb_list; alt; alt = alt->next) {
- const char *path = alt_sha1_path(alt, sha1);
- if (!lstat(path, st))
+ *path = alt_sha1_path(alt, sha1);
+ if (!lstat(*path, st))
return 0;
}
return -1;
}
-static int open_sha1_file(const unsigned char *sha1)
+/*
+ * Like stat_sha1_file(), but actually open the object and return the
+ * descriptor. See the caveats on the "path" parameter above.
+ */
+static int open_sha1_file(const unsigned char *sha1, const char **path)
{
int fd;
struct alternate_object_database *alt;
int most_interesting_errno;
- fd = git_open(sha1_file_name(sha1));
+ *path = sha1_file_name(sha1);
+ fd = git_open(*path);
if (fd >= 0)
return fd;
most_interesting_errno = errno;
prepare_alt_odb();
for (alt = alt_odb_list; alt; alt = alt->next) {
- const char *path = alt_sha1_path(alt, sha1);
- fd = git_open(path);
+ *path = alt_sha1_path(alt, sha1);
+ fd = git_open(*path);
if (fd >= 0)
return fd;
if (most_interesting_errno == ENOENT)
return -1;
}
-void *map_sha1_file(const unsigned char *sha1, unsigned long *size)
+/*
+ * Map the loose object at "path" if it is not NULL, or the path found by
+ * searching for a loose object named "sha1".
+ */
+static void *map_sha1_file_1(const char *path,
+ const unsigned char *sha1,
+ unsigned long *size)
{
void *map;
int fd;
- fd = open_sha1_file(sha1);
+ if (path)
+ fd = git_open(path);
+ else
+ fd = open_sha1_file(sha1, &path);
map = NULL;
if (fd >= 0) {
struct stat st;
*size = xsize_t(st.st_size);
if (!*size) {
/* mmap() is forbidden on empty files */
- error("object file %s is empty", sha1_file_name(sha1));
+ error("object file %s is empty", path);
return NULL;
}
map = xmmap(NULL, *size, PROT_READ, MAP_PRIVATE, fd, 0);
return map;
}
+void *map_sha1_file(const unsigned char *sha1, unsigned long *size)
+{
+ return map_sha1_file_1(NULL, sha1, size);
+}
+
unsigned long unpack_object_header_buffer(const unsigned char *buf,
unsigned long len, enum object_type *type, unsigned long *sizep)
{
void clear_delta_base_cache(void)
{
- struct hashmap_iter iter;
- struct delta_base_cache_entry *entry;
- for (entry = hashmap_iter_first(&delta_base_cache, &iter);
- entry;
- entry = hashmap_iter_next(&iter)) {
+ struct list_head *lru, *tmp;
+ list_for_each_safe(lru, tmp, &delta_base_cache_lru) {
+ struct delta_base_cache_entry *entry =
+ list_entry(lru, struct delta_base_cache_entry, lru);
release_delta_base_cache(entry);
}
}
* object even exists.
*/
if (!oi->typep && !oi->typename && !oi->sizep) {
+ const char *path;
struct stat st;
- if (stat_sha1_file(sha1, &st) < 0)
+ if (stat_sha1_file(sha1, &st, &path) < 0)
return -1;
if (oi->disk_sizep)
*oi->disk_sizep = st.st_size;
{
void *data;
const struct packed_git *p;
+ const char *path;
+ struct stat st;
const unsigned char *repl = lookup_replace_object_extended(sha1, flag);
errno = 0;
die("replacement %s not found for %s",
sha1_to_hex(repl), sha1_to_hex(sha1));
- if (has_loose_object(repl)) {
- const char *path = sha1_file_name(sha1);
-
+ if (!stat_sha1_file(repl, &st, &path))
die("loose object %s (stored in %s) is corrupt",
sha1_to_hex(repl), path);
- }
if ((p = has_packed_and_bad(repl)) != NULL)
die("packed object %s (stored in %s) is corrupt",
}
return r ? r : pack_errors;
}
+
+static int check_stream_sha1(git_zstream *stream,
+ const char *hdr,
+ unsigned long size,
+ const char *path,
+ const unsigned char *expected_sha1)
+{
+ git_SHA_CTX c;
+ unsigned char real_sha1[GIT_SHA1_RAWSZ];
+ unsigned char buf[4096];
+ unsigned long total_read;
+ int status = Z_OK;
+
+ git_SHA1_Init(&c);
+ git_SHA1_Update(&c, hdr, stream->total_out);
+
+ /*
+ * We already read some bytes into hdr, but the ones up to the NUL
+ * do not count against the object's content size.
+ */
+ total_read = stream->total_out - strlen(hdr) - 1;
+
+ /*
+ * This size comparison must be "<=" to read the final zlib packets;
+ * see the comment in unpack_sha1_rest for details.
+ */
+ while (total_read <= size &&
+ (status == Z_OK || status == Z_BUF_ERROR)) {
+ stream->next_out = buf;
+ stream->avail_out = sizeof(buf);
+ if (size - total_read < stream->avail_out)
+ stream->avail_out = size - total_read;
+ status = git_inflate(stream, Z_FINISH);
+ git_SHA1_Update(&c, buf, stream->next_out - buf);
+ total_read += stream->next_out - buf;
+ }
+ git_inflate_end(stream);
+
+ if (status != Z_STREAM_END) {
+ error("corrupt loose object '%s'", sha1_to_hex(expected_sha1));
+ return -1;
+ }
+ if (stream->avail_in) {
+ error("garbage at end of loose object '%s'",
+ sha1_to_hex(expected_sha1));
+ return -1;
+ }
+
+ git_SHA1_Final(real_sha1, &c);
+ if (hashcmp(expected_sha1, real_sha1)) {
+ error("sha1 mismatch for %s (expected %s)", path,
+ sha1_to_hex(expected_sha1));
+ return -1;
+ }
+
+ return 0;
+}
+
+int read_loose_object(const char *path,
+ const unsigned char *expected_sha1,
+ enum object_type *type,
+ unsigned long *size,
+ void **contents)
+{
+ int ret = -1;
+ int fd = -1;
+ void *map = NULL;
+ unsigned long mapsize;
+ git_zstream stream;
+ char hdr[32];
+
+ *contents = NULL;
+
+ map = map_sha1_file_1(path, NULL, &mapsize);
+ if (!map) {
+ error_errno("unable to mmap %s", path);
+ goto out;
+ }
+
+ if (unpack_sha1_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0) {
+ error("unable to unpack header of %s", path);
+ goto out;
+ }
+
+ *type = parse_sha1_header(hdr, size);
+ if (*type < 0) {
+ error("unable to parse header of %s", path);
+ git_inflate_end(&stream);
+ goto out;
+ }
+
+ if (*type == OBJ_BLOB) {
+ if (check_stream_sha1(&stream, hdr, *size, path, expected_sha1) < 0)
+ goto out;
+ } else {
+ *contents = unpack_sha1_rest(&stream, hdr, *size, expected_sha1);
+ if (!*contents) {
+ error("unable to unpack contents of %s", path);
+ git_inflate_end(&stream);
+ goto out;
+ }
+ if (check_sha1_signature(expected_sha1, *contents,
+ *size, typename(*type))) {
+ error("sha1 mismatch for %s (expected %s)", path,
+ sha1_to_hex(expected_sha1));
+ free(*contents);
+ goto out;
+ }
+ }
+
+ ret = 0; /* everything checks out */
+
+out:
+ if (map)
+ munmap(map, mapsize);
+ if (fd >= 0)
+ close(fd);
+ return ret;
+}
define_commit_slab(ref_bitmap, uint32_t *);
+#define POOL_SIZE (512 * 1024)
+
struct paint_info {
struct ref_bitmap ref_bitmap;
unsigned nr_bits;
- char **slab;
+ char **pools;
char *free, *end;
- unsigned slab_count;
+ unsigned pool_count;
};
static uint32_t *paint_alloc(struct paint_info *info)
unsigned nr = (info->nr_bits + 31) / 32;
unsigned size = nr * sizeof(uint32_t);
void *p;
- if (!info->slab_count || info->free + size > info->end) {
- info->slab_count++;
- REALLOC_ARRAY(info->slab, info->slab_count);
- info->free = xmalloc(COMMIT_SLAB_SIZE);
- info->slab[info->slab_count - 1] = info->free;
- info->end = info->free + COMMIT_SLAB_SIZE;
+ if (!info->pool_count || size > info->end - info->free) {
+ if (size > POOL_SIZE)
+ die("BUG: pool size too small for %d in paint_alloc()",
+ size);
+ info->pool_count++;
+ REALLOC_ARRAY(info->pools, info->pool_count);
+ info->free = xmalloc(POOL_SIZE);
+ info->pools[info->pool_count - 1] = info->free;
+ info->end = info->free + POOL_SIZE;
}
p = info->free;
info->free += size;
* all walked commits.
*/
static void paint_down(struct paint_info *info, const unsigned char *sha1,
- int id)
+ unsigned int id)
{
unsigned int i, nr;
struct commit_list *head = NULL;
if (!c)
return;
memset(bitmap, 0, bitmap_size);
- bitmap[id / 32] |= (1 << (id % 32));
+ bitmap[id / 32] |= (1U << (id % 32));
commit_list_insert(c, &head);
while (head) {
struct commit_list *p;
oid_to_hex(&c->object.oid));
for (p = c->parents; p; p = p->next) {
- uint32_t **p_refs = ref_bitmap_at(&info->ref_bitmap,
- p->item);
if (p->item->object.flags & SEEN)
continue;
- if (*p_refs == NULL || *p_refs == *refs)
- *p_refs = *refs;
commit_list_insert(p->item, &head);
}
}
post_assign_shallow(info, &pi.ref_bitmap, ref_status);
clear_ref_bitmap(&pi.ref_bitmap);
- for (i = 0; i < pi.slab_count; i++)
- free(pi.slab[i]);
- free(pi.slab);
+ for (i = 0; i < pi.pool_count; i++)
+ free(pi.pools[i]);
+ free(pi.pools);
free(shallow);
}
static void update_refstatus(int *ref_status, int nr, uint32_t *bitmap)
{
- int i;
+ unsigned int i;
if (!ref_status)
return;
for (i = 0; i < nr; i++)
- if (bitmap[i / 32] & (1 << (i % 32)))
+ if (bitmap[i / 32] & (1U << (i % 32)))
ref_status[i]++;
}
int in2;
int user_format;
int abbrev;
+ int committer;
char *common_repo_prefix;
int email;
list->strdup_strings ? xstrdup(string) : (char *)string);
}
-/* Yuck */
-static compare_strings_fn compare_for_qsort;
-
-/* Only call this from inside string_list_sort! */
-static int cmp_items(const void *a, const void *b)
+static int cmp_items(const void *a, const void *b, void *ctx)
{
+ compare_strings_fn cmp = ctx;
const struct string_list_item *one = a;
const struct string_list_item *two = b;
- return compare_for_qsort(one->string, two->string);
+ return cmp(one->string, two->string);
}
void string_list_sort(struct string_list *list)
{
- compare_for_qsort = list->cmp ? list->cmp : strcmp;
- QSORT(list->items, list->nr, cmp_items);
+ QSORT_S(list->items, list->nr, cmp_items,
+ list->cmp ? list->cmp : strcmp);
}
struct string_list_item *unsorted_string_list_lookup(struct string_list *list,
return RECURSE_SUBMODULES_ON_DEMAND;
else if (!strcmp(arg, "check"))
return RECURSE_SUBMODULES_CHECK;
+ else if (!strcmp(arg, "only"))
+ return RECURSE_SUBMODULES_ONLY;
else if (die_on_error)
die("bad %s argument: %s", opt, arg);
else
return parse_push_recurse(opt, arg, 1);
}
-static void warn_multiple_config(const unsigned char *commit_sha1,
+static void warn_multiple_config(const unsigned char *treeish_name,
const char *name, const char *option)
{
const char *commit_string = "WORKTREE";
- if (commit_sha1)
- commit_string = sha1_to_hex(commit_sha1);
+ if (treeish_name)
+ commit_string = sha1_to_hex(treeish_name);
warning("%s:.gitmodules, multiple configurations found for "
"'submodule.%s.%s'. Skipping second one!",
commit_string, name, option);
struct parse_config_parameter {
struct submodule_cache *cache;
- const unsigned char *commit_sha1;
+ const unsigned char *treeish_name;
const unsigned char *gitmodules_sha1;
int overwrite;
};
if (!value)
ret = config_error_nonbool(var);
else if (!me->overwrite && submodule->path)
- warn_multiple_config(me->commit_sha1, submodule->name,
+ warn_multiple_config(me->treeish_name, submodule->name,
"path");
else {
if (submodule->path)
int die_on_error = is_null_sha1(me->gitmodules_sha1);
if (!me->overwrite &&
submodule->fetch_recurse != RECURSE_SUBMODULES_NONE)
- warn_multiple_config(me->commit_sha1, submodule->name,
+ warn_multiple_config(me->treeish_name, submodule->name,
"fetchrecursesubmodules");
else
submodule->fetch_recurse = parse_fetch_recurse(
if (!value)
ret = config_error_nonbool(var);
else if (!me->overwrite && submodule->ignore)
- warn_multiple_config(me->commit_sha1, submodule->name,
+ warn_multiple_config(me->treeish_name, submodule->name,
"ignore");
else if (strcmp(value, "untracked") &&
strcmp(value, "dirty") &&
if (!value) {
ret = config_error_nonbool(var);
} else if (!me->overwrite && submodule->url) {
- warn_multiple_config(me->commit_sha1, submodule->name,
+ warn_multiple_config(me->treeish_name, submodule->name,
"url");
} else {
free((void *) submodule->url);
ret = config_error_nonbool(var);
else if (!me->overwrite &&
submodule->update_strategy.type != SM_UPDATE_UNSPECIFIED)
- warn_multiple_config(me->commit_sha1, submodule->name,
+ warn_multiple_config(me->treeish_name, submodule->name,
"update");
else if (parse_submodule_update_strategy(value,
&submodule->update_strategy) < 0)
die(_("invalid value for %s"), var);
} else if (!strcmp(item.buf, "shallow")) {
if (!me->overwrite && submodule->recommend_shallow != -1)
- warn_multiple_config(me->commit_sha1, submodule->name,
+ warn_multiple_config(me->treeish_name, submodule->name,
"shallow");
else
submodule->recommend_shallow =
git_config_bool(var, value);
} else if (!strcmp(item.buf, "branch")) {
if (!me->overwrite && submodule->branch)
- warn_multiple_config(me->commit_sha1, submodule->name,
+ warn_multiple_config(me->treeish_name, submodule->name,
"branch");
else {
free((void *)submodule->branch);
return ret;
}
-static int gitmodule_sha1_from_commit(const unsigned char *commit_sha1,
+int gitmodule_sha1_from_commit(const unsigned char *treeish_name,
unsigned char *gitmodules_sha1,
struct strbuf *rev)
{
int ret = 0;
- if (is_null_sha1(commit_sha1)) {
+ if (is_null_sha1(treeish_name)) {
hashclr(gitmodules_sha1);
return 1;
}
- strbuf_addf(rev, "%s:.gitmodules", sha1_to_hex(commit_sha1));
+ strbuf_addf(rev, "%s:.gitmodules", sha1_to_hex(treeish_name));
if (get_sha1(rev->buf, gitmodules_sha1) >= 0)
ret = 1;
* revisions.
*/
static const struct submodule *config_from(struct submodule_cache *cache,
- const unsigned char *commit_sha1, const char *key,
+ const unsigned char *treeish_name, const char *key,
enum lookup_type lookup_type)
{
struct strbuf rev = STRBUF_INIT;
* return the first submodule. Can be used to check whether
* there are any submodules parsed.
*/
- if (!commit_sha1 || !key) {
+ if (!treeish_name || !key) {
struct hashmap_iter iter;
struct submodule_entry *entry;
return entry->config;
}
- if (!gitmodule_sha1_from_commit(commit_sha1, sha1, &rev))
+ if (!gitmodule_sha1_from_commit(treeish_name, sha1, &rev))
goto out;
switch (lookup_type) {
/* fill the submodule config into the cache */
parameter.cache = cache;
- parameter.commit_sha1 = commit_sha1;
+ parameter.treeish_name = treeish_name;
parameter.gitmodules_sha1 = sha1;
parameter.overwrite = 0;
git_config_from_mem(parse_config, CONFIG_ORIGIN_SUBMODULE_BLOB, rev.buf,
return submodule;
}
-static const struct submodule *config_from_path(struct submodule_cache *cache,
- const unsigned char *commit_sha1, const char *path)
-{
- return config_from(cache, commit_sha1, path, lookup_path);
-}
-
-static const struct submodule *config_from_name(struct submodule_cache *cache,
- const unsigned char *commit_sha1, const char *name)
-{
- return config_from(cache, commit_sha1, name, lookup_name);
-}
-
static void ensure_cache_init(void)
{
if (is_cache_init)
{
struct parse_config_parameter parameter;
parameter.cache = &the_submodule_cache;
- parameter.commit_sha1 = NULL;
+ parameter.treeish_name = NULL;
parameter.gitmodules_sha1 = null_sha1;
parameter.overwrite = 1;
return parse_config(var, value, ¶meter);
}
-const struct submodule *submodule_from_name(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_name(const unsigned char *treeish_name,
const char *name)
{
ensure_cache_init();
- return config_from_name(&the_submodule_cache, commit_sha1, name);
+ return config_from(&the_submodule_cache, treeish_name, name, lookup_name);
}
-const struct submodule *submodule_from_path(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_path(const unsigned char *treeish_name,
const char *path)
{
ensure_cache_init();
- return config_from_path(&the_submodule_cache, commit_sha1, path);
+ return config_from(&the_submodule_cache, treeish_name, path, lookup_path);
}
void submodule_free(void)
int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg);
int parse_push_recurse_submodules_arg(const char *opt, const char *arg);
int parse_submodule_config_option(const char *var, const char *value);
-const struct submodule *submodule_from_name(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_name(const unsigned char *commit_or_tree,
const char *name);
-const struct submodule *submodule_from_path(const unsigned char *commit_sha1,
+const struct submodule *submodule_from_path(const unsigned char *commit_or_tree,
const char *path);
+extern int gitmodule_sha1_from_commit(const unsigned char *commit_sha1,
+ unsigned char *gitmodules_sha1,
+ struct strbuf *rev);
void submodule_free(void);
#endif /* SUBMODULE_CONFIG_H */
#include "blob.h"
#include "thread-utils.h"
#include "quote.h"
+#include "worktree.h"
static int config_fetch_recurse_submodules = RECURSE_SUBMODULES_ON_DEMAND;
static int parallel_jobs = 1;
}
}
+void gitmodules_config_sha1(const unsigned char *commit_sha1)
+{
+ struct strbuf rev = STRBUF_INIT;
+ unsigned char sha1[20];
+
+ if (gitmodule_sha1_from_commit(commit_sha1, sha1, &rev)) {
+ git_config_from_blob_sha1(submodule_config, rev.buf,
+ sha1, NULL);
+ }
+ strbuf_release(&rev);
+}
+
+/*
+ * Determine if a submodule has been initialized at a given 'path'
+ */
+int is_submodule_initialized(const char *path)
+{
+ int ret = 0;
+ const struct submodule *module = NULL;
+
+ module = submodule_from_path(null_sha1, path);
+
+ if (module) {
+ char *key = xstrfmt("submodule.%s.url", module->name);
+ char *value = NULL;
+
+ ret = !git_config_get_string(key, &value);
+
+ free(value);
+ free(key);
+ }
+
+ return ret;
+}
+
+/*
+ * Determine if a submodule has been populated at a given 'path'
+ */
+int is_submodule_populated(const char *path)
+{
+ int ret = 0;
+ char *gitdir = xstrfmt("%s/.git", path);
+
+ if (resolve_gitdir(gitdir))
+ ret = 1;
+
+ free(gitdir);
+ return ret;
+}
+
int parse_submodule_update_strategy(const char *value,
struct submodule_update_strategy *dst)
{
return 1;
}
-static int submodule_needs_pushing(const char *path, const unsigned char sha1[20])
+static int append_sha1_to_argv(const unsigned char sha1[20], void *data)
+{
+ struct argv_array *argv = data;
+ argv_array_push(argv, sha1_to_hex(sha1));
+ return 0;
+}
+
+static int check_has_commit(const unsigned char sha1[20], void *data)
{
- if (add_submodule_odb(path) || !lookup_commit_reference(sha1))
+ int *has_commit = data;
+
+ if (!lookup_commit_reference(sha1))
+ *has_commit = 0;
+
+ return 0;
+}
+
+static int submodule_has_commits(const char *path, struct sha1_array *commits)
+{
+ int has_commit = 1;
+
+ if (add_submodule_odb(path))
+ return 0;
+
+ sha1_array_for_each_unique(commits, check_has_commit, &has_commit);
+ return has_commit;
+}
+
+static int submodule_needs_pushing(const char *path, struct sha1_array *commits)
+{
+ if (!submodule_has_commits(path, commits))
+ /*
+ * NOTE: We do consider it safe to return "no" here. The
+ * correct answer would be "We do not know" instead of
+ * "No push needed", but it is quite hard to change
+ * the submodule pointer without having the submodule
+ * around. If a user did however change the submodules
+ * without having the submodule around, this indicates
+ * an expert who knows what they are doing or a
+ * maintainer integrating work from other people. In
+ * both cases it should be safe to skip this check.
+ */
return 0;
if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
struct child_process cp = CHILD_PROCESS_INIT;
- const char *argv[] = {"rev-list", NULL, "--not", "--remotes", "-n", "1" , NULL};
struct strbuf buf = STRBUF_INIT;
int needs_pushing = 0;
- argv[1] = sha1_to_hex(sha1);
- cp.argv = argv;
+ argv_array_push(&cp.args, "rev-list");
+ sha1_array_for_each_unique(commits, append_sha1_to_argv, &cp.args);
+ argv_array_pushl(&cp.args, "--not", "--remotes", "-n", "1" , NULL);
+
prepare_submodule_repo_env(&cp.env_array);
cp.git_cmd = 1;
cp.no_stdin = 1;
cp.out = -1;
cp.dir = path;
if (start_command(&cp))
- die("Could not run 'git rev-list %s --not --remotes -n 1' command in submodule %s",
- sha1_to_hex(sha1), path);
+ die("Could not run 'git rev-list <commits> --not --remotes -n 1' command in submodule %s",
+ path);
if (strbuf_read(&buf, cp.out, 41))
needs_pushing = 1;
finish_command(&cp);
return 0;
}
+static struct sha1_array *submodule_commits(struct string_list *submodules,
+ const char *path)
+{
+ struct string_list_item *item;
+
+ item = string_list_insert(submodules, path);
+ if (item->util)
+ return (struct sha1_array *) item->util;
+
+ /* NEEDSWORK: should we have sha1_array_init()? */
+ item->util = xcalloc(1, sizeof(struct sha1_array));
+ return (struct sha1_array *) item->util;
+}
+
static void collect_submodules_from_diff(struct diff_queue_struct *q,
struct diff_options *options,
void *data)
{
int i;
- struct string_list *needs_pushing = data;
+ struct string_list *submodules = data;
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
+ struct sha1_array *commits;
if (!S_ISGITLINK(p->two->mode))
continue;
- if (submodule_needs_pushing(p->two->path, p->two->oid.hash))
- string_list_insert(needs_pushing, p->two->path);
+ commits = submodule_commits(submodules, p->two->path);
+ sha1_array_append(commits, p->two->oid.hash);
}
}
diff_tree_combined_merge(commit, 1, &rev);
}
-int find_unpushed_submodules(unsigned char new_sha1[20],
+static void free_submodules_sha1s(struct string_list *submodules)
+{
+ struct string_list_item *item;
+ for_each_string_list_item(item, submodules)
+ sha1_array_clear((struct sha1_array *) item->util);
+ string_list_clear(submodules, 1);
+}
+
+int find_unpushed_submodules(struct sha1_array *commits,
const char *remotes_name, struct string_list *needs_pushing)
{
struct rev_info rev;
struct commit *commit;
- const char *argv[] = {NULL, NULL, "--not", "NULL", NULL};
- int argc = ARRAY_SIZE(argv) - 1;
- char *sha1_copy;
-
- struct strbuf remotes_arg = STRBUF_INIT;
+ struct string_list submodules = STRING_LIST_INIT_DUP;
+ struct string_list_item *submodule;
+ struct argv_array argv = ARGV_ARRAY_INIT;
- strbuf_addf(&remotes_arg, "--remotes=%s", remotes_name);
init_revisions(&rev, NULL);
- sha1_copy = xstrdup(sha1_to_hex(new_sha1));
- argv[1] = sha1_copy;
- argv[3] = remotes_arg.buf;
- setup_revisions(argc, argv, &rev, NULL);
+
+ /* argv.argv[0] will be ignored by setup_revisions */
+ argv_array_push(&argv, "find_unpushed_submodules");
+ sha1_array_for_each_unique(commits, append_sha1_to_argv, &argv);
+ argv_array_push(&argv, "--not");
+ argv_array_pushf(&argv, "--remotes=%s", remotes_name);
+
+ setup_revisions(argv.argc, argv.argv, &rev, NULL);
if (prepare_revision_walk(&rev))
die("revision walk setup failed");
while ((commit = get_revision(&rev)) != NULL)
- find_unpushed_submodule_commits(commit, needs_pushing);
+ find_unpushed_submodule_commits(commit, &submodules);
reset_revision_walk();
- free(sha1_copy);
- strbuf_release(&remotes_arg);
+ argv_array_clear(&argv);
+
+ for_each_string_list_item(submodule, &submodules) {
+ struct sha1_array *commits = (struct sha1_array *) submodule->util;
+
+ if (submodule_needs_pushing(submodule->string, commits))
+ string_list_insert(needs_pushing, submodule->string);
+ }
+ free_submodules_sha1s(&submodules);
return needs_pushing->nr;
}
-static int push_submodule(const char *path)
+static int push_submodule(const char *path, int dry_run)
{
if (add_submodule_odb(path))
return 1;
if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
struct child_process cp = CHILD_PROCESS_INIT;
- const char *argv[] = {"push", NULL};
+ argv_array_push(&cp.args, "push");
+ if (dry_run)
+ argv_array_push(&cp.args, "--dry-run");
- cp.argv = argv;
prepare_submodule_repo_env(&cp.env_array);
cp.git_cmd = 1;
cp.no_stdin = 1;
return 1;
}
-int push_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name)
+int push_unpushed_submodules(struct sha1_array *commits,
+ const char *remotes_name,
+ int dry_run)
{
int i, ret = 1;
struct string_list needs_pushing = STRING_LIST_INIT_DUP;
- if (!find_unpushed_submodules(new_sha1, remotes_name, &needs_pushing))
+ if (!find_unpushed_submodules(commits, remotes_name, &needs_pushing))
return 1;
for (i = 0; i < needs_pushing.nr; i++) {
const char *path = needs_pushing.items[i].string;
fprintf(stderr, "Pushing submodule '%s'\n", path);
- if (!push_submodule(path)) {
+ if (!push_submodule(path, dry_run)) {
fprintf(stderr, "Unable to push submodule '%s'\n", path);
ret = 0;
}
return 1;
}
-int ok_to_remove_submodule(const char *path)
+/*
+ * Check if it is a bad idea to remove a submodule, i.e. if we'd lose data
+ * when doing so.
+ *
+ * Return 1 if we'd lose data, return 0 if the removal is fine,
+ * and negative values for errors.
+ */
+int bad_to_remove_submodule(const char *path, unsigned flags)
{
ssize_t len;
struct child_process cp = CHILD_PROCESS_INIT;
- const char *argv[] = {
- "status",
- "--porcelain",
- "-u",
- "--ignore-submodules=none",
- NULL,
- };
struct strbuf buf = STRBUF_INIT;
- int ok_to_remove = 1;
+ int ret = 0;
if (!file_exists(path) || is_empty_dir(path))
- return 1;
+ return 0;
if (!submodule_uses_gitfile(path))
- return 0;
+ return 1;
+
+ argv_array_pushl(&cp.args, "status", "--porcelain",
+ "--ignore-submodules=none", NULL);
+
+ if (flags & SUBMODULE_REMOVAL_IGNORE_UNTRACKED)
+ argv_array_push(&cp.args, "-uno");
+ else
+ argv_array_push(&cp.args, "-uall");
+
+ if (!(flags & SUBMODULE_REMOVAL_IGNORE_IGNORED_UNTRACKED))
+ argv_array_push(&cp.args, "--ignored");
- cp.argv = argv;
prepare_submodule_repo_env(&cp.env_array);
cp.git_cmd = 1;
cp.no_stdin = 1;
cp.out = -1;
cp.dir = path;
- if (start_command(&cp))
- die("Could not run 'git status --porcelain -uall --ignore-submodules=none' in submodule %s", path);
+ if (start_command(&cp)) {
+ if (flags & SUBMODULE_REMOVAL_DIE_ON_ERROR)
+ die(_("could not start 'git status in submodule '%s'"),
+ path);
+ ret = -1;
+ goto out;
+ }
len = strbuf_read(&buf, cp.out, 1024);
if (len > 2)
- ok_to_remove = 0;
+ ret = 1;
close(cp.out);
- if (finish_command(&cp))
- die("'git status --porcelain -uall --ignore-submodules=none' failed in submodule %s", path);
-
+ if (finish_command(&cp)) {
+ if (flags & SUBMODULE_REMOVAL_DIE_ON_ERROR)
+ die(_("could not run 'git status in submodule '%s'"),
+ path);
+ ret = -1;
+ }
+out:
strbuf_release(&buf);
- return ok_to_remove;
+ return ret;
}
static int find_first_merges(struct object_array *result, const char *path,
return 0;
}
-/* Update gitfile and core.worktree setting to connect work tree and git dir */
-void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir)
-{
- struct strbuf file_name = STRBUF_INIT;
- struct strbuf rel_path = STRBUF_INIT;
- const char *real_work_tree = xstrdup(real_path(work_tree));
-
- /* Update gitfile */
- strbuf_addf(&file_name, "%s/.git", work_tree);
- write_file(file_name.buf, "gitdir: %s",
- relative_path(git_dir, real_work_tree, &rel_path));
-
- /* Update core.worktree setting */
- strbuf_reset(&file_name);
- strbuf_addf(&file_name, "%s/config", git_dir);
- git_config_set_in_file(file_name.buf, "core.worktree",
- relative_path(real_work_tree, git_dir,
- &rel_path));
-
- strbuf_release(&file_name);
- strbuf_release(&rel_path);
- free((void *)real_work_tree);
-}
-
int parallel_submodules(void)
{
return parallel_jobs;
if (strcmp(*var, CONFIG_DATA_ENVIRONMENT))
argv_array_push(out, *var);
}
- argv_array_push(out, "GIT_DIR=.git");
+ argv_array_pushf(out, "%s=%s", GIT_DIR_ENVIRONMENT,
+ DEFAULT_GIT_DIR_ENVIRONMENT);
+}
+
+/*
+ * Embeds a single submodules git directory into the superprojects git dir,
+ * non recursively.
+ */
+static void relocate_single_git_dir_into_superproject(const char *prefix,
+ const char *path)
+{
+ char *old_git_dir = NULL, *real_old_git_dir = NULL, *real_new_git_dir = NULL;
+ const char *new_git_dir;
+ const struct submodule *sub;
+
+ if (submodule_uses_worktrees(path))
+ die(_("relocate_gitdir for submodule '%s' with "
+ "more than one worktree not supported"), path);
+
+ old_git_dir = xstrfmt("%s/.git", path);
+ if (read_gitfile(old_git_dir))
+ /* If it is an actual gitfile, it doesn't need migration. */
+ return;
+
+ real_old_git_dir = real_pathdup(old_git_dir);
+
+ sub = submodule_from_path(null_sha1, path);
+ if (!sub)
+ die(_("could not lookup name for submodule '%s'"), path);
+
+ new_git_dir = git_path("modules/%s", sub->name);
+ if (safe_create_leading_directories_const(new_git_dir) < 0)
+ die(_("could not create directory '%s'"), new_git_dir);
+ real_new_git_dir = real_pathdup(new_git_dir);
+
+ if (!prefix)
+ prefix = get_super_prefix();
+
+ fprintf(stderr, _("Migrating git directory of '%s%s' from\n'%s' to\n'%s'\n"),
+ prefix ? prefix : "", path,
+ real_old_git_dir, real_new_git_dir);
+
+ relocate_gitdir(path, real_old_git_dir, real_new_git_dir);
+
+ free(old_git_dir);
+ free(real_old_git_dir);
+ free(real_new_git_dir);
+}
+
+/*
+ * Migrate the git directory of the submodule given by path from
+ * having its git directory within the working tree to the git dir nested
+ * in its superprojects git dir under modules/.
+ */
+void absorb_git_dir_into_superproject(const char *prefix,
+ const char *path,
+ unsigned flags)
+{
+ int err_code;
+ const char *sub_git_dir;
+ struct strbuf gitdir = STRBUF_INIT;
+ strbuf_addf(&gitdir, "%s/.git", path);
+ sub_git_dir = resolve_gitdir_gently(gitdir.buf, &err_code);
+
+ /* Not populated? */
+ if (!sub_git_dir) {
+ char *real_new_git_dir;
+ const char *new_git_dir;
+ const struct submodule *sub;
+
+ if (err_code == READ_GITFILE_ERR_STAT_FAILED) {
+ /* unpopulated as expected */
+ strbuf_release(&gitdir);
+ return;
+ }
+
+ if (err_code != READ_GITFILE_ERR_NOT_A_REPO)
+ /* We don't know what broke here. */
+ read_gitfile_error_die(err_code, path, NULL);
+
+ /*
+ * Maybe populated, but no git directory was found?
+ * This can happen if the superproject is a submodule
+ * itself and was just absorbed. The absorption of the
+ * superproject did not rewrite the git file links yet,
+ * fix it now.
+ */
+ sub = submodule_from_path(null_sha1, path);
+ if (!sub)
+ die(_("could not lookup name for submodule '%s'"), path);
+ new_git_dir = git_path("modules/%s", sub->name);
+ if (safe_create_leading_directories_const(new_git_dir) < 0)
+ die(_("could not create directory '%s'"), new_git_dir);
+ real_new_git_dir = real_pathdup(new_git_dir);
+ connect_work_tree_and_git_dir(path, real_new_git_dir);
+
+ free(real_new_git_dir);
+ } else {
+ /* Is it already absorbed into the superprojects git dir? */
+ char *real_sub_git_dir = real_pathdup(sub_git_dir);
+ char *real_common_git_dir = real_pathdup(get_git_common_dir());
+
+ if (!starts_with(real_sub_git_dir, real_common_git_dir))
+ relocate_single_git_dir_into_superproject(prefix, path);
+
+ free(real_sub_git_dir);
+ free(real_common_git_dir);
+ }
+ strbuf_release(&gitdir);
+
+ if (flags & ABSORB_GITDIR_RECURSE_SUBMODULES) {
+ struct child_process cp = CHILD_PROCESS_INIT;
+ struct strbuf sb = STRBUF_INIT;
+
+ if (flags & ~ABSORB_GITDIR_RECURSE_SUBMODULES)
+ die("BUG: we don't know how to pass the flags down?");
+
+ if (get_super_prefix())
+ strbuf_addstr(&sb, get_super_prefix());
+ strbuf_addstr(&sb, path);
+ strbuf_addch(&sb, '/');
+
+ cp.dir = path;
+ cp.git_cmd = 1;
+ cp.no_stdin = 1;
+ argv_array_pushl(&cp.args, "--super-prefix", sb.buf,
+ "submodule--helper",
+ "absorb-git-dirs", NULL);
+ prepare_submodule_repo_env(&cp.env_array);
+ if (run_command(&cp))
+ die(_("could not recurse into submodule '%s'"), path);
+
+ strbuf_release(&sb);
+ }
}
struct diff_options;
struct argv_array;
+struct sha1_array;
enum {
+ RECURSE_SUBMODULES_ONLY = -5,
RECURSE_SUBMODULES_CHECK = -4,
RECURSE_SUBMODULES_ERROR = -3,
RECURSE_SUBMODULES_NONE = -2,
};
#define SUBMODULE_UPDATE_STRATEGY_INIT {SM_UPDATE_UNSPECIFIED, NULL}
-int is_staging_gitmodules_ok(void);
-int update_path_in_gitmodules(const char *oldpath, const char *newpath);
-int remove_path_from_gitmodules(const char *path);
-void stage_updated_gitmodules(void);
-void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt,
+extern int is_staging_gitmodules_ok(void);
+extern int update_path_in_gitmodules(const char *oldpath, const char *newpath);
+extern int remove_path_from_gitmodules(const char *path);
+extern void stage_updated_gitmodules(void);
+extern void set_diffopt_flags_from_submodule_config(struct diff_options *,
const char *path);
-int submodule_config(const char *var, const char *value, void *cb);
-void gitmodules_config(void);
-int parse_submodule_update_strategy(const char *value,
+extern int submodule_config(const char *var, const char *value, void *cb);
+extern void gitmodules_config(void);
+extern void gitmodules_config_sha1(const unsigned char *commit_sha1);
+extern int is_submodule_initialized(const char *path);
+extern int is_submodule_populated(const char *path);
+extern int parse_submodule_update_strategy(const char *value,
struct submodule_update_strategy *dst);
-const char *submodule_strategy_to_string(const struct submodule_update_strategy *s);
-void handle_ignore_submodules_arg(struct diff_options *diffopt, const char *);
-void show_submodule_summary(FILE *f, const char *path,
+extern const char *submodule_strategy_to_string(const struct submodule_update_strategy *s);
+extern void handle_ignore_submodules_arg(struct diff_options *, const char *);
+extern void show_submodule_summary(FILE *f, const char *path,
const char *line_prefix,
struct object_id *one, struct object_id *two,
unsigned dirty_submodule, const char *meta,
const char *del, const char *add, const char *reset);
-void show_submodule_inline_diff(FILE *f, const char *path,
+extern void show_submodule_inline_diff(FILE *f, const char *path,
const char *line_prefix,
struct object_id *one, struct object_id *two,
unsigned dirty_submodule, const char *meta,
const char *del, const char *add, const char *reset,
const struct diff_options *opt);
-void set_config_fetch_recurse_submodules(int value);
-void check_for_new_submodule_commits(unsigned char new_sha1[20]);
-int fetch_populated_submodules(const struct argv_array *options,
+extern void set_config_fetch_recurse_submodules(int value);
+extern void check_for_new_submodule_commits(unsigned char new_sha1[20]);
+extern int fetch_populated_submodules(const struct argv_array *options,
const char *prefix, int command_line_option,
int quiet, int max_parallel_jobs);
-unsigned is_submodule_modified(const char *path, int ignore_untracked);
-int submodule_uses_gitfile(const char *path);
-int ok_to_remove_submodule(const char *path);
-int merge_submodule(unsigned char result[20], const char *path, const unsigned char base[20],
- const unsigned char a[20], const unsigned char b[20], int search);
-int find_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name,
- struct string_list *needs_pushing);
-int push_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name);
-void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir);
-int parallel_submodules(void);
+extern unsigned is_submodule_modified(const char *path, int ignore_untracked);
+extern int submodule_uses_gitfile(const char *path);
+
+#define SUBMODULE_REMOVAL_DIE_ON_ERROR (1<<0)
+#define SUBMODULE_REMOVAL_IGNORE_UNTRACKED (1<<1)
+#define SUBMODULE_REMOVAL_IGNORE_IGNORED_UNTRACKED (1<<2)
+extern int bad_to_remove_submodule(const char *path, unsigned flags);
+extern int merge_submodule(unsigned char result[20], const char *path,
+ const unsigned char base[20],
+ const unsigned char a[20],
+ const unsigned char b[20], int search);
+extern int find_unpushed_submodules(struct sha1_array *commits,
+ const char *remotes_name,
+ struct string_list *needs_pushing);
+extern int push_unpushed_submodules(struct sha1_array *commits,
+ const char *remotes_name,
+ int dry_run);
+extern void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir);
+extern int parallel_submodules(void);
/*
* Prepare the "env_array" parameter of a "struct child_process" for executing
* a submodule by clearing any repo-specific envirionment variables, but
* retaining any config in the environment.
*/
-void prepare_submodule_repo_env(struct argv_array *out);
+extern void prepare_submodule_repo_env(struct argv_array *out);
+#define ABSORB_GITDIR_RECURSE_SUBMODULES (1<<0)
+extern void absorb_git_dir_into_superproject(const char *prefix,
+ const char *path,
+ unsigned flags);
#endif
test: pre-clean $(TEST_LINT)
$(MAKE) aggregate-results-and-cleanup
+failed:
+ @failed=$$(cd '$(TEST_RESULTS_DIRECTORY_SQ)' && \
+ grep -l '^failed [1-9]' *.counts | \
+ sed -n 's/\.counts$$/.sh/p') && \
+ test -z "$$failed" || $(MAKE) $$failed
+
prove: pre-clean $(TEST_LINT)
@echo "*** prove ***"; $(PROVE) --exec '$(SHELL_PATH_SQ)' $(GIT_PROVE_OPTS) $(T) :: $(GIT_TEST_OPTS)
$(MAKE) clean-except-prove-cache
int cmd_main(int ac, const char **av)
{
setup_git_directory();
- hold_locked_index(&index_lock, 1);
+ hold_locked_index(&index_lock, LOCK_DIE_ON_ERROR);
if (read_cache() < 0)
die("unable to read index file");
active_cache_tree = NULL;
return 0;
}
+ if (argc == 2 && !strcmp(argv[1], "sort")) {
+ struct string_list list = STRING_LIST_INIT_NODUP;
+ struct strbuf sb = STRBUF_INIT;
+ struct string_list_item *item;
+
+ strbuf_read(&sb, 0, 0);
+
+ /*
+ * Split by newline, but don't create a string_list item
+ * for the empty string after the last separator.
+ */
+ if (sb.buf[sb.len - 1] == '\n')
+ strbuf_setlen(&sb, sb.len - 1);
+ string_list_split_in_place(&list, sb.buf, '\n', -1);
+
+ string_list_sort(&list);
+
+ for_each_string_list_item(item, &list)
+ puts(item->string);
+
+ string_list_clear(&list, 0);
+ strbuf_release(&sb);
+ return 0;
+ }
+
fprintf(stderr, "%s: unknown function name: %s\n", argv[0],
argv[1] ? argv[1] : "(there was none)");
return 1;
</Files>
RewriteEngine on
+RewriteRule ^/dumb-redir/(.*)$ /dumb/$1 [R=301]
RewriteRule ^/smart-redir-perm/(.*)$ /smart/$1 [R=301]
RewriteRule ^/smart-redir-temp/(.*)$ /smart/$1 [R=302]
RewriteRule ^/smart-redir-auth/(.*)$ /auth/smart/$1 [R=301]
RewriteRule ^/loop-redir/x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-(.*) /$1 [R=302]
RewriteRule ^/loop-redir/(.*)$ /loop-redir/x-$1 [R=302]
+# The first rule issues a client-side redirect to something
+# that _doesn't_ look like a git repo. The second rule is a
+# server-side rewrite, so that it turns out the odd-looking
+# thing _is_ a git repo. The "[PT]" tells Apache to match
+# the usual ScriptAlias rules for /smart.
+RewriteRule ^/insane-redir/(.*)$ /intern-redir/$1/foo [R=301]
+RewriteRule ^/intern-redir/(.*)/foo$ /smart/$1 [PT]
+
+# Serve info/refs internally without redirecting, but
+# issue a redirect for any object requests.
+RewriteRule ^/redir-objects/(.*/info/refs)$ /dumb/$1 [PT]
+RewriteRule ^/redir-objects/(.*/objects/.*)$ /dumb/$1 [R=301]
+
# Apache 2.2 does not understand <RequireAll>, so we use RewriteCond.
# And as RewriteCond does not allow testing for non-matches, we match
# the desired case first (one has abra, two has cadabra), and let it
# Test routines for checking protocol disabling.
-# test cloning a particular protocol
-# $1 - description of the protocol
-# $2 - machine-readable name of the protocol
-# $3 - the URL to try cloning
-test_proto () {
+# Test clone/fetch/push with GIT_ALLOW_PROTOCOL whitelist
+test_whitelist () {
desc=$1
proto=$2
url=$3
- test_expect_success "clone $1 (enabled)" '
+ test_expect_success "clone $desc (enabled)" '
rm -rf tmp.git &&
(
GIT_ALLOW_PROTOCOL=$proto &&
)
'
- test_expect_success "fetch $1 (enabled)" '
+ test_expect_success "fetch $desc (enabled)" '
(
cd tmp.git &&
GIT_ALLOW_PROTOCOL=$proto &&
)
'
- test_expect_success "push $1 (enabled)" '
+ test_expect_success "push $desc (enabled)" '
(
cd tmp.git &&
GIT_ALLOW_PROTOCOL=$proto &&
)
'
- test_expect_success "push $1 (disabled)" '
+ test_expect_success "push $desc (disabled)" '
(
cd tmp.git &&
GIT_ALLOW_PROTOCOL=none &&
)
'
- test_expect_success "fetch $1 (disabled)" '
+ test_expect_success "fetch $desc (disabled)" '
(
cd tmp.git &&
GIT_ALLOW_PROTOCOL=none &&
)
'
- test_expect_success "clone $1 (disabled)" '
+ test_expect_success "clone $desc (disabled)" '
rm -rf tmp.git &&
(
GIT_ALLOW_PROTOCOL=none &&
test_must_fail git clone --bare "$url" tmp.git
)
'
+
+ test_expect_success "clone $desc (env var has precedence)" '
+ rm -rf tmp.git &&
+ (
+ GIT_ALLOW_PROTOCOL=none &&
+ export GIT_ALLOW_PROTOCOL &&
+ test_must_fail git -c protocol.allow=always clone --bare "$url" tmp.git &&
+ test_must_fail git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
+ )
+ '
+}
+
+test_config () {
+ desc=$1
+ proto=$2
+ url=$3
+
+ # Test clone/fetch/push with protocol.<type>.allow config
+ test_expect_success "clone $desc (enabled with config)" '
+ rm -rf tmp.git &&
+ git -c protocol.$proto.allow=always clone --bare "$url" tmp.git
+ '
+
+ test_expect_success "fetch $desc (enabled)" '
+ git -C tmp.git -c protocol.$proto.allow=always fetch
+ '
+
+ test_expect_success "push $desc (enabled)" '
+ git -C tmp.git -c protocol.$proto.allow=always push origin HEAD:pushed
+ '
+
+ test_expect_success "push $desc (disabled)" '
+ test_must_fail git -C tmp.git -c protocol.$proto.allow=never push origin HEAD:pushed
+ '
+
+ test_expect_success "fetch $desc (disabled)" '
+ test_must_fail git -C tmp.git -c protocol.$proto.allow=never fetch
+ '
+
+ test_expect_success "clone $desc (disabled)" '
+ rm -rf tmp.git &&
+ test_must_fail git -c protocol.$proto.allow=never clone --bare "$url" tmp.git
+ '
+
+ # Test clone/fetch/push with protocol.user.allow and its env var
+ test_expect_success "clone $desc (enabled)" '
+ rm -rf tmp.git &&
+ git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
+ '
+
+ test_expect_success "fetch $desc (enabled)" '
+ git -C tmp.git -c protocol.$proto.allow=user fetch
+ '
+
+ test_expect_success "push $desc (enabled)" '
+ git -C tmp.git -c protocol.$proto.allow=user push origin HEAD:pushed
+ '
+
+ test_expect_success "push $desc (disabled)" '
+ (
+ cd tmp.git &&
+ GIT_PROTOCOL_FROM_USER=0 &&
+ export GIT_PROTOCOL_FROM_USER &&
+ test_must_fail git -c protocol.$proto.allow=user push origin HEAD:pushed
+ )
+ '
+
+ test_expect_success "fetch $desc (disabled)" '
+ (
+ cd tmp.git &&
+ GIT_PROTOCOL_FROM_USER=0 &&
+ export GIT_PROTOCOL_FROM_USER &&
+ test_must_fail git -c protocol.$proto.allow=user fetch
+ )
+ '
+
+ test_expect_success "clone $desc (disabled)" '
+ rm -rf tmp.git &&
+ (
+ GIT_PROTOCOL_FROM_USER=0 &&
+ export GIT_PROTOCOL_FROM_USER &&
+ test_must_fail git -c protocol.$proto.allow=user clone --bare "$url" tmp.git
+ )
+ '
+
+ # Test clone/fetch/push with protocol.allow user defined default
+ test_expect_success "clone $desc (enabled)" '
+ rm -rf tmp.git &&
+ git config --global protocol.allow always &&
+ git clone --bare "$url" tmp.git
+ '
+
+ test_expect_success "fetch $desc (enabled)" '
+ git -C tmp.git fetch
+ '
+
+ test_expect_success "push $desc (enabled)" '
+ git -C tmp.git push origin HEAD:pushed
+ '
+
+ test_expect_success "push $desc (disabled)" '
+ git config --global protocol.allow never &&
+ test_must_fail git -C tmp.git push origin HEAD:pushed
+ '
+
+ test_expect_success "fetch $desc (disabled)" '
+ test_must_fail git -C tmp.git fetch
+ '
+
+ test_expect_success "clone $desc (disabled)" '
+ rm -rf tmp.git &&
+ test_must_fail git clone --bare "$url" tmp.git
+ '
+}
+
+# test cloning a particular protocol
+# $1 - description of the protocol
+# $2 - machine-readable name of the protocol
+# $3 - the URL to try cloning
+test_proto () {
+ test_whitelist "$@"
+
+ test_config "$@"
}
# set up an ssh wrapper that will access $host/$repo in the
git checkout -b "replace_sub1_with_directory" "add_sub1" &&
git submodule update &&
- (
- cd sub1 &&
- git checkout modifications
- ) &&
+ git -C sub1 checkout modifications &&
git rm --cached sub1 &&
rm sub1/.git* &&
git config -f .gitmodules --remove-section "submodule.sub1" &&
--- /dev/null
+#!/bin/sh
+
+test_description='Basic sort performance tests'
+. ./perf-lib.sh
+
+test_perf_default_repo
+
+test_expect_success 'setup' '
+ git ls-files --stage "*.[ch]" "*.sh" |
+ cut -f2 -d" " |
+ git cat-file --batch >unsorted
+'
+
+test_perf 'sort(1)' '
+ sort <unsorted >expect
+'
+
+test_perf 'string_list_sort()' '
+ test-string-list sort <unsorted >actual
+'
+
+test_expect_success 'string_list_sort() sorts like sort(1)' '
+ test_cmp_bin expect actual
+'
+
+test_done
export PACK
'
+test_expect_success 'create target repositories' '
+ for repo in t1 t2 t3 t4 t5 t6
+ do
+ git init --bare $repo
+ done
+'
+
test_perf 'index-pack 0 threads' '
GIT_DIR=t1 git index-pack --threads=1 --stdin < $PACK
'
(
# Leading directories should honor umask while
# the repository itself should follow "shared"
+ mkdir newdir &&
+ # Remove a default ACL if possible.
+ (setfacl -k newdir 2>/dev/null || true) &&
umask 002 &&
git init --bare --shared=0660 newdir/a/b/c &&
test_path_is_dir newdir/a/b/c/refs &&
git checkout -- test test.t test.i &&
echo "content-test2" >test2.o &&
- echo "content-test3 - filename with special characters" >"test3 '\''sq'\'',\$x.o"
+ echo "content-test3 - filename with special characters" >"test3 '\''sq'\'',\$x=.o"
'
script='s/^\$Id: \([0-9a-f]*\) \$/\1/p'
cd repo &&
git init &&
- echo "git-stderr.log" >.gitignore &&
echo "*.r filter=protocol" >.gitattributes &&
git add . &&
- git commit . -m "test commit 1" &&
+ git commit -m "test commit 1" &&
git branch empty-branch &&
cp "$TEST_ROOT/test.o" test.r &&
cp "$TEST_ROOT/test2.o" test2.r &&
mkdir testsubdir &&
- cp "$TEST_ROOT/test3 '\''sq'\'',\$x.o" "testsubdir/test3 '\''sq'\'',\$x.r" &&
+ cp "$TEST_ROOT/test3 '\''sq'\'',\$x=.o" "testsubdir/test3 '\''sq'\'',\$x=.r" &&
>test4-empty.r &&
S=$(file_size test.r) &&
S2=$(file_size test2.r) &&
- S3=$(file_size "testsubdir/test3 '\''sq'\'',\$x.r") &&
+ S3=$(file_size "testsubdir/test3 '\''sq'\'',\$x=.r") &&
filter_git add . &&
cat >expected.log <<-EOF &&
IN: clean test.r $S [OK] -- OUT: $S . [OK]
IN: clean test2.r $S2 [OK] -- OUT: $S2 . [OK]
IN: clean test4-empty.r 0 [OK] -- OUT: 0 [OK]
- IN: clean testsubdir/test3 '\''sq'\'',\$x.r $S3 [OK] -- OUT: $S3 . [OK]
+ IN: clean testsubdir/test3 '\''sq'\'',\$x=.r $S3 [OK] -- OUT: $S3 . [OK]
STOP
EOF
test_cmp_count expected.log rot13-filter.log &&
- filter_git commit . -m "test commit 2" &&
- cat >expected.log <<-EOF &&
- START
- init handshake complete
- IN: clean test.r $S [OK] -- OUT: $S . [OK]
- IN: clean test2.r $S2 [OK] -- OUT: $S2 . [OK]
- IN: clean test4-empty.r 0 [OK] -- OUT: 0 [OK]
- IN: clean testsubdir/test3 '\''sq'\'',\$x.r $S3 [OK] -- OUT: $S3 . [OK]
- IN: clean test.r $S [OK] -- OUT: $S . [OK]
- IN: clean test2.r $S2 [OK] -- OUT: $S2 . [OK]
- IN: clean test4-empty.r 0 [OK] -- OUT: 0 [OK]
- IN: clean testsubdir/test3 '\''sq'\'',\$x.r $S3 [OK] -- OUT: $S3 . [OK]
- STOP
- EOF
- test_cmp_count expected.log rot13-filter.log &&
-
- rm -f test2.r "testsubdir/test3 '\''sq'\'',\$x.r" &&
+ git commit -m "test commit 2" &&
+ rm -f test2.r "testsubdir/test3 '\''sq'\'',\$x=.r" &&
filter_git checkout --quiet --no-progress . &&
cat >expected.log <<-EOF &&
START
init handshake complete
IN: smudge test2.r $S2 [OK] -- OUT: $S2 . [OK]
- IN: smudge testsubdir/test3 '\''sq'\'',\$x.r $S3 [OK] -- OUT: $S3 . [OK]
+ IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $S3 [OK] -- OUT: $S3 . [OK]
STOP
EOF
test_cmp_exclude_clean expected.log rot13-filter.log &&
IN: smudge test.r $S [OK] -- OUT: $S . [OK]
IN: smudge test2.r $S2 [OK] -- OUT: $S2 . [OK]
IN: smudge test4-empty.r 0 [OK] -- OUT: 0 [OK]
- IN: smudge testsubdir/test3 '\''sq'\'',\$x.r $S3 [OK] -- OUT: $S3 . [OK]
+ IN: smudge testsubdir/test3 '\''sq'\'',\$x=.r $S3 [OK] -- OUT: $S3 . [OK]
STOP
EOF
test_cmp_exclude_clean expected.log rot13-filter.log &&
test_cmp_committed_rot13 "$TEST_ROOT/test.o" test.r &&
test_cmp_committed_rot13 "$TEST_ROOT/test2.o" test2.r &&
- test_cmp_committed_rot13 "$TEST_ROOT/test3 '\''sq'\'',\$x.o" "testsubdir/test3 '\''sq'\'',\$x.r"
+ test_cmp_committed_rot13 "$TEST_ROOT/test3 '\''sq'\'',\$x=.o" "testsubdir/test3 '\''sq'\'',\$x=.r"
)
'
$debug->flush();
while (1) {
- my ($command) = packet_txt_read() =~ /^command=([^=]+)$/;
+ my ($command) = packet_txt_read() =~ /^command=(.+)$/;
print $debug "IN: $command";
$debug->flush();
- my ($pathname) = packet_txt_read() =~ /^pathname=([^=]+)$/;
+ my ($pathname) = packet_txt_read() =~ /^pathname=(.+)$/;
print $debug " $pathname";
$debug->flush();
+ if ( $pathname eq "" ) {
+ die "bad pathname '$pathname'";
+ }
+
# Flush
packet_bin_read();
use strict;
use warnings;
use POSIX qw(:locale_h);
-use Test::More tests => 8;
+use Test::More tests => 13;
use Git::I18N;
my $has_gettext_library = $Git::I18N::__HAS_LIBRARY;
# more gettext wrapper functions.
my %prototypes = (qw(
__ $
+ __n $$$
+ N__ $
));
while (my ($sub, $proto) = each %prototypes) {
is(prototype(\&{"Git::I18N::$sub"}), $proto, "sanity: $sub has a $proto prototype");
my ($got, $expect) = (('TEST: A Perl test string') x 2);
is(__($got), $expect, "Passing a string through __() in the C locale works");
+
+ my ($got_singular, $got_plural, $expect_singular, $expect_plural) =
+ (('TEST: 1 file', 'TEST: n files') x 2);
+
+ is(__n($got_singular, $got_plural, 1), $expect_singular,
+ "Get singular string through __n() in C locale");
+ is(__n($got_singular, $got_plural, 2), $expect_plural,
+ "Get plural string through __n() in C locale");
+
+ is(N__($got), $expect, "Passing a string through N__() in the C locale works");
}
# Test a basic message on different locales
EOF
check_result () {
- git ls-files --stage | sed -e 's/ '"$_x40"' / X /' >current &&
- test_cmp expected current
+ git ls-files --stage | sed -e 's/ '"$_x40"' / X /' >current &&
+ test_cmp expected current
}
# This is done on an empty work directory, which is the normal
# merge person behaviour.
-test_expect_success \
- '3-way merge with git read-tree -m, empty cache' \
- "rm -fr [NDMALTS][NDMALTSF] Z &&
- rm .git/index &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
+test_expect_success '3-way merge with git read-tree -m, empty cache' '
+ rm -fr [NDMALTS][NDMALTSF] Z &&
+ rm .git/index &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
# This starts out with the first head, which is the normal
# patch submitter behaviour.
-test_expect_success \
- '3-way merge with git read-tree -m, match H' \
- "rm -fr [NDMALTS][NDMALTSF] Z &&
- rm .git/index &&
- read_tree_must_succeed $tree_A &&
- git checkout-index -f -u -a &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
+test_expect_success '3-way merge with git read-tree -m, match H' '
+ rm -fr [NDMALTS][NDMALTSF] Z &&
+ rm .git/index &&
+ read_tree_must_succeed $tree_A &&
+ git checkout-index -f -u -a &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
: <<\END_OF_CASE_TABLE
END_OF_CASE_TABLE
-test_expect_success '1 - must not have an entry not in A.' "
- rm -f .git/index XX &&
- echo XX >XX &&
- git update-index --add XX &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '2 - must match B in !O && !A && B case.' \
- "rm -f .git/index NA &&
- cp .orig-B/NA NA &&
- git update-index --add NA &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B"
-
-test_expect_success \
- '2 - matching B alone is OK in !O && !A && B case.' \
- "rm -f .git/index NA &&
- cp .orig-B/NA NA &&
- git update-index --add NA &&
- echo extra >>NA &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B"
-
-test_expect_success \
- '3 - must match A in !O && A && !B case.' \
- "rm -f .git/index AN &&
- cp .orig-A/AN AN &&
- git update-index --add AN &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '3 - matching A alone is OK in !O && A && !B case.' \
- "rm -f .git/index AN &&
- cp .orig-A/AN AN &&
- git update-index --add AN &&
- echo extra >>AN &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B"
-
-test_expect_success \
- '3 (fail) - must match A in !O && A && !B case.' "
- rm -f .git/index AN &&
- cp .orig-A/AN AN &&
- echo extra >>AN &&
- git update-index --add AN &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '4 - must match and be up-to-date in !O && A && B && A!=B case.' \
- "rm -f .git/index AA &&
- cp .orig-A/AA AA &&
- git update-index --add AA &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' "
- rm -f .git/index AA &&
- cp .orig-A/AA AA &&
- git update-index --add AA &&
- echo extra >>AA &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' "
- rm -f .git/index AA &&
- cp .orig-A/AA AA &&
- echo extra >>AA &&
- git update-index --add AA &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '5 - must match in !O && A && B && A==B case.' \
- "rm -f .git/index LL &&
- cp .orig-A/LL LL &&
- git update-index --add LL &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '5 - must match in !O && A && B && A==B case.' \
- "rm -f .git/index LL &&
- cp .orig-A/LL LL &&
- git update-index --add LL &&
- echo extra >>LL &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '5 (fail) - must match A in !O && A && B && A==B case.' "
- rm -f .git/index LL &&
- cp .orig-A/LL LL &&
- echo extra >>LL &&
- git update-index --add LL &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '6 - must not exist in O && !A && !B case' "
- rm -f .git/index DD &&
- echo DD >DD &&
- git update-index --add DD &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '7 - must not exist in O && !A && B && O!=B case' "
- rm -f .git/index DM &&
- cp .orig-B/DM DM &&
- git update-index --add DM &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '8 - must not exist in O && !A && B && O==B case' "
- rm -f .git/index DN &&
- cp .orig-B/DN DN &&
- git update-index --add DN &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '9 - must match and be up-to-date in O && A && !B && O!=A case' \
- "rm -f .git/index MD &&
- cp .orig-A/MD MD &&
- git update-index --add MD &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' "
- rm -f .git/index MD &&
- cp .orig-A/MD MD &&
- git update-index --add MD &&
- echo extra >>MD &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' "
- rm -f .git/index MD &&
- cp .orig-A/MD MD &&
- echo extra >>MD &&
- git update-index --add MD &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '10 - must match and be up-to-date in O && A && !B && O==A case' \
- "rm -f .git/index ND &&
- cp .orig-A/ND ND &&
- git update-index --add ND &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '10 (fail) - must match and be up-to-date in O && A && !B && O==A case' "
- rm -f .git/index ND &&
- cp .orig-A/ND ND &&
- git update-index --add ND &&
- echo extra >>ND &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '10 (fail) - must match and be up-to-date in O && A && !B && O==A case' "
- rm -f .git/index ND &&
- cp .orig-A/ND ND &&
- echo extra >>ND &&
- git update-index --add ND &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' \
- "rm -f .git/index MM &&
- cp .orig-A/MM MM &&
- git update-index --add MM &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' "
- rm -f .git/index MM &&
- cp .orig-A/MM MM &&
- git update-index --add MM &&
- echo extra >>MM &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' "
- rm -f .git/index MM &&
- cp .orig-A/MM MM &&
- echo extra >>MM &&
- git update-index --add MM &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '12 - must match A in O && A && B && O!=A && A==B case' \
- "rm -f .git/index SS &&
- cp .orig-A/SS SS &&
- git update-index --add SS &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '12 - must match A in O && A && B && O!=A && A==B case' \
- "rm -f .git/index SS &&
- cp .orig-A/SS SS &&
- git update-index --add SS &&
- echo extra >>SS &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '12 (fail) - must match A in O && A && B && O!=A && A==B case' "
- rm -f .git/index SS &&
- cp .orig-A/SS SS &&
- echo extra >>SS &&
- git update-index --add SS &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '13 - must match A in O && A && B && O!=A && O==B case' \
- "rm -f .git/index MN &&
- cp .orig-A/MN MN &&
- git update-index --add MN &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '13 - must match A in O && A && B && O!=A && O==B case' \
- "rm -f .git/index MN &&
- cp .orig-A/MN MN &&
- git update-index --add MN &&
- echo extra >>MN &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '14 - must match and be up-to-date in O && A && B && O==A && O!=B case' \
- "rm -f .git/index NM &&
- cp .orig-A/NM NM &&
- git update-index --add NM &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '14 - may match B in O && A && B && O==A && O!=B case' \
- "rm -f .git/index NM &&
- cp .orig-B/NM NM &&
- git update-index --add NM &&
- echo extra >>NM &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' "
- rm -f .git/index NM &&
- cp .orig-A/NM NM &&
- git update-index --add NM &&
- echo extra >>NM &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' "
- rm -f .git/index NM &&
- cp .orig-A/NM NM &&
- echo extra >>NM &&
- git update-index --add NM &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-test_expect_success \
- '15 - must match A in O && A && B && O==A && O==B case' \
- "rm -f .git/index NN &&
- cp .orig-A/NN NN &&
- git update-index --add NN &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '15 - must match A in O && A && B && O==A && O==B case' \
- "rm -f .git/index NN &&
- cp .orig-A/NN NN &&
- git update-index --add NN &&
- echo extra >>NN &&
- read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
- check_result"
-
-test_expect_success \
- '15 (fail) - must match A in O && A && B && O==A && O==B case' "
- rm -f .git/index NN &&
- cp .orig-A/NN NN &&
- echo extra >>NN &&
- git update-index --add NN &&
- read_tree_must_fail -m $tree_O $tree_A $tree_B
-"
-
-# #16
-test_expect_success \
- '16 - A matches in one and B matches in another.' \
- 'rm -f .git/index F16 &&
- echo F16 >F16 &&
- git update-index --add F16 &&
- tree0=$(git write-tree) &&
- echo E16 >F16 &&
- git update-index F16 &&
- tree1=$(git write-tree) &&
- read_tree_must_succeed -m $tree0 $tree1 $tree1 $tree0 &&
- git ls-files --stage'
+test_expect_success '1 - must not have an entry not in A.' '
+ rm -f .git/index XX &&
+ echo XX >XX &&
+ git update-index --add XX &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '2 - must match B in !O && !A && B case.' '
+ rm -f .git/index NA &&
+ cp .orig-B/NA NA &&
+ git update-index --add NA &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '2 - matching B alone is OK in !O && !A && B case.' '
+ rm -f .git/index NA &&
+ cp .orig-B/NA NA &&
+ git update-index --add NA &&
+ echo extra >>NA &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '3 - must match A in !O && A && !B case.' '
+ rm -f .git/index AN &&
+ cp .orig-A/AN AN &&
+ git update-index --add AN &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '3 - matching A alone is OK in !O && A && !B case.' '
+ rm -f .git/index AN &&
+ cp .orig-A/AN AN &&
+ git update-index --add AN &&
+ echo extra >>AN &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '3 (fail) - must match A in !O && A && !B case.' '
+ rm -f .git/index AN &&
+ cp .orig-A/AN AN &&
+ echo extra >>AN &&
+ git update-index --add AN &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '4 - must match and be up-to-date in !O && A && B && A!=B case.' '
+ rm -f .git/index AA &&
+ cp .orig-A/AA AA &&
+ git update-index --add AA &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' '
+ rm -f .git/index AA &&
+ cp .orig-A/AA AA &&
+ git update-index --add AA &&
+ echo extra >>AA &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.' '
+ rm -f .git/index AA &&
+ cp .orig-A/AA AA &&
+ echo extra >>AA &&
+ git update-index --add AA &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '5 - must match in !O && A && B && A==B case.' '
+ rm -f .git/index LL &&
+ cp .orig-A/LL LL &&
+ git update-index --add LL &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '5 - must match in !O && A && B && A==B case.' '
+ rm -f .git/index LL &&
+ cp .orig-A/LL LL &&
+ git update-index --add LL &&
+ echo extra >>LL &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '5 (fail) - must match A in !O && A && B && A==B case.' '
+ rm -f .git/index LL &&
+ cp .orig-A/LL LL &&
+ echo extra >>LL &&
+ git update-index --add LL &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '6 - must not exist in O && !A && !B case' '
+ rm -f .git/index DD &&
+ echo DD >DD &&
+ git update-index --add DD &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '7 - must not exist in O && !A && B && O!=B case' '
+ rm -f .git/index DM &&
+ cp .orig-B/DM DM &&
+ git update-index --add DM &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '8 - must not exist in O && !A && B && O==B case' '
+ rm -f .git/index DN &&
+ cp .orig-B/DN DN &&
+ git update-index --add DN &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '9 - must match and be up-to-date in O && A && !B && O!=A case' '
+ rm -f .git/index MD &&
+ cp .orig-A/MD MD &&
+ git update-index --add MD &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' '
+ rm -f .git/index MD &&
+ cp .orig-A/MD MD &&
+ git update-index --add MD &&
+ echo extra >>MD &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '9 (fail) - must match and be up-to-date in O && A && !B && O!=A case' '
+ rm -f .git/index MD &&
+ cp .orig-A/MD MD &&
+ echo extra >>MD &&
+ git update-index --add MD &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '10 - must match and be up-to-date in O && A && !B && O==A case' '
+ rm -f .git/index ND &&
+ cp .orig-A/ND ND &&
+ git update-index --add ND &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '10 (fail) - must match and be up-to-date in O && A && !B && O==A case' '
+ rm -f .git/index ND &&
+ cp .orig-A/ND ND &&
+ git update-index --add ND &&
+ echo extra >>ND &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '10 (fail) - must match and be up-to-date in O && A && !B && O==A case' '
+ rm -f .git/index ND &&
+ cp .orig-A/ND ND &&
+ echo extra >>ND &&
+ git update-index --add ND &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' '
+ rm -f .git/index MM &&
+ cp .orig-A/MM MM &&
+ git update-index --add MM &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' '
+ rm -f .git/index MM &&
+ cp .orig-A/MM MM &&
+ git update-index --add MM &&
+ echo extra >>MM &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case' '
+ rm -f .git/index MM &&
+ cp .orig-A/MM MM &&
+ echo extra >>MM &&
+ git update-index --add MM &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '12 - must match A in O && A && B && O!=A && A==B case' '
+ rm -f .git/index SS &&
+ cp .orig-A/SS SS &&
+ git update-index --add SS &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '12 - must match A in O && A && B && O!=A && A==B case' '
+ rm -f .git/index SS &&
+ cp .orig-A/SS SS &&
+ git update-index --add SS &&
+ echo extra >>SS &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '12 (fail) - must match A in O && A && B && O!=A && A==B case' '
+ rm -f .git/index SS &&
+ cp .orig-A/SS SS &&
+ echo extra >>SS &&
+ git update-index --add SS &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '13 - must match A in O && A && B && O!=A && O==B case' '
+ rm -f .git/index MN &&
+ cp .orig-A/MN MN &&
+ git update-index --add MN &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '13 - must match A in O && A && B && O!=A && O==B case' '
+ rm -f .git/index MN &&
+ cp .orig-A/MN MN &&
+ git update-index --add MN &&
+ echo extra >>MN &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '14 - must match and be up-to-date in O && A && B && O==A && O!=B case' '
+ rm -f .git/index NM &&
+ cp .orig-A/NM NM &&
+ git update-index --add NM &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '14 - may match B in O && A && B && O==A && O!=B case' '
+ rm -f .git/index NM &&
+ cp .orig-B/NM NM &&
+ git update-index --add NM &&
+ echo extra >>NM &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' '
+ rm -f .git/index NM &&
+ cp .orig-A/NM NM &&
+ git update-index --add NM &&
+ echo extra >>NM &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' '
+ rm -f .git/index NM &&
+ cp .orig-A/NM NM &&
+ echo extra >>NM &&
+ git update-index --add NM &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '15 - must match A in O && A && B && O==A && O==B case' '
+ rm -f .git/index NN &&
+ cp .orig-A/NN NN &&
+ git update-index --add NN &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '15 - must match A in O && A && B && O==A && O==B case' '
+ rm -f .git/index NN &&
+ cp .orig-A/NN NN &&
+ git update-index --add NN &&
+ echo extra >>NN &&
+ read_tree_must_succeed -m $tree_O $tree_A $tree_B &&
+ check_result
+'
+
+test_expect_success '15 (fail) - must match A in O && A && B && O==A && O==B case' '
+ rm -f .git/index NN &&
+ cp .orig-A/NN NN &&
+ echo extra >>NN &&
+ git update-index --add NN &&
+ read_tree_must_fail -m $tree_O $tree_A $tree_B
+'
+
+test_expect_success '16 - A matches in one and B matches in another.' '
+ rm -f .git/index F16 &&
+ echo F16 >F16 &&
+ git update-index --add F16 &&
+ tree0=$(git write-tree) &&
+ echo E16 >F16 &&
+ git update-index F16 &&
+ tree1=$(git write-tree) &&
+ read_tree_must_succeed -m $tree0 $tree1 $tree1 $tree0 &&
+ git ls-files --stage
+'
test_done
rules, found in <Documentation/git read-tree.txt>.
In the test, these paths are used:
- bozbar - in H, stays in M, modified from bozbar to gnusto
- frotz - not in H added in M
- nitfol - in H, stays in M unmodified
- rezrov - in H, deleted in M
+ bozbar - in H, stays in M, modified from bozbar to gnusto
+ frotz - not in H added in M
+ nitfol - in H, stays in M unmodified
+ rezrov - in H, deleted in M
yomin - not in H or M
'
. ./test-lib.sh
sed -e 's/bozbar/gnusto (earlier bozbar)/' bozbar-old >bozbar-new
-test_expect_success \
- setup \
- 'echo frotz >frotz &&
- echo nitfol >nitfol &&
- cat bozbar-old >bozbar &&
- echo rezrov >rezrov &&
- echo yomin >yomin &&
- git update-index --add nitfol bozbar rezrov &&
- treeH=$(git write-tree) &&
- echo treeH $treeH &&
- git ls-tree $treeH &&
-
- cat bozbar-new >bozbar &&
- git update-index --add frotz bozbar --force-remove rezrov &&
- git ls-files --stage >M.out &&
- treeM=$(git write-tree) &&
- echo treeM $treeM &&
- git ls-tree $treeM &&
- git diff-tree $treeH $treeM'
-
-test_expect_success \
- '1, 2, 3 - no carry forward' \
- 'rm -f .git/index &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >1-3.out &&
- test_cmp M.out 1-3.out &&
- check_cache_at bozbar dirty &&
- check_cache_at frotz dirty &&
- check_cache_at nitfol dirty'
+test_expect_success 'setup' '
+ echo frotz >frotz &&
+ echo nitfol >nitfol &&
+ cat bozbar-old >bozbar &&
+ echo rezrov >rezrov &&
+ echo yomin >yomin &&
+ git update-index --add nitfol bozbar rezrov &&
+ treeH=$(git write-tree) &&
+ echo treeH $treeH &&
+ git ls-tree $treeH &&
+
+ cat bozbar-new >bozbar &&
+ git update-index --add frotz bozbar --force-remove rezrov &&
+ git ls-files --stage >M.out &&
+ treeM=$(git write-tree) &&
+ echo treeM $treeM &&
+ git ls-tree $treeM &&
+ git diff-tree $treeH $treeM
+'
+test_expect_success '1, 2, 3 - no carry forward' '
+ rm -f .git/index &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >1-3.out &&
+ test_cmp M.out 1-3.out &&
+ check_cache_at bozbar dirty &&
+ check_cache_at frotz dirty &&
+ check_cache_at nitfol dirty
+'
echo '+100644 X 0 yomin' >expected
-test_expect_success \
- '4 - carry forward local addition.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- git update-index --add yomin &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >4.out &&
- test_must_fail git diff --no-index M.out 4.out >4diff.out &&
- compare_change 4diff.out expected &&
- check_cache_at yomin clean'
-
-test_expect_success \
- '5 - carry forward local addition.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo yomin >yomin &&
- git update-index --add yomin &&
- echo yomin yomin >yomin &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >5.out &&
- test_must_fail git diff --no-index M.out 5.out >5diff.out &&
- compare_change 5diff.out expected &&
- check_cache_at yomin dirty'
-
-test_expect_success \
- '6 - local addition already has the same.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- git update-index --add frotz &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >6.out &&
- test_cmp M.out 6.out &&
- check_cache_at frotz clean'
-
-test_expect_success \
- '7 - local addition already has the same.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo frotz >frotz &&
- git update-index --add frotz &&
- echo frotz frotz >frotz &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >7.out &&
- test_cmp M.out 7.out &&
- check_cache_at frotz dirty'
-
-test_expect_success \
- '8 - conflicting addition.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo frotz frotz >frotz &&
- git update-index --add frotz &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
-
-test_expect_success \
- '9 - conflicting addition.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo frotz frotz >frotz &&
- git update-index --add frotz &&
- echo frotz >frotz &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
-
-test_expect_success \
- '10 - path removed.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo rezrov >rezrov &&
- git update-index --add rezrov &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >10.out &&
- test_cmp M.out 10.out'
-
-test_expect_success \
- '11 - dirty path removed.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo rezrov >rezrov &&
- git update-index --add rezrov &&
- echo rezrov rezrov >rezrov &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
-
-test_expect_success \
- '12 - unmatching local changes being removed.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo rezrov rezrov >rezrov &&
- git update-index --add rezrov &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
-
-test_expect_success \
- '13 - unmatching local changes being removed.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo rezrov rezrov >rezrov &&
- git update-index --add rezrov &&
- echo rezrov >rezrov &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
+test_expect_success '4 - carry forward local addition.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ git update-index --add yomin &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >4.out &&
+ test_must_fail git diff --no-index M.out 4.out >4diff.out &&
+ compare_change 4diff.out expected &&
+ check_cache_at yomin clean
+'
+
+test_expect_success '5 - carry forward local addition.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo yomin >yomin &&
+ git update-index --add yomin &&
+ echo yomin yomin >yomin &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >5.out &&
+ test_must_fail git diff --no-index M.out 5.out >5diff.out &&
+ compare_change 5diff.out expected &&
+ check_cache_at yomin dirty
+'
+
+test_expect_success '6 - local addition already has the same.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ git update-index --add frotz &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >6.out &&
+ test_cmp M.out 6.out &&
+ check_cache_at frotz clean
+'
+
+test_expect_success '7 - local addition already has the same.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo frotz >frotz &&
+ git update-index --add frotz &&
+ echo frotz frotz >frotz &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >7.out &&
+ test_cmp M.out 7.out &&
+ check_cache_at frotz dirty
+'
+
+test_expect_success '8 - conflicting addition.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo frotz frotz >frotz &&
+ git update-index --add frotz &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
+
+test_expect_success '9 - conflicting addition.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo frotz frotz >frotz &&
+ git update-index --add frotz &&
+ echo frotz >frotz &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
+
+test_expect_success '10 - path removed.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo rezrov >rezrov &&
+ git update-index --add rezrov &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >10.out &&
+ test_cmp M.out 10.out
+'
+
+test_expect_success '11 - dirty path removed.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo rezrov >rezrov &&
+ git update-index --add rezrov &&
+ echo rezrov rezrov >rezrov &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
+
+test_expect_success '12 - unmatching local changes being removed.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo rezrov rezrov >rezrov &&
+ git update-index --add rezrov &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
+
+test_expect_success '13 - unmatching local changes being removed.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo rezrov rezrov >rezrov &&
+ git update-index --add rezrov &&
+ echo rezrov >rezrov &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
cat >expected <<EOF
-100644 X 0 nitfol
+100644 X 0 nitfol
EOF
-test_expect_success \
- '14 - unchanged in two heads.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo nitfol nitfol >nitfol &&
- git update-index --add nitfol &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >14.out &&
- test_must_fail git diff --no-index M.out 14.out >14diff.out &&
- compare_change 14diff.out expected &&
- check_cache_at nitfol clean'
-
-test_expect_success \
- '15 - unchanged in two heads.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo nitfol nitfol >nitfol &&
- git update-index --add nitfol &&
- echo nitfol nitfol nitfol >nitfol &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >15.out &&
- test_must_fail git diff --no-index M.out 15.out >15diff.out &&
- compare_change 15diff.out expected &&
- check_cache_at nitfol dirty'
-
-test_expect_success \
- '16 - conflicting local change.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo bozbar bozbar >bozbar &&
- git update-index --add bozbar &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
-
-test_expect_success \
- '17 - conflicting local change.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- echo bozbar bozbar >bozbar &&
- git update-index --add bozbar &&
- echo bozbar bozbar bozbar >bozbar &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
-
-test_expect_success \
- '18 - local change already having a good result.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- cat bozbar-new >bozbar &&
- git update-index --add bozbar &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >18.out &&
- test_cmp M.out 18.out &&
- check_cache_at bozbar clean'
-
-test_expect_success \
- '19 - local change already having a good result, further modified.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- cat bozbar-new >bozbar &&
- git update-index --add bozbar &&
- echo gnusto gnusto >bozbar &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >19.out &&
- test_cmp M.out 19.out &&
- check_cache_at bozbar dirty'
-
-test_expect_success \
- '20 - no local change, use new tree.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- cat bozbar-old >bozbar &&
- git update-index --add bozbar &&
- read_tree_twoway $treeH $treeM &&
- git ls-files --stage >20.out &&
- test_cmp M.out 20.out &&
- check_cache_at bozbar dirty'
-
-test_expect_success \
- '21 - no local change, dirty cache.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- cat bozbar-old >bozbar &&
- git update-index --add bozbar &&
- echo gnusto gnusto >bozbar &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
+test_expect_success '14 - unchanged in two heads.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo nitfol nitfol >nitfol &&
+ git update-index --add nitfol &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >14.out &&
+ test_must_fail git diff --no-index M.out 14.out >14diff.out &&
+ compare_change 14diff.out expected &&
+ check_cache_at nitfol clean
+'
+
+test_expect_success '15 - unchanged in two heads.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo nitfol nitfol >nitfol &&
+ git update-index --add nitfol &&
+ echo nitfol nitfol nitfol >nitfol &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >15.out &&
+ test_must_fail git diff --no-index M.out 15.out >15diff.out &&
+ compare_change 15diff.out expected &&
+ check_cache_at nitfol dirty
+'
+
+test_expect_success '16 - conflicting local change.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo bozbar bozbar >bozbar &&
+ git update-index --add bozbar &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
+
+test_expect_success '17 - conflicting local change.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ echo bozbar bozbar >bozbar &&
+ git update-index --add bozbar &&
+ echo bozbar bozbar bozbar >bozbar &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
+
+test_expect_success '18 - local change already having a good result.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ cat bozbar-new >bozbar &&
+ git update-index --add bozbar &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >18.out &&
+ test_cmp M.out 18.out &&
+ check_cache_at bozbar clean
+'
+
+test_expect_success '19 - local change already having a good result, further modified.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ cat bozbar-new >bozbar &&
+ git update-index --add bozbar &&
+ echo gnusto gnusto >bozbar &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >19.out &&
+ test_cmp M.out 19.out &&
+ check_cache_at bozbar dirty
+'
+
+test_expect_success '20 - no local change, use new tree.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ cat bozbar-old >bozbar &&
+ git update-index --add bozbar &&
+ read_tree_twoway $treeH $treeM &&
+ git ls-files --stage >20.out &&
+ test_cmp M.out 20.out &&
+ check_cache_at bozbar dirty
+'
+
+test_expect_success '21 - no local change, dirty cache.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ cat bozbar-old >bozbar &&
+ git update-index --add bozbar &&
+ echo gnusto gnusto >bozbar &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
# This fails with straight two-way fast-forward.
-test_expect_success \
- '22 - local change cache updated.' \
- 'rm -f .git/index &&
- read_tree_must_succeed $treeH &&
- git checkout-index -u -f -q -a &&
- sed -e "s/such as/SUCH AS/" bozbar-old >bozbar &&
- git update-index --add bozbar &&
- if read_tree_twoway $treeH $treeM; then false; else :; fi'
+test_expect_success '22 - local change cache updated.' '
+ rm -f .git/index &&
+ read_tree_must_succeed $treeH &&
+ git checkout-index -u -f -q -a &&
+ sed -e "s/such as/SUCH AS/" bozbar-old >bozbar &&
+ git update-index --add bozbar &&
+ if read_tree_twoway $treeH $treeM; then false; else :; fi
+'
# Also make sure we did not break DF vs DF/DF case.
-test_expect_success \
- 'DF vs DF/DF case setup.' \
- 'rm -f .git/index &&
- echo DF >DF &&
- git update-index --add DF &&
- treeDF=$(git write-tree) &&
- echo treeDF $treeDF &&
- git ls-tree $treeDF &&
-
- rm -f DF &&
- mkdir DF &&
- echo DF/DF >DF/DF &&
- git update-index --add --remove DF DF/DF &&
- treeDFDF=$(git write-tree) &&
- echo treeDFDF $treeDFDF &&
- git ls-tree $treeDFDF &&
- git ls-files --stage >DFDF.out'
-
-test_expect_success \
- 'DF vs DF/DF case test.' \
- 'rm -f .git/index &&
- rm -fr DF &&
- echo DF >DF &&
- git update-index --add DF &&
- read_tree_twoway $treeDF $treeDFDF &&
- git ls-files --stage >DFDFcheck.out &&
- test_cmp DFDF.out DFDFcheck.out &&
- check_cache_at DF/DF dirty &&
- :'
-
-test_expect_success \
- 'a/b (untracked) vs a case setup.' \
- 'rm -f .git/index &&
- : >a &&
- git update-index --add a &&
- treeM=$(git write-tree) &&
- echo treeM $treeM &&
- git ls-tree $treeM &&
- git ls-files --stage >treeM.out &&
-
- rm -f a &&
- git update-index --remove a &&
- mkdir a &&
- : >a/b &&
- treeH=$(git write-tree) &&
- echo treeH $treeH &&
- git ls-tree $treeH'
-
-test_expect_success \
- 'a/b (untracked) vs a, plus c/d case test.' \
- 'read_tree_u_must_fail -u -m "$treeH" "$treeM" &&
- git ls-files --stage &&
- test -f a/b'
-
-test_expect_success \
- 'a/b vs a, plus c/d case setup.' \
- 'rm -f .git/index &&
- rm -fr a &&
- : >a &&
- mkdir c &&
- : >c/d &&
- git update-index --add a c/d &&
- treeM=$(git write-tree) &&
- echo treeM $treeM &&
- git ls-tree $treeM &&
- git ls-files --stage >treeM.out &&
-
- rm -f a &&
- mkdir a &&
- : >a/b &&
- git update-index --add --remove a a/b &&
- treeH=$(git write-tree) &&
- echo treeH $treeH &&
- git ls-tree $treeH'
-
-test_expect_success \
- 'a/b vs a, plus c/d case test.' \
- 'read_tree_u_must_succeed -u -m "$treeH" "$treeM" &&
- git ls-files --stage | tee >treeMcheck.out &&
- test_cmp treeM.out treeMcheck.out'
+test_expect_success 'DF vs DF/DF case setup.' '
+ rm -f .git/index &&
+ echo DF >DF &&
+ git update-index --add DF &&
+ treeDF=$(git write-tree) &&
+ echo treeDF $treeDF &&
+ git ls-tree $treeDF &&
+
+ rm -f DF &&
+ mkdir DF &&
+ echo DF/DF >DF/DF &&
+ git update-index --add --remove DF DF/DF &&
+ treeDFDF=$(git write-tree) &&
+ echo treeDFDF $treeDFDF &&
+ git ls-tree $treeDFDF &&
+ git ls-files --stage >DFDF.out
+'
+
+test_expect_success 'DF vs DF/DF case test.' '
+ rm -f .git/index &&
+ rm -fr DF &&
+ echo DF >DF &&
+ git update-index --add DF &&
+ read_tree_twoway $treeDF $treeDFDF &&
+ git ls-files --stage >DFDFcheck.out &&
+ test_cmp DFDF.out DFDFcheck.out &&
+ check_cache_at DF/DF dirty &&
+ :
+'
+
+test_expect_success 'a/b (untracked) vs a case setup.' '
+ rm -f .git/index &&
+ : >a &&
+ git update-index --add a &&
+ treeM=$(git write-tree) &&
+ echo treeM $treeM &&
+ git ls-tree $treeM &&
+ git ls-files --stage >treeM.out &&
+
+ rm -f a &&
+ git update-index --remove a &&
+ mkdir a &&
+ : >a/b &&
+ treeH=$(git write-tree) &&
+ echo treeH $treeH &&
+ git ls-tree $treeH
+'
+
+test_expect_success 'a/b (untracked) vs a, plus c/d case test.' '
+ read_tree_u_must_fail -u -m "$treeH" "$treeM" &&
+ git ls-files --stage &&
+ test -f a/b
+'
+
+test_expect_success 'read-tree supports the super-prefix' '
+ cat <<-EOF >expect &&
+ error: Updating '\''fictional/a'\'' would lose untracked files in it
+ EOF
+ test_must_fail git --super-prefix fictional/ read-tree -u -m "$treeH" "$treeM" 2>actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'a/b vs a, plus c/d case setup.' '
+ rm -f .git/index &&
+ rm -fr a &&
+ : >a &&
+ mkdir c &&
+ : >c/d &&
+ git update-index --add a c/d &&
+ treeM=$(git write-tree) &&
+ echo treeM $treeM &&
+ git ls-tree $treeM &&
+ git ls-files --stage >treeM.out &&
+
+ rm -f a &&
+ mkdir a &&
+ : >a/b &&
+ git update-index --add --remove a a/b &&
+ treeH=$(git write-tree) &&
+ echo treeH $treeH &&
+ git ls-tree $treeH
+'
+
+test_expect_success 'a/b vs a, plus c/d case test.' '
+ read_tree_u_must_succeed -u -m "$treeH" "$treeM" &&
+ git ls-files --stage | tee >treeMcheck.out &&
+ test_cmp treeM.out treeMcheck.out
+'
test_expect_success '-m references the correct modified tree' '
echo >file-a &&
. ./test-lib.sh
+# This should be moved to test-lib.sh together with the
+# copy in t0021 after both topics have graduated to 'master'.
+file_size () {
+ perl -e 'print -s $ARGV[0]' "$1"
+}
+
test_expect_success setup '
# clone does not allow us to pass core.bigfilethreshold to
# new repos, so set core.bigfilethreshold globally
export GIT_ALLOC_LIMIT
'
+# add a large file with different settings
+while read expect config
+do
+ test_expect_success "add with $config" '
+ test_when_finished "rm -f .git/objects/pack/pack-*.* .git/index" &&
+ git $config add large1 &&
+ sz=$(file_size .git/objects/pack/pack-*.pack) &&
+ case "$expect" in
+ small) test "$sz" -le 100000 ;;
+ large) test "$sz" -ge 100000 ;;
+ esac
+ '
+done <<\EOF
+large -c core.compression=0
+small -c core.compression=9
+large -c core.compression=0 -c pack.compression=0
+large -c core.compression=9 -c pack.compression=0
+small -c core.compression=0 -c pack.compression=9
+small -c core.compression=9 -c pack.compression=9
+large -c pack.compression=0
+small -c pack.compression=9
+EOF
+
test_expect_success 'add a large file or two' '
git add large1 huge large2 &&
# make sure we got a single packfile and no loose objects
'
test_expect_success 'error on modifying repo config without repo' '
- mkdir no-repo &&
- (
- GIT_CEILING_DIRECTORIES=$(pwd) &&
- export GIT_CEILING_DIRECTORIES &&
- cd no-repo &&
- test_must_fail git config a.b c 2>err &&
- grep "not in a git directory" err
- )
+ nongit test_must_fail git config a.b c 2>err &&
+ grep "not in a git directory" err
'
cmdline_config="'foo.bar=from-cmdline'"
Z=$_z40
-test_expect_success setup '
+m=refs/heads/master
+n_dir=refs/heads/gu
+n=$n_dir/fixes
+outside=refs/foo
+bare=bare-repo
+create_test_commits ()
+{
+ prfx="$1"
for name in A B C D E F
do
test_tick &&
T=$(git write-tree) &&
sha1=$(echo $name | git commit-tree $T) &&
- eval $name=$sha1
+ eval $prfx$name=$sha1
done
+}
+test_expect_success setup '
+ create_test_commits "" &&
+ mkdir $bare &&
+ cd $bare &&
+ git init --bare &&
+ create_test_commits "bare" &&
+ cd -
'
-m=refs/heads/master
-n_dir=refs/heads/gu
-n=$n_dir/fixes
-outside=refs/foo
-
test_expect_success \
"create $m" \
"git update-ref $m $A &&
git reflog exists $outside
'
+test_expect_success 'creates no reflog in bare repository' '
+ git -C $bare update-ref $m $bareA &&
+ git -C $bare rev-parse $bareA >expect &&
+ git -C $bare rev-parse $m >actual &&
+ test_cmp expect actual &&
+ test_must_fail git -C $bare reflog exists $m
+'
+
+test_expect_success 'core.logAllRefUpdates=true creates reflog in bare repository' '
+ test_when_finished "git -C $bare config --unset core.logAllRefUpdates && \
+ rm $bare/logs/$m" &&
+ git -C $bare config core.logAllRefUpdates true &&
+ git -C $bare update-ref $m $bareB &&
+ git -C $bare rev-parse $bareB >expect &&
+ git -C $bare rev-parse $m >actual &&
+ test_cmp expect actual &&
+ git -C $bare reflog exists $m
+'
+
+test_expect_success 'core.logAllRefUpdates=true does not create reflog by default' '
+ test_config core.logAllRefUpdates true &&
+ test_when_finished "git update-ref -d $outside" &&
+ git update-ref $outside $A &&
+ git rev-parse $A >expect &&
+ git rev-parse $outside >actual &&
+ test_cmp expect actual &&
+ test_must_fail git reflog exists $outside
+'
+
+test_expect_success 'core.logAllRefUpdates=always creates reflog by default' '
+ test_config core.logAllRefUpdates always &&
+ test_when_finished "git update-ref -d $outside" &&
+ git update-ref $outside $A &&
+ git rev-parse $A >expect &&
+ git rev-parse $outside >actual &&
+ test_cmp expect actual &&
+ git reflog exists $outside
+'
+
+test_expect_success 'core.logAllRefUpdates=always creates no reflog for ORIG_HEAD' '
+ test_config core.logAllRefUpdates always &&
+ git update-ref ORIG_HEAD $A &&
+ test_must_fail git reflog exists ORIG_HEAD
+'
+
+test_expect_success '--no-create-reflog overrides core.logAllRefUpdates=always' '
+ test_config core.logAllRefUpdates true &&
+ test_when_finished "git update-ref -d $outside" &&
+ git update-ref --no-create-reflog $outside $A &&
+ git rev-parse $A >expect &&
+ git rev-parse $outside >actual &&
+ test_cmp expect actual &&
+ test_must_fail git reflog exists $outside
+'
+
test_expect_success \
"create $m (by HEAD)" \
"git update-ref HEAD $A &&
'
test_expect_success 'stdin creates reflogs with --create-reflog' '
+ test_when_finished "git update-ref -d $outside" &&
echo "create $outside $m" >stdin &&
git update-ref --create-reflog --stdin <stdin &&
git rev-parse $m >expect &&
git show-ref -d refs/tags/A refs/tags/C >actual &&
test_cmp expect actual &&
+ git show-ref --verify -d refs/tags/A refs/tags/C >actual &&
+ test_cmp expect actual &&
+
echo $(git rev-parse refs/heads/master) refs/heads/master >expect &&
git show-ref -d master >actual &&
test_cmp expect actual &&
test_cmp expect actual &&
test_must_fail git show-ref -d --verify heads/master >actual &&
+ test_cmp expect actual &&
+
+ test_must_fail git show-ref --verify -d A C >actual &&
+ test_cmp expect actual &&
+
+ test_must_fail git show-ref --verify -d tags/A tags/C >actual &&
test_cmp expect actual
'
test_cmp expect actual
'
+test_expect_success 'show-ref --verify HEAD' '
+ echo $(git rev-parse HEAD) HEAD >expect &&
+ git show-ref --verify HEAD >actual &&
+ test_cmp expect actual &&
+
+ >expect &&
+
+ git show-ref --verify -q HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'show-ref --verify with dangling ref' '
+ sha1_file() {
+ echo "$*" | sed "s#..#.git/objects/&/#"
+ } &&
+
+ remove_object() {
+ file=$(sha1_file "$*") &&
+ test -e "$file" &&
+ rm -f "$file"
+ } &&
+
+ test_when_finished "rm -rf dangling" &&
+ (
+ git init dangling &&
+ cd dangling &&
+ test_commit dangling &&
+ sha=$(git rev-parse refs/tags/dangling) &&
+ remove_object $sha &&
+ test_must_fail git show-ref --verify refs/tags/dangling
+ )
+'
+
test_done
test_expect_success 'setup: helpers for corruption tests' '
sha1_file() {
- echo "$*" | sed "s#..#.git/objects/&/#"
+ remainder=${1#??} &&
+ firsttwo=${1%$remainder} &&
+ echo ".git/objects/$firsttwo/$remainder"
} &&
remove_object() {
- file=$(sha1_file "$*") &&
- test -e "$file" &&
- rm -f "$file"
+ rm "$(sha1_file "$1")"
}
'
'
test_expect_success 'tree object with duplicate entries' '
- test_when_finished "remove_object \$T" &&
+ test_when_finished "for i in \$T; do remove_object \$i; done" &&
T=$(
GIT_INDEX_FILE=test-index &&
export GIT_INDEX_FILE &&
rm -f test-index &&
>x &&
git add x &&
+ git rev-parse :x &&
T=$(git write-tree) &&
+ echo $T &&
(
git cat-file tree $T &&
git cat-file tree $T
touch empty &&
git add empty &&
test_commit empty &&
+
+ # Drop the index now; we want to be sure that we
+ # recursively notice the broken objects
+ # because they are reachable from refs, not because
+ # they are in the index.
+ rm -f .git/index &&
+
+ # corrupt the blob, but in a way that we can still identify
+ # its type. That lets us see that --connectivity-only is
+ # not actually looking at the contents, but leaves it
+ # free to examine the type if it chooses.
empty=.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 &&
- rm -f $empty &&
- echo invalid >$empty &&
+ blob=$(echo unrelated | git hash-object -w --stdin) &&
+ mv -f $(sha1_file $blob) $empty &&
+
test_must_fail git fsck --strict &&
git fsck --strict --connectivity-only &&
tree=$(git rev-parse HEAD:) &&
)
'
-remove_loose_object () {
- sha1="$(git rev-parse "$1")" &&
- remainder=${sha1#??} &&
- firsttwo=${sha1%$remainder} &&
- rm .git/objects/$firsttwo/$remainder
-}
+test_expect_success 'fsck --connectivity-only with explicit head' '
+ rm -rf connectivity-only &&
+ git init connectivity-only &&
+ (
+ cd connectivity-only &&
+ test_commit foo &&
+ rm -f .git/index &&
+ tree=$(git rev-parse HEAD^{tree}) &&
+ remove_object $(git rev-parse HEAD:foo.t) &&
+ test_must_fail git fsck --connectivity-only $tree
+ )
+'
test_expect_success 'fsck --name-objects' '
rm -rf name-objects &&
test_commit julius caesar.t &&
test_commit augustus &&
test_commit caesar &&
- remove_loose_object $(git rev-parse julius:caesar.t) &&
+ remove_object $(git rev-parse julius:caesar.t) &&
test_must_fail git fsck --name-objects >out &&
tree=$(git rev-parse --verify julius:) &&
grep "$tree (\(refs/heads/master\|HEAD\)@{[0-9]*}:" out
)
'
+test_expect_success 'alternate objects are correctly blamed' '
+ test_when_finished "rm -rf alt.git .git/objects/info/alternates" &&
+ git init --bare alt.git &&
+ echo "../../alt.git/objects" >.git/objects/info/alternates &&
+ mkdir alt.git/objects/12 &&
+ >alt.git/objects/12/34567890123456789012345678901234567890 &&
+ test_must_fail git fsck >out 2>&1 &&
+ grep alt.git out
+'
+
+test_expect_success 'fsck errors in packed objects' '
+ git cat-file commit HEAD >basis &&
+ sed "s/</one/" basis >one &&
+ sed "s/</foo/" basis >two &&
+ one=$(git hash-object -t commit -w one) &&
+ two=$(git hash-object -t commit -w two) &&
+ pack=$(
+ {
+ echo $one &&
+ echo $two
+ } | git pack-objects .git/objects/pack/pack
+ ) &&
+ test_when_finished "rm -f .git/objects/pack/pack-$pack.*" &&
+ remove_object $one &&
+ remove_object $two &&
+ test_must_fail git fsck 2>out &&
+ grep "error in commit $one.* - bad name" out &&
+ grep "error in commit $two.* - bad name" out &&
+ ! grep corrupt out
+'
+
+test_expect_success 'fsck finds problems in duplicate loose objects' '
+ rm -rf broken-duplicate &&
+ git init broken-duplicate &&
+ (
+ cd broken-duplicate &&
+ test_commit duplicate &&
+ # no "-d" here, so we end up with duplicates
+ git repack &&
+ # now corrupt the loose copy
+ file=$(sha1_file "$(git rev-parse HEAD)") &&
+ rm "$file" &&
+ echo broken >"$file" &&
+ test_must_fail git fsck
+ )
+'
+
+test_expect_success 'fsck detects trailing loose garbage (commit)' '
+ git cat-file commit HEAD >basis &&
+ echo bump-commit-sha1 >>basis &&
+ commit=$(git hash-object -w -t commit basis) &&
+ file=$(sha1_file $commit) &&
+ test_when_finished "remove_object $commit" &&
+ chmod +w "$file" &&
+ echo garbage >>"$file" &&
+ test_must_fail git fsck 2>out &&
+ test_i18ngrep "garbage.*$commit" out
+'
+
+test_expect_success 'fsck detects trailing loose garbage (blob)' '
+ blob=$(echo trailing | git hash-object -w --stdin) &&
+ file=$(sha1_file $blob) &&
+ test_when_finished "remove_object $blob" &&
+ chmod +w "$file" &&
+ echo garbage >>"$file" &&
+ test_must_fail git fsck 2>out &&
+ test_i18ngrep "garbage.*$blob" out
+'
+
+# for each of type, we have one version which is referenced by another object
+# (and so while unreachable, not dangling), and another variant which really is
+# dangling.
+test_expect_success 'fsck notices dangling objects' '
+ git init dangling &&
+ (
+ cd dangling &&
+ blob=$(echo not-dangling | git hash-object -w --stdin) &&
+ dblob=$(echo dangling | git hash-object -w --stdin) &&
+ tree=$(printf "100644 blob %s\t%s\n" $blob one | git mktree) &&
+ dtree=$(printf "100644 blob %s\t%s\n" $blob two | git mktree) &&
+ commit=$(git commit-tree $tree) &&
+ dcommit=$(git commit-tree -p $commit $tree) &&
+
+ cat >expect <<-EOF &&
+ dangling blob $dblob
+ dangling commit $dcommit
+ dangling tree $dtree
+ EOF
+
+ git fsck >actual &&
+ # the output order is non-deterministic, as it comes from a hash
+ sort <actual >actual.sorted &&
+ test_cmp expect actual.sorted
+ )
+'
+
+test_expect_success 'fsck $name notices bogus $name' '
+ test_must_fail git fsck bogus &&
+ test_must_fail git fsck $_z40
+'
+
+test_expect_success 'bogus head does not fallback to all heads' '
+ # set up a case that will cause a reachability complaint
+ echo to-be-deleted >foo &&
+ git add foo &&
+ blob=$(git rev-parse :foo) &&
+ test_when_finished "git rm --cached foo" &&
+ remove_object $blob &&
+ test_must_fail git fsck $_z40 >out 2>&1 &&
+ ! grep $blob out
+'
+
test_done
resolve topic@{push} refs/remotes/origin/magic/topic
'
+test_expect_success 'resolving @{push} fails with a detached HEAD' '
+ git checkout HEAD^0 &&
+ test_when_finished "git checkout -" &&
+ test_must_fail git rev-parse @{push}
+'
+
test_done
rm -rf bare1
'
+test_expect_success 'broken main worktree still at the top' '
+ git init broken-main &&
+ (
+ cd broken-main &&
+ test_commit new &&
+ git worktree add linked &&
+ cat >expected <<-EOF &&
+ worktree $(pwd)
+ HEAD $_z40
+
+ EOF
+ cd linked &&
+ echo "worktree $(pwd)" >expected &&
+ echo "ref: .broken" >../.git/HEAD &&
+ git worktree list --porcelain | head -n 3 >actual &&
+ test_cmp ../expected actual &&
+ git worktree list | head -n 1 >actual.2 &&
+ grep -F "(error)" actual.2
+ )
+'
+
+test_expect_success 'linked worktrees are sorted' '
+ mkdir sorted &&
+ git init sorted/main &&
+ (
+ cd sorted/main &&
+ test_tick &&
+ test_commit new &&
+ git worktree add ../first &&
+ git worktree add ../second &&
+ git worktree list --porcelain | grep ^worktree >actual
+ ) &&
+ cat >expected <<-EOF &&
+ worktree $(pwd)/sorted/main
+ worktree $(pwd)/sorted/first
+ worktree $(pwd)/sorted/second
+ EOF
+ test_cmp expected sorted/main/actual
+'
+
test_done
test_must_fail test -d d
'
-test_expect_failure 'merge-recursive simple w/submodule' '
+test_expect_success 'merge-recursive simple w/submodule' '
git checkout submod &&
git merge remove
'
-test_expect_failure 'merge-recursive simple w/submodule result' '
+test_expect_success 'merge-recursive simple w/submodule result' '
git ls-files -s >actual &&
(
awk "{print \$NF}" <tmp >actual &&
test_cmp expect actual
'
+test_expect_success 'git branch --ignore-case --list -v pattern shows branch summaries' '
+ git branch --list --ignore-case -v BRANCH* >tmp &&
+ awk "{print \$NF}" <tmp >actual &&
+ test_cmp expect actual
+'
test_expect_success 'git branch -v pattern does not show branch summaries' '
test_must_fail git branch -v branch*
test_cmp expect actual
'
+test_expect_success 'sort branches, ignore case' '
+ (
+ git init sort-icase &&
+ cd sort-icase &&
+ test_commit initial &&
+ git branch branch-one &&
+ git branch BRANCH-two &&
+ git branch --list | awk "{print \$NF}" >actual &&
+ cat >expected <<-\EOF &&
+ BRANCH-two
+ branch-one
+ master
+ EOF
+ test_cmp expected actual &&
+ git branch --list -i | awk "{print \$NF}" >actual &&
+ cat >expected <<-\EOF &&
+ branch-one
+ BRANCH-two
+ master
+ EOF
+ test_cmp expected actual
+ )
+'
+
test_done
git show HEAD | grep "^Author: Twerp Snog"
'
+test_expect_success 'retain authorship w/ conflicts' '
+ git reset --hard twerp &&
+ test_commit a conflict a conflict-a &&
+ git reset --hard twerp &&
+ GIT_AUTHOR_NAME=AttributeMe \
+ test_commit b conflict b conflict-b &&
+ set_fake_editor &&
+ test_must_fail git rebase -i conflict-a &&
+ echo resolved >conflict &&
+ git add conflict &&
+ git rebase --continue &&
+ test $(git rev-parse conflict-a^0) = $(git rev-parse HEAD^) &&
+ git show >out &&
+ grep AttributeMe out
+'
+
test_expect_success 'squash' '
git reset --hard twerp &&
echo B > file7 &&
testrebase "" .git/rebase-apply
testrebase " --merge" .git/rebase-merge
+test_expect_success 'rebase --quit' '
+ cd "$work_dir" &&
+ # Clean up the state from the previous one
+ git reset --hard pre-rebase &&
+ test_must_fail git rebase master &&
+ test_path_is_dir .git/rebase-apply &&
+ head_before=$(git rev-parse HEAD) &&
+ git rebase --quit &&
+ test $(git rev-parse HEAD) = $head_before &&
+ test ! -d .git/rebase-apply
+'
+
+test_expect_success 'rebase --merge --quit' '
+ cd "$work_dir" &&
+ # Clean up the state from the previous one
+ git reset --hard pre-rebase &&
+ test_must_fail git rebase --merge master &&
+ test_path_is_dir .git/rebase-merge &&
+ head_before=$(git rev-parse HEAD) &&
+ git rebase --quit &&
+ test $(git rev-parse HEAD) = $head_before &&
+ test ! -d .git/rebase-merge
+'
+
test_done
git rebase -i "$1"
}
-KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
-# The real reason "replace directory with submodule" fails is because a
-# directory "sub1" exists, but we reuse the suppression added for merge here
test_submodule_switch "git_rebase_interactive"
test_done
test_cmp expect actual
'
+test_expect_success 'cherry-pick works with dirty renamed file' '
+ test_commit to-rename &&
+ git checkout -b unrelated &&
+ test_commit unrelated &&
+ git checkout @{-1} &&
+ git mv to-rename.t renamed &&
+ test_tick &&
+ git commit -m renamed &&
+ echo modified >renamed &&
+ git cherry-pick refs/heads/unrelated
+'
+
test_done
git diff-index --exit-code HEAD
'
+test_expect_success '--abort does not unsafely change HEAD' '
+ pristine_detach initial &&
+ test_must_fail git cherry-pick picked anotherpick &&
+ git reset --hard base &&
+ test_must_fail git cherry-pick picked anotherpick &&
+ git cherry-pick --abort 2>actual &&
+ test_i18ngrep "You seem to have moved HEAD" actual &&
+ test_cmp_rev base HEAD
+'
+
test_expect_success 'cherry-pick --abort to cancel multiple revert' '
pristine_detach anotherpick &&
test_expect_code 1 git revert base..picked &&
git cat-file commit HEAD~1 >picked_msg &&
git cat-file commit HEAD~2 >unrelatedpick_msg &&
git cat-file commit HEAD~3 >initial_msg &&
- test_must_fail grep "cherry picked from" initial_msg &&
+ ! grep "cherry picked from" initial_msg &&
grep "cherry picked from" unrelatedpick_msg &&
grep "cherry picked from" picked_msg &&
grep "cherry picked from" anotherpick_msg
git cat-file commit HEAD~1 >picked_msg &&
git cat-file commit HEAD~2 >unrelatedpick_msg &&
git cat-file commit HEAD~3 >initial_msg &&
- test_must_fail grep "Signed-off-by:" initial_msg &&
+ ! grep "Signed-off-by:" initial_msg &&
grep "Signed-off-by:" unrelatedpick_msg &&
- test_must_fail grep "Signed-off-by:" picked_msg &&
+ ! grep "Signed-off-by:" picked_msg &&
grep "Signed-off-by:" anotherpick_msg
'
mesg_broken_footer="$mesg_no_footer
-The signed-off-by string should begin with the words Signed-off-by followed
-by a colon and space, and then the signers name and email address. e.g.
-Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
+This is not recognized as a footer because Myfooter is not a recognized token.
+Myfooter: A.U. Thor <author@example.com>"
mesg_with_footer_sob="$mesg_with_footer
Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
test_cmp expect actual
'
+test_expect_success 'cherry-pick -s recognizes trailer config' '
+ pristine_detach initial &&
+ git -c "trailer.Myfooter.ifexists=add" cherry-pick -s mesg-broken-footer &&
+ cat <<-EOF >expect &&
+ $mesg_broken_footer
+ Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
+ EOF
+ git log -1 --pretty=format:%B >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'cherry-pick -x inserts blank line when conforming footer not found' '
pristine_detach initial &&
sha1=$(git rev-parse mesg-no-footer^0) &&
'
test_expect_success '"rm" command printed' '
- echo frotz > test-file &&
+ echo frotz >test-file &&
git add test-file &&
git commit -m "add file for rm test" &&
- git rm test-file > rm-output &&
+ git rm test-file >rm-output &&
test $(grep "^rm " rm-output | wc -l) = 1 &&
rm -f test-file rm-output &&
git commit -m "remove file from rm test"
'
test_expect_success '"rm" command suppressed with --quiet' '
- echo frotz > test-file &&
+ echo frotz >test-file &&
git add test-file &&
git commit -m "add file for rm --quiet test" &&
- git rm --quiet test-file > rm-output &&
- test $(wc -l < rm-output) = 0 &&
+ git rm --quiet test-file >rm-output &&
+ test_must_be_empty rm-output &&
rm -f test-file rm-output &&
git commit -m "remove file from rm --quiet test"
'
mkdir repo &&
(cd repo &&
git init &&
- echo something > somefile &&
+ echo something >somefile &&
git add somefile &&
git commit -m "add a file" &&
(cd .. &&
git commit -m "add submodule" &&
git rm submod &&
test ! -e submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual &&
test_must_fail git config -f .gitmodules submodule.sub.url &&
test_must_fail git config -f .gitmodules submodule.sub.path
git submodule update &&
rm -rf submod &&
git rm submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual &&
test_must_fail git config -f .gitmodules submodule.sub.url &&
test_must_fail git config -f .gitmodules submodule.sub.path
git submodule update &&
git rm submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual &&
test_must_fail git config -f .gitmodules submodule.sub.url &&
test_must_fail git config -f .gitmodules submodule.sub.path
git submodule update &&
git rm submod/ &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
test_expect_success 'rm of a populated submodule with different HEAD fails unless forced' '
git reset --hard &&
git submodule update &&
- (cd submod &&
- git checkout HEAD^
- ) &&
+ git -C submod checkout HEAD^ &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.modified actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual &&
test_must_fail git config -f .gitmodules submodule.sub.url &&
test_must_fail git config -f .gitmodules submodule.sub.path
test_expect_success 'rm of a populated submodule with modifications fails unless forced' '
git reset --hard &&
git submodule update &&
- (cd submod &&
- echo X >empty
- ) &&
+ echo X >submod/empty &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.modified actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
test_expect_success 'rm of a populated submodule with untracked files fails unless forced' '
git reset --hard &&
git submodule update &&
- (cd submod &&
- echo X >untracked
- ) &&
+ echo X >submod/untracked &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.modified actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
git add nitfol &&
git commit -m "added nitfol 2" &&
git checkout -b conflict1 master &&
- (cd submod &&
- git fetch &&
- git checkout branch1
- ) &&
+ git -C submod fetch &&
+ git -C submod checkout branch1 &&
git add submod &&
git commit -m "submod 1" &&
git checkout -b conflict2 master &&
- (cd submod &&
- git checkout branch2
- ) &&
+ git -C submod checkout branch2 &&
git add submod &&
git commit -m "submod 2"
'
test_must_fail git merge conflict2 &&
git rm submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
git checkout conflict1 &&
git reset --hard &&
git submodule update &&
- (cd submod &&
- git checkout HEAD^
- ) &&
+ git -C submod checkout HEAD^ &&
test_must_fail git merge conflict2 &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.conflict actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual &&
test_must_fail git config -f .gitmodules submodule.sub.url &&
test_must_fail git config -f .gitmodules submodule.sub.path
git checkout conflict1 &&
git reset --hard &&
git submodule update &&
- (cd submod &&
- echo X >empty
- ) &&
+ echo X >submod/empty &&
test_must_fail git merge conflict2 &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.conflict actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual &&
test_must_fail git config -f .gitmodules submodule.sub.url &&
test_must_fail git config -f .gitmodules submodule.sub.path
git checkout conflict1 &&
git reset --hard &&
git submodule update &&
- (cd submod &&
- echo X >untracked
- ) &&
+ echo X >submod/untracked &&
test_must_fail git merge conflict2 &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.conflict actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
test_must_fail git rm submod &&
test -d submod &&
test -d submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.conflict actual &&
test_must_fail git rm -f submod &&
test -d submod &&
test -d submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.conflict actual &&
git merge --abort &&
rm -rf submod
test_must_fail git merge conflict2 &&
git rm submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
-test_expect_success 'rm of a populated submodule with a .git directory fails even when forced' '
+test_expect_success 'rm of a populated submodule with a .git directory migrates git dir' '
git checkout -f master &&
git reset --hard &&
git submodule update &&
(cd submod &&
rm .git &&
cp -R ../.git/modules/sub .git &&
- GIT_WORK_TREE=. git config --unset core.worktree
+ GIT_WORK_TREE=. git config --unset core.worktree &&
+ rm -r ../.git/modules/sub
) &&
- test_must_fail git rm submod &&
- test -d submod &&
- test -d submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
- ! test -s actual &&
- test_must_fail git rm -f submod &&
- test -d submod &&
- test -d submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
- ! test -s actual &&
- rm -rf submod
+ git rm submod 2>output.err &&
+ ! test -d submod &&
+ ! test -d submod/.git &&
+ git status -s -uno --ignore-submodules=none >actual &&
+ test -s actual &&
+ test_i18ngrep Migrating output.err
'
cat >expect.deepmodified <<EOF
test_expect_success 'rm recursively removes work tree of unmodified submodules' '
git rm submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
test_expect_success 'rm of a populated nested submodule with different nested HEAD fails unless forced' '
git reset --hard &&
git submodule update --recursive &&
- (cd submod/subsubmod &&
- git checkout HEAD^
- ) &&
+ git -C submod/subsubmod checkout HEAD^ &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.modified actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
test_expect_success 'rm of a populated nested submodule with nested modifications fails unless forced' '
git reset --hard &&
git submodule update --recursive &&
- (cd submod/subsubmod &&
- echo X >empty
- ) &&
+ echo X >submod/subsubmod/empty &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.modified actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
test_expect_success 'rm of a populated nested submodule with nested untracked files fails unless forced' '
git reset --hard &&
git submodule update --recursive &&
- (cd submod/subsubmod &&
- echo X >untracked
- ) &&
+ echo X >submod/subsubmod/untracked &&
test_must_fail git rm submod &&
test -d submod &&
test -f submod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect.modified actual &&
git rm -f submod &&
test ! -d submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
test_cmp expect actual
'
git submodule update --recursive &&
(cd submod/subsubmod &&
rm .git &&
- cp -R ../../.git/modules/sub/modules/sub .git &&
+ mv ../../.git/modules/sub/modules/sub .git &&
GIT_WORK_TREE=. git config --unset core.worktree
) &&
- test_must_fail git rm submod &&
- test -d submod &&
- test -d submod/subsubmod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
- ! test -s actual &&
- test_must_fail git rm -f submod &&
- test -d submod &&
- test -d submod/subsubmod/.git &&
- git status -s -uno --ignore-submodules=none > actual &&
- ! test -s actual &&
- rm -rf submod
+ git rm submod 2>output.err &&
+ ! test -d submod &&
+ ! test -d submod/subsubmod/.git &&
+ git status -s -uno --ignore-submodules=none >actual &&
+ test -s actual &&
+ test_i18ngrep Migrating output.err
'
test_expect_success 'checking out a commit after submodule removal needs manual updates' '
- git commit -m "submodule removal" submod &&
+ git commit -m "submodule removal" submod .gitmodules &&
git checkout HEAD^ &&
git submodule update &&
- git checkout -q HEAD^ 2>actual &&
+ git checkout -q HEAD^ &&
git checkout -q master 2>actual &&
test_i18ngrep "^warning: unable to rmdir submod:" actual &&
git status -s submod >actual &&
echo "?? submod/" >expected &&
test_cmp expected actual &&
rm -rf submod &&
- git status -s -uno --ignore-submodules=none > actual &&
+ git status -s -uno --ignore-submodules=none >actual &&
! test -s actual
'
test_cmp expected diff
'
+test_expect_success 'diffs can be colorized' '
+ git reset --hard &&
+
+ # force color even though the test script has no terminal
+ test_config color.ui always &&
+
+ echo content >test &&
+ printf y | git add -p >output 2>&1 &&
+
+ # We do not want to depend on the exact coloring scheme
+ # git uses for diffs, so just check that we saw some kind of color.
+ grep "$(printf "\\033")" output
+'
+
test_done
test_cmp expect actual
'
+test_expect_success 'stash is not confused by partial renames' '
+ mv file renamed &&
+ git add renamed &&
+ git stash &&
+ git stash apply &&
+ test_path_is_file renamed &&
+ test_path_is_missing file
+'
+
test_done
diff --dirstat master~1 master~2
diff --dirstat initial rearrange
diff --dirstat-by-file initial rearrange
+# No-index --abbrev and --no-abbrev
+diff --raw initial
+diff --raw --abbrev=4 initial
+diff --raw --no-abbrev initial
+diff --no-index --raw dir2 dir
+diff --no-index --raw --abbrev=4 dir2 dir
+diff --no-index --raw --no-abbrev dir2 dir
EOF
test_expect_success 'log -S requires an argument' '
--- /dev/null
+$ git diff --no-index --raw --abbrev=4 dir2 dir
+:000000 100644 0000... 0000... A dir/sub
+$
--- /dev/null
+$ git diff --no-index --raw --no-abbrev dir2 dir
+:000000 100644 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 A dir/sub
+$
--- /dev/null
+$ git diff --no-index --raw dir2 dir
+:000000 100644 0000000... 0000000... A dir/sub
+$
--- /dev/null
+$ git diff --raw --abbrev=4 initial
+:100644 100644 35d2... 9929... M dir/sub
+:100644 100644 01e7... 10a8... M file0
+:000000 100644 0000... b1e6... A file1
+:100644 000000 01e7... 0000... D file2
+$
--- /dev/null
+$ git diff --raw --no-abbrev initial
+:100644 100644 35d242ba79ae89ac695e26b3d4c27a8e6f028f9e 992913c5aa0a5476d10c49ed0f21fc0c6d1aedf3 M dir/sub
+:100644 100644 01e79c32a8c99c557f0757da7cb6d65b3414466d 10a8a9f3657f91a156b9f0184ed79a20adef9f7f M file0
+:000000 100644 0000000000000000000000000000000000000000 b1e67221afe8461efd244b487afca22d46b95eb8 A file1
+:100644 000000 01e79c32a8c99c557f0757da7cb6d65b3414466d 0000000000000000000000000000000000000000 D file2
+$
--- /dev/null
+$ git diff --raw initial
+:100644 100644 35d242b... 992913c... M dir/sub
+:100644 100644 01e79c3... 10a8a9f... M file0
+:000000 100644 0000000... b1e6722... A file1
+:100644 000000 01e79c3... 0000000... D file2
+$
4:Subject: [PATCH] subject
8:
10:Signed-off-by: example happens to be wrapped here.
-11:
-12:Signed-off-by: C O Mitter <committer@example.com>
+11:Signed-off-by: C O Mitter <committer@example.com>
EOF
test_cmp expected actual
'
test_cmp expected actual
'
-test_expect_success 'signoff: detect garbage in non-conforming footer' '
+test_expect_success 'signoff: tolerate garbage in conforming footer' '
append_signoff <<\EOF >actual &&
subject
8:
10:
13:Signed-off-by: C O Mitter <committer@example.com>
-14:
-15:Signed-off-by: C O Mitter <committer@example.com>
+EOF
+ test_cmp expected actual
+'
+
+test_expect_success 'signoff: respect trailer config' '
+ append_signoff <<\EOF >actual &&
+subject
+
+Myfooter: x
+Some Trash
+EOF
+ cat >expected <<\EOF &&
+4:Subject: [PATCH] subject
+8:
+11:
+12:Signed-off-by: C O Mitter <committer@example.com>
+EOF
+ test_cmp expected actual &&
+
+ test_config trailer.Myfooter.ifexists add &&
+ append_signoff <<\EOF >actual &&
+subject
+
+Myfooter: x
+Some Trash
+EOF
+ cat >expected <<\EOF &&
+4:Subject: [PATCH] subject
+8:
+11:Signed-off-by: C O Mitter <committer@example.com>
EOF
test_cmp expected actual
'
test_description='Test diff/status color escape codes'
. ./test-lib.sh
+ESC=$(printf '\033')
color()
{
actual=$(git config --get-color no.such.slot "$1") &&
- test "$actual" = "\e$2"
+ test "$actual" = "${2:+$ESC}$2"
}
invalid_color()
color "reset" "[m"
'
+test_expect_success 'empty color is empty' '
+ color "" ""
+'
+
test_expect_success 'attribute before color name' '
color "bold red" "[1;31m"
'
}
t() {
+ use_config=
+ git config --unset diff.interHunkContext
+
case $# in
4) hunks=$4; cmd="diff -U$3";;
5) hunks=$5; cmd="diff -U$3 --inter-hunk-context=$4";;
+ 6) hunks=$5; cmd="diff -U$3"; git config diff.interHunkContext $4; use_config="(diff.interHunkContext=$4) ";;
esac
- label="$cmd, $1 common $2"
+ label="$use_config$cmd, $1 common $2"
file=f$1
expected=expected.$file.$3.$hunks
t 9 lines 3 2 2
t 9 lines 3 3 1
+# use diff.interHunkContext?
+t 1 line 0 0 2 config
+t 1 line 0 1 1 config
+t 1 line 0 2 1 config
+t 9 lines 3 3 1 config
+t 2 lines 0 0 2 config
+t 2 lines 0 1 2 config
+t 2 lines 0 2 1 config
+t 3 lines 1 0 2 config
+t 3 lines 1 1 1 config
+t 3 lines 1 2 1 config
+t 9 lines 3 2 2 config
+t 9 lines 3 3 1 config
+
+test_expect_success 'diff.interHunkContext invalid' '
+ git config diff.interHunkContext asdf &&
+ test_must_fail git diff &&
+ git config diff.interHunkContext -1 &&
+ test_must_fail git diff
+'
+
test_done
test_line_count = 3 shortlog
'
+test_expect_success 'shortlog --committer (internal)' '
+ git checkout --orphan side &&
+ git commit --allow-empty -m one &&
+ git commit --allow-empty -m two &&
+ GIT_COMMITTER_NAME="Sin Nombre" git commit --allow-empty -m three &&
+
+ cat >expect <<-\EOF &&
+ 2 C O Mitter
+ 1 Sin Nombre
+ EOF
+ git shortlog -nsc HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'shortlog --committer (external)' '
+ git log --format=full | git shortlog -nsc >actual &&
+ test_cmp expect actual
+'
+
test_done
test_cmp expect actual
'
+cat > expect.colors <<\EOF
+* Merge branch 'side'
+<BLUE>|<RESET><CYAN>\<RESET>
+<BLUE>|<RESET> * side-2
+<BLUE>|<RESET> * side-1
+* <CYAN>|<RESET> Second
+* <CYAN>|<RESET> sixth
+* <CYAN>|<RESET> fifth
+* <CYAN>|<RESET> fourth
+<CYAN>|<RESET><CYAN>/<RESET>
+* third
+* second
+* initial
+EOF
+
+test_expect_success 'log --graph with merge with log.graphColors' '
+ test_config log.graphColors " blue,invalid-color, cyan, red , " &&
+ git log --color=always --graph --date-order --pretty=tformat:%s |
+ test_decode_color | sed "s/ *\$//" >actual &&
+ test_cmp expect.colors actual
+'
+
test_expect_success 'log --raw --graph -m with merge' '
git log --raw --graph --oneline -m master | head -n 500 >actual &&
grep "initial" actual
test_cmp expected actual1
'
+cat >trailers <<EOF
+Signed-off-by: A U Thor <author@example.com>
+Acked-by: A U Thor <author@example.com>
+[ v2 updated patch description ]
+Signed-off-by: A U Thor <author@example.com>
+EOF
+
+test_expect_success 'pretty format %(trailers) shows trailers' '
+ echo "Some contents" >trailerfile &&
+ git add trailerfile &&
+ git commit -F - <<-EOF &&
+ trailers: this commit message has trailers
+
+ This commit is a test commit with trailers at the end. We parse this
+ message and display the trailers using %bT
+
+ $(cat trailers)
+ EOF
+ git log --no-walk --pretty="%(trailers)" >actual &&
+ cat >expect <<-EOF &&
+ $(cat trailers)
+
+ EOF
+ test_cmp expect actual
+'
+
test_done
'
}
-# run "$@" inside a non-git directory
-nongit () {
- test -d non-repo ||
- mkdir non-repo ||
- return 1
-
- (
- GIT_CEILING_DIRECTORIES=$(pwd) &&
- export GIT_CEILING_DIRECTORIES &&
- cd non-repo &&
- "$@"
- )
-}
-
test_expect_success \
'populate workdir' \
'mkdir a &&
test_cmp_bin $original/nodiff.crlf $extracted/nodiff.crlf &&
test_cmp_bin $original/nodiff.lf $extracted/nodiff.lf
"
+
+ test_expect_success UNZIP " validate that custom diff is unchanged " "
+ test_cmp_bin $original/custom.cr $extracted/custom.cr &&
+ test_cmp_bin $original/custom.crlf $extracted/custom.crlf &&
+ test_cmp_bin $original/custom.lf $extracted/custom.lf
+ "
}
test_expect_success \
printf "text\r" >a/nodiff.cr &&
printf "text\r\n" >a/nodiff.crlf &&
printf "text\n" >a/nodiff.lf &&
+ printf "text\r" >a/custom.cr &&
+ printf "text\r\n" >a/custom.crlf &&
+ printf "text\n" >a/custom.lf &&
printf "\0\r" >a/binary.cr &&
printf "\0\r\n" >a/binary.crlf &&
printf "\0\n" >a/binary.lf &&
test_expect_success 'setup export-subst and diff attributes' '
echo "a/nodiff.* -diff" >>.git/info/attributes &&
echo "a/diff.* diff" >>.git/info/attributes &&
+ echo "a/custom.* diff=custom" >>.git/info/attributes &&
+ git config diff.custom.binary true &&
echo "substfile?" export-subst >>.git/info/attributes &&
git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \
>a/substfile1
'
-test_expect_success \
- 'create bare clone' \
- 'git clone --bare . bare.git &&
- cp .git/info/attributes bare.git/info/attributes'
+test_expect_success 'create bare clone' '
+ git clone --bare . bare.git &&
+ cp .git/info/attributes bare.git/info/attributes &&
+ # Recreate our changes to .git/config rather than just copying it, as
+ # we do not want to clobber core.bare or other settings.
+ git -C bare.git config diff.custom.binary true
+'
test_expect_success \
'remove ignored file' \
git verify-pack test-11-*.pack
'
+test_expect_success 'set up pack for non-repo tests' '
+ # make sure we have a pack with no matching index file
+ cp test-1-*.pack foo.pack
+'
+
+test_expect_success 'index-pack --stdin complains of non-repo' '
+ nongit test_must_fail git index-pack --stdin <foo.pack &&
+ test_path_is_missing non-repo/.git
+'
+
+test_expect_success 'index-pack <pack> works in non-repo' '
+ nongit git index-pack ../foo.pack &&
+ test_path_is_file foo.idx
+'
+
#
# WARNING!
#
test_cmp expect actual
'
-test_expect_success 'incremental repack cannot create bitmaps' '
+test_expect_success 'incremental repack fails when bitmaps are requested' '
test_commit more-1 &&
- find .git/objects/pack -name "*.bitmap" >expect &&
- git repack -d &&
- find .git/objects/pack -name "*.bitmap" >actual &&
- test_cmp expect actual
+ test_must_fail git repack -d 2>err &&
+ test_i18ngrep "Incremental repacks are incompatible with bitmap" err
'
test_expect_success 'incremental repack can disable bitmaps' '
--- /dev/null
+#!/bin/sh
+
+test_description='pack-object compression configuration'
+
+. ./test-lib.sh
+
+# This should be moved to test-lib.sh together with the
+# copy in t0021 after both topics have graduated to 'master'.
+file_size () {
+ perl -e 'print -s $ARGV[0]' "$1"
+}
+
+test_expect_success setup '
+ printf "%2000000s" X |
+ git hash-object -w --stdin >object-name &&
+ # make sure it resulted in a loose object
+ ob=$(sed -e "s/\(..\).*/\1/" object-name) &&
+ ject=$(sed -e "s/..\(.*\)/\1/" object-name) &&
+ test -f .git/objects/$ob/$ject
+'
+
+while read expect config
+do
+ test_expect_success "pack-objects with $config" '
+ test_when_finished "rm -f pack-*.*" &&
+ git $config pack-objects pack <object-name &&
+ sz=$(file_size pack-*.pack) &&
+ case "$expect" in
+ small) test "$sz" -le 100000 ;;
+ large) test "$sz" -ge 100000 ;;
+ esac
+ '
+done <<\EOF
+large -c core.compression=0
+small -c core.compression=9
+large -c core.compression=0 -c pack.compression=0
+large -c core.compression=9 -c pack.compression=0
+small -c core.compression=0 -c pack.compression=9
+small -c core.compression=9 -c pack.compression=9
+large -c pack.compression=0
+small -c pack.compression=9
+EOF
+
+test_done
git --git-dir=dst/.git config --add \
receive.fsck.badDate warn &&
git push --porcelain dst bogus >act 2>&1 &&
- test_must_fail grep "missingEmail" act
+ ! grep "missingEmail" act
'
test_expect_success \
)
'
+test_expect_success 'rename succeeds with existing remote.<target>.prune' '
+ git clone one four.four &&
+ test_when_finished git config --global --unset remote.upstream.prune &&
+ git config --global remote.upstream.prune true &&
+ git -C four.four remote rename origin upstream
+'
+
cat >remotes_origin <<EOF
URL: $(pwd)/one
Push: refs/heads/master:refs/heads/upstream
. ./test-lib.sh
test_expect_success setup '
+ git config --global protocol.ext.allow user &&
test_tick &&
git init original &&
(
test_expect_success 'push --porcelain bad url' '
mk_empty testrepo &&
test_must_fail git push >.git/bar --porcelain asdfasdfasd refs/heads/master:refs/remotes/origin/master &&
- test_must_fail grep -q Done .git/bar
+ ! grep -q Done .git/bar
'
test_expect_success 'push --porcelain rejected' '
test new = "$(git show HEAD:file2)"
'
+test_expect_success '--rebase fast forward' '
+ git reset --hard before-rebase &&
+ git checkout -b ff &&
+ echo another modification >file &&
+ git commit -m third file &&
+
+ git checkout to-rebase &&
+ git pull --rebase . ff &&
+ test "$(git rev-parse HEAD)" = "$(git rev-parse ff)" &&
+
+ # The above only validates the result. Did we actually bypass rebase?
+ git reflog -1 >reflog.actual &&
+ sed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&
+ echo "OBJID HEAD@{0}: pull --rebase . ff: Fast-forward" >reflog.expected &&
+ test_cmp reflog.expected reflog.fuzzy
+'
+
test_expect_success '--rebase with conflicts shows advice' '
test_when_finished "git rebase --abort; git checkout -f to-rebase" &&
git checkout -b seq &&
test_push_failure upstream
'
+test_expect_success 'push ambiguously named branch with upstream, matching and simple' '
+ git checkout -b ambiguous &&
+ test_config branch.ambiguous.remote parent1 &&
+ test_config branch.ambiguous.merge refs/heads/ambiguous &&
+ git tag ambiguous &&
+ test_push_success simple ambiguous &&
+ test_push_success matching ambiguous &&
+ test_push_success upstream ambiguous
+'
+
test_expect_success 'push from/to new branch with current creates remote branch' '
test_config branch.new-branch.remote repo1 &&
git checkout new-branch &&
cd submodule.git &&
git rev-parse master >../actual
) &&
+ test_when_finished git -C work reset --hard master^ &&
test_cmp expected actual
'
+test_expect_success 'push --dry-run does not recursively update submodules' '
+ (
+ cd work/gar/bage &&
+ git checkout master &&
+ git rev-parse master >../../../expected_submodule &&
+ > junk9 &&
+ git add junk9 &&
+ git commit -m "Ninth junk" &&
+
+ # Go up to 'work' directory
+ cd ../.. &&
+ git checkout master &&
+ git rev-parse master >../expected_pub &&
+ git add gar/bage &&
+ git commit -m "Ninth commit for gar/bage" &&
+ git push --dry-run --recurse-submodules=on-demand ../pub.git master
+ ) &&
+ git -C submodule.git rev-parse master >actual_submodule &&
+ git -C pub.git rev-parse master >actual_pub &&
+ test_cmp expected_pub actual_pub &&
+ test_cmp expected_submodule actual_submodule
+'
+
+test_expect_success 'push --dry-run does not recursively update submodules' '
+ git -C work push --dry-run --recurse-submodules=only ../pub.git master &&
+
+ git -C submodule.git rev-parse master >actual_submodule &&
+ git -C pub.git rev-parse master >actual_pub &&
+ test_cmp expected_pub actual_pub &&
+ test_cmp expected_submodule actual_submodule
+'
+
+test_expect_success 'push only unpushed submodules recursively' '
+ git -C work/gar/bage rev-parse master >expected_submodule &&
+ git -C pub.git rev-parse master >expected_pub &&
+
+ git -C work push --recurse-submodules=only ../pub.git master &&
+
+ git -C submodule.git rev-parse master >actual_submodule &&
+ git -C pub.git rev-parse master >actual_pub &&
+ test_cmp expected_submodule actual_submodule &&
+ test_cmp expected_pub actual_pub
+'
+
test_done
test_cmp expect actual
'
+test_expect_success 'push to repo path with path separator (colon)' '
+ # The interesting failure case here is when the
+ # receiving end cannot access its original object directory,
+ # so make it likely for us to generate a delta by having
+ # a non-trivial file with multiple versions.
+
+ test-genrandom foo 4096 >file.bin &&
+ git add file.bin &&
+ git commit -m bin &&
+
+ if test_have_prereq MINGW
+ then
+ pathsep=";"
+ else
+ pathsep=":"
+ fi &&
+ git clone --bare . "xxx${pathsep}yyy.git" &&
+
+ echo change >>file.bin &&
+ git commit -am change &&
+ # Note that we have to use the full path here, or it gets confused
+ # with the ssh host:path syntax.
+ git push "$(pwd)/xxx${pathsep}yyy.git" HEAD
+'
+
test_done
test_must_fail git remote-http http::/example.com/repo.git
'
+test_expect_success 'redirects can be forbidden/allowed' '
+ test_must_fail git -c http.followRedirects=false \
+ clone $HTTPD_URL/dumb-redir/repo.git dumb-redir &&
+ git -c http.followRedirects=true \
+ clone $HTTPD_URL/dumb-redir/repo.git dumb-redir 2>stderr
+'
+
+test_expect_success 'redirects are reported to stderr' '
+ # just look for a snippet of the redirected-to URL
+ test_i18ngrep /dumb/ stderr
+'
+
+test_expect_success 'non-initial redirects can be forbidden' '
+ test_must_fail git -c http.followRedirects=initial \
+ clone $HTTPD_URL/redir-objects/repo.git redir-objects &&
+ git -c http.followRedirects=true \
+ clone $HTTPD_URL/redir-objects/repo.git redir-objects
+'
+
+test_expect_success 'http.followRedirects defaults to "initial"' '
+ test_must_fail git clone $HTTPD_URL/redir-objects/repo.git default
+'
+
+# The goal is for a clone of the "evil" repository, which has no objects
+# itself, to cause the client to fetch objects from the "victim" repository.
+test_expect_success 'set up evil alternates scheme' '
+ victim=$HTTPD_DOCUMENT_ROOT_PATH/victim.git &&
+ git init --bare "$victim" &&
+ git -C "$victim" --work-tree=. commit --allow-empty -m secret &&
+ git -C "$victim" repack -ad &&
+ git -C "$victim" update-server-info &&
+ sha1=$(git -C "$victim" rev-parse HEAD) &&
+
+ evil=$HTTPD_DOCUMENT_ROOT_PATH/evil.git &&
+ git init --bare "$evil" &&
+ # do this by hand to avoid object existence check
+ printf "%s\\t%s\\n" $sha1 refs/heads/master >"$evil/info/refs"
+'
+
+# Here we'll just redirect via HTTP. In a real-world attack these would be on
+# different servers, but we should reject it either way.
+test_expect_success 'http-alternates is a non-initial redirect' '
+ echo "$HTTPD_URL/dumb/victim.git/objects" \
+ >"$evil/objects/info/http-alternates" &&
+ test_must_fail git -c http.followRedirects=initial \
+ clone $HTTPD_URL/dumb/evil.git evil-initial &&
+ git -c http.followRedirects=true \
+ clone $HTTPD_URL/dumb/evil.git evil-initial
+'
+
+# Curl supports a lot of protocols that we'd prefer not to allow
+# http-alternates to use, but it's hard to test whether curl has
+# accessed, say, the SMTP protocol, because we are not running an SMTP server.
+# But we can check that it does not allow access to file://, which would
+# otherwise allow this clone to complete.
+test_expect_success 'http-alternates cannot point at funny protocols' '
+ echo "file://$victim/objects" >"$evil/objects/info/http-alternates" &&
+ test_must_fail git -c http.followRedirects=true \
+ clone "$HTTPD_URL/dumb/evil.git" evil-file
+'
+
+test_expect_success 'http-alternates triggers not-from-user protocol check' '
+ echo "$HTTPD_URL/dumb/victim.git/objects" \
+ >"$evil/objects/info/http-alternates" &&
+ test_config_global http.followRedirects true &&
+ test_must_fail git -c protocol.http.allow=user \
+ clone $HTTPD_URL/dumb/evil.git evil-user &&
+ git -c protocol.http.allow=always \
+ clone $HTTPD_URL/dumb/evil.git evil-user
+'
+
stop_httpd
test_done
git clone $HTTPD_URL/smart-redir-limited/repo.git repo-redir-limited
'
+test_expect_success 're-rooting dies on insane schemes' '
+ test_must_fail git clone $HTTPD_URL/insane-redir/repo.git insane
+'
+
test_expect_success 'clone from password-protected repository' '
echo two >expect &&
set_askpass user@host pass@host &&
test_line_count = 2 posts
'
+test_expect_success 'test allowreachablesha1inwant' '
+ test_when_finished "rm -rf test_reachable.git" &&
+ server="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+ master_sha=$(git -C "$server" rev-parse refs/heads/master) &&
+ git -C "$server" config uploadpack.allowreachablesha1inwant 1 &&
+
+ git init --bare test_reachable.git &&
+ git -C test_reachable.git remote add origin "$HTTPD_URL/smart/repo.git" &&
+ git -C test_reachable.git fetch origin "$master_sha"
+'
+
+test_expect_success 'test allowreachablesha1inwant with unreachable' '
+ test_when_finished "rm -rf test_reachable.git; git reset --hard $(git rev-parse HEAD)" &&
+
+ #create unreachable sha
+ echo content >file2 &&
+ git add file2 &&
+ git commit -m two &&
+ git push public HEAD:refs/heads/doomed &&
+ git push public :refs/heads/doomed &&
+
+ server="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+ master_sha=$(git -C "$server" rev-parse refs/heads/master) &&
+ git -C "$server" config uploadpack.allowreachablesha1inwant 1 &&
+
+ git init --bare test_reachable.git &&
+ git -C test_reachable.git remote add origin "$HTTPD_URL/smart/repo.git" &&
+ test_must_fail git -C test_reachable.git fetch origin "$(git rev-parse HEAD)"
+'
+
+test_expect_success 'test allowanysha1inwant with unreachable' '
+ test_when_finished "rm -rf test_reachable.git; git reset --hard $(git rev-parse HEAD)" &&
+
+ #create unreachable sha
+ echo content >file2 &&
+ git add file2 &&
+ git commit -m two &&
+ git push public HEAD:refs/heads/doomed &&
+ git push public :refs/heads/doomed &&
+
+ server="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+ master_sha=$(git -C "$server" rev-parse refs/heads/master) &&
+ git -C "$server" config uploadpack.allowreachablesha1inwant 1 &&
+
+ git init --bare test_reachable.git &&
+ git -C test_reachable.git remote add origin "$HTTPD_URL/smart/repo.git" &&
+ test_must_fail git -C test_reachable.git fetch origin "$(git rev-parse HEAD)" &&
+
+ git -C "$server" config uploadpack.allowanysha1inwant 1 &&
+ git -C test_reachable.git fetch origin "$(git rev-parse HEAD)"
+'
+
test_expect_success EXPENSIVE 'http can handle enormous ref negotiation' '
(
cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
--- /dev/null
+#!/bin/sh
+
+test_description='various UNC path tests (Windows-only)'
+. ./test-lib.sh
+
+if ! test_have_prereq MINGW; then
+ skip_all='skipping UNC path tests, requires Windows'
+ test_done
+fi
+
+UNCPATH="$(pwd)"
+case "$UNCPATH" in
+[A-Z]:*)
+ # Use administrative share e.g. \\localhost\C$\git-sdk-64\usr\src\git
+ # (we use forward slashes here because MSYS2 and Git accept them, and
+ # they are easier on the eyes)
+ UNCPATH="//localhost/${UNCPATH%%:*}\$/${UNCPATH#?:}"
+ test -d "$UNCPATH" || {
+ skip_all='could not access administrative share; skipping'
+ test_done
+ }
+ ;;
+*)
+ skip_all='skipping UNC path tests, cannot determine current path as UNC'
+ test_done
+ ;;
+esac
+
+test_expect_success setup '
+ test_commit initial
+'
+
+test_expect_success clone '
+ git clone "file://$UNCPATH" clone
+'
+
+test_expect_success push '
+ (
+ cd clone &&
+ git checkout -b to-push &&
+ test_commit to-push &&
+ git push origin HEAD
+ ) &&
+ rev="$(git -C clone rev-parse --verify refs/heads/to-push)" &&
+ test "$rev" = "$(git rev-parse --verify refs/heads/to-push)"
+'
+
+test_done
git clone --mirror src mirror2 &&
(cd mirror2 &&
git show-ref 2> clone.err > clone.out) &&
- test_must_fail grep Duplicate mirror2/clone.err &&
+ ! grep Duplicate mirror2/clone.err &&
grep some-tag mirror2/clone.out
'
EOF
'
+# set variables outside test to avoid quote insanity; the \057 is '/',
+# which doesn't need quoting, but just confirms that de-quoting
+# is working.
+quoted='"one.git\057objects"'
+unquoted='two.git/objects'
+test_expect_success 'mix of quoted and unquoted alternates' '
+ check_obj "$quoted:$unquoted" <<-EOF
+ $one blob
+ $two blob
+'
+
+test_expect_success !MINGW 'broken quoting falls back to interpreting raw' '
+ mv one.git \"one.git &&
+ check_obj \"one.git/objects <<-EOF
+ $one blob
+ EOF
+'
+
test_done
. ./test-lib.sh
test_expect_success setup '
+ git config --global protocol.ext.allow user &&
test_tick &&
git commit --allow-empty -m initial &&
test_tick &&
test_expect_success 'curl redirects respect whitelist' '
test_must_fail env GIT_ALLOW_PROTOCOL=http:https \
+ GIT_SMART_HTTP=0 \
git clone "$HTTPD_URL/ftp-redir/repo.git" 2>stderr &&
{
test_i18ngrep "ftp.*disabled" stderr ||
test_must_fail git clone "$HTTPD_URL/loop-redir/smart/repo.git"
'
+test_expect_success 'http can be limited to from-user' '
+ git -c protocol.http.allow=user \
+ clone "$HTTPD_URL/smart/repo.git" plain.git &&
+ test_must_fail git -c protocol.http.allow=user \
+ clone "$HTTPD_URL/smart-redir-perm/repo.git" redir.git
+'
+
stop_httpd
test_done
test_i18ngrep "merge base must be tested" my_bisect_log.txt &&
grep $HASH4 my_bisect_log.txt &&
git bisect good > my_bisect_log.txt &&
- test_must_fail grep "merge base must be tested" my_bisect_log.txt &&
+ ! grep "merge base must be tested" my_bisect_log.txt &&
grep $HASH6 my_bisect_log.txt &&
git bisect reset
'
test_cmp expect actual
'
+test_expect_success 'symbolic final^1^@ = final^1^1 final^1^2' '
+ git rev-parse --symbolic final^1^1 final^1^2 >expect &&
+ git rev-parse --symbolic final^1^@ >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'final^1^! = final^1 ^final^1^1 ^final^1^2' '
git rev-parse final^1 ^final^1^1 ^final^1^2 >expect &&
git rev-parse final^1^! >actual &&
test_cmp expect actual
'
+test_expect_success 'symbolic final^1^! = final^1 ^final^1^1 ^final^1^2' '
+ git rev-parse --symbolic final^1 ^final^1^1 ^final^1^2 >expect &&
+ git rev-parse --symbolic final^1^! >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'large graft octopus' '
test_cmp_rev_output b31 "git rev-parse --verify b1^30"
'
test_cmp expect actual
'
+test_expect_success 'symbolic merge^-1 = merge^1..merge' '
+ git rev-parse --symbolic merge^1..merge >expect &&
+ git rev-parse --symbolic merge^-1 >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'rev-parse merge^-0 (invalid parent)' '
test_must_fail git rev-parse merge^-0
'
--- /dev/null
+#!/bin/sh
+
+test_description='test case exclude pathspec'
+
+. ./test-lib.sh
+
+test_expect_success 'setup a submodule' '
+ test_create_repo pretzel &&
+ : >pretzel/a &&
+ git -C pretzel add a &&
+ git -C pretzel commit -m "add a file" -- a &&
+ git submodule add ./pretzel sub &&
+ git commit -a -m "add submodule" &&
+ git submodule deinit --all
+'
+
+cat <<EOF >expect
+fatal: Pathspec 'sub/a' is in submodule 'sub'
+EOF
+
+test_expect_success 'error message for path inside submodule' '
+ echo a >sub/a &&
+ test_must_fail git add sub/a 2>actual &&
+ test_cmp expect actual
+'
+
+cat <<EOF >expect
+fatal: Pathspec '.' is in submodule 'sub'
+EOF
+
+test_expect_success 'error message for path inside submodule from within submodule' '
+ test_must_fail git -C sub add . 2>actual &&
+ test_cmp expect actual
+'
+
+test_done
test_cmp expect actual
'
+cat >trailers <<EOF
+Reviewed-by: A U Thor <author@example.com>
+Signed-off-by: A U Thor <author@example.com>
+EOF
+
+test_expect_success 'basic atom: head contents:trailers' '
+ echo "Some contents" > two &&
+ git add two &&
+ git commit -F - <<-EOF &&
+ trailers: this commit message has trailers
+
+ Some message contents
+
+ $(cat trailers)
+ EOF
+ git for-each-ref --format="%(contents:trailers)" refs/heads/master >actual &&
+ sanitize_pgp <actual >actual.clean &&
+ # git for-each-ref ends with a blank line
+ cat >expect <<-EOF &&
+ $(cat trailers)
+
+ EOF
+ test_cmp expect actual.clean
+'
+
test_done
)
'
+test_expect_success 'auto gc with too many loose objects does not attempt to create bitmaps' '
+ test_config gc.auto 3 &&
+ test_config gc.autodetach false &&
+ test_config pack.writebitmaps true &&
+ # We need to create two object whose sha1s start with 17
+ # since this is what git gc counts. As it happens, these
+ # two blobs will do so.
+ test_commit 263 &&
+ test_commit 410 &&
+ # Our first gc will create a pack; our second will create a second pack
+ git gc --auto &&
+ ls .git/objects/pack | sort >existing_packs &&
+ test_commit 523 &&
+ test_commit 790 &&
+
+ git gc --auto 2>err &&
+ test_i18ngrep ! "^warning:" err &&
+ ls .git/objects/pack/ | sort >post_packs &&
+ comm -1 -3 existing_packs post_packs >new &&
+ comm -2 -3 existing_packs post_packs >del &&
+ test_line_count = 0 del && # No packs are deleted
+ test_line_count = 2 new # There is one new pack and its .idx
+'
+
+
test_done
test $(git tag | wc -l) -eq 0
'
+test_expect_success 'sort tags, ignore case' '
+ (
+ git init sort &&
+ cd sort &&
+ test_commit initial &&
+ git tag tag-one &&
+ git tag TAG-two &&
+ git tag -l >actual &&
+ cat >expected <<-\EOF &&
+ TAG-two
+ initial
+ tag-one
+ EOF
+ test_cmp expected actual &&
+ git tag -l -i >actual &&
+ cat >expected <<-\EOF &&
+ initial
+ tag-one
+ TAG-two
+ EOF
+ test_cmp expected actual
+ )
+'
+
test_expect_success 'looking for a tag in an empty tree should fail' \
'! (tag_exists mytag)'
# commit used in the tests, test_tick is also called here to freeze the date:
test_expect_success 'creating a tag using default HEAD should succeed' '
+ test_config core.logAllRefUpdates true &&
test_tick &&
echo foo >foo &&
git add foo &&
test_must_fail git reflog exists refs/tags/mytag
'
+test_expect_success 'option core.logAllRefUpdates=always creates reflog' '
+ test_when_finished "git tag -d tag_with_reflog" &&
+ test_config core.logAllRefUpdates always &&
+ git tag tag_with_reflog &&
+ git reflog exists refs/tags/tag_with_reflog
+'
+
test_expect_success 'listing all tags if one exists should succeed' '
git tag -l &&
git tag
test_expect_success 'listing a tag using a matching pattern should succeed' \
'git tag -l mytag'
+test_expect_success 'listing a tag with --ignore-case' \
+ 'test $(git tag -l --ignore-case MYTAG) = mytag'
+
test_expect_success \
'listing a tag using a matching pattern should output that tag' \
'test $(git tag -l mytag) = mytag'
tag_exists mytag'
test_expect_success '--force is moot with a non-existing tag name' '
+ test_when_finished git tag -d newtag forcetag &&
git tag newtag >expect &&
git tag --force forcetag >actual &&
test_cmp expect actual
'
-git tag -d newtag forcetag
# deleting tags:
'
test_expect_success 'listing tags in column with column.*' '
- git config column.tag row &&
- git config column.ui dense &&
+ test_config column.tag row &&
+ test_config column.ui dense &&
COLUMNS=40 git tag -l >actual &&
- git config --unset column.ui &&
- git config --unset column.tag &&
cat >expected <<\EOF &&
a1 aa1 cba t210 t211
v0.2.1 v1.0 v1.0.1 v1.1.3
'
test_expect_success 'listing tags -n in column with column.ui ignored' '
- git config column.ui "row dense" &&
+ test_config column.ui "row dense" &&
COLUMNS=40 git tag -l -n >actual &&
- git config --unset column.ui &&
cat >expected <<\EOF &&
a1 Foo
aa1 Foo
test_must_fail git tag -v forged-tag
'
+test_expect_success 'verifying a proper tag with --format pass and format accordingly' '
+ cat >expect <<-\EOF
+ tagname : signed-tag
+ EOF &&
+ git tag -v --format="tagname : %(tag)" "signed-tag" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'verifying a forged tag with --format fail and format accordingly' '
+ cat >expect <<-\EOF
+ tagname : forged-tag
+ EOF &&
+ test_must_fail git tag -v --format="tagname : %(tag)" "forged-tag" >actual &&
+ test_cmp expect actual
+'
+
# blank and empty messages for signed tags:
get_tag_header empty-signed-tag $commit commit $time >expect
'
# try to sign with bad user.signingkey
-git config user.signingkey BobTheMouse
test_expect_success GPG \
'git tag -s fails if gpg is misconfigured (bad key)' \
- 'test_must_fail git tag -s -m tail tag-gpg-failure'
-git config --unset user.signingkey
+ 'test_config user.signingkey BobTheMouse &&
+ test_must_fail git tag -s -m tail tag-gpg-failure'
# try to produce invalid signature
test_expect_success GPG \
'
test_expect_success 'configured lexical sort' '
- git config tag.sort "v:refname" &&
+ test_config tag.sort "v:refname" &&
git tag -l "foo*" >actual &&
cat >expect <<-\EOF &&
foo1.3
'
test_expect_success 'option override configured sort' '
+ test_config tag.sort "v:refname" &&
git tag -l --sort=-refname "foo*" >actual &&
cat >expect <<-\EOF &&
foo1.6
'
test_expect_success 'invalid sort parameter in configuratoin' '
- git config tag.sort "v:notvalid" &&
+ test_config tag.sort "v:notvalid" &&
test_must_fail git tag -l "foo*"
'
test_expect_success 'version sort with prerelease reordering' '
- git config --unset tag.sort &&
- git config versionsort.prereleaseSuffix -rc &&
+ test_config versionsort.prereleaseSuffix -rc &&
git tag foo1.6-rc1 &&
git tag foo1.6-rc2 &&
git tag -l --sort=version:refname "foo*" >actual &&
'
test_expect_success 'reverse version sort with prerelease reordering' '
+ test_config versionsort.prereleaseSuffix -rc &&
git tag -l --sort=-version:refname "foo*" >actual &&
cat >expect <<-\EOF &&
foo1.10
test_cmp expect actual
'
+test_expect_success 'version sort with prerelease reordering and common leading character' '
+ test_config versionsort.prereleaseSuffix -before &&
+ git tag foo1.7-before1 &&
+ git tag foo1.7 &&
+ git tag foo1.7-after1 &&
+ git tag -l --sort=version:refname "foo1.7*" >actual &&
+ cat >expect <<-\EOF &&
+ foo1.7-before1
+ foo1.7
+ foo1.7-after1
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'version sort with prerelease reordering, multiple suffixes and common leading character' '
+ test_config versionsort.prereleaseSuffix -before &&
+ git config --add versionsort.prereleaseSuffix -after &&
+ git tag -l --sort=version:refname "foo1.7*" >actual &&
+ cat >expect <<-\EOF &&
+ foo1.7-before1
+ foo1.7-after1
+ foo1.7
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'version sort with prerelease reordering, multiple suffixes match the same tag' '
+ test_config versionsort.prereleaseSuffix -bar &&
+ git config --add versionsort.prereleaseSuffix -foo-baz &&
+ git config --add versionsort.prereleaseSuffix -foo-bar &&
+ git tag foo1.8-foo-bar &&
+ git tag foo1.8-foo-baz &&
+ git tag foo1.8 &&
+ git tag -l --sort=version:refname "foo1.8*" >actual &&
+ cat >expect <<-\EOF &&
+ foo1.8-foo-baz
+ foo1.8-foo-bar
+ foo1.8
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'version sort with prerelease reordering, multiple suffixes match starting at the same position' '
+ test_config versionsort.prereleaseSuffix -pre &&
+ git config --add versionsort.prereleaseSuffix -prerelease &&
+ git tag foo1.9-pre1 &&
+ git tag foo1.9-pre2 &&
+ git tag foo1.9-prerelease1 &&
+ git tag -l --sort=version:refname "foo1.9*" >actual &&
+ cat >expect <<-\EOF &&
+ foo1.9-pre1
+ foo1.9-pre2
+ foo1.9-prerelease1
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'version sort with general suffix reordering' '
+ test_config versionsort.suffix -alpha &&
+ git config --add versionsort.suffix -beta &&
+ git config --add versionsort.suffix "" &&
+ git config --add versionsort.suffix -gamma &&
+ git config --add versionsort.suffix -delta &&
+ git tag foo1.10-alpha &&
+ git tag foo1.10-beta &&
+ git tag foo1.10-gamma &&
+ git tag foo1.10-delta &&
+ git tag foo1.10-unlisted-suffix &&
+ git tag -l --sort=version:refname "foo1.10*" >actual &&
+ cat >expect <<-\EOF &&
+ foo1.10-alpha
+ foo1.10-beta
+ foo1.10
+ foo1.10-unlisted-suffix
+ foo1.10-gamma
+ foo1.10-delta
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'versionsort.suffix overrides versionsort.prereleaseSuffix' '
+ test_config versionsort.suffix -before &&
+ test_config versionsort.prereleaseSuffix -after &&
+ git tag -l --sort=version:refname "foo1.7*" >actual &&
+ cat >expect <<-\EOF &&
+ foo1.7-before1
+ foo1.7
+ foo1.7-after1
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'version sort with very long prerelease suffix' '
+ test_config versionsort.prereleaseSuffix -very-looooooooooooooooooooooooong-prerelease-suffix &&
+ git tag -l --sort=version:refname
+'
+
run_with_limited_stack () {
(ulimit -s 128 && "$@")
}
test_expect_success '--format should list tags as per format given' '
cat >expect <<-\EOF &&
- refname : refs/tags/foo1.10
- refname : refs/tags/foo1.3
- refname : refs/tags/foo1.6
- refname : refs/tags/foo1.6-rc1
- refname : refs/tags/foo1.6-rc2
+ refname : refs/tags/v1.0
+ refname : refs/tags/v1.0.1
+ refname : refs/tags/v1.1.3
EOF
- git tag -l --format="refname : %(refname)" "foo*" >actual &&
+ git tag -l --format="refname : %(refname)" "v1*" >actual &&
test_cmp expect actual
'
test_cmp expect.stderr actual.stderr
'
+test_expect_success 'verifying tag with --format' '
+ cat >expect <<-\EOF
+ tagname : fourth-signed
+ EOF &&
+ git verify-tag --format="tagname : %(tag)" "fourth-signed" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'verifying a forged tag with --format fail and format accordingly' '
+ cat >expect <<-\EOF
+ tagname : 7th forged-signed
+ EOF &&
+ test_must_fail git verify-tag --format="tagname : %(tag)" $(cat forged1.tag) >actual-forged &&
+ test_cmp expect actual-forged
+'
+
test_done
)
'
+test_expect_success 'submodule add to reconfigure existing submodule with --force' '
+ (
+ cd addtest-ignore &&
+ git submodule add --force bogus-url submod &&
+ git submodule add -b initial "$submodurl" submod-branch &&
+ test "bogus-url" = "$(git config -f .gitmodules submodule.submod.url)" &&
+ test "bogus-url" = "$(git config submodule.submod.url)" &&
+ # Restore the url
+ git submodule add --force "$submodurl" submod
+ test "$submodurl" = "$(git config -f .gitmodules submodule.submod.url)" &&
+ test "$submodurl" = "$(git config submodule.submod.url)"
+ )
+'
+
test_expect_success 'submodule add --branch' '
echo "refs/heads/initial" >expect-head &&
cat <<-\EOF >expect-heads &&
test_i18ncmp expect2 actual2
'
+cat <<EOF >expect2
+Submodule 'foo/sub' ($pwd/withsubs/../rebasing) registered for path 'sub'
+EOF
+
+test_expect_success 'submodule update --init from and of subdirectory' '
+ git init withsubs &&
+ (cd withsubs &&
+ mkdir foo &&
+ git submodule add "$(pwd)/../rebasing" foo/sub &&
+ (cd foo &&
+ git submodule deinit -f sub &&
+ git submodule update --init sub 2>../../actual2
+ )
+ ) &&
+ test_i18ncmp expect2 actual2
+'
+
apos="'";
test_expect_success 'submodule update does not fetch already present commits' '
(cd submodule &&
test_i18ncmp actual expect
'
+test_expect_success 'submodule update - command run for initial population of submodule' '
+ cat <<-\ EOF >expect
+ Execution of '\''false $submodulesha1'\'' failed in submodule path '\''submodule'\''
+ EOF &&
+ rm -rf super/submodule &&
+ test_must_fail git -C super submodule update >../actual &&
+ test_cmp expect actual &&
+ git -C super submodule update --checkout
+'
+
cat << EOF >expect
Execution of 'false $submodulesha1' failed in submodule path '../super/submodule'
Failed to recurse into submodule path '../super'
'
test_expect_success 'submodule update --merge - ignores --merge for new submodules' '
+ test_config -C super submodule.submodule.update checkout &&
(cd super &&
rm -rf submodule &&
git submodule update submodule &&
'
test_expect_success 'submodule update --rebase - ignores --rebase for new submodules' '
+ test_config -C super submodule.submodule.update checkout &&
(cd super &&
rm -rf submodule &&
git submodule update submodule &&
)
'
+test_expect_success 'preparing second superproject with a nested submodule plus partial clone' '
+ test_create_repo supersuper &&
+ (
+ cd supersuper &&
+ echo "I am super super." >file &&
+ git add file &&
+ git commit -m B-super-super-initial
+ git submodule add "file://$base_dir/super" subwithsub &&
+ git commit -m B-super-super-added &&
+ git submodule update --init --recursive &&
+ git repack -ad
+ ) &&
+ git clone supersuper supersuper2 &&
+ (
+ cd supersuper2 &&
+ git submodule update --init
+ )
+'
+
+# At this point there are three root-level positories: A, B, super and super2
+
+test_expect_success 'nested submodule alternate in works and is actually used' '
+ test_when_finished "rm -rf supersuper-clone" &&
+ git clone --recursive --reference supersuper supersuper supersuper-clone &&
+ (
+ cd supersuper-clone &&
+ # test superproject has alternates setup correctly
+ test_alternate_is_used .git/objects/info/alternates . &&
+ # immediate submodule has alternate:
+ test_alternate_is_used .git/modules/subwithsub/objects/info/alternates subwithsub &&
+ # nested submodule also has alternate:
+ test_alternate_is_used .git/modules/subwithsub/modules/sub/objects/info/alternates subwithsub/sub
+ )
+'
+
+check_that_two_of_three_alternates_are_used() {
+ test_alternate_is_used .git/objects/info/alternates . &&
+ # immediate submodule has alternate:
+ test_alternate_is_used .git/modules/subwithsub/objects/info/alternates subwithsub &&
+ # but nested submodule has no alternate:
+ test_must_fail test_alternate_is_used .git/modules/subwithsub/modules/sub/objects/info/alternates subwithsub/sub
+}
+
+
+test_expect_success 'missing nested submodule alternate fails clone and submodule update' '
+ test_when_finished "rm -rf supersuper-clone" &&
+ test_must_fail git clone --recursive --reference supersuper2 supersuper2 supersuper-clone &&
+ (
+ cd supersuper-clone &&
+ check_that_two_of_three_alternates_are_used &&
+ # update of the submodule fails
+ test_must_fail git submodule update --init --recursive
+ )
+'
+
+test_expect_success 'missing nested submodule alternate in --reference-if-able mode' '
+ test_when_finished "rm -rf supersuper-clone" &&
+ git clone --recursive --reference-if-able supersuper2 supersuper2 supersuper-clone &&
+ (
+ cd supersuper-clone &&
+ check_that_two_of_three_alternates_are_used &&
+ # update of the submodule succeeds
+ git submodule update --init --recursive
+ )
+'
+
test_done
)
'
+test_expect_success 'using different treeishs works' '
+ (
+ cd super &&
+ git tag new_tag &&
+ tree=$(git rev-parse HEAD^{tree}) &&
+ commit=$(git rev-parse HEAD^{commit}) &&
+ test-submodule-config $commit b >expect &&
+ test-submodule-config $tree b >actual.1 &&
+ test-submodule-config new_tag b >actual.2 &&
+ test_cmp expect actual.1 &&
+ test_cmp expect actual.2
+ )
+'
+
cat >super/expect_url <<EOF
Submodule url: 'git@somewhere.else.net:a.git' for path 'b'
Submodule url: 'git@somewhere.else.net:submodule.git' for path 'submodule'
"" submodule \
>actual &&
test_cmp expect_local_path actual &&
- git config submodule.a.url $old_a &&
- git config submodule.submodule.url $old_submodule &&
+ git config submodule.a.url "$old_a" &&
+ git config submodule.submodule.url "$old_submodule" &&
git config --unset submodule.a.path c
)
'
+cat >super/expect_url <<EOF
+Submodule url: '../submodule' for path 'b'
+Submodule url: 'git@somewhere.else.net:submodule.git' for path 'submodule'
+EOF
+
+test_expect_success 'reading of local configuration for uninitialized submodules' '
+ (
+ cd super &&
+ git submodule deinit -f b &&
+ old_submodule=$(git config submodule.submodule.url) &&
+ git config submodule.submodule.url git@somewhere.else.net:submodule.git &&
+ test-submodule-config --url \
+ "" b \
+ "" submodule \
+ >actual &&
+ test_cmp expect_url actual &&
+ git config submodule.submodule.url "$old_submodule" &&
+ git submodule init b
+ )
+'
+
cat >super/expect_fetchrecurse_die.err <<EOF
fatal: bad submodule.submodule.fetchrecursesubmodules argument: blabla
EOF
--- /dev/null
+#!/bin/sh
+
+test_description='Test submodule absorbgitdirs
+
+This test verifies that `git submodue absorbgitdirs` moves a submodules git
+directory into the superproject.
+'
+
+. ./test-lib.sh
+
+test_expect_success 'setup a real submodule' '
+ git init sub1 &&
+ test_commit -C sub1 first &&
+ git submodule add ./sub1 &&
+ test_tick &&
+ git commit -m superproject
+'
+
+test_expect_success 'absorb the git dir' '
+ >expect.1 &&
+ >expect.2 &&
+ >actual.1 &&
+ >actual.2 &&
+ git status >expect.1 &&
+ git -C sub1 rev-parse HEAD >expect.2 &&
+ git submodule absorbgitdirs &&
+ git fsck &&
+ test -f sub1/.git &&
+ test -d .git/modules/sub1 &&
+ git status >actual.1 &&
+ git -C sub1 rev-parse HEAD >actual.2 &&
+ test_cmp expect.1 actual.1 &&
+ test_cmp expect.2 actual.2
+'
+
+test_expect_success 'absorbing does not fail for deinitalized submodules' '
+ test_when_finished "git submodule update --init" &&
+ git submodule deinit --all &&
+ git submodule absorbgitdirs &&
+ test -d .git/modules/sub1 &&
+ test -d sub1 &&
+ ! test -e sub1/.git
+'
+
+test_expect_success 'setup nested submodule' '
+ git init sub1/nested &&
+ test_commit -C sub1/nested first_nested &&
+ git -C sub1 submodule add ./nested &&
+ test_tick &&
+ git -C sub1 commit -m "add nested" &&
+ git add sub1 &&
+ git commit -m "sub1 to include nested submodule"
+'
+
+test_expect_success 'absorb the git dir in a nested submodule' '
+ git status >expect.1 &&
+ git -C sub1/nested rev-parse HEAD >expect.2 &&
+ git submodule absorbgitdirs &&
+ test -f sub1/nested/.git &&
+ test -d .git/modules/sub1/modules/nested &&
+ git status >actual.1 &&
+ git -C sub1/nested rev-parse HEAD >actual.2 &&
+ test_cmp expect.1 actual.1 &&
+ test_cmp expect.2 actual.2
+'
+
+test_expect_success 're-setup nested submodule' '
+ # un-absorb the direct submodule, to test if the nested submodule
+ # is still correct (needs a rewrite of the gitfile only)
+ rm -rf sub1/.git &&
+ mv .git/modules/sub1 sub1/.git &&
+ GIT_WORK_TREE=. git -C sub1 config --unset core.worktree &&
+ # fixup the nested submodule
+ echo "gitdir: ../.git/modules/nested" >sub1/nested/.git &&
+ GIT_WORK_TREE=../../../nested git -C sub1/.git/modules/nested config \
+ core.worktree "../../../nested" &&
+ # make sure this re-setup is correct
+ git status --ignore-submodules=none
+'
+
+test_expect_success 'absorb the git dir in a nested submodule' '
+ git status >expect.1 &&
+ git -C sub1/nested rev-parse HEAD >expect.2 &&
+ git submodule absorbgitdirs &&
+ test -f sub1/.git &&
+ test -f sub1/nested/.git &&
+ test -d .git/modules/sub1/modules/nested &&
+ git status >actual.1 &&
+ git -C sub1/nested rev-parse HEAD >actual.2 &&
+ test_cmp expect.1 actual.1 &&
+ test_cmp expect.2 actual.2
+'
+
+test_expect_success 'setup a gitlink with missing .gitmodules entry' '
+ git init sub2 &&
+ test_commit -C sub2 first &&
+ git add sub2 &&
+ git commit -m superproject
+'
+
+test_expect_success 'absorbing the git dir fails for incomplete submodules' '
+ git status >expect.1 &&
+ git -C sub2 rev-parse HEAD >expect.2 &&
+ test_must_fail git submodule absorbgitdirs &&
+ git -C sub2 fsck &&
+ test -d sub2/.git &&
+ git status >actual &&
+ git -C sub2 rev-parse HEAD >actual.2 &&
+ test_cmp expect.1 actual.1 &&
+ test_cmp expect.2 actual.2
+'
+
+test_expect_success 'setup a submodule with multiple worktrees' '
+ # first create another unembedded git dir in a new submodule
+ git init sub3 &&
+ test_commit -C sub3 first &&
+ git submodule add ./sub3 &&
+ test_tick &&
+ git commit -m "add another submodule" &&
+ git -C sub3 worktree add ../sub3_second_work_tree
+'
+
+test_expect_success 'absorbing fails for a submodule with multiple worktrees' '
+ test_must_fail git submodule absorbgitdirs sub3 2>error &&
+ test_i18ngrep "not supported" error
+'
+
+test_done
git diff --exit-code
'
+test_expect_success 'allow-empty --only ignores staged contents' '
+ echo changed-again >file &&
+ git add file &&
+ git commit --allow-empty --only -m "empty" &&
+ git cat-file blob HEAD:file >file.actual &&
+ test_cmp file.expect file.actual &&
+ git diff --exit-code
+'
+
test_expect_success 'set up editor' '
cat >editor <<-\EOF &&
#!/bin/sh
test_cmp expected actual
'
+test_expect_success 'signoff respects trailer config' '
+
+ echo 5 >positive &&
+ git add positive &&
+ git commit -s -m "subject
+
+non-trailer line
+Myfooter: x" &&
+ git cat-file commit HEAD | sed -e "1,/^\$/d" > actual &&
+ (
+ echo subject
+ echo
+ echo non-trailer line
+ echo Myfooter: x
+ echo
+ echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
+ ) >expected &&
+ test_cmp expected actual &&
+
+ echo 6 >positive &&
+ git add positive &&
+ git -c "trailer.Myfooter.ifexists=add" commit -s -m "subject
+
+non-trailer line
+Myfooter: x" &&
+ git cat-file commit HEAD | sed -e "1,/^\$/d" > actual &&
+ (
+ echo subject
+ echo
+ echo non-trailer line
+ echo Myfooter: x
+ echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
+ ) >expected &&
+ test_cmp expected actual
+'
+
test_expect_success 'multiple -m' '
>negative &&
test_i18ncmp expected actual
'
+test_expect_success 'status: handle not-yet-started rebase -i gracefully' '
+ ONTO=$(git rev-parse --short HEAD^) &&
+ COMMIT=$(git rev-parse --short HEAD) &&
+ EDITOR="git status --untracked-files=no >actual" git rebase -i HEAD^ &&
+ cat >expected <<EOF &&
+On branch several_commits
+No commands done.
+Next command to do (1 remaining command):
+ pick $COMMIT four_commit
+ (use "git rebase --edit-todo" to view and edit)
+You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
+ (use "git commit --amend" to amend the current commit)
+ (use "git rebase --continue" once you are satisfied with your changes)
+
+nothing to commit (use -u to show untracked files)
+EOF
+ test_i18ncmp expected actual
+'
+
test_done
test_must_fail git merge -s foobar c1 &&
test_must_fail git merge -s=foobar c1 &&
test_must_fail git merge -m &&
+ test_must_fail git merge --abort foobar &&
+ test_must_fail git merge --abort --quiet &&
+ test_must_fail git merge --continue foobar &&
+ test_must_fail git merge --continue --quiet &&
test_must_fail git merge
'
)
'
+test_expect_success 'merge can be completed with --continue' '
+ git reset --hard c0 &&
+ git merge --no-ff --no-commit c1 &&
+ git merge --continue &&
+ verify_parents $c0 $c1
+'
+
test_done
'
cat >expect <<\EOF
-error: Updating the following directories would lose untracked files in it:
+error: Updating the following directories would lose untracked files in them:
rep
rep2
git rm file12 &&
git commit -m "branch1 changes" &&
+ git checkout -b delete-base branch1 &&
+ mkdir -p a/a &&
+ (echo one; echo two; echo 3; echo 4) >a/a/file.txt &&
+ git add a/a/file.txt &&
+ git commit -m"base file" &&
+ git checkout -b move-to-b delete-base &&
+ mkdir -p b/b &&
+ git mv a/a/file.txt b/b/file.txt &&
+ (echo one; echo two; echo 4) >b/b/file.txt &&
+ git commit -a -m"move to b" &&
+ git checkout -b move-to-c delete-base &&
+ mkdir -p c/c &&
+ git mv a/a/file.txt c/c/file.txt &&
+ (echo one; echo two; echo 3) >c/c/file.txt &&
+ git commit -a -m"move to c" &&
+
git checkout -b stash1 master &&
echo stash1 change file11 >file11 &&
git add file11 &&
git rm file11 &&
git commit -m "master updates" &&
+ git clean -fdx &&
+ git checkout -b order-file-start master &&
+ echo start >a &&
+ echo start >b &&
+ git add a b &&
+ git commit -m start &&
+ git checkout -b order-file-side1 order-file-start &&
+ echo side1 >a &&
+ echo side1 >b &&
+ git add a b &&
+ git commit -m side1 &&
+ git checkout -b order-file-side2 order-file-start &&
+ echo side2 >a &&
+ echo side2 >b &&
+ git add a b &&
+ git commit -m side2 &&
+
git config merge.tool mytool &&
git config mergetool.mytool.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" &&
git config mergetool.mytool.trustExitCode true &&
'
test_expect_success 'custom mergetool' '
- git checkout -b test1 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
test_must_fail git merge master >/dev/null 2>&1 &&
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
'
test_expect_success 'mergetool crlf' '
+ test_when_finished "git reset --hard" &&
+ # This test_config line must go after the above reset line so that
+ # core.autocrlf is unconfigured before reset runs. (The
+ # test_config command uses test_when_finished internally and
+ # test_when_finished is LIFO.)
test_config core.autocrlf true &&
- git checkout -b test2 branch1 &&
+ git checkout -b test$test_count branch1 &&
test_must_fail git merge master >/dev/null 2>&1 &&
( yes "" | git mergetool file1 >/dev/null 2>&1 ) &&
( yes "" | git mergetool file2 >/dev/null 2>&1 ) &&
test "$(printf x | cat subdir/file3 -)" = "$(printf "master new sub\r\nx")" &&
git submodule update -N &&
test "$(cat submod/bar)" = "master submodule" &&
- git commit -m "branch1 resolved with mergetool - autocrlf" &&
- test_config core.autocrlf false &&
- git reset --hard
+ git commit -m "branch1 resolved with mergetool - autocrlf"
'
test_expect_success 'mergetool in subdir' '
- git checkout -b test3 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
(
cd subdir &&
'
test_expect_success 'mergetool on file in parent dir' '
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
+ git submodule update -N &&
(
cd subdir &&
+ test_must_fail git merge master >/dev/null 2>&1 &&
+ ( yes "" | git mergetool file3 >/dev/null 2>&1 ) &&
( yes "" | git mergetool ../file1 >/dev/null 2>&1 ) &&
( yes "" | git mergetool ../file2 ../spaced\ name >/dev/null 2>&1 ) &&
( yes "" | git mergetool ../both >/dev/null 2>&1 ) &&
'
test_expect_success 'mergetool skips autoresolved' '
- git checkout -b test4 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
test_must_fail git merge master &&
test -n "$(git ls-files -u)" &&
( yes "d" | git mergetool file12 >/dev/null 2>&1 ) &&
( yes "l" | git mergetool submod >/dev/null 2>&1 ) &&
output="$(git mergetool --no-prompt)" &&
- test "$output" = "No files need merging" &&
- git reset --hard
+ test "$output" = "No files need merging"
'
-test_expect_success 'mergetool merges all from subdir' '
+test_expect_success 'mergetool merges all from subdir (rerere disabled)' '
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
test_config rerere.enabled false &&
(
cd subdir &&
)
'
+test_expect_success 'mergetool merges all from subdir (rerere enabled)' '
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
+ test_config rerere.enabled true &&
+ rm -rf .git/rr-cache &&
+ (
+ cd subdir &&
+ test_must_fail git merge master &&
+ ( yes "r" | git mergetool ../submod ) &&
+ ( yes "d" "d" | git mergetool --no-prompt ) &&
+ test "$(cat ../file1)" = "master updated" &&
+ test "$(cat ../file2)" = "master new" &&
+ test "$(cat file3)" = "master new sub" &&
+ ( cd .. && git submodule update -N ) &&
+ test "$(cat ../submod/bar)" = "master submodule" &&
+ git commit -m "branch2 resolved by mergetool from subdir"
+ )
+'
+
test_expect_success 'mergetool skips resolved paths when rerere is active' '
+ test_when_finished "git reset --hard" &&
test_config rerere.enabled true &&
rm -rf .git/rr-cache &&
- git checkout -b test5 branch1 &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
test_must_fail git merge master >/dev/null 2>&1 &&
( yes "l" | git mergetool --no-prompt submod >/dev/null 2>&1 ) &&
( yes "d" "d" | git mergetool --no-prompt >/dev/null 2>&1 ) &&
git submodule update -N &&
output="$(yes "n" | git mergetool --no-prompt)" &&
- test "$output" = "No files need merging" &&
- git reset --hard
+ test "$output" = "No files need merging"
'
test_expect_success 'conflicted stash sets up rerere' '
+ test_when_finished "git reset --hard" &&
test_config rerere.enabled true &&
git checkout stash1 &&
echo "Conflicting stash content" >file11 &&
'
test_expect_success 'mergetool takes partial path' '
- git reset --hard &&
+ test_when_finished "git reset --hard" &&
test_config rerere.enabled false &&
- git checkout -b test12 branch1 &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
test_must_fail git merge master &&
( yes "" | git mergetool subdir ) &&
- test "$(cat subdir/file3)" = "master new sub" &&
- git reset --hard
+ test "$(cat subdir/file3)" = "master new sub"
'
test_expect_success 'mergetool delete/delete conflict' '
- git checkout -b delete-base branch1 &&
- mkdir -p a/a &&
- (echo one; echo two; echo 3; echo 4) >a/a/file.txt &&
- git add a/a/file.txt &&
- git commit -m"base file" &&
- git checkout -b move-to-b delete-base &&
- mkdir -p b/b &&
- git mv a/a/file.txt b/b/file.txt &&
- (echo one; echo two; echo 4) >b/b/file.txt &&
- git commit -a -m"move to b" &&
- git checkout -b move-to-c delete-base &&
- mkdir -p c/c &&
- git mv a/a/file.txt c/c/file.txt &&
- (echo one; echo two; echo 3) >c/c/file.txt &&
- git commit -a -m"move to c" &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count move-to-c &&
test_must_fail git merge move-to-b &&
echo d | git mergetool a/a/file.txt &&
! test -f a/a/file.txt &&
- git reset --hard HEAD &&
+ git reset --hard &&
test_must_fail git merge move-to-b &&
echo m | git mergetool a/a/file.txt &&
test -f b/b/file.txt &&
- git reset --hard HEAD &&
+ git reset --hard &&
test_must_fail git merge move-to-b &&
! echo a | git mergetool a/a/file.txt &&
- ! test -f a/a/file.txt &&
- git reset --hard HEAD
+ ! test -f a/a/file.txt
'
test_expect_success 'mergetool produces no errors when keepBackup is used' '
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count move-to-c &&
test_config mergetool.keepBackup true &&
test_must_fail git merge move-to-b &&
: >expect &&
echo d | git mergetool a/a/file.txt 2>actual &&
test_cmp expect actual &&
- ! test -d a &&
- git reset --hard HEAD
+ ! test -d a
'
test_expect_success 'mergetool honors tempfile config for deleted files' '
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count move-to-c &&
test_config mergetool.keepTemporaries false &&
test_must_fail git merge move-to-b &&
echo d | git mergetool a/a/file.txt &&
- ! test -d a &&
- git reset --hard HEAD
+ ! test -d a
'
test_expect_success 'mergetool keeps tempfiles when aborting delete/delete' '
+ test_when_finished "git reset --hard" &&
+ test_when_finished "git clean -fdx" &&
+ git checkout -b test$test_count move-to-c &&
test_config mergetool.keepTemporaries true &&
test_must_fail git merge move-to-b &&
! (echo a; echo n) | git mergetool a/a/file.txt &&
file_REMOTE_.txt
EOF
ls -1 a/a | sed -e "s/[0-9]*//g" >actual &&
- test_cmp expect actual &&
- git clean -fdx &&
- git reset --hard HEAD
+ test_cmp expect actual
'
test_expect_success 'deleted vs modified submodule' '
- git checkout -b test6 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
mv submod submod-movedaside &&
git rm --cached submod &&
git commit -m "Submodule deleted from branch" &&
- git checkout -b test6.a test6 &&
+ git checkout -b test$test_count.a test$test_count &&
test_must_fail git merge master &&
test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
git commit -m "Merge resolved by keeping module" &&
mv submod submod-movedaside &&
- git checkout -b test6.b test6 &&
+ git checkout -b test$test_count.b test$test_count &&
git submodule update -N &&
test_must_fail git merge master &&
test -n "$(git ls-files -u)" &&
git commit -m "Merge resolved by deleting module" &&
mv submod-movedaside submod &&
- git checkout -b test6.c master &&
+ git checkout -b test$test_count.c master &&
git submodule update -N &&
- test_must_fail git merge test6 &&
+ test_must_fail git merge test$test_count &&
test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
git commit -m "Merge resolved by deleting module" &&
mv submod.orig submod &&
- git checkout -b test6.d master &&
+ git checkout -b test$test_count.d master &&
git submodule update -N &&
- test_must_fail git merge test6 &&
+ test_must_fail git merge test$test_count &&
test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
test "$(cat submod/bar)" = "master submodule" &&
output="$(git mergetool --no-prompt)" &&
test "$output" = "No files need merging" &&
- git commit -m "Merge resolved by keeping module" &&
- git reset --hard HEAD
+ git commit -m "Merge resolved by keeping module"
'
test_expect_success 'file vs modified submodule' '
- git checkout -b test7 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
mv submod submod-movedaside &&
git rm --cached submod &&
echo not a submodule >submod &&
git add submod &&
git commit -m "Submodule path becomes file" &&
- git checkout -b test7.a branch1 &&
+ git checkout -b test$test_count.a branch1 &&
test_must_fail git merge master &&
test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
git commit -m "Merge resolved by keeping module" &&
mv submod submod-movedaside &&
- git checkout -b test7.b test7 &&
+ git checkout -b test$test_count.b test$test_count &&
test_must_fail git merge master &&
test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
test "$output" = "No files need merging" &&
git commit -m "Merge resolved by keeping file" &&
- git checkout -b test7.c master &&
+ git checkout -b test$test_count.c master &&
rmdir submod && mv submod-movedaside submod &&
test ! -e submod.orig &&
git submodule update -N &&
- test_must_fail git merge test7 &&
+ test_must_fail git merge test$test_count &&
test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "" | git mergetool both >/dev/null 2>&1 ) &&
test "$output" = "No files need merging" &&
git commit -m "Merge resolved by keeping file" &&
- git checkout -b test7.d master &&
+ git checkout -b test$test_count.d master &&
rmdir submod && mv submod.orig submod &&
git submodule update -N &&
- test_must_fail git merge test7 &&
+ test_must_fail git merge test$test_count &&
test -n "$(git ls-files -u)" &&
( yes "" | git mergetool file1 file2 spaced\ name subdir/file3 >/dev/null 2>&1 ) &&
( yes "" | git mergetool both>/dev/null 2>&1 ) &&
'
test_expect_success 'submodule in subdirectory' '
- git checkout -b test10 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
git submodule update -N &&
(
cd subdir &&
git commit -m "add initial versions"
)
) &&
+ test_when_finished "rm -rf subdir/subdir_module" &&
git submodule add git://example.com/subsubmodule subdir/subdir_module &&
git add subdir/subdir_module &&
git commit -m "add submodule in subdirectory" &&
- git checkout -b test10.a test10 &&
+ git checkout -b test$test_count.a test$test_count &&
git submodule update -N &&
(
cd subdir/subdir_module &&
git checkout -b super10.a &&
- echo test10.a >file15 &&
+ echo test$test_count.a >file15 &&
git add file15 &&
git commit -m "on branch 10.a"
) &&
git add subdir/subdir_module &&
- git commit -m "change submodule in subdirectory on test10.a" &&
+ git commit -m "change submodule in subdirectory on test$test_count.a" &&
- git checkout -b test10.b test10 &&
+ git checkout -b test$test_count.b test$test_count &&
git submodule update -N &&
(
cd subdir/subdir_module &&
git checkout -b super10.b &&
- echo test10.b >file15 &&
+ echo test$test_count.b >file15 &&
git add file15 &&
git commit -m "on branch 10.b"
) &&
git add subdir/subdir_module &&
- git commit -m "change submodule in subdirectory on test10.b" &&
+ git commit -m "change submodule in subdirectory on test$test_count.b" &&
- test_must_fail git merge test10.a >/dev/null 2>&1 &&
+ test_must_fail git merge test$test_count.a >/dev/null 2>&1 &&
(
cd subdir &&
( yes "l" | git mergetool subdir_module )
) &&
- test "$(cat subdir/subdir_module/file15)" = "test10.b" &&
+ test "$(cat subdir/subdir_module/file15)" = "test$test_count.b" &&
git submodule update -N &&
- test "$(cat subdir/subdir_module/file15)" = "test10.b" &&
+ test "$(cat subdir/subdir_module/file15)" = "test$test_count.b" &&
git reset --hard &&
git submodule update -N &&
- test_must_fail git merge test10.a >/dev/null 2>&1 &&
+ test_must_fail git merge test$test_count.a >/dev/null 2>&1 &&
( yes "r" | git mergetool subdir/subdir_module ) &&
- test "$(cat subdir/subdir_module/file15)" = "test10.b" &&
+ test "$(cat subdir/subdir_module/file15)" = "test$test_count.b" &&
git submodule update -N &&
- test "$(cat subdir/subdir_module/file15)" = "test10.a" &&
- git commit -m "branch1 resolved with mergetool" &&
- rm -rf subdir/subdir_module
+ test "$(cat subdir/subdir_module/file15)" = "test$test_count.a" &&
+ git commit -m "branch1 resolved with mergetool"
'
test_expect_success 'directory vs modified submodule' '
- git checkout -b test11 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
mv submod submod-movedaside &&
git rm --cached submod &&
mkdir submod &&
test "$(cat submod/file16)" = "not a submodule" &&
rm -rf submod.orig &&
- git reset --hard >/dev/null 2>&1 &&
+ git reset --hard &&
test_must_fail git merge master &&
test -n "$(git ls-files -u)" &&
test ! -e submod.orig &&
( cd submod && git clean -f && git reset --hard ) &&
git submodule update -N &&
test "$(cat submod/bar)" = "master submodule" &&
- git reset --hard >/dev/null 2>&1 && rm -rf submod-movedaside &&
+ git reset --hard &&
+ rm -rf submod-movedaside &&
- git checkout -b test11.c master &&
+ git checkout -b test$test_count.c master &&
git submodule update -N &&
- test_must_fail git merge test11 &&
+ test_must_fail git merge test$test_count &&
test -n "$(git ls-files -u)" &&
( yes "l" | git mergetool submod ) &&
git submodule update -N &&
test "$(cat submod/bar)" = "master submodule" &&
- git reset --hard >/dev/null 2>&1 &&
+ git reset --hard &&
git submodule update -N &&
- test_must_fail git merge test11 &&
+ test_must_fail git merge test$test_count &&
test -n "$(git ls-files -u)" &&
test ! -e submod.orig &&
( yes "r" | git mergetool submod ) &&
test "$(cat submod/file16)" = "not a submodule" &&
- git reset --hard master >/dev/null 2>&1 &&
+ git reset --hard master &&
( cd submod && git clean -f && git reset --hard ) &&
git submodule update -N
'
test_expect_success 'file with no base' '
- git checkout -b test13 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
test_must_fail git merge master &&
git mergetool --no-prompt --tool mybase -- both &&
>expected &&
- test_cmp both expected &&
- git reset --hard master >/dev/null 2>&1
+ test_cmp both expected
'
test_expect_success 'custom commands override built-ins' '
- git checkout -b test14 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
test_config mergetool.defaults.cmd "cat \"\$REMOTE\" >\"\$MERGED\"" &&
test_config mergetool.defaults.trustExitCode true &&
test_must_fail git merge master &&
git mergetool --no-prompt --tool defaults -- both &&
echo master both added >expected &&
- test_cmp both expected &&
- git reset --hard master >/dev/null 2>&1
+ test_cmp both expected
'
test_expect_success 'filenames seen by tools start with ./' '
- git checkout -b test15 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
test_config mergetool.writeToTemp false &&
test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
test_config mergetool.myecho.trustExitCode true &&
test_must_fail git merge master &&
git mergetool --no-prompt --tool myecho -- both >actual &&
- grep ^\./both_LOCAL_ actual >/dev/null &&
- git reset --hard master >/dev/null 2>&1
+ grep ^\./both_LOCAL_ actual >/dev/null
'
test_lazy_prereq MKTEMP '
tempdir=$(mktemp -d -t foo.XXXXXX) &&
- test -d "$tempdir"
+ test -d "$tempdir" &&
+ rmdir "$tempdir"
'
test_expect_success MKTEMP 'temporary filenames are used with mergetool.writeToTemp' '
- git checkout -b test16 branch1 &&
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count branch1 &&
test_config mergetool.writeToTemp true &&
test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
test_config mergetool.myecho.trustExitCode true &&
test_must_fail git merge master &&
git mergetool --no-prompt --tool myecho -- both >actual &&
- test_must_fail grep ^\./both_LOCAL_ actual >/dev/null &&
- grep /both_LOCAL_ actual >/dev/null &&
- git reset --hard master >/dev/null 2>&1
+ ! grep ^\./both_LOCAL_ actual >/dev/null &&
+ grep /both_LOCAL_ actual >/dev/null
'
test_expect_success 'diff.orderFile configuration is honored' '
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count order-file-side2 &&
test_config diff.orderFile order-file &&
test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
test_config mergetool.myecho.trustExitCode true &&
echo b >order-file &&
echo a >>order-file &&
- git checkout -b order-file-start master &&
- echo start >a &&
- echo start >b &&
- git add a b &&
- git commit -m start &&
- git checkout -b order-file-side1 order-file-start &&
- echo side1 >a &&
- echo side1 >b &&
- git add a b &&
- git commit -m side1 &&
- git checkout -b order-file-side2 order-file-start &&
- echo side2 >a &&
- echo side2 >b &&
- git add a b &&
- git commit -m side2 &&
test_must_fail git merge order-file-side1 &&
cat >expect <<-\EOF &&
Merging:
b
a
EOF
+
+ # make sure "order-file" that is ambiguous between
+ # rev and path is understood correctly.
+ git branch order-file HEAD &&
+
git mergetool --no-prompt --tool myecho >output &&
git grep --no-index -h -A2 Merging: output >actual &&
- test_cmp expect actual &&
- git reset --hard >/dev/null
+ test_cmp expect actual
'
test_expect_success 'mergetool -Oorder-file is honored' '
+ test_when_finished "git reset --hard" &&
+ git checkout -b test$test_count order-file-side2 &&
test_config diff.orderFile order-file &&
test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
test_config mergetool.myecho.trustExitCode true &&
+ echo b >order-file &&
+ echo a >>order-file &&
test_must_fail git merge order-file-side1 &&
cat >expect <<-\EOF &&
Merging:
git mergetool -O/dev/null --no-prompt --tool myecho >output &&
git grep --no-index -h -A2 Merging: output >actual &&
test_cmp expect actual &&
- git reset --hard >/dev/null 2>&1 &&
+ git reset --hard &&
git config --unset diff.orderFile &&
test_must_fail git merge order-file-side1 &&
EOF
git mergetool -Oorder-file --no-prompt --tool myecho >output &&
git grep --no-index -h -A2 Merging: output >actual &&
- test_cmp expect actual &&
- git reset --hard >/dev/null 2>&1
+ test_cmp expect actual
'
test_done
echo "a+bc"
echo "abc"
} >ab &&
+ {
+ echo d &&
+ echo 0
+ } >d0 &&
echo vvv >v &&
echo ww w >w &&
echo x x xx x >x &&
'
test_expect_success 'grep -G -F -P -E pattern' '
- >empty &&
- test_must_fail git grep -G -F -P -E "a\x{2b}b\x{2a}c" ab >actual &&
- test_cmp empty actual
+ echo "d0:d" >expected &&
+ git grep -G -F -P -E "[\d]" d0 >actual &&
+ test_cmp expected actual
'
test_expect_success 'grep pattern with grep.patternType=fixed, =basic, =perl, =extended' '
- >empty &&
- test_must_fail git \
+ echo "d0:d" >expected &&
+ git \
-c grep.patterntype=fixed \
-c grep.patterntype=basic \
-c grep.patterntype=perl \
-c grep.patterntype=extended \
- grep "a\x{2b}b\x{2a}c" ab >actual &&
- test_cmp empty actual
+ grep "[\d]" d0 >actual &&
+ test_cmp expected actual
'
test_expect_success LIBPCRE 'grep -G -F -E -P pattern' '
- echo "ab:a+b*c" >expected &&
- git grep -G -F -E -P "a\x{2b}b\x{2a}c" ab >actual &&
+ echo "d0:0" >expected &&
+ git grep -G -F -E -P "[\d]" d0 >actual &&
test_cmp expected actual
'
test_expect_success LIBPCRE 'grep pattern with grep.patternType=fixed, =basic, =extended, =perl' '
- echo "ab:a+b*c" >expected &&
+ echo "d0:0" >expected &&
git \
-c grep.patterntype=fixed \
-c grep.patterntype=basic \
-c grep.patterntype=extended \
-c grep.patterntype=perl \
- grep "a\x{2b}b\x{2a}c" ab >actual &&
+ grep "[\d]" d0 >actual &&
test_cmp expected actual
'
--- /dev/null
+#!/bin/sh
+
+test_description='Test grep recurse-submodules feature
+
+This test verifies the recurse-submodules feature correctly greps across
+submodules.
+'
+
+. ./test-lib.sh
+
+test_expect_success 'setup directory structure and submodule' '
+ echo "foobar" >a &&
+ mkdir b &&
+ echo "bar" >b/b &&
+ git add a b &&
+ git commit -m "add a and b" &&
+ git init submodule &&
+ echo "foobar" >submodule/a &&
+ git -C submodule add a &&
+ git -C submodule commit -m "add a" &&
+ git submodule add ./submodule &&
+ git commit -m "added submodule"
+'
+
+test_expect_success 'grep correctly finds patterns in a submodule' '
+ cat >expect <<-\EOF &&
+ a:foobar
+ b/b:bar
+ submodule/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep and basic pathspecs' '
+ cat >expect <<-\EOF &&
+ submodule/a:foobar
+ EOF
+
+ git grep -e. --recurse-submodules -- submodule >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep and nested submodules' '
+ git init submodule/sub &&
+ echo "foobar" >submodule/sub/a &&
+ git -C submodule/sub add a &&
+ git -C submodule/sub commit -m "add a" &&
+ git -C submodule submodule add ./sub &&
+ git -C submodule add sub &&
+ git -C submodule commit -m "added sub" &&
+ git add submodule &&
+ git commit -m "updated submodule" &&
+
+ cat >expect <<-\EOF &&
+ a:foobar
+ b/b:bar
+ submodule/a:foobar
+ submodule/sub/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep and multiple patterns' '
+ cat >expect <<-\EOF &&
+ a:foobar
+ submodule/a:foobar
+ submodule/sub/a:foobar
+ EOF
+
+ git grep -e "bar" --and -e "foo" --recurse-submodules >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep and multiple patterns' '
+ cat >expect <<-\EOF &&
+ b/b:bar
+ EOF
+
+ git grep -e "bar" --and --not -e "foo" --recurse-submodules >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'basic grep tree' '
+ cat >expect <<-\EOF &&
+ HEAD:a:foobar
+ HEAD:b/b:bar
+ HEAD:submodule/a:foobar
+ HEAD:submodule/sub/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep tree HEAD^' '
+ cat >expect <<-\EOF &&
+ HEAD^:a:foobar
+ HEAD^:b/b:bar
+ HEAD^:submodule/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules HEAD^ >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep tree HEAD^^' '
+ cat >expect <<-\EOF &&
+ HEAD^^:a:foobar
+ HEAD^^:b/b:bar
+ EOF
+
+ git grep -e "bar" --recurse-submodules HEAD^^ >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep tree and pathspecs' '
+ cat >expect <<-\EOF &&
+ HEAD:submodule/a:foobar
+ HEAD:submodule/sub/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules HEAD -- submodule >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep tree and pathspecs' '
+ cat >expect <<-\EOF &&
+ HEAD:submodule/a:foobar
+ HEAD:submodule/sub/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules HEAD -- "submodule*a" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep tree and more pathspecs' '
+ cat >expect <<-\EOF &&
+ HEAD:submodule/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules HEAD -- "submodul?/a" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep tree and more pathspecs' '
+ cat >expect <<-\EOF &&
+ HEAD:submodule/sub/a:foobar
+ EOF
+
+ git grep -e "bar" --recurse-submodules HEAD -- "submodul*/sub/a" >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success !MINGW 'grep recurse submodule colon in name' '
+ git init parent &&
+ test_when_finished "rm -rf parent" &&
+ echo "foobar" >"parent/fi:le" &&
+ git -C parent add "fi:le" &&
+ git -C parent commit -m "add fi:le" &&
+
+ git init "su:b" &&
+ test_when_finished "rm -rf su:b" &&
+ echo "foobar" >"su:b/fi:le" &&
+ git -C "su:b" add "fi:le" &&
+ git -C "su:b" commit -m "add fi:le" &&
+
+ git -C parent submodule add "../su:b" "su:b" &&
+ git -C parent commit -m "add submodule" &&
+
+ cat >expect <<-\EOF &&
+ fi:le:foobar
+ su:b/fi:le:foobar
+ EOF
+ git -C parent grep -e "foobar" --recurse-submodules >actual &&
+ test_cmp expect actual &&
+
+ cat >expect <<-\EOF &&
+ HEAD:fi:le:foobar
+ HEAD:su:b/fi:le:foobar
+ EOF
+ git -C parent grep -e "foobar" --recurse-submodules HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'grep history with moved submoules' '
+ git init parent &&
+ test_when_finished "rm -rf parent" &&
+ echo "foobar" >parent/file &&
+ git -C parent add file &&
+ git -C parent commit -m "add file" &&
+
+ git init sub &&
+ test_when_finished "rm -rf sub" &&
+ echo "foobar" >sub/file &&
+ git -C sub add file &&
+ git -C sub commit -m "add file" &&
+
+ git -C parent submodule add ../sub dir/sub &&
+ git -C parent commit -m "add submodule" &&
+
+ cat >expect <<-\EOF &&
+ dir/sub/file:foobar
+ file:foobar
+ EOF
+ git -C parent grep -e "foobar" --recurse-submodules >actual &&
+ test_cmp expect actual &&
+
+ git -C parent mv dir/sub sub-moved &&
+ git -C parent commit -m "moved submodule" &&
+
+ cat >expect <<-\EOF &&
+ file:foobar
+ sub-moved/file:foobar
+ EOF
+ git -C parent grep -e "foobar" --recurse-submodules >actual &&
+ test_cmp expect actual &&
+
+ cat >expect <<-\EOF &&
+ HEAD^:dir/sub/file:foobar
+ HEAD^:file:foobar
+ EOF
+ git -C parent grep -e "foobar" --recurse-submodules HEAD^ >actual &&
+ test_cmp expect actual
+'
+
+test_incompatible_with_recurse_submodules ()
+{
+ test_expect_success "--recurse-submodules and $1 are incompatible" "
+ test_must_fail git grep -e. --recurse-submodules $1 2>actual &&
+ test_i18ngrep 'not supported with --recurse-submodules' actual
+ "
+}
+
+test_incompatible_with_recurse_submodules --untracked
+test_incompatible_with_recurse_submodules --no-index
+
+test_done
test_cmp expected_n result
'
+test_expect_success 'set up abbrev tests' '
+ test_commit abbrev &&
+ sha1=$(git rev-parse --verify HEAD) &&
+ check_abbrev () {
+ expect=$1; shift
+ echo $sha1 | cut -c 1-$expect >expect &&
+ git blame "$@" abbrev.t >actual &&
+ perl -lne "/[0-9a-f]+/ and print \$&" <actual >actual.sha &&
+ test_cmp expect actual.sha
+ }
+'
+
+test_expect_success 'blame --abbrev=<n> works' '
+ # non-boundary commits get +1 for alignment
+ check_abbrev 31 --abbrev=30 HEAD &&
+ check_abbrev 30 --abbrev=30 ^HEAD
+'
+
+test_expect_success 'blame -l aligns regular and boundary commits' '
+ check_abbrev 40 -l HEAD &&
+ check_abbrev 39 -l ^HEAD
+'
+
+test_expect_success 'blame --abbrev=40 behaves like -l' '
+ check_abbrev 40 --abbrev=40 HEAD &&
+ check_abbrev 39 --abbrev=40 ^HEAD
+'
+
+test_expect_success '--no-abbrev works like --abbrev=40' '
+ check_abbrev 40 --no-abbrev
+'
+
test_done
--- /dev/null
+#!/bin/sh
+
+test_description='
+The general idea is that we have a single file whose lines come from
+multiple other files, and those individual files were modified in the same
+commits. That means that we will see the same commit in multiple contexts,
+and each one should be attributed to the correct file.
+
+Note that we need to use "blame -C" to find the commit for all lines. We will
+not bother testing that the non-C case fails to find it. That is how blame
+behaves now, but it is not a property we want to make sure is retained.
+'
+. ./test-lib.sh
+
+# help avoid typing and reading long strings of similar lines
+# in the tests below
+generate_expect () {
+ while read nr data
+ do
+ i=0
+ while test $i -lt $nr
+ do
+ echo $data
+ i=$((i + 1))
+ done
+ done
+}
+
+test_expect_success 'setup split file case' '
+ # use lines long enough to trigger content detection
+ test_seq 1000 1010 >one &&
+ test_seq 2000 2010 >two &&
+ git add one two &&
+ test_commit base &&
+
+ sed "6s/^/modified /" <one >one.tmp &&
+ mv one.tmp one &&
+ sed "6s/^/modified /" <two >two.tmp &&
+ mv two.tmp two &&
+ git add -u &&
+ test_commit modified &&
+
+ cat one two >combined &&
+ git add combined &&
+ git rm one two &&
+ test_commit combined
+'
+
+test_expect_success 'setup simulated porcelain' '
+ # This just reads porcelain-ish output and tries
+ # to output the value of a given field for each line (either by
+ # reading the field that accompanies this line, or referencing
+ # the information found last time the commit was mentioned).
+ cat >read-porcelain.pl <<-\EOF
+ my $field = shift;
+ while (<>) {
+ if (/^[0-9a-f]{40} /) {
+ flush();
+ $hash = $&;
+ } elsif (/^$field (.*)/) {
+ $cache{$hash} = $1;
+ }
+ }
+ flush();
+
+ sub flush {
+ return unless defined $hash;
+ if (defined $cache{$hash}) {
+ print "$cache{$hash}\n";
+ } else {
+ print "NONE\n";
+ }
+ }
+ EOF
+'
+
+for output in porcelain line-porcelain
+do
+ test_expect_success "generate --$output output" '
+ git blame --root -C --$output combined >output
+ '
+
+ test_expect_success "$output output finds correct commits" '
+ generate_expect >expect <<-\EOF &&
+ 5 base
+ 1 modified
+ 10 base
+ 1 modified
+ 5 base
+ EOF
+ perl read-porcelain.pl summary <output >actual &&
+ test_cmp expect actual
+ '
+
+ test_expect_success "$output output shows correct filenames" '
+ generate_expect >expect <<-\EOF &&
+ 11 one
+ 11 two
+ EOF
+ perl read-porcelain.pl filename <output >actual &&
+ test_cmp expect actual
+ '
+
+ test_expect_success "$output output shows correct previous pointer" '
+ generate_expect >expect <<-EOF &&
+ 5 NONE
+ 1 $(git rev-parse modified^) one
+ 10 NONE
+ 1 $(git rev-parse modified^) two
+ 5 NONE
+ EOF
+ perl read-porcelain.pl previous <output >actual &&
+ test_cmp expect actual
+ '
+done
+
+test_done
--smtp-server="$(pwd)/fake.sendmail" \
$@ \
$patches >stdout &&
- test_must_fail grep "Send this email" stdout &&
+ ! grep "Send this email" stdout &&
>no_confirm_okay
}
;;
esac
-deepdir=nothing-above
-ceiling=$PWD
-
test_expect_success 'git svn --version works anywhere' '
- mkdir -p "$deepdir" && (
- GIT_CEILING_DIRECTORIES="$ceiling" &&
- export GIT_CEILING_DIRECTORIES &&
- cd "$deepdir" &&
- git svn --version
- )
+ nongit git svn --version
'
test_expect_success 'git svn help works anywhere' '
- mkdir -p "$deepdir" && (
- GIT_CEILING_DIRECTORIES="$ceiling" &&
- export GIT_CEILING_DIRECTORIES &&
- cd "$deepdir" &&
- git svn help
- )
+ nongit git svn help
'
test_expect_success \
test_expect_success 'init without -s/-T/-b/-t does not warn' '
test ! -d trunk &&
git svn init "$svnrepo"/project/trunk trunk 2>warning &&
- test_must_fail grep -q prefix warning &&
+ ! grep -q prefix warning &&
rm -rf trunk &&
rm -f warning
'
test_expect_success 'clone without -s/-T/-b/-t does not warn' '
test ! -d trunk &&
git svn clone "$svnrepo"/project/trunk 2>warning &&
- test_must_fail grep -q prefix warning &&
+ ! grep -q prefix warning &&
rm -rf trunk &&
rm -f warning
'
test_expect_success 'init with -s/-T/-b/-t assumes --prefix=origin/' '
test ! -d project &&
git svn init -s "$svnrepo"/project project 2>warning &&
- test_must_fail grep -q prefix warning &&
+ ! grep -q prefix warning &&
test_svn_configured_prefix "origin/" &&
rm -rf project &&
rm -f warning
test_expect_success 'clone with -s/-T/-b/-t assumes --prefix=origin/' '
test ! -d project &&
git svn clone -s "$svnrepo"/project 2>warning &&
- test_must_fail grep -q prefix warning &&
+ ! grep -q prefix warning &&
test_svn_configured_prefix "origin/" &&
rm -rf project &&
rm -f warning
test_expect_success 'init with -s/-T/-b/-t and --prefix "" still works' '
test ! -d project &&
git svn init -s "$svnrepo"/project project --prefix "" 2>warning &&
- test_must_fail grep -q prefix warning &&
+ ! grep -q prefix warning &&
test_svn_configured_prefix "" &&
rm -rf project &&
rm -f warning
test_expect_success 'clone with -s/-T/-b/-t and --prefix "" still works' '
test ! -d project &&
git svn clone -s "$svnrepo"/project --prefix "" 2>warning &&
- test_must_fail grep -q prefix warning &&
+ ! grep -q prefix warning &&
test_svn_configured_prefix "" &&
rm -rf project &&
rm -f warning
'
+# Create another notes tree from the one above
+SP=" "
+cat >>input <<INPUT_END
+commit refs/heads/other_commits
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+data <<COMMIT
+commit #$(($num_commit + 1))
+COMMIT
+
+from refs/heads/many_commits
+M 644 inline file
+data <<EOF
+file contents in commit #$(($num_commit + 1))
+EOF
+
+commit refs/notes/other_notes
+committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
+data <<COMMIT
+committing one more note on a tree imported from a previous notes tree
+COMMIT
+
+M 040000 $(git log --no-walk --format=%T refs/notes/many_notes)$SP
+N inline :$(($num_commit + 1))
+data <<EOF
+note for commit #$(($num_commit + 1))
+EOF
+INPUT_END
+
+test_expect_success 'verify that importing a notes tree respects the fanout scheme' '
+ git fast-import <input &&
+
+ # None of the entries in the top-level notes tree should be a full SHA1
+ git ls-tree --name-only refs/notes/other_notes |
+ while read path
+ do
+ if test $(expr length "$path") -ge 40
+ then
+ return 1
+ fi
+ done
+'
+
cat >>expect_non-note1 << EOF
This is not a note, but rather a regular file residing in a notes tree
EOF
--- /dev/null
+#!/bin/sh
+
+test_description='compression setting of fast-import utility'
+. ./test-lib.sh
+
+# This should be moved to test-lib.sh together with the
+# copy in t0021 after both topics have graduated to 'master'.
+file_size () {
+ perl -e 'print -s $ARGV[0]' "$1"
+}
+
+import_large () {
+ (
+ echo blob
+ echo "data <<EOD"
+ printf "%2000000s\n" "$*"
+ echo EOD
+ ) | git "$@" fast-import
+}
+
+while read expect config
+do
+ test_expect_success "fast-import (packed) with $config" '
+ test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
+ test_when_finished "rm -rf .git/objects/??" &&
+ import_large -c fastimport.unpacklimit=0 $config &&
+ sz=$(file_size .git/objects/pack/pack-*.pack) &&
+ case "$expect" in
+ small) test "$sz" -le 100000 ;;
+ large) test "$sz" -ge 100000 ;;
+ esac
+ '
+done <<\EOF
+large -c core.compression=0
+small -c core.compression=9
+large -c core.compression=0 -c pack.compression=0
+large -c core.compression=9 -c pack.compression=0
+small -c core.compression=0 -c pack.compression=9
+small -c core.compression=9 -c pack.compression=9
+large -c pack.compression=0
+small -c pack.compression=9
+EOF
+
+while read expect config
+do
+ test_expect_success "fast-import (loose) with $config" '
+ test_when_finished "rm -f .git/objects/pack/pack-*.*" &&
+ test_when_finished "rm -rf .git/objects/??" &&
+ import_large -c fastimport.unpacklimit=9 $config &&
+ sz=$(file_size .git/objects/??/????*) &&
+ case "$expect" in
+ small) test "$sz" -le 100000 ;;
+ large) test "$sz" -ge 100000 ;;
+ esac
+ '
+done <<\EOF
+large -c core.compression=0
+small -c core.compression=9
+large -c core.compression=0 -c core.loosecompression=0
+large -c core.compression=9 -c core.loosecompression=0
+small -c core.compression=0 -c core.loosecompression=9
+small -c core.compression=9 -c core.loosecompression=9
+large -c core.loosecompression=0
+small -c core.loosecompression=9
+EOF
+
+test_done
)
'
+test_expect_success 'clone two dirs, each edited by submit, single git commit' '
+ (
+ cd "$cli" &&
+ echo sub1/f4 >sub1/f4 &&
+ p4 add sub1/f4 &&
+ echo sub2/f4 >sub2/f4 &&
+ p4 add sub2/f4 &&
+ p4 submit -d "sub1/f4 and sub2/f4"
+ ) &&
+ git p4 clone --dest="$git" //depot/sub1@all //depot/sub2@all &&
+ test_when_finished cleanup_git &&
+ (
+ cd "$git" &&
+ git ls-files >lines &&
+ test_line_count = 4 lines &&
+ git log --oneline p4/master >lines &&
+ test_line_count = 5 lines
+ )
+'
+
revision_ranges="2000/01/01,#head \
1,2080/01/01 \
2000/01/01,2080/01/01 \
(
cd "$git" &&
git ls-files >lines &&
- test_line_count = 6 lines
+ test_line_count = 8 lines
)
done
'
)
'
+test_expect_success 'submit from worktree' '
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$git" &&
+ git worktree add ../worktree-test
+ ) &&
+ (
+ cd "$git/../worktree-test" &&
+ test_commit "worktree-commit" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit
+ ) &&
+ (
+ cd "$cli" &&
+ p4 sync &&
+ test_path_is_file worktree-commit.t
+ )
+'
+
test_expect_success 'kill p4d' '
kill_p4d
'
)
'
+test_expect_success 'use --git-dir option and GIT_DIR' '
+ test_when_finished cleanup_git &&
+ git p4 clone //depot --destination="$git" &&
+ (
+ cd "$git" &&
+ git config git-p4.skipSubmitEdit true &&
+ test_commit first-change &&
+ git p4 submit --git-dir "$git"
+ ) &&
+ (
+ cd "$cli" &&
+ p4 sync &&
+ test_path_is_file first-change.t &&
+ echo "cli_file" >cli_file.t &&
+ p4 add cli_file.t &&
+ p4 submit -d "cli change"
+ ) &&
+ (git --git-dir "$git" p4 sync) &&
+ (cd "$git" && git checkout -q p4/master) &&
+ test_path_is_file "$git"/cli_file.t &&
+ (
+ cd "$cli" &&
+ echo "cli_file2" >cli_file2.t &&
+ p4 add cli_file2.t &&
+ p4 submit -d "cli change2"
+ ) &&
+ (GIT_DIR="$git" git p4 sync) &&
+ (cd "$git" && git checkout -q p4/master) &&
+ test_path_is_file "$git"/cli_file2.t
+'
+
+
test_expect_success 'kill p4d' '
kill_p4d
'
)
'
+test_expect_success 'submit --shelve' '
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$cli" &&
+ p4 revert ... &&
+ cd "$git" &&
+ git config git-p4.skipSubmitEdit true &&
+ test_commit "shelveme1" &&
+ git p4 submit --origin=HEAD^ &&
+
+ echo 654321 >shelveme2.t &&
+ echo 123456 >>shelveme1.t &&
+ git add shelveme* &&
+ git commit -m"shelvetest" &&
+ git p4 submit --shelve --origin=HEAD^ &&
+
+ test_path_is_file shelveme1.t &&
+ test_path_is_file shelveme2.t
+ ) &&
+ (
+ cd "$cli" &&
+ change=$(p4 -G changes -s shelved -m 1 //depot/... | \
+ marshal_dump change) &&
+ p4 describe -S $change | grep shelveme2 &&
+ p4 describe -S $change | grep 123456 &&
+ test_path_is_file shelveme1.t &&
+ test_path_is_missing shelveme2.t
+ )
+'
+
+# Update an existing shelved changelist
+
+test_expect_success 'submit --update-shelve' '
+ test_when_finished cleanup_git &&
+ git p4 clone --dest="$git" //depot &&
+ (
+ cd "$cli" &&
+ p4 revert ... &&
+ cd "$git" &&
+ git config git-p4.skipSubmitEdit true &&
+ test_commit "test-update-shelved-change" &&
+ git p4 submit --origin=HEAD^ --shelve &&
+
+ shelf_cl=$(p4 -G changes -s shelved -m 1 |\
+ marshal_dump change) &&
+ test -n $shelf_cl &&
+ echo "updating shelved change list $shelf_cl" &&
+
+ echo "updated-line" >>shelf.t &&
+ echo added-file.t >added-file.t &&
+ git add shelf.t added-file.t &&
+ git rm -f test-update-shelved-change.t &&
+ git commit --amend -C HEAD &&
+ git show --stat HEAD &&
+ git p4 submit -v --origin HEAD^ --update-shelve $shelf_cl &&
+ echo "done git p4 submit"
+ ) &&
+ (
+ cd "$cli" &&
+ change=$(p4 -G changes -s shelved -m 1 //depot/... | \
+ marshal_dump change) &&
+ p4 unshelve -c $change -s $change &&
+ grep -q updated-line shelf.t &&
+ p4 describe -S $change | grep added-file.t &&
+ test_path_is_missing test-update-shelved-change.t
+ )
+'
+
test_expect_success 'kill p4d' '
kill_p4d
'
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@example.com does not match" &&
+ git p4 commit >actual &&
+ grep "git author derek@example.com does not match" actual &&
make_change_by_user usernamefile3 Charlie charlie@example.com &&
- git p4 commit |\
- grep "git author charlie@example.com does not match" &&
+ git p4 commit >actual &&
+ grep "git author charlie@example.com does not match" actual &&
make_change_by_user usernamefile3 alice alice@example.com &&
- git p4 commit |\
- test_must_fail grep "git author.*does not match" &&
+ git p4 commit >actual &&
+ ! grep "git author.*does not match" actual &&
git config git-p4.skipUserNameCheck true &&
make_change_by_user usernamefile3 Charlie charlie@example.com &&
- git p4 commit |\
- test_must_fail grep "git author.*does not match" &&
+ git p4 commit >actual &&
+ ! grep "git author.*does not match" actual &&
p4_check_commit_author usernamefile3 alice
)
git diff-tree -r -C HEAD &&
git p4 submit &&
p4 filelog //depot/file8 &&
- p4 filelog //depot/file8 | test_must_fail grep -q "branch from" &&
+ ! p4 filelog //depot/file8 | grep -q "branch from" &&
echo "file9" >>file2 &&
git commit -a -m "Differentiate file2" &&
git config git-p4.detectCopies true &&
git p4 submit &&
p4 filelog //depot/file9 &&
- p4 filelog //depot/file9 | test_must_fail grep -q "branch from" &&
+ ! p4 filelog //depot/file9 | grep -q "branch from" &&
echo "file10" >>file2 &&
git commit -a -m "Differentiate file2" &&
git config git-p4.detectCopies $(($level + 2)) &&
git p4 submit &&
p4 filelog //depot/file12 &&
- p4 filelog //depot/file12 | test_must_fail grep -q "branch from" &&
+ ! p4 filelog //depot/file12 | grep -q "branch from" &&
echo "file13" >>file2 &&
git commit -a -m "Differentiate file2" &&
(
cd "$cli" &&
+ >file0.dat &&
+ p4 add file0.dat &&
echo "content 1 txt 23 bytes" >file1.txt &&
p4 add file1.txt &&
echo "content 2-3 bin 25 bytes" >file2.dat &&
#
# Git LFS (see https://git-lfs.github.com/)
#
- /file2.dat filter=lfs -text
- /file4.bin filter=lfs -text
- /path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs -text
+ /file2.dat filter=lfs diff=lfs merge=lfs -text
+ /file4.bin filter=lfs diff=lfs merge=lfs -text
+ /path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs diff=lfs merge=lfs -text
EOF
test_path_is_file .gitattributes &&
test_cmp expect .gitattributes
#
# Git LFS (see https://git-lfs.github.com/)
#
- /file4.bin filter=lfs -text
+ /file4.bin filter=lfs diff=lfs merge=lfs -text
EOF
test_path_is_file .gitattributes &&
test_cmp expect .gitattributes
#
# Git LFS (see https://git-lfs.github.com/)
#
- *.dat filter=lfs -text
+ *.dat filter=lfs diff=lfs merge=lfs -text
EOF
test_path_is_file .gitattributes &&
test_cmp expect .gitattributes
#
# Git LFS (see https://git-lfs.github.com/)
#
- *.dat filter=lfs -text
- /file4.bin filter=lfs -text
+ *.dat filter=lfs diff=lfs merge=lfs -text
+ /file4.bin filter=lfs diff=lfs merge=lfs -text
EOF
test_path_is_file .gitattributes &&
test_cmp expect .gitattributes
#
# Git LFS (see https://git-lfs.github.com/)
#
- /file2.dat filter=lfs -text
- /path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs -text
+ /file2.dat filter=lfs diff=lfs merge=lfs -text
+ /path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs diff=lfs merge=lfs -text
EOF
test_path_is_file .gitattributes &&
test_cmp expect .gitattributes
#
# Git LFS (see https://git-lfs.github.com/)
#
- /file2.dat filter=lfs -text
- /path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs -text
+ /file2.dat filter=lfs diff=lfs merge=lfs -text
+ /path[[:space:]]with[[:space:]]spaces/file3.bin filter=lfs diff=lfs merge=lfs -text
EOF
test_path_is_file .gitattributes &&
test_cmp expect .gitattributes
#
# Git LFS (see https://git-lfs.github.com/)
#
- /file6.bin filter=lfs -text
+ /file6.bin filter=lfs diff=lfs merge=lfs -text
EOF
test_path_is_file .gitattributes &&
test_cmp expect .gitattributes
--- /dev/null
+#!/bin/sh
+
+test_description='git p4 symlinked directories'
+
+. ./lib-git-p4.sh
+
+test_expect_success 'start p4d' '
+ start_p4d
+'
+
+test_expect_success 'symlinked directory' '
+ (
+ cd "$cli" &&
+ : >first_file.t &&
+ p4 add first_file.t &&
+ p4 submit -d "first change"
+ ) &&
+ git p4 clone --dest "$git" //depot &&
+ (
+ cd "$git" &&
+ mkdir -p some/sub/directory &&
+ mkdir -p other/subdir2 &&
+ : > other/subdir2/file.t &&
+ (cd some/sub/directory && ln -s ../../../other/subdir2 .) &&
+ git add some other &&
+ git commit -m "symlinks" &&
+ git config git-p4.skipSubmitEdit true &&
+ git p4 submit -v
+ ) &&
+ (
+ cd "$cli" &&
+ p4 sync &&
+ test -L some/sub/directory/subdir2
+ test_path_is_file some/sub/directory/subdir2/file.t
+ )
+
+'
+
+test_expect_success 'kill p4d' '
+ kill_p4d
+'
+
+test_done
'
test_expect_success '__gitdir - not a git repository' '
- (
- cd subdir/subsubdir &&
- GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY" &&
- export GIT_CEILING_DIRECTORIES &&
- test_must_fail __gitdir
- )
+ nongit test_must_fail __gitdir
'
test_expect_success '__gitcomp - trailing space - options' '
GIT_TEST_GDB=1 "$@"
}
-# Call test_commit with the arguments "<message> [<file> [<contents> [<tag>]]]"
+# Call test_commit with the arguments
+# [-C <directory>] <message> [<file> [<contents> [<tag>]]]"
#
# This will commit a file with the given contents and the given commit
# message, and tag the resulting commit with the given tag name.
#
# <file>, <contents>, and <tag> all default to <message>.
+#
+# If the first argument is "-C", the second argument is used as a path for
+# the git invocations.
test_commit () {
notick= &&
signoff= &&
+ indir= &&
while test $# != 0
do
case "$1" in
--signoff)
signoff="$1"
;;
+ -C)
+ indir="$2"
+ shift
+ ;;
*)
break
;;
esac
shift
done &&
+ indir=${indir:+"$indir"/} &&
file=${2:-"$1.t"} &&
- echo "${3-$1}" > "$file" &&
- git add "$file" &&
+ echo "${3-$1}" > "$indir$file" &&
+ git ${indir:+ -C "$indir"} add "$file" &&
if test -z "$notick"
then
test_tick
fi &&
- git commit $signoff -m "$1" &&
- git tag "${4:-$1}"
+ git ${indir:+ -C "$indir"} commit $signoff -m "$1" &&
+ git ${indir:+ -C "$indir"} tag "${4:-$1}"
}
# Call test_merge with the arguments "<message> <commit>", where <commit>
}
' - "$1"
}
+
+# run "$@" inside a non-git directory
+nongit () {
+ test -d non-repo ||
+ mkdir non-repo ||
+ return 1
+
+ (
+ GIT_CEILING_DIRECTORIES=$(pwd) &&
+ export GIT_CEILING_DIRECTORIES &&
+ cd non-repo &&
+ "$@"
+ )
+}
}
# Fix some commands on Windows
-case $(uname -s) in
+uname_s=$(uname -s)
+case $uname_s in
*MINGW*)
# Windows has its own (incompatible) sort and find
sort () {
return $status
'
+test FreeBSD != $uname_s || GIT_UNZIP=${GIT_UNZIP:-/usr/local/bin/unzip}
GIT_UNZIP=${GIT_UNZIP:-unzip}
test_lazy_prereq UNZIP '
"$GIT_UNZIP" -v
#include "commit.h"
#include "tree.h"
#include "blob.h"
+#include "gpg-interface.h"
const char *tag_type = "tag";
ret = check_signature(buf, payload_size, buf + payload_size,
size - payload_size, &sigc);
- print_signature_buffer(&sigc, flags);
+
+ if (!(flags & GPG_VERIFY_OMIT_STATUS))
+ print_signature_buffer(&sigc, flags);
signature_check_clear(&sigc);
return ret;
#include "string-list.h"
#include "strbuf.h"
#include "argv-array.h"
+#include "quote.h"
struct tmp_objdir {
struct strbuf path;
*/
static void env_append(struct argv_array *env, const char *key, const char *val)
{
- const char *old = getenv(key);
+ struct strbuf quoted = STRBUF_INIT;
+ const char *old;
+ /*
+ * Avoid quoting if it's not necessary, for maximum compatibility
+ * with older parsers which don't understand the quoting.
+ */
+ if (*val == '"' || strchr(val, PATH_SEP)) {
+ strbuf_addch("ed, '"');
+ quote_c_style(val, "ed, NULL, 1);
+ strbuf_addch("ed, '"');
+ val = quoted.buf;
+ }
+
+ old = getenv(key);
if (!old)
argv_array_pushf(env, "%s=%s", key, val);
else
argv_array_pushf(env, "%s=%s%c%s", key, old, PATH_SEP, val);
+
+ strbuf_release("ed);
}
static void env_replace(struct argv_array *env, const char *key, const char *val)
static char *separators = ":";
+static int configured;
+
#define TRAILER_ARG_STRING "$ARG"
static const char *git_generated_prefixes[] = {
return same_token(a, b) && same_value(a, b);
}
-static inline int contains_only_spaces(const char *str)
+static inline int is_blank_line(const char *str)
{
const char *s = str;
- while (*s && isspace(*s))
+ while (*s && *s != '\n' && isspace(*s))
s++;
- return !*s;
+ return !*s || *s == '\n';
}
static inline void strbuf_replace(struct strbuf *sb, const char *a, const char *b)
return 0;
}
+static void ensure_configured(void)
+{
+ if (configured)
+ return;
+
+ /* Default config must be setup first */
+ git_config(git_trailer_default_config, NULL);
+ git_config(git_trailer_config, NULL);
+ configured = 1;
+}
+
static const char *token_from_item(struct arg_item *item, char *tok)
{
if (item->conf.key)
}
/*
- * Return the location of the first separator in line, or -1 if there is no
- * separator.
+ * If the given line is of the form
+ * "<token><optional whitespace><separator>..." or "<separator>...", return the
+ * location of the separator. Otherwise, return -1. The optional whitespace
+ * is allowed there primarily to allow things like "Bug #43" where <token> is
+ * "Bug" and <separator> is "#".
+ *
+ * The separator-starts-line case (in which this function returns 0) is
+ * distinguished from the non-well-formed-line case (in which this function
+ * returns -1) because some callers of this function need such a distinction.
*/
static int find_separator(const char *line, const char *separators)
{
- int loc = strcspn(line, separators);
- if (!line[loc])
- return -1;
- return loc;
+ int whitespace_found = 0;
+ const char *c;
+ for (c = line; *c; c++) {
+ if (strchr(separators, *c))
+ return c - line;
+ if (!whitespace_found && (isalnum(*c) || *c == '-'))
+ continue;
+ if (c != line && (*c == ' ' || *c == '\t')) {
+ whitespace_found = 1;
+ continue;
+ }
+ break;
+ }
+ return -1;
}
/*
free(cl_separators);
}
-static struct strbuf **read_input_file(const char *file)
+static void read_input_file(struct strbuf *sb, const char *file)
{
- struct strbuf **lines;
- struct strbuf sb = STRBUF_INIT;
-
if (file) {
- if (strbuf_read_file(&sb, file, 0) < 0)
+ if (strbuf_read_file(sb, file, 0) < 0)
die_errno(_("could not read input file '%s'"), file);
} else {
- if (strbuf_read(&sb, fileno(stdin), 0) < 0)
+ if (strbuf_read(sb, fileno(stdin), 0) < 0)
die_errno(_("could not read from stdin"));
}
+}
- lines = strbuf_split(&sb, '\n');
+static const char *next_line(const char *str)
+{
+ const char *nl = strchrnul(str, '\n');
+ return nl + !!*nl;
+}
- strbuf_release(&sb);
+/*
+ * Return the position of the start of the last line. If len is 0, return -1.
+ */
+static int last_line(const char *buf, size_t len)
+{
+ int i;
+ if (len == 0)
+ return -1;
+ if (len == 1)
+ return 0;
+ /*
+ * Skip the last character (in addition to the null terminator),
+ * because if the last character is a newline, it is considered as part
+ * of the last line anyway.
+ */
+ i = len - 2;
- return lines;
+ for (; i >= 0; i--) {
+ if (buf[i] == '\n')
+ return i + 1;
+ }
+ return 0;
}
/*
- * Return the (0 based) index of the start of the patch or the line
- * count if there is no patch in the message.
+ * Return the position of the start of the patch or the length of str if there
+ * is no patch in the message.
*/
-static int find_patch_start(struct strbuf **lines, int count)
+static int find_patch_start(const char *str)
{
- int i;
+ const char *s;
- /* Get the start of the patch part if any */
- for (i = 0; i < count; i++) {
- if (starts_with(lines[i]->buf, "---"))
- return i;
+ for (s = str; *s; s = next_line(s)) {
+ if (starts_with(s, "---"))
+ return s - str;
}
- return count;
+ return s - str;
}
/*
- * Return the (0 based) index of the first trailer line or count if
- * there are no trailers. Trailers are searched only in the lines from
- * index (count - 1) down to index 0.
+ * Return the position of the first trailer line or len if there are no
+ * trailers.
*/
-static int find_trailer_start(struct strbuf **lines, int count)
+static int find_trailer_start(const char *buf, size_t len)
{
- int start, end_of_title, only_spaces = 1;
+ const char *s;
+ int end_of_title, l, only_spaces = 1;
int recognized_prefix = 0, trailer_lines = 0, non_trailer_lines = 0;
/*
* Number of possible continuation lines encountered. This will be
int possible_continuation_lines = 0;
/* The first paragraph is the title and cannot be trailers */
- for (start = 0; start < count; start++) {
- if (lines[start]->buf[0] == comment_line_char)
+ for (s = buf; s < buf + len; s = next_line(s)) {
+ if (s[0] == comment_line_char)
continue;
- if (contains_only_spaces(lines[start]->buf))
+ if (is_blank_line(s))
break;
}
- end_of_title = start;
+ end_of_title = s - buf;
/*
* Get the start of the trailers by looking starting from the end for a
* trailers, or (ii) contains at least one Git-generated trailer and
* consists of at least 25% trailers.
*/
- for (start = count - 1; start >= end_of_title; start--) {
+ for (l = last_line(buf, len);
+ l >= end_of_title;
+ l = last_line(buf, l)) {
+ const char *bol = buf + l;
const char **p;
int separator_pos;
- if (lines[start]->buf[0] == comment_line_char) {
+ if (bol[0] == comment_line_char) {
non_trailer_lines += possible_continuation_lines;
possible_continuation_lines = 0;
continue;
}
- if (contains_only_spaces(lines[start]->buf)) {
+ if (is_blank_line(bol)) {
if (only_spaces)
continue;
non_trailer_lines += possible_continuation_lines;
if (recognized_prefix &&
trailer_lines * 3 >= non_trailer_lines)
- return start + 1;
- if (trailer_lines && !non_trailer_lines)
- return start + 1;
- return count;
+ return next_line(bol) - buf;
+ else if (trailer_lines && !non_trailer_lines)
+ return next_line(bol) - buf;
+ return len;
}
only_spaces = 0;
for (p = git_generated_prefixes; *p; p++) {
- if (starts_with(lines[start]->buf, *p)) {
+ if (starts_with(bol, *p)) {
trailer_lines++;
possible_continuation_lines = 0;
recognized_prefix = 1;
}
}
- separator_pos = find_separator(lines[start]->buf, separators);
- if (separator_pos >= 1 && !isspace(lines[start]->buf[0])) {
+ separator_pos = find_separator(bol, separators);
+ if (separator_pos >= 1 && !isspace(bol[0])) {
struct list_head *pos;
trailer_lines++;
list_for_each(pos, &conf_head) {
struct arg_item *item;
item = list_entry(pos, struct arg_item, list);
- if (token_matches_item(lines[start]->buf, item,
+ if (token_matches_item(bol, item,
separator_pos)) {
recognized_prefix = 1;
break;
}
}
- } else if (isspace(lines[start]->buf[0]))
+ } else if (isspace(bol[0]))
possible_continuation_lines++;
else {
non_trailer_lines++;
;
}
- return count;
-}
-
-/* Get the index of the end of the trailers */
-static int find_trailer_end(struct strbuf **lines, int patch_start)
-{
- struct strbuf sb = STRBUF_INIT;
- int i, ignore_bytes;
-
- for (i = 0; i < patch_start; i++)
- strbuf_addbuf(&sb, lines[i]);
- ignore_bytes = ignore_non_trailer(&sb);
- strbuf_release(&sb);
- for (i = patch_start - 1; i >= 0 && ignore_bytes > 0; i--)
- ignore_bytes -= lines[i]->len;
-
- return i + 1;
+ return len;
}
-static int has_blank_line_before(struct strbuf **lines, int start)
+/* Return the position of the end of the trailers. */
+static int find_trailer_end(const char *buf, size_t len)
{
- for (;start >= 0; start--) {
- if (lines[start]->buf[0] == comment_line_char)
- continue;
- return contains_only_spaces(lines[start]->buf);
- }
- return 0;
+ return len - ignore_non_trailer(buf, len);
}
-static void print_lines(FILE *outfile, struct strbuf **lines, int start, int end)
+static int ends_with_blank_line(const char *buf, size_t len)
{
- int i;
- for (i = start; lines[i] && i < end; i++)
- fprintf(outfile, "%s", lines[i]->buf);
+ int ll = last_line(buf, len);
+ if (ll < 0)
+ return 0;
+ return is_blank_line(buf + ll);
}
static int process_input_file(FILE *outfile,
- struct strbuf **lines,
+ const char *str,
struct list_head *head)
{
- int count = 0;
- int patch_start, trailer_start, trailer_end, i;
+ struct trailer_info info;
struct strbuf tok = STRBUF_INIT;
struct strbuf val = STRBUF_INIT;
- struct trailer_item *last = NULL;
-
- /* Get the line count */
- while (lines[count])
- count++;
+ int i;
- patch_start = find_patch_start(lines, count);
- trailer_end = find_trailer_end(lines, patch_start);
- trailer_start = find_trailer_start(lines, trailer_end);
+ trailer_info_get(&info, str);
/* Print lines before the trailers as is */
- print_lines(outfile, lines, 0, trailer_start);
+ fwrite(str, 1, info.trailer_start - str, outfile);
- if (!has_blank_line_before(lines, trailer_start - 1))
+ if (!info.blank_line_before_trailer)
fprintf(outfile, "\n");
- /* Parse trailer lines */
- for (i = trailer_start; i < trailer_end; i++) {
+ for (i = 0; i < info.trailer_nr; i++) {
int separator_pos;
- if (lines[i]->buf[0] == comment_line_char)
+ char *trailer = info.trailers[i];
+ if (trailer[0] == comment_line_char)
continue;
- if (last && isspace(lines[i]->buf[0])) {
- struct strbuf sb = STRBUF_INIT;
- strbuf_addf(&sb, "%s\n%s", last->value, lines[i]->buf);
- strbuf_strip_suffix(&sb, "\n");
- free(last->value);
- last->value = strbuf_detach(&sb, NULL);
- continue;
- }
- separator_pos = find_separator(lines[i]->buf, separators);
+ separator_pos = find_separator(trailer, separators);
if (separator_pos >= 1) {
- parse_trailer(&tok, &val, NULL, lines[i]->buf,
+ parse_trailer(&tok, &val, NULL, trailer,
separator_pos);
- last = add_trailer_item(head,
- strbuf_detach(&tok, NULL),
- strbuf_detach(&val, NULL));
+ add_trailer_item(head,
+ strbuf_detach(&tok, NULL),
+ strbuf_detach(&val, NULL));
} else {
- strbuf_addbuf(&val, lines[i]);
+ strbuf_addstr(&val, trailer);
strbuf_strip_suffix(&val, "\n");
add_trailer_item(head,
NULL,
strbuf_detach(&val, NULL));
- last = NULL;
}
}
- return trailer_end;
+ trailer_info_release(&info);
+
+ return info.trailer_end - str;
}
static void free_all(struct list_head *head)
{
LIST_HEAD(head);
LIST_HEAD(arg_head);
- struct strbuf **lines;
+ struct strbuf sb = STRBUF_INIT;
int trailer_end;
FILE *outfile = stdout;
- /* Default config must be setup first */
- git_config(git_trailer_default_config, NULL);
- git_config(git_trailer_config, NULL);
+ ensure_configured();
- lines = read_input_file(file);
+ read_input_file(&sb, file);
if (in_place)
outfile = create_in_place_tempfile(file);
/* Print the lines before the trailers */
- trailer_end = process_input_file(outfile, lines, &head);
+ trailer_end = process_input_file(outfile, sb.buf, &head);
process_command_line_args(&arg_head, trailers);
free_all(&head);
/* Print the lines after the trailers as is */
- print_lines(outfile, lines, trailer_end, INT_MAX);
+ fwrite(sb.buf + trailer_end, 1, sb.len - trailer_end, outfile);
if (in_place)
if (rename_tempfile(&trailers_tempfile, file))
die_errno(_("could not rename temporary file to %s"), file);
- strbuf_list_free(lines);
+ strbuf_release(&sb);
+}
+
+void trailer_info_get(struct trailer_info *info, const char *str)
+{
+ int patch_start, trailer_end, trailer_start;
+ struct strbuf **trailer_lines, **ptr;
+ char **trailer_strings = NULL;
+ size_t nr = 0, alloc = 0;
+ char **last = NULL;
+
+ ensure_configured();
+
+ patch_start = find_patch_start(str);
+ trailer_end = find_trailer_end(str, patch_start);
+ trailer_start = find_trailer_start(str, trailer_end);
+
+ trailer_lines = strbuf_split_buf(str + trailer_start,
+ trailer_end - trailer_start,
+ '\n',
+ 0);
+ for (ptr = trailer_lines; *ptr; ptr++) {
+ if (last && isspace((*ptr)->buf[0])) {
+ struct strbuf sb = STRBUF_INIT;
+ strbuf_attach(&sb, *last, strlen(*last), strlen(*last));
+ strbuf_addbuf(&sb, *ptr);
+ *last = strbuf_detach(&sb, NULL);
+ continue;
+ }
+ ALLOC_GROW(trailer_strings, nr + 1, alloc);
+ trailer_strings[nr] = strbuf_detach(*ptr, NULL);
+ last = find_separator(trailer_strings[nr], separators) >= 1
+ ? &trailer_strings[nr]
+ : NULL;
+ nr++;
+ }
+ strbuf_list_free(trailer_lines);
+
+ info->blank_line_before_trailer = ends_with_blank_line(str,
+ trailer_start);
+ info->trailer_start = str + trailer_start;
+ info->trailer_end = str + trailer_end;
+ info->trailers = trailer_strings;
+ info->trailer_nr = nr;
+}
+
+void trailer_info_release(struct trailer_info *info)
+{
+ int i;
+ for (i = 0; i < info->trailer_nr; i++)
+ free(info->trailers[i]);
+ free(info->trailers);
}
#ifndef TRAILER_H
#define TRAILER_H
+struct trailer_info {
+ /*
+ * True if there is a blank line before the location pointed to by
+ * trailer_start.
+ */
+ int blank_line_before_trailer;
+
+ /*
+ * Pointers to the start and end of the trailer block found. If there
+ * is no trailer block found, these 2 pointers point to the end of the
+ * input string.
+ */
+ const char *trailer_start, *trailer_end;
+
+ /*
+ * Array of trailers found.
+ */
+ char **trailers;
+ size_t trailer_nr;
+};
+
void process_trailers(const char *file, int in_place, int trim_empty,
struct string_list *trailers);
+void trailer_info_get(struct trailer_info *info, const char *str);
+
+void trailer_info_release(struct trailer_info *info);
+
#endif /* TRAILER_H */
return enabled ? &allowed : NULL;
}
-int is_transport_allowed(const char *type)
+enum protocol_allow_config {
+ PROTOCOL_ALLOW_NEVER = 0,
+ PROTOCOL_ALLOW_USER_ONLY,
+ PROTOCOL_ALLOW_ALWAYS
+};
+
+static enum protocol_allow_config parse_protocol_config(const char *key,
+ const char *value)
{
- const struct string_list *allowed = protocol_whitelist();
- return !allowed || string_list_has_string(allowed, type);
+ if (!strcasecmp(value, "always"))
+ return PROTOCOL_ALLOW_ALWAYS;
+ else if (!strcasecmp(value, "never"))
+ return PROTOCOL_ALLOW_NEVER;
+ else if (!strcasecmp(value, "user"))
+ return PROTOCOL_ALLOW_USER_ONLY;
+
+ die("unknown value for config '%s': %s", key, value);
}
-void transport_check_allowed(const char *type)
+static enum protocol_allow_config get_protocol_config(const char *type)
{
- if (!is_transport_allowed(type))
- die("transport '%s' not allowed", type);
+ char *key = xstrfmt("protocol.%s.allow", type);
+ char *value;
+
+ /* first check the per-protocol config */
+ if (!git_config_get_string(key, &value)) {
+ enum protocol_allow_config ret =
+ parse_protocol_config(key, value);
+ free(key);
+ free(value);
+ return ret;
+ }
+ free(key);
+
+ /* if defined, fallback to user-defined default for unknown protocols */
+ if (!git_config_get_string("protocol.allow", &value)) {
+ enum protocol_allow_config ret =
+ parse_protocol_config("protocol.allow", value);
+ free(value);
+ return ret;
+ }
+
+ /* fallback to built-in defaults */
+ /* known safe */
+ if (!strcmp(type, "http") ||
+ !strcmp(type, "https") ||
+ !strcmp(type, "git") ||
+ !strcmp(type, "ssh") ||
+ !strcmp(type, "file"))
+ return PROTOCOL_ALLOW_ALWAYS;
+
+ /* known scary; err on the side of caution */
+ if (!strcmp(type, "ext"))
+ return PROTOCOL_ALLOW_NEVER;
+
+ /* unknown; by default let them be used only directly by the user */
+ return PROTOCOL_ALLOW_USER_ONLY;
}
-int transport_restrict_protocols(void)
+int is_transport_allowed(const char *type, int from_user)
{
- return !!protocol_whitelist();
+ const struct string_list *whitelist = protocol_whitelist();
+ if (whitelist)
+ return string_list_has_string(whitelist, type);
+
+ switch (get_protocol_config(type)) {
+ case PROTOCOL_ALLOW_ALWAYS:
+ return 1;
+ case PROTOCOL_ALLOW_NEVER:
+ return 0;
+ case PROTOCOL_ALLOW_USER_ONLY:
+ if (from_user < 0)
+ from_user = git_env_bool("GIT_PROTOCOL_FROM_USER", 1);
+ return from_user;
+ }
+
+ die("BUG: invalid protocol_allow_config type");
+}
+
+void transport_check_allowed(const char *type)
+{
+ if (!is_transport_allowed(type, -1))
+ die("transport '%s' not allowed", type);
}
struct transport *transport_get(struct remote *remote, const char *url)
if (run_pre_push_hook(transport, remote_refs))
return -1;
- if ((flags & TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND) && !is_bare_repository()) {
+ if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
+ TRANSPORT_RECURSE_SUBMODULES_ONLY)) &&
+ !is_bare_repository()) {
struct ref *ref = remote_refs;
+ struct sha1_array commits = SHA1_ARRAY_INIT;
+
for (; ref; ref = ref->next)
- if (!is_null_oid(&ref->new_oid) &&
- !push_unpushed_submodules(ref->new_oid.hash,
- transport->remote->name))
- die ("Failed to push all needed submodules!");
+ if (!is_null_oid(&ref->new_oid))
+ sha1_array_append(&commits, ref->new_oid.hash);
+
+ if (!push_unpushed_submodules(&commits,
+ transport->remote->name,
+ pretend)) {
+ sha1_array_clear(&commits);
+ die("Failed to push all needed submodules!");
+ }
+ sha1_array_clear(&commits);
}
- if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
- TRANSPORT_RECURSE_SUBMODULES_CHECK)) && !is_bare_repository()) {
+ if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) ||
+ ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
+ TRANSPORT_RECURSE_SUBMODULES_ONLY)) &&
+ !pretend)) && !is_bare_repository()) {
struct ref *ref = remote_refs;
struct string_list needs_pushing = STRING_LIST_INIT_DUP;
+ struct sha1_array commits = SHA1_ARRAY_INIT;
for (; ref; ref = ref->next)
- if (!is_null_oid(&ref->new_oid) &&
- find_unpushed_submodules(ref->new_oid.hash,
- transport->remote->name, &needs_pushing))
- die_with_unpushed_submodules(&needs_pushing);
+ if (!is_null_oid(&ref->new_oid))
+ sha1_array_append(&commits, ref->new_oid.hash);
+
+ if (find_unpushed_submodules(&commits, transport->remote->name,
+ &needs_pushing)) {
+ sha1_array_clear(&commits);
+ die_with_unpushed_submodules(&needs_pushing);
+ }
+ string_list_clear(&needs_pushing, 0);
+ sha1_array_clear(&commits);
}
- push_ret = transport->push_refs(transport, remote_refs, flags);
+ if (!(flags & TRANSPORT_RECURSE_SUBMODULES_ONLY))
+ push_ret = transport->push_refs(transport, remote_refs, flags);
+ else
+ push_ret = 0;
err = push_had_errors(remote_refs);
ret = push_ret | err;
if (flags & TRANSPORT_PUSH_SET_UPSTREAM)
set_upstreams(transport, remote_refs, pretend);
- if (!(flags & TRANSPORT_PUSH_DRY_RUN)) {
+ if (!(flags & (TRANSPORT_PUSH_DRY_RUN |
+ TRANSPORT_RECURSE_SUBMODULES_ONLY))) {
struct ref *ref;
for (ref = remote_refs; ref; ref = ref->next)
transport_update_tracking_ref(transport->remote, ref, verbose);
const struct ref *extra;
struct alternate_refs_data *cb = data;
- other = xstrdup(real_path(e->path));
+ other = real_pathdup(e->path);
len = strlen(other);
while (other[len-1] == '/')
enum transport_family family;
};
-#define TRANSPORT_PUSH_ALL 1
-#define TRANSPORT_PUSH_FORCE 2
-#define TRANSPORT_PUSH_DRY_RUN 4
-#define TRANSPORT_PUSH_MIRROR 8
-#define TRANSPORT_PUSH_PORCELAIN 16
-#define TRANSPORT_PUSH_SET_UPSTREAM 32
-#define TRANSPORT_RECURSE_SUBMODULES_CHECK 64
-#define TRANSPORT_PUSH_PRUNE 128
-#define TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND 256
-#define TRANSPORT_PUSH_NO_HOOK 512
-#define TRANSPORT_PUSH_FOLLOW_TAGS 1024
-#define TRANSPORT_PUSH_CERT_ALWAYS 2048
-#define TRANSPORT_PUSH_CERT_IF_ASKED 4096
-#define TRANSPORT_PUSH_ATOMIC 8192
-#define TRANSPORT_PUSH_OPTIONS 16384
+#define TRANSPORT_PUSH_ALL (1<<0)
+#define TRANSPORT_PUSH_FORCE (1<<1)
+#define TRANSPORT_PUSH_DRY_RUN (1<<2)
+#define TRANSPORT_PUSH_MIRROR (1<<3)
+#define TRANSPORT_PUSH_PORCELAIN (1<<4)
+#define TRANSPORT_PUSH_SET_UPSTREAM (1<<5)
+#define TRANSPORT_RECURSE_SUBMODULES_CHECK (1<<6)
+#define TRANSPORT_PUSH_PRUNE (1<<7)
+#define TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND (1<<8)
+#define TRANSPORT_PUSH_NO_HOOK (1<<9)
+#define TRANSPORT_PUSH_FOLLOW_TAGS (1<<10)
+#define TRANSPORT_PUSH_CERT_ALWAYS (1<<11)
+#define TRANSPORT_PUSH_CERT_IF_ASKED (1<<12)
+#define TRANSPORT_PUSH_ATOMIC (1<<13)
+#define TRANSPORT_PUSH_OPTIONS (1<<14)
+#define TRANSPORT_RECURSE_SUBMODULES_ONLY (1<<15)
extern int transport_summary_width(const struct ref *refs);
struct transport *transport_get(struct remote *, const char *);
/*
- * Check whether a transport is allowed by the environment. Type should
- * generally be the URL scheme, as described in Documentation/git.txt
+ * Check whether a transport is allowed by the environment.
+ *
+ * Type should generally be the URL scheme, as described in
+ * Documentation/git.txt
+ *
+ * from_user specifies if the transport was given by the user. If unknown pass
+ * a -1 to read from the environment to determine if the transport was given by
+ * the user.
+ *
*/
-int is_transport_allowed(const char *type);
+int is_transport_allowed(const char *type, int from_user);
/*
* Check whether a transport is allowed by the environment,
*/
void transport_check_allowed(const char *type);
-/*
- * Returns true if the user has attempted to turn on protocol
- * restrictions at all.
- */
-int transport_restrict_protocols(void);
-
/* Transport options which apply to git:// and scp-style URLs */
/* The program to use on the remote side to send a pack */
*/
if (ps->recursive && S_ISDIR(entry->mode))
return entry_interesting;
+
+ /*
+ * When matching against submodules with
+ * wildcard characters, ensure that the entry
+ * at least matches up to the first wild
+ * character. More accurate matching can then
+ * be performed in the submodule itself.
+ */
+ if (ps->recursive && S_ISGITLINK(entry->mode) &&
+ !ps_strncmp(item, match + baselen,
+ entry->path,
+ item->nowildcard_len - baselen))
+ return entry_interesting;
}
continue;
strbuf_setlen(base, base_offset + baselen);
return entry_interesting;
}
+
+ /*
+ * When matching against submodules with
+ * wildcard characters, ensure that the entry
+ * at least matches up to the first wild
+ * character. More accurate matching can then
+ * be performed in the submodule itself.
+ */
+ if (ps->recursive && S_ISGITLINK(entry->mode) &&
+ !ps_strncmp(item, match, base->buf + base_offset,
+ item->nowildcard_len)) {
+ strbuf_setlen(base, base_offset + baselen);
+ return entry_interesting;
+ }
+
strbuf_setlen(base, base_offset + baselen);
/*
{ 0x0825, 0x0827 },
{ 0x0829, 0x082D },
{ 0x0859, 0x085B },
-{ 0x08E4, 0x0902 },
+{ 0x08D4, 0x0902 },
{ 0x093A, 0x093A },
{ 0x093C, 0x093C },
{ 0x0941, 0x0948 },
{ 0x17C9, 0x17D3 },
{ 0x17DD, 0x17DD },
{ 0x180B, 0x180E },
+{ 0x1885, 0x1886 },
{ 0x18A9, 0x18A9 },
{ 0x1920, 0x1922 },
{ 0x1927, 0x1928 },
{ 0x1CF4, 0x1CF4 },
{ 0x1CF8, 0x1CF9 },
{ 0x1DC0, 0x1DF5 },
-{ 0x1DFC, 0x1DFF },
+{ 0x1DFB, 0x1DFF },
{ 0x200B, 0x200F },
{ 0x202A, 0x202E },
{ 0x2060, 0x2064 },
{ 0x3099, 0x309A },
{ 0xA66F, 0xA672 },
{ 0xA674, 0xA67D },
-{ 0xA69F, 0xA69F },
+{ 0xA69E, 0xA69F },
{ 0xA6F0, 0xA6F1 },
{ 0xA802, 0xA802 },
{ 0xA806, 0xA806 },
{ 0xA80B, 0xA80B },
{ 0xA825, 0xA826 },
-{ 0xA8C4, 0xA8C4 },
+{ 0xA8C4, 0xA8C5 },
{ 0xA8E0, 0xA8F1 },
{ 0xA926, 0xA92D },
{ 0xA947, 0xA951 },
{ 0xABED, 0xABED },
{ 0xFB1E, 0xFB1E },
{ 0xFE00, 0xFE0F },
-{ 0xFE20, 0xFE2D },
+{ 0xFE20, 0xFE2F },
{ 0xFEFF, 0xFEFF },
{ 0xFFF9, 0xFFFB },
{ 0x101FD, 0x101FD },
{ 0x11173, 0x11173 },
{ 0x11180, 0x11181 },
{ 0x111B6, 0x111BE },
+{ 0x111CA, 0x111CC },
{ 0x1122F, 0x11231 },
{ 0x11234, 0x11234 },
{ 0x11236, 0x11237 },
+{ 0x1123E, 0x1123E },
{ 0x112DF, 0x112DF },
{ 0x112E3, 0x112EA },
-{ 0x11301, 0x11301 },
+{ 0x11300, 0x11301 },
{ 0x1133C, 0x1133C },
{ 0x11340, 0x11340 },
{ 0x11366, 0x1136C },
{ 0x11370, 0x11374 },
+{ 0x11438, 0x1143F },
+{ 0x11442, 0x11444 },
+{ 0x11446, 0x11446 },
{ 0x114B3, 0x114B8 },
{ 0x114BA, 0x114BA },
{ 0x114BF, 0x114C0 },
{ 0x115B2, 0x115B5 },
{ 0x115BC, 0x115BD },
{ 0x115BF, 0x115C0 },
+{ 0x115DC, 0x115DD },
{ 0x11633, 0x1163A },
{ 0x1163D, 0x1163D },
{ 0x1163F, 0x11640 },
{ 0x116AD, 0x116AD },
{ 0x116B0, 0x116B5 },
{ 0x116B7, 0x116B7 },
+{ 0x1171D, 0x1171F },
+{ 0x11722, 0x11725 },
+{ 0x11727, 0x1172B },
+{ 0x11C30, 0x11C36 },
+{ 0x11C38, 0x11C3D },
+{ 0x11C3F, 0x11C3F },
+{ 0x11C92, 0x11CA7 },
+{ 0x11CAA, 0x11CB0 },
+{ 0x11CB2, 0x11CB3 },
+{ 0x11CB5, 0x11CB6 },
{ 0x16AF0, 0x16AF4 },
{ 0x16B30, 0x16B36 },
{ 0x16F8F, 0x16F92 },
{ 0x1D185, 0x1D18B },
{ 0x1D1AA, 0x1D1AD },
{ 0x1D242, 0x1D244 },
+{ 0x1DA00, 0x1DA36 },
+{ 0x1DA3B, 0x1DA6C },
+{ 0x1DA75, 0x1DA75 },
+{ 0x1DA84, 0x1DA84 },
+{ 0x1DA9B, 0x1DA9F },
+{ 0x1DAA1, 0x1DAAF },
+{ 0x1E000, 0x1E006 },
+{ 0x1E008, 0x1E018 },
+{ 0x1E01B, 0x1E021 },
+{ 0x1E023, 0x1E024 },
+{ 0x1E026, 0x1E02A },
{ 0x1E8D0, 0x1E8D6 },
+{ 0x1E944, 0x1E94A },
{ 0xE0001, 0xE0001 },
{ 0xE0020, 0xE007F },
{ 0xE0100, 0xE01EF }
};
static const struct interval double_width[] = {
-{ /* plane */ 0x0, 0x1C },
-{ /* plane */ 0x1C, 0x21 },
-{ /* plane */ 0x21, 0x22 },
-{ /* plane */ 0x22, 0x23 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
-{ /* plane */ 0x0, 0x0 },
{ 0x1100, 0x115F },
+{ 0x231A, 0x231B },
{ 0x2329, 0x232A },
+{ 0x23E9, 0x23EC },
+{ 0x23F0, 0x23F0 },
+{ 0x23F3, 0x23F3 },
+{ 0x25FD, 0x25FE },
+{ 0x2614, 0x2615 },
+{ 0x2648, 0x2653 },
+{ 0x267F, 0x267F },
+{ 0x2693, 0x2693 },
+{ 0x26A1, 0x26A1 },
+{ 0x26AA, 0x26AB },
+{ 0x26BD, 0x26BE },
+{ 0x26C4, 0x26C5 },
+{ 0x26CE, 0x26CE },
+{ 0x26D4, 0x26D4 },
+{ 0x26EA, 0x26EA },
+{ 0x26F2, 0x26F3 },
+{ 0x26F5, 0x26F5 },
+{ 0x26FA, 0x26FA },
+{ 0x26FD, 0x26FD },
+{ 0x2705, 0x2705 },
+{ 0x270A, 0x270B },
+{ 0x2728, 0x2728 },
+{ 0x274C, 0x274C },
+{ 0x274E, 0x274E },
+{ 0x2753, 0x2755 },
+{ 0x2757, 0x2757 },
+{ 0x2795, 0x2797 },
+{ 0x27B0, 0x27B0 },
+{ 0x27BF, 0x27BF },
+{ 0x2B1B, 0x2B1C },
+{ 0x2B50, 0x2B50 },
+{ 0x2B55, 0x2B55 },
{ 0x2E80, 0x2E99 },
{ 0x2E9B, 0x2EF3 },
{ 0x2F00, 0x2FD5 },
{ 0xFE68, 0xFE6B },
{ 0xFF01, 0xFF60 },
{ 0xFFE0, 0xFFE6 },
+{ 0x16FE0, 0x16FE0 },
+{ 0x17000, 0x187EC },
+{ 0x18800, 0x18AF2 },
{ 0x1B000, 0x1B001 },
+{ 0x1F004, 0x1F004 },
+{ 0x1F0CF, 0x1F0CF },
+{ 0x1F18E, 0x1F18E },
+{ 0x1F191, 0x1F19A },
{ 0x1F200, 0x1F202 },
-{ 0x1F210, 0x1F23A },
+{ 0x1F210, 0x1F23B },
{ 0x1F240, 0x1F248 },
{ 0x1F250, 0x1F251 },
+{ 0x1F300, 0x1F320 },
+{ 0x1F32D, 0x1F335 },
+{ 0x1F337, 0x1F37C },
+{ 0x1F37E, 0x1F393 },
+{ 0x1F3A0, 0x1F3CA },
+{ 0x1F3CF, 0x1F3D3 },
+{ 0x1F3E0, 0x1F3F0 },
+{ 0x1F3F4, 0x1F3F4 },
+{ 0x1F3F8, 0x1F43E },
+{ 0x1F440, 0x1F440 },
+{ 0x1F442, 0x1F4FC },
+{ 0x1F4FF, 0x1F53D },
+{ 0x1F54B, 0x1F54E },
+{ 0x1F550, 0x1F567 },
+{ 0x1F57A, 0x1F57A },
+{ 0x1F595, 0x1F596 },
+{ 0x1F5A4, 0x1F5A4 },
+{ 0x1F5FB, 0x1F64F },
+{ 0x1F680, 0x1F6C5 },
+{ 0x1F6CC, 0x1F6CC },
+{ 0x1F6D0, 0x1F6D2 },
+{ 0x1F6EB, 0x1F6EC },
+{ 0x1F6F4, 0x1F6F6 },
+{ 0x1F910, 0x1F91E },
+{ 0x1F920, 0x1F927 },
+{ 0x1F930, 0x1F930 },
+{ 0x1F933, 0x1F93E },
+{ 0x1F940, 0x1F94B },
+{ 0x1F950, 0x1F95E },
+{ 0x1F980, 0x1F991 },
+{ 0x1F9C0, 0x1F9C0 },
{ 0x20000, 0x2FFFD },
{ 0x30000, 0x3FFFD }
};
? ((o)->msgs[(type)]) \
: (unpack_plumbing_errors[(type)]) )
+static const char *super_prefixed(const char *path)
+{
+ /*
+ * It is necessary and sufficient to have two static buffers
+ * here, as the return value of this function is fed to
+ * error() using the unpack_*_errors[] templates we see above.
+ */
+ static struct strbuf buf[2] = {STRBUF_INIT, STRBUF_INIT};
+ static int super_prefix_len = -1;
+ static unsigned idx = ARRAY_SIZE(buf) - 1;
+
+ if (super_prefix_len < 0) {
+ const char *super_prefix = get_super_prefix();
+ if (!super_prefix) {
+ super_prefix_len = 0;
+ } else {
+ int i;
+ for (i = 0; i < ARRAY_SIZE(buf); i++)
+ strbuf_addstr(&buf[i], super_prefix);
+ super_prefix_len = buf[0].len;
+ }
+ }
+
+ if (!super_prefix_len)
+ return path;
+
+ if (++idx >= ARRAY_SIZE(buf))
+ idx = 0;
+
+ strbuf_setlen(&buf[idx], super_prefix_len);
+ strbuf_addstr(&buf[idx], path);
+
+ return buf[idx].buf;
+}
+
void setup_unpack_trees_porcelain(struct unpack_trees_options *opts,
const char *cmd)
{
xstrfmt(msg, cmd, cmd);
msgs[ERROR_NOT_UPTODATE_DIR] =
- _("Updating the following directories would lose untracked files in it:\n%s");
+ _("Updating the following directories would lose untracked files in them:\n%s");
if (!strcmp(cmd, "checkout"))
msg = advice_commit_before_merge
const char *path)
{
if (!o->show_all_errors)
- return error(ERRORMSG(o, e), path);
+ return error(ERRORMSG(o, e), super_prefixed(path));
/*
* Otherwise, insert in a list for future display by
something_displayed = 1;
for (i = 0; i < rejects->nr; i++)
strbuf_addf(&path, "\t%s\n", rejects->items[i].string);
- error(ERRORMSG(o, e), path.buf);
+ error(ERRORMSG(o, e), super_prefixed(path.buf));
strbuf_release(&path);
}
string_list_clear(rejects, 0);
schedule_dir_for_removal(ce->name, ce_namelen(ce));
}
-static int check_updates(struct unpack_trees_options *o,
- const struct checkout *state)
+static struct progress *get_progress(struct unpack_trees_options *o)
{
unsigned cnt = 0, total = 0;
+ struct index_state *index = &o->result;
+
+ if (!o->update || !o->verbose_update)
+ return NULL;
+
+ for (; cnt < index->cache_nr; cnt++) {
+ const struct cache_entry *ce = index->cache[cnt];
+ if (ce->ce_flags & (CE_UPDATE | CE_WT_REMOVE))
+ total++;
+ }
+
+ return start_progress_delay(_("Checking out files"),
+ total, 50, 1);
+}
+
+static int check_updates(struct unpack_trees_options *o)
+{
+ unsigned cnt = 0;
+ int errs = 0;
struct progress *progress = NULL;
struct index_state *index = &o->result;
+ struct checkout state = CHECKOUT_INIT;
int i;
- int errs = 0;
- if (o->update && o->verbose_update) {
- for (total = cnt = 0; cnt < index->cache_nr; cnt++) {
- const struct cache_entry *ce = index->cache[cnt];
- if (ce->ce_flags & (CE_UPDATE | CE_WT_REMOVE))
- total++;
- }
+ state.force = 1;
+ state.quiet = 1;
+ state.refresh_cache = 1;
+ state.istate = index;
- progress = start_progress_delay(_("Checking out files"),
- total, 50, 1);
- cnt = 0;
- }
+ progress = get_progress(o);
if (o->update)
- git_attr_set_direction(GIT_ATTR_CHECKOUT, &o->result);
+ git_attr_set_direction(GIT_ATTR_CHECKOUT, index);
for (i = 0; i < index->cache_nr; i++) {
const struct cache_entry *ce = index->cache[i];
display_progress(progress, ++cnt);
if (o->update && !o->dry_run)
unlink_entry(ce);
- continue;
}
}
- remove_marked_cache_entries(&o->result);
+ remove_marked_cache_entries(index);
remove_scheduled_dirs();
for (i = 0; i < index->cache_nr; i++) {
display_progress(progress, ++cnt);
ce->ce_flags &= ~CE_UPDATE;
if (o->update && !o->dry_run) {
- errs |= checkout_entry(ce, state, NULL);
+ errs |= checkout_entry(ce, &state, NULL);
}
}
}
int i, ret;
static struct cache_entry *dfc;
struct exclude_list el;
- struct checkout state = CHECKOUT_INIT;
if (len > MAX_UNPACK_TREES)
die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
- state.force = 1;
- state.quiet = 1;
- state.refresh_cache = 1;
- state.istate = &o->result;
memset(&el, 0, sizeof(el));
if (!core_apply_sparse_checkout || !o->update)
}
o->src_index = NULL;
- ret = check_updates(o, &state) ? (-2) : 0;
+ ret = check_updates(o) ? (-2) : 0;
if (o->dst_index) {
if (!ret) {
if (!o->result.cache_tree)
o->merge_size);
if (a && old)
return o->gently ? -1 :
- error(ERRORMSG(o, ERROR_BIND_OVERLAP), a->name, old->name);
+ error(ERRORMSG(o, ERROR_BIND_OVERLAP),
+ super_prefixed(a->name),
+ super_prefixed(old->name));
if (!a)
return keep_entry(old, o);
else
+++ /dev/null
-#!/bin/sh
-#See http://www.unicode.org/reports/tr44/
-#
-#Me Enclosing_Mark an enclosing combining mark
-#Mn Nonspacing_Mark a nonspacing combining mark (zero advance width)
-#Cf Format a format control character
-#
-UNICODEWIDTH_H=../unicode_width.h
-if ! test -d unicode; then
- mkdir unicode
-fi &&
-( cd unicode &&
- if ! test -f UnicodeData.txt; then
- wget http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
- fi &&
- if ! test -f EastAsianWidth.txt; then
- wget http://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt
- fi &&
- if ! test -d uniset; then
- git clone https://github.com/depp/uniset.git
- fi &&
- (
- cd uniset &&
- if ! test -x uniset; then
- autoreconf -i &&
- ./configure --enable-warnings=-Werror CFLAGS='-O0 -ggdb'
- fi &&
- make
- ) &&
- UNICODE_DIR=. && export UNICODE_DIR &&
- cat >$UNICODEWIDTH_H <<-EOF
- static const struct interval zero_width[] = {
- $(uniset/uniset --32 cat:Me,Mn,Cf + U+1160..U+11FF - U+00AD |
- grep -v plane)
- };
- static const struct interval double_width[] = {
- $(uniset/uniset --32 eaw:F,W)
- };
- EOF
-)
#define ALLOW_TIP_SHA1 01
/* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
#define ALLOW_REACHABLE_SHA1 02
+/* Allow request of any sha1. Implies ALLOW_TIP_SHA1 and ALLOW_REACHABLE_SHA1. */
+#define ALLOW_ANY_SHA1 07
static unsigned int allow_unadvertised_object_request;
static int shallow_nr;
static struct object_array have_obj;
sha1_to_hex(sha1_buf));
if (!(o->flags & WANTED)) {
o->flags |= WANTED;
- if (!is_our_ref(o))
+ if (!((allow_unadvertised_object_request & ALLOW_ANY_SHA1) == ALLOW_ANY_SHA1
+ || is_our_ref(o)))
has_non_tip = 1;
add_object_array(o, NULL, &want_obj);
}
allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
else
allow_unadvertised_object_request &= ~ALLOW_REACHABLE_SHA1;
+ } else if (!strcmp("uploadpack.allowanysha1inwant", var)) {
+ if (git_config_bool(var, value))
+ allow_unadvertised_object_request |= ALLOW_ANY_SHA1;
+ else
+ allow_unadvertised_object_request &= ~ALLOW_ANY_SHA1;
} else if (!strcmp("uploadpack.keepalive", var)) {
keepalive = git_config_int(var, value);
if (!keepalive)
#include "cache.h"
static FILE *error_handle;
-static int tweaked_error_buffering;
void vreportf(const char *prefix, const char *err, va_list params)
{
+ char msg[4096];
FILE *fh = error_handle ? error_handle : stderr;
+ char *p;
- fflush(fh);
- if (!tweaked_error_buffering) {
- setvbuf(fh, NULL, _IOLBF, 0);
- tweaked_error_buffering = 1;
+ vsnprintf(msg, sizeof(msg), err, params);
+ for (p = msg; *p; p++) {
+ if (iscntrl(*p) && *p != '\t' && *p != '\n')
+ *p = '?';
}
-
- fputs(prefix, fh);
- vfprintf(fh, err, params);
- fputc('\n', fh);
+ fprintf(fh, "%s%s\n", prefix, msg);
}
static NORETURN void usage_builtin(const char *err, va_list params)
void set_error_handle(FILE *fh)
{
error_handle = fh;
- tweaked_error_buffering = 0;
}
void NORETURN usagef(const char *err, ...)
return out;
}
+static const char *fallback_encoding(const char *name)
+{
+ /*
+ * Some platforms do not have the variously spelled variants of
+ * UTF-8, so let's fall back to trying the most official
+ * spelling. We do so only as a fallback in case the platform
+ * does understand the user's spelling, but not our official
+ * one.
+ */
+ if (is_encoding_utf8(name))
+ return "UTF-8";
+
+ /*
+ * Even though latin-1 is still seen in e-mail
+ * headers, some platforms only install ISO-8859-1.
+ */
+ if (!strcasecmp(name, "latin-1"))
+ return "ISO-8859-1";
+
+ return name;
+}
+
char *reencode_string_len(const char *in, int insz,
const char *out_encoding, const char *in_encoding,
int *outsz)
conv = iconv_open(out_encoding, in_encoding);
if (conv == (iconv_t) -1) {
- /*
- * Some platforms do not have the variously spelled variants of
- * UTF-8, so let's fall back to trying the most official
- * spelling. We do so only as a fallback in case the platform
- * does understand the user's spelling, but not our official
- * one.
- */
- if (is_encoding_utf8(in_encoding))
- in_encoding = "UTF-8";
- if (is_encoding_utf8(out_encoding))
- out_encoding = "UTF-8";
+ in_encoding = fallback_encoding(in_encoding);
+ out_encoding = fallback_encoding(out_encoding);
+
conv = iconv_open(out_encoding, in_encoding);
if (conv == (iconv_t) -1)
return NULL;
static const struct string_list *prereleases;
static int initialized;
+struct suffix_match {
+ int conf_pos;
+ int start;
+ int len;
+};
+
+static void find_better_matching_suffix(const char *tagname, const char *suffix,
+ int suffix_len, int start, int conf_pos,
+ struct suffix_match *match)
+{
+ /*
+ * A better match either starts earlier or starts at the same offset
+ * but is longer.
+ */
+ int end = match->len < suffix_len ? match->start : match->start-1;
+ int i;
+ for (i = start; i <= end; i++)
+ if (starts_with(tagname + i, suffix)) {
+ match->conf_pos = conf_pos;
+ match->start = i;
+ match->len = suffix_len;
+ break;
+ }
+}
+
/*
- * p1 and p2 point to the first different character in two strings. If
- * either p1 or p2 starts with a prerelease suffix, it will be forced
- * to be on top.
- *
- * If both p1 and p2 start with (different) suffix, the order is
- * determined by config file.
+ * off is the offset of the first different character in the two strings
+ * s1 and s2. If either s1 or s2 contains a prerelease suffix containing
+ * that offset or a suffix ends right before that offset, then that
+ * string will be forced to be on top.
*
- * Note that we don't have to deal with the situation when both p1 and
- * p2 start with the same suffix because the common part is already
- * consumed by the caller.
+ * If both s1 and s2 contain a (different) suffix around that position,
+ * their order is determined by the order of those two suffixes in the
+ * configuration.
+ * If any of the strings contains more than one different suffixes around
+ * that position, then that string is sorted according to the contained
+ * suffix which starts at the earliest offset in that string.
+ * If more than one different contained suffixes start at that earliest
+ * offset, then that string is sorted according to the longest of those
+ * suffixes.
*
* Return non-zero if *diff contains the return value for versioncmp()
*/
-static int swap_prereleases(const void *p1_,
- const void *p2_,
+static int swap_prereleases(const char *s1,
+ const char *s2,
+ int off,
int *diff)
{
- const char *p1 = p1_;
- const char *p2 = p2_;
- int i, i1 = -1, i2 = -1;
+ int i;
+ struct suffix_match match1 = { -1, off, -1 };
+ struct suffix_match match2 = { -1, off, -1 };
for (i = 0; i < prereleases->nr; i++) {
const char *suffix = prereleases->items[i].string;
- if (i1 == -1 && starts_with(p1, suffix))
- i1 = i;
- if (i2 == -1 && starts_with(p2, suffix))
- i2 = i;
+ int start, suffix_len = strlen(suffix);
+ if (suffix_len < off)
+ start = off - suffix_len;
+ else
+ start = 0;
+ find_better_matching_suffix(s1, suffix, suffix_len, start,
+ i, &match1);
+ find_better_matching_suffix(s2, suffix, suffix_len, start,
+ i, &match2);
}
- if (i1 == -1 && i2 == -1)
+ if (match1.conf_pos == -1 && match2.conf_pos == -1)
return 0;
- if (i1 >= 0 && i2 >= 0)
- *diff = i1 - i2;
- else if (i1 >= 0)
+ if (match1.conf_pos == match2.conf_pos)
+ /* Found the same suffix in both, e.g. "-rc" in "v1.0-rcX"
+ * and "v1.0-rcY": the caller should decide based on "X"
+ * and "Y". */
+ return 0;
+
+ if (match1.conf_pos >= 0 && match2.conf_pos >= 0)
+ *diff = match1.conf_pos - match2.conf_pos;
+ else if (match1.conf_pos >= 0)
*diff = -1;
- else /* if (i2 >= 0) */
+ else /* if (match2.conf_pos >= 0) */
*diff = 1;
return 1;
}
}
if (!initialized) {
+ const struct string_list *deprecated_prereleases;
initialized = 1;
- prereleases = git_config_get_value_multi("versionsort.prereleasesuffix");
+ prereleases = git_config_get_value_multi("versionsort.suffix");
+ deprecated_prereleases = git_config_get_value_multi("versionsort.prereleasesuffix");
+ if (prereleases) {
+ if (deprecated_prereleases)
+ warning("ignoring versionsort.prereleasesuffix because versionsort.suffix is set");
+ } else
+ prereleases = deprecated_prereleases;
}
- if (prereleases && swap_prereleases(p1 - 1, p2 - 1, &diff))
+ if (prereleases && swap_prereleases(s1, s2, (const char *) p1 - s1 - 1,
+ &diff))
return diff;
state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))];
strbuf_addf(&path, "%s/HEAD", get_git_common_dir());
- if (parse_ref(path.buf, &head_ref, &is_detached) < 0)
- goto done;
-
- worktree = xmalloc(sizeof(struct worktree));
+ worktree = xcalloc(1, sizeof(*worktree));
worktree->path = strbuf_detach(&worktree_path, NULL);
- worktree->id = NULL;
worktree->is_bare = is_bare;
- worktree->head_ref = NULL;
worktree->is_detached = is_detached;
- worktree->is_current = 0;
- add_head_info(&head_ref, worktree);
- worktree->lock_reason = NULL;
- worktree->lock_reason_valid = 0;
+ if (!parse_ref(path.buf, &head_ref, &is_detached))
+ add_head_info(&head_ref, worktree);
-done:
strbuf_release(&path);
strbuf_release(&worktree_path);
strbuf_release(&head_ref);
if (parse_ref(path.buf, &head_ref, &is_detached) < 0)
goto done;
- worktree = xmalloc(sizeof(struct worktree));
+ worktree = xcalloc(1, sizeof(*worktree));
worktree->path = strbuf_detach(&worktree_path, NULL);
worktree->id = xstrdup(id);
- worktree->is_bare = 0;
- worktree->head_ref = NULL;
worktree->is_detached = is_detached;
- worktree->is_current = 0;
add_head_info(&head_ref, worktree);
- worktree->lock_reason = NULL;
- worktree->lock_reason_valid = 0;
done:
strbuf_release(&path);
static void mark_current_worktree(struct worktree **worktrees)
{
- char *git_dir = xstrdup(absolute_path(get_git_dir()));
+ char *git_dir = absolute_pathdup(get_git_dir());
int i;
for (i = 0; worktrees[i]; i++) {
free(git_dir);
}
-struct worktree **get_worktrees(void)
+static int compare_worktree(const void *a_, const void *b_)
+{
+ const struct worktree *const *a = a_;
+ const struct worktree *const *b = b_;
+ return fspathcmp((*a)->path, (*b)->path);
+}
+
+struct worktree **get_worktrees(unsigned flags)
{
struct worktree **list = NULL;
struct strbuf path = STRBUF_INIT;
list = xmalloc(alloc * sizeof(struct worktree *));
- if ((list[counter] = get_main_worktree()))
- counter++;
+ list[counter++] = get_main_worktree();
strbuf_addf(&path, "%s/worktrees", get_git_common_dir());
dir = opendir(path.buf);
ALLOC_GROW(list, counter + 1, alloc);
list[counter] = NULL;
+ if (flags & GWT_SORT_LINKED)
+ /*
+ * don't sort the first item (main worktree), which will
+ * always be the first
+ */
+ QSORT(list + 1, counter - 1, compare_worktree);
+
mark_current_worktree(list);
return list;
}
return wt;
arg = prefix_filename(prefix, strlen(prefix), arg);
- path = xstrdup(real_path(arg));
+ path = real_pathdup(arg);
for (; *list; list++)
if (!fspathcmp(path, real_path((*list)->path)))
break;
if (worktrees)
free_worktrees(worktrees);
- worktrees = get_worktrees();
+ worktrees = get_worktrees(0);
for (i = 0; worktrees[i]; i++) {
struct worktree *wt = worktrees[i];
return existing;
}
+
+int submodule_uses_worktrees(const char *path)
+{
+ char *submodule_gitdir;
+ struct strbuf sb = STRBUF_INIT;
+ DIR *dir;
+ struct dirent *d;
+ int ret = 0;
+ struct repository_format format;
+
+ submodule_gitdir = git_pathdup_submodule(path, "%s", "");
+ if (!submodule_gitdir)
+ return 0;
+
+ /* The env would be set for the superproject. */
+ get_common_dir_noenv(&sb, submodule_gitdir);
+
+ /*
+ * The check below is only known to be good for repository format
+ * version 0 at the time of writing this code.
+ */
+ strbuf_addstr(&sb, "/config");
+ read_repository_format(&format, sb.buf);
+ if (format.version != 0) {
+ strbuf_release(&sb);
+ return 1;
+ }
+
+ /* Replace config by worktrees. */
+ strbuf_setlen(&sb, sb.len - strlen("config"));
+ strbuf_addstr(&sb, "worktrees");
+
+ /* See if there is any file inside the worktrees directory. */
+ dir = opendir(sb.buf);
+ strbuf_release(&sb);
+ free(submodule_gitdir);
+
+ if (!dir)
+ return 0;
+
+ while ((d = readdir(dir)) != NULL) {
+ if (is_dot_or_dotdot(d->d_name))
+ continue;
+
+ ret = 1;
+ break;
+ }
+ closedir(dir);
+ return ret;
+}
/* Functions for acting on the information about worktrees. */
+#define GWT_SORT_LINKED (1 << 0) /* keeps linked worktrees sorted */
+
/*
* Get the worktrees. The primary worktree will always be the first returned,
* and linked worktrees will be pointed to by 'next' in each subsequent
* The caller is responsible for freeing the memory from the returned
* worktree(s).
*/
-extern struct worktree **get_worktrees(void);
+extern struct worktree **get_worktrees(unsigned flags);
+
+/*
+ * Returns 1 if linked worktrees exist, 0 otherwise.
+ */
+extern int submodule_uses_worktrees(const char *path);
/*
* Return git dir of the worktree. Note that the path may be relative.
d->index_status = DIFF_STATUS_ADDED;
/* Leave {mode,oid}_head zero for adds. */
d->mode_index = ce->ce_mode;
- hashcpy(d->oid_index.hash, ce->oid.hash);
+ oidcpy(&d->oid_index, &ce->oid);
}
}
}
strbuf_list_free(split);
}
-static void read_rebase_todolist(const char *fname, struct string_list *lines)
+static int read_rebase_todolist(const char *fname, struct string_list *lines)
{
struct strbuf line = STRBUF_INIT;
FILE *f = fopen(git_path("%s", fname), "r");
- if (!f)
+ if (!f) {
+ if (errno == ENOENT)
+ return -1;
die_errno("Could not open file %s for reading",
git_path("%s", fname));
+ }
while (!strbuf_getline_lf(&line, f)) {
if (line.len && line.buf[0] == comment_line_char)
continue;
abbrev_sha1_in_line(&line);
string_list_append(lines, line.buf);
}
+ return 0;
}
static void show_rebase_information(struct wt_status *s,
struct string_list yet_to_do = STRING_LIST_INIT_DUP;
read_rebase_todolist("rebase-merge/done", &have_done);
- read_rebase_todolist("rebase-merge/git-rebase-todo", &yet_to_do);
-
+ if (read_rebase_todolist("rebase-merge/git-rebase-todo",
+ &yet_to_do))
+ status_printf_ln(s, color,
+ _("git-rebase-todo is missing."));
if (have_done.nr == 0)
status_printf_ln(s, color, _("No commands done."));
else {
if (strcmp(ce->name, it->string) || !stage)
break;
stages[stage - 1].mode = ce->ce_mode;
- hashcpy(stages[stage - 1].oid.hash, ce->oid.hash);
+ oidcpy(&stages[stage - 1].oid, &ce->oid);
sum |= (1 << (stage - 1));
}
if (sum != d->stagemask)
int require_clean_work_tree(const char *action, const char *hint, int ignore_submodules, int gently)
{
struct lock_file *lock_file = xcalloc(1, sizeof(*lock_file));
- int err = 0;
+ int err = 0, fd;
- hold_locked_index(lock_file, 0);
+ fd = hold_locked_index(lock_file, 0);
refresh_cache(REFRESH_QUIET);
- update_index_if_able(&the_index, lock_file);
+ if (0 <= fd)
+ update_index_if_able(&the_index, lock_file);
rollback_lock_file(lock_file);
if (has_unstaged_changes(ignore_submodules)) {
#define XDF_IGNORE_BLANK_LINES (1 << 7)
-#define XDF_COMPACTION_HEURISTIC (1 << 8)
-#define XDF_INDENT_HEURISTIC (1 << 9)
+#define XDF_INDENT_HEURISTIC (1 << 8)
#define XDL_EMIT_FUNCNAMES (1 << 0)
#define XDL_EMIT_FUNCCONTEXT (1 << 2)
}
-static int is_blank_line(xrecord_t *rec, long flags)
-{
- return xdl_blankline(rec->ptr, rec->size, flags);
-}
-
static int recs_match(xrecord_t *rec1, xrecord_t *rec2, long flags)
{
return (rec1->ha == rec2->ha &&
struct xdlgroup g, go;
long earliest_end, end_matching_other;
long groupsize;
- unsigned int blank_lines;
group_init(xdf, &g);
group_init(xdfo, &go);
*/
end_matching_other = -1;
- /*
- * Boolean value that records whether there are any blank
- * lines that could be made to be the last line of this
- * group.
- */
- blank_lines = 0;
-
/* Shift the group backward as much as possible: */
while (!group_slide_up(xdf, &g, flags))
if (group_previous(xdfo, &go))
/* Now shift the group forward as far as possible: */
while (1) {
- if (!blank_lines)
- blank_lines = is_blank_line(
- xdf->recs[g.end - 1],
- flags);
-
if (group_slide_down(xdf, &g, flags))
break;
if (group_next(xdfo, &go))
if (group_previous(xdfo, &go))
xdl_bug("group sync broken sliding to match");
}
- } else if ((flags & XDF_COMPACTION_HEURISTIC) && blank_lines) {
- /*
- * Compaction heuristic: if it is possible to shift the
- * group to make its bottom line a blank line, do so.
- *
- * As we already shifted the group forward as far as
- * possible in the earlier loop, we only need to handle
- * backward shifts, not forward ones.
- */
- while (!is_blank_line(xdf->recs[g.end - 1], flags)) {
- if (group_slide_up(xdf, &g, flags))
- xdl_bug("blank line disappeared");
- if (group_previous(xdfo, &go))
- xdl_bug("group sync broken sliding to blank line");
- }
} else if (flags & XDF_INDENT_HEURISTIC) {
/*
* Indent heuristic: a group of pure add/delete lines
return ha;
}
-#ifdef XDL_FAST_HASH
-
-#define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
-
-#define ONEBYTES REPEAT_BYTE(0x01)
-#define NEWLINEBYTES REPEAT_BYTE(0x0a)
-#define HIGHBITS REPEAT_BYTE(0x80)
-
-/* Return the high bit set in the first byte that is a zero */
-static inline unsigned long has_zero(unsigned long a)
-{
- return ((a - ONEBYTES) & ~a) & HIGHBITS;
-}
-
-static inline long count_masked_bytes(unsigned long mask)
-{
- if (sizeof(long) == 8) {
- /*
- * Jan Achrenius on G+: microoptimized version of
- * the simpler "(mask & ONEBYTES) * ONEBYTES >> 56"
- * that works for the bytemasks without having to
- * mask them first.
- */
- /*
- * return mask * 0x0001020304050608 >> 56;
- *
- * Doing it like this avoids warnings on 32-bit machines.
- */
- long a = (REPEAT_BYTE(0x01) / 0xff + 1);
- return mask * a >> (sizeof(long) * 7);
- } else {
- /* Carl Chatfield / Jan Achrenius G+ version for 32-bit */
- /* (000000 0000ff 00ffff ffffff) -> ( 1 1 2 3 ) */
- long a = (0x0ff0001 + mask) >> 23;
- /* Fix the 1 for 00 case */
- return a & mask;
- }
-}
-
-unsigned long xdl_hash_record(char const **data, char const *top, long flags)
-{
- unsigned long hash = 5381;
- unsigned long a = 0, mask = 0;
- char const *ptr = *data;
- char const *end = top - sizeof(unsigned long) + 1;
-
- if (flags & XDF_WHITESPACE_FLAGS)
- return xdl_hash_record_with_whitespace(data, top, flags);
-
- ptr -= sizeof(unsigned long);
- do {
- hash += hash << 5;
- hash ^= a;
- ptr += sizeof(unsigned long);
- if (ptr >= end)
- break;
- a = *(unsigned long *)ptr;
- /* Do we have any '\n' bytes in this word? */
- mask = has_zero(a ^ NEWLINEBYTES);
- } while (!mask);
-
- if (ptr >= end) {
- /*
- * There is only a partial word left at the end of the
- * buffer. Because we may work with a memory mapping,
- * we have to grab the rest byte by byte instead of
- * blindly reading it.
- *
- * To avoid problems with masking in a signed value,
- * we use an unsigned char here.
- */
- const char *p;
- for (p = top - 1; p >= ptr; p--)
- a = (a << 8) + *((const unsigned char *)p);
- mask = has_zero(a ^ NEWLINEBYTES);
- if (!mask)
- /*
- * No '\n' found in the partial word. Make a
- * mask that matches what we read.
- */
- mask = 1UL << (8 * (top - ptr) + 7);
- }
-
- /* The mask *below* the first high bit set */
- mask = (mask - 1) & ~mask;
- mask >>= 7;
- hash += hash << 5;
- hash ^= a & mask;
-
- /* Advance past the last (possibly partial) word */
- ptr += count_masked_bytes(mask);
-
- if (ptr < top) {
- assert(*ptr == '\n');
- ptr++;
- }
-
- *data = ptr;
-
- return hash;
-}
-
-#else /* XDL_FAST_HASH */
-
unsigned long xdl_hash_record(char const **data, char const *top, long flags) {
unsigned long ha = 5381;
char const *ptr = *data;
return ha;
}
-#endif /* XDL_FAST_HASH */
-
unsigned int xdl_hashbits(unsigned int size) {
unsigned int val = 1, bits = 0;