From: Junio C Hamano Date: Tue, 17 Jan 2017 22:49:26 +0000 (-0800) Subject: Merge branch 'hv/submodule-not-yet-pushed-fix' into maint X-Git-Tag: v2.11.1~61 X-Git-Url: https://www.git.lorimer.id.au/gitweb.git/diff_plain/9da9965ba6672dc0016a5ac694271bbdd4589e15?hp=250ab24ab3a35d5857855a2e00483dcd8867fdca Merge branch 'hv/submodule-not-yet-pushed-fix' into maint 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. * hv/submodule-not-yet-pushed-fix: submodule_needs_pushing(): explain the behaviour when we cannot answer batch check whether submodule needs pushing into one call serialize collection of refs that contain submodule changes serialize collection of changed submodules --- diff --git a/.gitignore b/.gitignore index 05cb58a3d4..6722f78f9a 100644 --- a/.gitignore +++ b/.gitignore @@ -203,7 +203,6 @@ /config.mak.autogen /config.mak.append /configure -/unicode /tags /TAGS /cscope* diff --git a/.travis.yml b/.travis.yml index 37a1e1fb6d..3843967a69 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,12 +27,11 @@ env: # 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 --tee" - - GIT_TEST_HTTPD=true + - GIT_TEST_OPTS="--verbose-log" - GIT_TEST_CLONE_2GB=YesPlease # t9810 occasionally fails on Travis CI OS X # t9816 occasionally fails with "TAP out of sequence errors" on Travis CI OS X @@ -57,6 +56,8 @@ before_install: - > case "${TRAVIS_OS_NAME:-linux}" in linux) + export GIT_TEST_HTTPD=YesPlease + mkdir --parents custom/p4 pushd custom/p4 wget --quiet http://filehost.perforce.com/perforce/r$LINUX_P4_VERSION/bin.linux26x86_64/p4d diff --git a/Documentation/RelNotes/2.10.2.txt b/Documentation/RelNotes/2.10.2.txt new file mode 100644 index 0000000000..c4d4397023 --- /dev/null +++ b/Documentation/RelNotes/2.10.2.txt @@ -0,0 +1,111 @@ +Git v2.10.2 Release Notes +========================= + +Fixes since v2.10.1 +------------------- + + * The code that parses the format parameter of for-each-ref command + has seen a micro-optimization. + + * The "graph" API used in "git log --graph" miscounted the number of + output columns consumed so far when drawing a padding line, which + has been fixed; this did not affect any existing code as nobody + tried to write anything after the padding on such a line, though. + + * Almost everybody uses DEFAULT_ABBREV to refer to the default + setting for the abbreviation, but "git blame" peeked into + underlying variable bypassing the macro for no good reason. + + * Doc update to clarify what "log -3 --reverse" does. + + * An author name, that spelled 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. + + * The original command line syntax for "git merge", which was "git + merge HEAD ...", has been deprecated for quite some + 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. + + * Codepaths that read from an on-disk loose object were too loose in + validating what they are reading is 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. + + * "git worktree", even though it used the default_abbrev setting that + ought to be affected by core.abbrev configuration variable, ignored + the variable setting. The command has been taught to read the + default set of configuration variables to correct this. + + * A low-level function verify_packfile() was meant to show errors + that were detected without dying itself, but under some conditions + it didn't and died instead, which has been fixed. + + * When "git fetch" tries to find where the history of the repository + it runs in has diverged from what the other side has, it has a + mechanism to avoid digging too deep into irrelevant side branches. + This however did not work well over the "smart-http" transport due + to a design bug, which has been fixed. + + * When we started cURL to talk to imap server when a new enough + version of cURL library is available, 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. + + * The ./configure script generated from configure.ac was taught how + to detect support of SSL by libcurl better. + + * http.emptyauth configuration 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 + the same when the username is explicitly set to an empty string. + + * "git clone" of a local repository can be done at the filesystem + level, but the codepath did not check errors while copying and + adjusting the file that lists alternate object stores. + + * Documentation for "git commit" was updated to clarify that "commit + -p " 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 + resolution loop forever, which has been corrected. + + * The "submodule..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..url next to + each other as if both belong to .git/config. This has been fixed. + + * Recent git allows submodule..branch to use a special token + "." instead of the branch name; the documentation has been updated + to describe it. + + * In a worktree connected to a repository elsewhere, 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 + repository. The check has been corrected to allow it. + + * "git rebase" immediately after "git clone" failed to find the fork + point from the upstream. + + * 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 + going to fetch!) exists in our repository too carefully. + + * The Travis CI configuration we ship ran the tests with --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 + 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 + tabs in it. Adjust a few of them in merge-base documentation to + work around them. + +Also contains minor documentation updates and code clean-ups. diff --git a/Documentation/RelNotes/2.10.3.txt b/Documentation/RelNotes/2.10.3.txt new file mode 100644 index 0000000000..277a2a18a7 --- /dev/null +++ b/Documentation/RelNotes/2.10.3.txt @@ -0,0 +1,48 @@ +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" 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 # 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. diff --git a/Documentation/RelNotes/2.11.0.txt b/Documentation/RelNotes/2.11.0.txt index 8608e86e4e..b7b7dd361e 100644 --- a/Documentation/RelNotes/2.11.0.txt +++ b/Documentation/RelNotes/2.11.0.txt @@ -1,11 +1,38 @@ Git 2.11 Release Notes ====================== +Backward compatibility notes. + + * An empty string used as a pathspec element has always meant + 'everything matches', but it is too easy to write a script that + finds a path to remove in $path and run 'git rm "$paht"' by + mistake (when the user meant to give "$path"), which ends up + removing everything. This release starts warning about the + use of an empty string that is used for 'everything matches' and + 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. + + * The historical argument order "git merge HEAD ..." + has been deprecated for quite some time, and will be removed in the + next release (not this one). + + * The default abbreviation length, which has historically been 7, now + scales as the repository grows, using the approximate number of + objects in the repository and a bit of math around the birthday + paradox. The logic suggests to use 12 hexdigits for the Linux + kernel, and 9 to 10 for Git itself. + + Updates since v2.10 ------------------- UI, Workflows & Features + * Comes with new version of git-gui, now at its 0.21.0 tag. + * "git format-patch --cover-letter HEAD^" to format a single patch with a separate cover letter now numbers the output as [PATCH 0/1] and [PATCH 1/1] by default. @@ -18,10 +45,10 @@ UI, Workflows & Features which was not intuitive, given that "git nosuchcommand" said "git: 'nosuchcommand' is not a git command". - * "git clone --resurse-submodules --reference $path $URL" is a way to + * "git clone --recurse-submodules --reference $path $URL" is a way to reduce network transfer cost by borrowing objects in an existing $path repository when cloning the superproject from $URL; it - learned to also peek into $path for presense of corresponding + learned to also peek into $path for presence of corresponding repositories of submodules and borrow objects from there when able. * The "git diff --submodule={short,log}" mechanism has been enhanced @@ -30,47 +57,48 @@ UI, Workflows & Features * 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" was 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 " added recently only toggled the + * "git add --chmod={+,-}x " 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. * When given an abbreviated object name that is not (or more realistically, "no longer") unique, we gave a fatal error - "ambiguous argument". This error is now accompanied by hints that - lists the objects that begins with the given prefix. During the + "ambiguous argument". This error is now accompanied by a hint that + lists the objects beginning with the given prefix. During the course of development of this new feature, numerous minor bugs were uncovered and corrected, the most notable one of which is that we gave "short SHA1 xxxx is ambiguous." twice without good reason. @@ -82,10 +110,54 @@ UI, Workflows & Features 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" to control the + order of paths to present to the end user. + + * "git diff/log --ws-error-highlight=" lacked the corresponding + configuration variable (diff.wsErrorHighlight) to set it by default. + + * "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. + + * A new credential helper that talks via "libsecret" with + implementations of XDG Secret Service API has been added to + contrib/credential/. + + * 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. + + * In addition to purely abbreviated commit object names, "gitweb" + learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787) + into clickable links in its output. + + * "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 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 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 + element in the default location of the stash, i.e. reflogs in + refs/stash. The "git stash" command learned to accept "git stash + apply 4" as a short-hand for "git stash apply stash@{4}". + Performance, Internal Implementation, Development Support etc. @@ -102,7 +174,7 @@ Performance, Internal Implementation, Development Support etc. 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. @@ -121,13 +193,13 @@ Performance, Internal Implementation, Development Support etc. 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 @@ -143,6 +215,48 @@ Performance, Internal Implementation, Development Support etc. packfile first. (merge c9af708b1a jk/pack-objects-optim-mru later to maint). + * Codepaths involved in interacting alternate object stores have + been cleaned up. + + * In order for the receiving end of "git push" to inspect the + received history and decide to reject the push, the objects sent + 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" 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 + them to the repository or purge them immediately. + + * The require_clean_work_tree() helper was recreated in C when "git + pull" was rewritten from shell; the helper is now made available to + other callers in preparation for upcoming "rebase -i" work. + + * "git upload-pack" had its code cleaned-up and performance improved + by reducing use of timestamp-ordered commit-list, which was + replaced with a priority queue. + + * "git diff --no-index" codepath has been updated not to try to peek + 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 + "rebase -i" continues. + + * Git generally does not explicitly close file descriptors that were + open in the parent process when spawning a child process, but most + of the time the child does not want to access them. As Windows does + not allow removing or renaming a file that has a file descriptor + open, a slow-to-exit child can even break the parent process by + holding onto them. Use O_CLOEXEC flag to open files in various + codepaths. + + * 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. + Also contains various documentation updates and code clean-ups. @@ -167,7 +281,7 @@ notes for details). 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 @@ -195,12 +309,12 @@ notes for details). 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 @@ -217,25 +331,23 @@ notes for details). * "git diff -W" output needs to extend the context backward to include the header line of the current function and also forward to include the body of the entire current function up to the header - line of the next one. This process may have to merge to adjacent + line of the next one. This process may have to merge two adjacent hunks, but the code forgot to do so in some cases. - (merge 45d2f75 rs/xdiff-merge-overlapping-hunks-for-W-context later to maint). - * 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. - (merge 43073f8 va/i18n later to maint). * 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 @@ -256,7 +368,6 @@ notes for details). * The pretty-format specifier "%C(auto)" used by the "log" family of commands to enable coloring of the output is taught to also issue a color-reset sequence to the output. - (merge c99ad27 rs/c-auto-resets-attributes later to maint). * A shell script example in check-ref-format documentation has been fixed. @@ -273,7 +384,6 @@ notes for details). beyond the end of the mapped region. This was fixed by introducing a regexec_buf() helper that takes a pair with REG_STARTEND extension. - (merge b7d36ff js/regexec-buf later to maint). * The procedure to build Git on Mac OS X for Travis CI hardcoded the internal directory structure we assumed HomeBrew uses, which was a @@ -287,81 +397,68 @@ notes for details). * 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 it didn't and died instead, which has been fixed. - (merge a9445d859e jk/verify-packfile-gently later to maint). * When "git fetch" tries to find where the history of the repository it runs in has diverged from what the other side has, it has a mechanism to avoid digging too deep into irrelevant side branches. This however did not work well over the "smart-http" transport due to a design bug, which has been fixed. - (merge 06b3d386e0 jt/fetch-pack-in-vain-count-with-stateless later to maint). * 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. - (merge d49028e6e7 jc/worktree-config later to maint). * "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. - (merge d21f842690 jc/verify-loose-object-header later to maint). * The original command line syntax for "git merge", which was "git merge HEAD ...", has been deprecated for quite some 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. - (merge ff65e796f0 rs/git-gui-use-modern-git-merge-syntax later to maint). - * 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. - (merge f357e5de31 kd/mailinfo-quoted-string later to maint). * Doc update to clarify what "log -3 --reverse" does. - (merge 04be69478f pb/rev-list-reverse-with-count later to maint). * Almost everybody uses DEFAULT_ABBREV to refer to the default setting for the abbreviation, but "git blame" peeked into underlying variable bypassing the macro for no good reason. - (merge 5293284b4d jc/blame-abbrev later to maint). * The "graph" API used in "git log --graph" miscounted the number of output columns consumed so far when drawing a padding line, which has been fixed; this did not affect any existing code as nobody tried to write anything after the padding on such a line, though. - (merge 1647793524 jk/graph-padding-fix later to maint). - * 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. - (merge e94ce1394e sg/ref-filter-parse-optim later to maint). - * 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. - (merge d2d07ab861 ak/curl-imap-send-explicit-scheme later to maint). * The ./configure script generated from configure.ac was taught how to detect support of SSL by libcurl better. - (merge 924b7eb1c9 dp/autoconf-curl-ssl later to maint). * The command-line completion script (in contrib/) learned to complete "git cmd ^mas" to complete the negative end of @@ -377,13 +474,120 @@ notes for details). "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). + * 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 + the same when the username is explicitly set to an empty string. + + * "git clone" of a local repository can be done at the filesystem + level, but the codepath did not check errors while copying and + adjusting the file that lists alternate object stores. + + * Documentation for "git commit" was updated to clarify that "commit + -p " adds to the current contents of the index to come up + with what to commit. + + * A stray symbolic link in the $GIT_DIR/refs/ directory could make name + resolution loop forever, which has been corrected. + + * The "submodule..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 next to submodule..url + as if both belong to .git/config. This has been fixed. + + * 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 + 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 + point from the upstream. + + * 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 + 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. + + * Recent git allows submodule..branch to use a special token + "." instead of the branch name; the documentation has been updated + to describe it. + + * "git send-email" attempts to pick up valid e-mails from the + trailers, but people in the real world write non-addresses there, like + "Cc: Stable # 4.8+", which broke the output depending + 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 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 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 formatters mishandle a displayed illustration with + tabs in it. Adjust a few of them in merge-base documentation to + work around them. + + * 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). + + * 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. + (merge bb84735c80 rs/ring-buffer-wraparound later to maint). + + * "git daemon" used fixed-length buffers to turn URLs to the + repository the client asked for into the server side directory + 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 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 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. + (merge fdf4f6c79b as/merge-attr-sleep later to maint). + + * Portability update and workaround for builds on recent Mac OS X. + (merge a296bc0132 ls/macos-update later to maint). + + * Using a %(HEAD) placeholder in "for-each-ref --format=" option + 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 the core.commentchar + configuration variable for two reasons, both of which have been + fixed. + (merge 882cd23777 js/rebase-i-commentchar-fix later to maint). + * Other minor doc, test and build updates and code cleanups. - (merge a22ae75 rs/cocci later to maint). - (merge 45ccef87b3 rs/copy-array later to maint). - (merge 8201688ecd dt/mailinfo later to maint). + (merge 5c238e29a8 jk/common-main later to maint). + (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint). + (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint). + (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint). + (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint). + (merge 28fab7b23d nd/test-helpers later to maint). + (merge c2bb0c1d1e rs/cocci later to maint). + (merge 3285b7badb ps/common-info-doc later to maint). + (merge 2b090822e8 nd/worktree-lock later to maint). + (merge 4bd488ea7c jk/create-branch-remove-unused-param later to maint). + (merge 974e0044d6 tk/diffcore-delta-remove-unused later to maint). diff --git a/Documentation/config.txt b/Documentation/config.txt index a17947462a..a0ab66aae7 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -2450,7 +2450,7 @@ rebase.missingCommitsCheck:: command in the todo-list. Defaults to "ignore". -rebase.instructionFormat +rebase.instructionFormat:: A format string, as specified in linkgit:git-log[1], to be used for the instruction list during an interactive rebase. The format will automatically have the long commit hash prepended to the format. @@ -2825,12 +2825,13 @@ stash.showStat:: option will show diffstat of the stash. Defaults to true. See description of 'show' command in linkgit:git-stash[1]. -submodule..path:: submodule..url:: - The path within this project and URL for a submodule. These - variables are initially populated by 'git submodule init'. See - linkgit:git-submodule[1] and linkgit:gitmodules[5] for - details. + The URL for a submodule. This variable is copied from the .gitmodules + file to the git config via 'git submodule init'. The user can change + the configured URL before obtaining the submodule via 'git submodule + update'. After obtaining the submodule, the presence of this variable + is used as a sign whether the submodule is of interest to git commands. + See linkgit:git-submodule[1] and linkgit:gitmodules[5] for details. submodule..update:: The default update procedure for a submodule. This variable diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt index b27a38f896..58f4bd6afa 100644 --- a/Documentation/diff-config.txt +++ b/Documentation/diff-config.txt @@ -193,3 +193,9 @@ diff.algorithm:: low-occurrence common elements". -- + + +diff.wsErrorHighlight:: + A comma separated list of `old`, `new`, `context`, that + specifies how whitespace errors on lines are highlighted + with `color.diff.whitespace`. Can be overridden by the + command line option `--ws-error-highlight=` diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index 2d77a19626..e6215c372c 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -308,6 +308,8 @@ ifndef::git-format-patch[] lines are highlighted. E.g. `--ws-error-highlight=new,old` highlights whitespace errors on both deleted and added lines. `all` can be used as a short-hand for `old,new,context`. + The `diff.wsErrorHighlight` configuration variable can be + used to specify the default behaviour. endif::git-format-patch[] @@ -570,5 +572,13 @@ endif::git-format-patch[] --line-prefix=:: Prepend an additional prefix to every line of output. +--ita-invisible-in-index:: + By default entries added by "git add -N" appear as an existing + empty file in "git diff" and a new file in "git diff --cached". + This option makes the entry appear as a new file in "git diff" + and non-existent in "git diff --cached". This option could be + reverted with `--ita-visible-in-index`. Both options are + experimental and could be removed in future. + For more detailed explanation on these common options, see also linkgit:gitdiffcore[7]. diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index b0a294d3b5..f2ab0ee2e7 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -29,7 +29,8 @@ The content to be added can be specified in several ways: 2. by using 'git rm' to remove files from the working tree and the index, again before using the 'commit' command; -3. by listing files as arguments to the 'commit' command, in which +3. by listing files as arguments to the 'commit' command + (without --interactive or --patch switch), in which case the commit will ignore changes staged in the index, and instead record the current content of the listed files (which must already be known to Git); @@ -41,7 +42,8 @@ The content to be added can be specified in several ways: actual commit; 5. by using the --interactive or --patch switches with the 'commit' command - to decide one by one which files or hunks should be part of the commit, + to decide one by one which files or hunks should be part of the commit + in addition to contents in the index, before finalizing the operation. See the ``Interactive Mode'' section of linkgit:git-add[1] to learn how to operate these modes. diff --git a/Documentation/git-count-objects.txt b/Documentation/git-count-objects.txt index 2ff35683e5..cb9b4d2e46 100644 --- a/Documentation/git-count-objects.txt +++ b/Documentation/git-count-objects.txt @@ -38,6 +38,11 @@ objects nor valid packs + size-garbage: disk space consumed by garbage files, in KiB (unless -H is specified) ++ +alternate: absolute path of alternate object databases; may appear +multiple times, one line per path. Note that if the path contains +non-printable characters, it may be surrounded by double-quotes and +contain C-style backslashed escape sequences. -H:: --human-readable:: diff --git a/Documentation/git-fmt-merge-msg.txt b/Documentation/git-fmt-merge-msg.txt index 6526b178e8..44892c447e 100644 --- a/Documentation/git-fmt-merge-msg.txt +++ b/Documentation/git-fmt-merge-msg.txt @@ -60,10 +60,10 @@ merge.summary:: EXAMPLE ------- --- +--------- $ git fetch origin master $ git fmt-merge-msg --log <$GIT_DIR/FETCH_HEAD --- +--------- Print a log message describing a merge of the "master" branch from the "origin" remote. diff --git a/Documentation/git-interpret-trailers.txt b/Documentation/git-interpret-trailers.txt index 93d1db6528..09074c75a4 100644 --- a/Documentation/git-interpret-trailers.txt +++ b/Documentation/git-interpret-trailers.txt @@ -48,19 +48,22 @@ with only spaces at the end of the commit message part, one blank line will be added before the new trailer. Existing trailers are extracted from the input message by looking for -a group of one or more lines that contain a colon (by default), where -the group is preceded by one or more empty (or whitespace-only) lines. +a group of one or more lines that (i) are all trailers, or (ii) contains at +least one Git-generated or user-configured trailer and consists of at +least 25% trailers. +The group must be preceded by one or more empty (or whitespace-only) lines. The group must either be at the end of the message or be the last non-whitespace lines before a line that starts with '---'. Such three minus signs start the patch part of the message. -When reading trailers, there can be whitespaces before and after the +When reading trailers, there can be whitespaces after the token, the separator and the value. There can also be whitespaces -inside the token and the value. +inside the token and the value. The value may be split over multiple lines with +each subsequent line starting with whitespace, like the "folding" in RFC 822. Note that 'trailers' do not follow and are not intended to follow many -rules for RFC 822 headers. For example they do not follow the line -folding rules, the encoding rules and probably many other rules. +rules for RFC 822 headers. For example they do not follow +the encoding rules and probably many other rules. OPTIONS ------- diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 0d933ac355..446209e206 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -18,7 +18,8 @@ SYNOPSIS [--exclude-per-directory=] [--exclude-standard] [--error-unmatch] [--with-tree=] - [--full-name] [--abbrev] [--] [...] + [--full-name] [--recurse-submodules] + [--abbrev] [--] [...] DESCRIPTION ----------- @@ -137,6 +138,10 @@ a space) at the start of each line: option forces paths to be output relative to the project top directory. +--recurse-submodules:: + Recursively calls ls-files on each submodule in the repository. + Currently there is only support for the --cached mode. + --abbrev[=]:: Instead of showing the full 40-byte hexadecimal object lines, show only a partial prefix. diff --git a/Documentation/git-merge-base.txt b/Documentation/git-merge-base.txt index 808426faac..b968b64c38 100644 --- a/Documentation/git-merge-base.txt +++ b/Documentation/git-merge-base.txt @@ -80,8 +80,8 @@ which is reachable from both 'A' and 'B' through the parent relationship. For example, with this topology: - o---o---o---B - / + o---o---o---B + / ---o---1---o---o---o---A the merge base between 'A' and 'B' is '1'. @@ -116,11 +116,11 @@ the best common ancestor of all commits. When the history involves criss-cross merges, there can be more than one 'best' common ancestor for two commits. For example, with this topology: - ---1---o---A - \ / - X - / \ - ---2---o---o---B + ---1---o---A + \ / + X + / \ + ---2---o---o---B both '1' and '2' are merge-bases of A and B. Neither one is better than the other (both are 'best' merge bases). When the `--all` option is not given, @@ -154,13 +154,13 @@ topic origin/master`, the history of remote-tracking branch `origin/master` may have been rewound and rebuilt, leading to a history of this shape: - o---B1 - / + o---B1 + / ---o---o---B2--o---o---o---B (origin/master) - \ - B3 - \ - Derived (topic) + \ + B3 + \ + Derived (topic) where `origin/master` used to point at commits B3, B2, B1 and now it points at B, and your `topic` branch was started on top of it back diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt index e846c2ed7f..3622d66488 100644 --- a/Documentation/git-mergetool.txt +++ b/Documentation/git-mergetool.txt @@ -79,6 +79,13 @@ success of the resolution after the custom tool has exited. Prompt before each invocation of the merge resolution program to give the user a chance to skip the path. +-O:: + Process files in the order specified in the + , which has one shell glob pattern per line. + This overrides the `diff.orderFile` configuration variable + (see linkgit:git-config[1]). To cancel `diff.orderFile`, + use `-O/dev/null`. + TEMPORARY FILES --------------- `git mergetool` creates `*.orig` backup files while resolving merges. diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt index 92df596e5f..2e9cef06e6 100644 --- a/Documentation/git-stash.txt +++ b/Documentation/git-stash.txt @@ -39,7 +39,8 @@ The latest stash you created is stored in `refs/stash`; older stashes are found in the reflog of this reference and can be named using the usual reflog syntax (e.g. `stash@{0}` is the most recently created stash, `stash@{1}` is the one before it, `stash@{2.hours.ago}` -is also possible). +is also possible). Stashes may also be referenced by specifying just the +stash index (e.g. the integer `n` is equivalent to `stash@{n}`). OPTIONS ------- diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index bf3bb372ee..d841573475 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -259,7 +259,9 @@ OPTIONS --branch:: Branch of repository to add as submodule. The name of the branch is recorded as `submodule..branch` in - `.gitmodules` for `update --remote`. + `.gitmodules` for `update --remote`. A special value of `.` is used to + indicate that the name of the branch in the submodule should be the + same name as the current branch in the current repository. -f:: --force:: diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index 7ecca8e247..80019c584b 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -253,9 +253,8 @@ On Automatic following ~~~~~~~~~~~~~~~~~~~~~~ If you are following somebody else's tree, you are most likely -using remote-tracking branches (`refs/heads/origin` in traditional -layout, or `refs/remotes/origin/master` in the separate-remote -layout). You usually want the tags from the other end. +using remote-tracking branches (eg. `refs/remotes/origin/master`). +You usually want the tags from the other end. On the other hand, if you are fetching because you would want a one-shot merge from somebody else, you typically do not want to diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt index 0aeb020d02..e257c19ebe 100644 --- a/Documentation/git-worktree.txt +++ b/Documentation/git-worktree.txt @@ -133,7 +133,7 @@ OPTIONS + If the last path components in the working tree's path is unique among working trees, it can be used to identify worktrees. For example if -you only have to working trees at "/abc/def/ghi" and "/abc/def/ggg", +you only have two working trees, at "/abc/def/ghi" and "/abc/def/ggg", then "ghi" or "def/ghi" is enough to point to the former working tree. DETAILS diff --git a/Documentation/git.txt b/Documentation/git.txt index b8bec711f4..af191c51b1 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -13,6 +13,7 @@ SYNOPSIS [--exec-path[=]] [--html-path] [--man-path] [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] [--git-dir=] [--work-tree=] [--namespace=] + [--super-prefix=] [] DESCRIPTION @@ -43,9 +44,15 @@ unreleased) version of Git, that is available from the 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v2.10.1/git.html[documentation for release 2.10.1] +* link:v2.11.0/git.html[documentation for release 2.11] * release notes for + link:RelNotes/2.11.0.txt[2.11]. + +* link:v2.10.2/git.html[documentation for release 2.10.2] + +* release notes for + link:RelNotes/2.10.2.txt[2.10.2], link:RelNotes/2.10.1.txt[2.10.1], link:RelNotes/2.10.0.txt[2.10]. @@ -602,6 +609,11 @@ foo.bar= ...`) sets `foo.bar` to the empty string. details. Equivalent to setting the `GIT_NAMESPACE` environment variable. +--super-prefix=:: + Currently for internal use only. Set a prefix which gives a path from + above a repository down to its root. One use is to give submodules + context about the superproject that invoked it. + --bare:: Treat the repository as a bare repository. If GIT_DIR environment is not set, it is set to the current working diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index 7aff940202..976243a63e 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -293,7 +293,15 @@ checkout, when the `smudge` command is specified, the command is fed the blob object from its standard input, and its standard output is used to update the worktree file. Similarly, the `clean` command is used to convert the contents of worktree file -upon checkin. +upon checkin. By default these commands process only a single +blob and terminate. If a long running `process` filter is used +in place of `clean` and/or `smudge` filters, then Git can process +all blobs with a single filter command invocation for the entire +life of a single Git command, for example `git add --all`. If a +long running `process` filter is configured then it always takes +precedence over a configured single blob filter. See section +below for the description of the protocol used to communicate with +a `process` filter. One use of the content filtering is to massage the content into a shape that is more convenient for the platform, filesystem, and the user to use. @@ -373,6 +381,153 @@ not exist, or may have different contents. So, smudge and clean commands should not try to access the file on disk, but only act as filters on the content provided to them on standard input. +Long Running Filter Process +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the filter command (a string value) is defined via +`filter..process` then Git can process all blobs with a +single filter invocation for the entire life of a single Git +command. This is achieved by using a packet format (pkt-line, +see technical/protocol-common.txt) based protocol over standard +input and standard output as follows. All packets, except for the +"*CONTENT" packets and the "0000" flush packet, are considered +text and therefore are terminated by a LF. + +Git starts the filter when it encounters the first file +that needs to be cleaned or smudged. After the filter started +Git sends a welcome message ("git-filter-client"), a list of supported +protocol version numbers, and a flush packet. Git expects to read a welcome +response message ("git-filter-server"), exactly one protocol version number +from the previously sent list, and a flush packet. All further +communication will be based on the selected version. The remaining +protocol description below documents "version=2". Please note that +"version=42" in the example below does not exist and is only there +to illustrate how the protocol would look like with more than one +version. + +After the version negotiation Git sends a list of all capabilities that +it supports and a flush packet. Git expects to read a list of desired +capabilities, which must be a subset of the supported capabilities list, +and a flush packet as response: +------------------------ +packet: git> git-filter-client +packet: git> version=2 +packet: git> version=42 +packet: git> 0000 +packet: git< git-filter-server +packet: git< version=2 +packet: git< 0000 +packet: git> capability=clean +packet: git> capability=smudge +packet: git> capability=not-yet-invented +packet: git> 0000 +packet: git< capability=clean +packet: git< capability=smudge +packet: git< 0000 +------------------------ +Supported filter capabilities in version 2 are "clean" and +"smudge". + +Afterwards Git sends a list of "key=value" pairs terminated with +a flush packet. The list will contain at least the filter command +(based on the supported capabilities) and the pathname of the file +to filter relative to the repository root. Right after the flush packet +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. +------------------------ +packet: git> command=smudge +packet: git> pathname=path/testfile.dat +packet: git> 0000 +packet: git> CONTENT +packet: git> 0000 +------------------------ + +The filter is expected to respond with a list of "key=value" pairs +terminated with a flush packet. If the filter does not experience +problems then the list must contain a "success" status. Right after +these packets the filter is expected to send the content in zero +or more pkt-line packets and a flush packet at the end. Finally, a +second list of "key=value" pairs terminated with a flush packet +is expected. The filter can change the status in the second list +or keep the status as is with an empty list. Please note that the +empty list must be terminated with a flush packet regardless. + +------------------------ +packet: git< status=success +packet: git< 0000 +packet: git< SMUDGED_CONTENT +packet: git< 0000 +packet: git< 0000 # empty list, keep "status=success" unchanged! +------------------------ + +If the result content is empty then the filter is expected to respond +with a "success" status and a flush packet to signal the empty content. +------------------------ +packet: git< status=success +packet: git< 0000 +packet: git< 0000 # empty content! +packet: git< 0000 # empty list, keep "status=success" unchanged! +------------------------ + +In case the filter cannot or does not want to process the content, +it is expected to respond with an "error" status. +------------------------ +packet: git< status=error +packet: git< 0000 +------------------------ + +If the filter experiences an error during processing, then it can +send the status "error" after the content was (partially or +completely) sent. +------------------------ +packet: git< status=success +packet: git< 0000 +packet: git< HALF_WRITTEN_ERRONEOUS_CONTENT +packet: git< 0000 +packet: git< status=error +packet: git< 0000 +------------------------ + +In case the filter cannot or does not want to process the content +as well as any future content for the lifetime of the Git process, +then it is expected to respond with an "abort" status at any point +in the protocol. +------------------------ +packet: git< status=abort +packet: git< 0000 +------------------------ + +Git neither stops nor restarts the filter process in case the +"error"/"abort" status is set. However, Git sets its exit code +according to the `filter..required` flag, mimicking the +behavior of the `filter..clean` / `filter..smudge` +mechanism. + +If the filter dies during the communication or does not adhere to +the protocol then Git will stop the filter process and restart it +with the next file that needs to be processed. Depending on the +`filter..required` flag Git will interpret that as error. + +After the filter has processed a blob it is expected to wait for +the next "key=value" list containing a command. Git will close +the command pipe on exit. The filter is expected to detect EOF +and exit gracefully on its own. Git will wait until the filter +process has stopped. + +A long running filter demo implementation can be found in +`contrib/long-running-filter/example.pl` located in the Git +core repository. If you develop your own long running filter +process then the `GIT_TRACE_PACKET` environment variables can be +very helpful for debugging (see linkgit:git[1]). + +Please note that you cannot use an existing `filter..clean` +or `filter..smudge` command with `filter..process` +because the former two use a different inter process communication +protocol than the latter one. + + Interaction between checkin/checkout attributes ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt index 10dcc08ff9..8f7c50f330 100644 --- a/Documentation/gitmodules.txt +++ b/Documentation/gitmodules.txt @@ -50,8 +50,11 @@ submodule..update:: submodule..branch:: A remote branch name for tracking updates in the upstream submodule. - If the option is not specified, it defaults to 'master'. See the - `--remote` documentation in linkgit:git-submodule[1] for details. + If the option is not specified, it defaults to 'master'. A special + value of `.` is used to indicate that the name of the branch in the + submodule should be the same name as the current branch in the + current repository. See the `--remote` documentation in + linkgit:git-submodule[1] for details. submodule..fetchRecurseSubmodules:: This option can be used to control recursive fetching of this diff --git a/Documentation/gitrepository-layout.txt b/Documentation/gitrepository-layout.txt index 577ee844e0..a5f99cbb11 100644 --- a/Documentation/gitrepository-layout.txt +++ b/Documentation/gitrepository-layout.txt @@ -177,7 +177,7 @@ sharedindex.:: info:: Additional information about the repository is recorded in this directory. This directory is ignored if $GIT_COMMON_DIR - is set and "$GIT_COMMON_DIR/index" will be used instead. + is set and "$GIT_COMMON_DIR/info" will be used instead. info/refs:: This file helps dumb transports discover what refs are diff --git a/Documentation/howto/revert-a-faulty-merge.txt b/Documentation/howto/revert-a-faulty-merge.txt index 462255ed5d..19f59cc888 100644 --- a/Documentation/howto/revert-a-faulty-merge.txt +++ b/Documentation/howto/revert-a-faulty-merge.txt @@ -30,7 +30,7 @@ The history immediately after the "revert of the merge" would look like this: ---o---o---o---M---x---x---W - / + / ---A---B where A and B are on the side development that was not so good, M is the @@ -47,7 +47,7 @@ After the developers of the side branch fix their mistakes, the history may look like this: ---o---o---o---M---x---x---W---x - / + / ---A---B-------------------C---D where C and D are to fix what was broken in A and B, and you may already @@ -81,7 +81,7 @@ In such a situation, you would want to first revert the previous revert, which would make the history look like this: ---o---o---o---M---x---x---W---x---Y - / + / ---A---B-------------------C---D where Y is the revert of W. Such a "revert of the revert" can be done @@ -93,14 +93,14 @@ This history would (ignoring possible conflicts between what W and W..Y changed) be equivalent to not having W or Y at all in the history: ---o---o---o---M---x---x-------x---- - / + / ---A---B-------------------C---D and merging the side branch again will not have conflict arising from an earlier revert and revert of the revert. ---o---o---o---M---x---x-------x-------* - / / + / / ---A---B-------------------C---D Of course the changes made in C and D still can conflict with what was @@ -111,13 +111,13 @@ faulty A and B, and redone the changes on top of the updated mainline after the revert, the history would have looked like this: ---o---o---o---M---x---x---W---x---x - / \ + / \ ---A---B A'--B'--C' If you reverted the revert in such a case as in the previous example: ---o---o---o---M---x---x---W---x---x---Y---* - / \ / + / \ / ---A---B A'--B'--C' where Y is the revert of W, A' and B' are rerolled A and B, and there may @@ -129,7 +129,7 @@ lot of overlapping changes that result in conflicts. So do not do "revert of revert" blindly without thinking.. ---o---o---o---M---x---x---W---x---x - / \ + / \ ---A---B A'--B'--C' In the history with rebased side branch, W (and M) are behind the merge diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt index a942d57f73..3bcee2ddb1 100644 --- a/Documentation/pretty-formats.txt +++ b/Documentation/pretty-formats.txt @@ -143,8 +143,14 @@ ifndef::git-rev-list[] - '%N': commit notes endif::git-rev-list[] - '%GG': raw verification message from GPG for a signed commit -- '%G?': show "G" for a good (valid) signature, "B" for a bad signature, - "U" for a good signature with unknown validity and "N" for no signature +- '%G?': show "G" for a good (valid) signature, + "B" for a bad signature, + "U" for a good signature with unknown validity, + "X" for a good signature that has expired, + "Y" for a good signature made by an expired key, + "R" for a good signature made by a revoked key, + "E" if the signature cannot be checked (e.g. missing key) + and "N" for no signature - '%GS': show the name of the signer for a signed commit - '%GK': show the key used to sign a signed commit - '%gD': reflog selector, e.g., `refs/stash@{1}` or @@ -166,7 +172,8 @@ endif::git-rev-list[] - '%Cgreen': switch color to green - '%Cblue': switch color to blue - '%Creset': reset color -- '%C(...)': color specification, as described in color.branch.* config option; +- '%C(...)': color specification, as described under Values in the + "CONFIGURATION FILE" section of linkgit:git-config[1]; adding `auto,` at the beginning will emit color only when colors are enabled for log output (by `color.diff`, `color.ui`, or `--color`, and respecting the `auto` settings of the former if we are going to a diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 55e88b02d4..520d6e66ec 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.10.0.GIT +DEF_VER=v2.11.0 LF=' ' diff --git a/Makefile b/Makefile index d15bf8de9d..f53fcc90d7 100644 --- a/Makefile +++ b/Makefile @@ -832,6 +832,7 @@ LIB_OBJS += submodule-config.o LIB_OBJS += symlinks.o LIB_OBJS += tag.o LIB_OBJS += tempfile.o +LIB_OBJS += tmp-objdir.o LIB_OBJS += trace.o LIB_OBJS += trailer.o LIB_OBJS += transport.o @@ -1046,6 +1047,7 @@ ifeq ($(uname_S),Darwin) endif endif ifndef NO_APPLE_COMMON_CRYPTO + NO_OPENSSL = YesPlease APPLE_COMMON_CRYPTO = YesPlease COMPAT_CFLAGS += -DAPPLE_COMMON_CRYPTO endif diff --git a/apply.c b/apply.c index b03d274b52..705cf562f0 100644 --- a/apply.c +++ b/apply.c @@ -122,9 +122,9 @@ int check_apply_state(struct apply_state *state, int force_apply) int is_not_gitdir = !startup_info->have_repository; if (state->apply_with_reject && state->threeway) - return error("--reject and --3way cannot be used together."); + return error(_("--reject and --3way cannot be used together.")); if (state->cached && state->threeway) - return error("--cached and --3way cannot be used together."); + return error(_("--cached and --3way cannot be used together.")); if (state->threeway) { if (is_not_gitdir) return error(_("--3way outside a repository")); @@ -1586,8 +1586,8 @@ static int find_header(struct apply_state *state, patch->new_name = xstrdup(patch->def_name); } if (!patch->is_delete && !patch->new_name) { - error("git diff header lacks filename information " - "(line %d)", state->linenr); + error(_("git diff header lacks filename information " + "(line %d)"), state->linenr); return -128; } patch->is_toplevel_relative = 1; @@ -3095,8 +3095,8 @@ static int apply_binary_fragment(struct apply_state *state, /* Binary patch is irreversible without the optional second hunk */ if (state->apply_in_reverse) { if (!fragment->next) - return error("cannot reverse-apply a binary patch " - "without the reverse hunk to '%s'", + return error(_("cannot reverse-apply a binary patch " + "without the reverse hunk to '%s'"), patch->new_name ? patch->new_name : patch->old_name); fragment = fragment->next; @@ -3141,8 +3141,8 @@ static int apply_binary(struct apply_state *state, strlen(patch->new_sha1_prefix) != 40 || get_oid_hex(patch->old_sha1_prefix, &oid) || get_oid_hex(patch->new_sha1_prefix, &oid)) - return error("cannot apply binary patch to '%s' " - "without full index line", name); + return error(_("cannot apply binary patch to '%s' " + "without full index line"), name); if (patch->old_name) { /* @@ -3151,16 +3151,16 @@ static int apply_binary(struct apply_state *state, */ hash_sha1_file(img->buf, img->len, blob_type, oid.hash); if (strcmp(oid_to_hex(&oid), patch->old_sha1_prefix)) - return error("the patch applies to '%s' (%s), " - "which does not match the " - "current contents.", + return error(_("the patch applies to '%s' (%s), " + "which does not match the " + "current contents."), name, oid_to_hex(&oid)); } else { /* Otherwise, the old one must be empty. */ if (img->len) - return error("the patch applies to an empty " - "'%s' but it is not empty", name); + return error(_("the patch applies to an empty " + "'%s' but it is not empty"), name); } get_oid_hex(patch->new_sha1_prefix, &oid); @@ -3177,8 +3177,8 @@ static int apply_binary(struct apply_state *state, result = read_sha1_file(oid.hash, &type, &size); if (!result) - return error("the necessary postimage %s for " - "'%s' cannot be read", + return error(_("the necessary postimage %s for " + "'%s' cannot be read"), patch->new_sha1_prefix, name); clear_image(img); img->buf = result; @@ -3551,10 +3551,10 @@ static int try_threeway(struct apply_state *state, write_sha1_file("", 0, blob_type, pre_oid.hash); else if (get_sha1(patch->old_sha1_prefix, pre_oid.hash) || read_blob_object(&buf, &pre_oid, patch->old_mode)) - return error("repository lacks the necessary blob to fall back on 3-way merge."); + return error(_("repository lacks the necessary blob to fall back on 3-way merge.")); if (state->apply_verbosity > verbosity_silent) - fprintf(stderr, "Falling back to three-way merge...\n"); + fprintf(stderr, _("Falling back to three-way merge...\n")); img = strbuf_detach(&buf, &len); prepare_image(&tmp_image, img, len, 1); @@ -3570,11 +3570,11 @@ static int try_threeway(struct apply_state *state, /* our_oid is ours */ if (patch->is_new) { if (load_current(state, &tmp_image, patch)) - return error("cannot read the current contents of '%s'", + return error(_("cannot read the current contents of '%s'"), patch->new_name); } else { if (load_preimage(state, &tmp_image, patch, st, ce)) - return error("cannot read the current contents of '%s'", + return error(_("cannot read the current contents of '%s'"), patch->old_name); } write_sha1_file(tmp_image.buf, tmp_image.len, blob_type, our_oid.hash); @@ -3586,7 +3586,7 @@ static int try_threeway(struct apply_state *state, if (status < 0) { if (state->apply_verbosity > verbosity_silent) fprintf(stderr, - "Failed to fall back on three-way merge...\n"); + _("Failed to fall back on three-way merge...\n")); return status; } @@ -3600,12 +3600,12 @@ static int try_threeway(struct apply_state *state, oidcpy(&patch->threeway_stage[2], &post_oid); if (state->apply_verbosity > verbosity_silent) fprintf(stderr, - "Applied patch to '%s' with conflicts.\n", + _("Applied patch to '%s' with conflicts.\n"), patch->new_name); } else { if (state->apply_verbosity > verbosity_silent) fprintf(stderr, - "Applied patch to '%s' cleanly.\n", + _("Applied patch to '%s' cleanly.\n"), patch->new_name); } return 0; @@ -4072,18 +4072,18 @@ static int build_fake_ancestor(struct apply_state *state, struct patch *list) if (!preimage_oid_in_gitlink_patch(patch, &oid)) ; /* ok, the textual part looks sane */ else - return error("sha1 information is lacking or " - "useless for submodule %s", name); + return error(_("sha1 information is lacking or " + "useless for submodule %s"), name); } else if (!get_sha1_blob(patch->old_sha1_prefix, oid.hash)) { ; /* ok */ } else if (!patch->lines_added && !patch->lines_deleted) { /* mode-only change: update the current */ if (get_current_oid(state, patch->old_name, &oid)) - return error("mode change for %s, which is not " - "in current HEAD", name); + return error(_("mode change for %s, which is not " + "in current HEAD"), name); } else - return error("sha1 information is lacking or useless " - "(%s).", name); + return error(_("sha1 information is lacking or useless " + "(%s)."), name); ce = make_cache_entry(patch->old_mode, oid.hash, name, 0, 0); if (!ce) @@ -4091,7 +4091,7 @@ static int build_fake_ancestor(struct apply_state *state, struct patch *list) name); if (add_index_entry(&result, ce, ADD_CACHE_OK_TO_ADD)) { free(ce); - return error("Could not add %s to temporary index", + return error(_("could not add %s to temporary index"), name); } } @@ -4101,7 +4101,7 @@ static int build_fake_ancestor(struct apply_state *state, struct patch *list) discard_index(&result); if (res) - return error("Could not write temporary index to %s", + return error(_("could not write temporary index to %s"), state->fake_ancestor); return 0; @@ -4869,10 +4869,12 @@ int apply_all_patches(struct apply_state *state, goto end; } if (state->applied_after_fixing_ws && state->apply) - warning("%d line%s applied after" - " fixing whitespace errors.", - state->applied_after_fixing_ws, - state->applied_after_fixing_ws == 1 ? "" : "s"); + warning(Q_("%d line applied after" + " fixing whitespace errors.", + "%d lines applied after" + " fixing whitespace errors.", + state->applied_after_fixing_ws), + state->applied_after_fixing_ws); else if (state->whitespace_error) warning(Q_("%d line adds whitespace errors.", "%d lines add whitespace errors.", diff --git a/archive.c b/archive.c index dde1ab4c79..01751e574b 100644 --- a/archive.c +++ b/archive.c @@ -504,15 +504,11 @@ static int parse_archive_args(int argc, const char **argv, } int write_archive(int argc, const char **argv, const char *prefix, - int setup_prefix, const char *name_hint, int remote) + const char *name_hint, int remote) { - int nongit = 0; const struct archiver *ar = NULL; struct archiver_args args; - if (setup_prefix && prefix == NULL) - prefix = setup_git_directory_gently(&nongit); - git_config_get_bool("uploadarchive.allowunreachable", &remote_allow_unreachable); git_config(git_default_config, NULL); @@ -520,7 +516,7 @@ int write_archive(int argc, const char **argv, const char *prefix, init_zip_archiver(); argc = parse_archive_args(argc, argv, &ar, &args, name_hint, remote); - if (nongit) { + if (!startup_info->have_repository) { /* * We know this will die() with an error, so we could just * die ourselves; but its error message will be more specific diff --git a/archive.h b/archive.h index 4a791e1fed..415e0152e2 100644 --- a/archive.h +++ b/archive.h @@ -36,7 +36,7 @@ typedef int (*write_archive_entry_fn_t)(struct archiver_args *args, unsigned int mode); extern int write_archive_entries(struct archiver_args *args, write_archive_entry_fn_t write_entry); -extern int write_archive(int argc, const char **argv, const char *prefix, int setup_prefix, const char *name_hint, int remote); +extern int write_archive(int argc, const char **argv, const char *prefix, const char *name_hint, int remote); const char *archive_format_from_filename(const char *filename); extern void *sha1_file_to_archive(const struct archiver_args *args, diff --git a/attr.c b/attr.c index eec5d7d15a..1fcf042b87 100644 --- a/attr.c +++ b/attr.c @@ -531,7 +531,11 @@ static void bootstrap_attr_stack(void) debug_push(elem); } - elem = read_attr_from_file(git_path_info_attributes(), 1); + if (startup_info->have_repository) + elem = read_attr_from_file(git_path_info_attributes(), 1); + else + elem = NULL; + if (!elem) elem = xcalloc(1, sizeof(*elem)); elem->origin = NULL; diff --git a/branch.c b/branch.c index a5a8dcbd0e..0d459b3cfe 100644 --- a/branch.c +++ b/branch.c @@ -228,8 +228,7 @@ N_("\n" "will track its remote counterpart, you may want to use\n" "\"git push -u\" to set the upstream config as you push."); -void create_branch(const char *head, - const char *name, const char *start_name, +void create_branch(const char *name, const char *start_name, int force, int reflog, int clobber_head, int quiet, enum branch_track track) { diff --git a/branch.h b/branch.h index b2f9649332..3103eb9add 100644 --- a/branch.h +++ b/branch.h @@ -4,15 +4,21 @@ /* Functions for acting on the information about branches. */ /* - * Creates a new branch, where head is the branch currently checked - * out, name is the new branch name, start_name is the name of the - * existing branch that the new branch should start from, force - * enables overwriting an existing (non-head) branch, reflog creates a - * reflog for the branch, and track causes the new branch to be - * configured to merge the remote branch that start_name is a tracking - * branch for (if any). + * Creates a new branch, where: + * + * - name is the new branch name + * + * - start_name is the name of the existing branch that the new branch should + * start from + * + * - force enables overwriting an existing (non-head) branch + * + * - reflog creates a reflog for the branch + * + * - track causes the new branch to be configured to merge the remote branch + * that start_name is a tracking branch for (if any). */ -void create_branch(const char *head, const char *name, const char *start_name, +void create_branch(const char *name, const char *start_name, int force, int reflog, int clobber_head, int quiet, enum branch_track track); diff --git a/builtin/archive.c b/builtin/archive.c index a1e3b940c2..f863465a0f 100644 --- a/builtin/archive.c +++ b/builtin/archive.c @@ -47,10 +47,10 @@ static int run_remote_archiver(int argc, const char **argv, if (name_hint) { const char *format = archive_format_from_filename(name_hint); if (format) - packet_write(fd[1], "argument --format=%s\n", format); + packet_write_fmt(fd[1], "argument --format=%s\n", format); } for (i = 1; i < argc; i++) - packet_write(fd[1], "argument %s\n", argv[i]); + packet_write_fmt(fd[1], "argument %s\n", argv[i]); packet_flush(fd[1]); buf = packet_read_line(fd[0], NULL); @@ -85,8 +85,8 @@ int cmd_archive(int argc, const char **argv, const char *prefix) const char *output = NULL; const char *remote = NULL; struct option local_opts[] = { - OPT_STRING('o', "output", &output, N_("file"), - N_("write the archive to this file")), + OPT_FILENAME('o', "output", &output, + N_("write the archive to this file")), OPT_STRING(0, "remote", &remote, N_("repo"), N_("retrieve the archive from remote repository ")), OPT_STRING(0, "exec", &exec, N_("command"), @@ -105,5 +105,5 @@ int cmd_archive(int argc, const char **argv, const char *prefix) setvbuf(stderr, NULL, _IOLBF, BUFSIZ); - return write_archive(argc, argv, prefix, 1, output, 0); + return write_archive(argc, argv, prefix, output, 0); } diff --git a/builtin/branch.c b/builtin/branch.c index d5d93a8c03..60cc5c8e8d 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -807,7 +807,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix) * create_branch takes care of setting up the tracking * info and making sure new_upstream is correct */ - create_branch(head, branch->name, new_upstream, 0, 0, 0, quiet, BRANCH_TRACK_OVERRIDE); + create_branch(branch->name, new_upstream, 0, 0, 0, quiet, BRANCH_TRACK_OVERRIDE); } else if (unset_upstream) { struct branch *branch = branch_get(argv[0]); struct strbuf buf = STRBUF_INIT; @@ -853,7 +853,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix) strbuf_release(&buf); branch_existed = ref_exists(branch->refname); - create_branch(head, argv[0], (argc == 2) ? argv[1] : head, + create_branch(argv[0], (argc == 2) ? argv[1] : head, force, reflog, 0, quiet, track); /* diff --git a/builtin/checkout.c b/builtin/checkout.c index 9b2a5b31d4..512492aad9 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -630,7 +630,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts, } } else - create_branch(old->name, opts->new_branch, new->name, + create_branch(opts->new_branch, new->name, opts->new_branch_force ? 1 : 0, opts->new_branch_log, opts->new_branch_force ? 1 : 0, diff --git a/builtin/clone.c b/builtin/clone.c index 6c80690adf..6c76a6ed66 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -351,8 +351,11 @@ static void copy_alternates(struct strbuf *src, struct strbuf *dst, continue; } abs_path = mkpathdup("%s/objects/%s", src_repo, line.buf); - normalize_path_copy(abs_path, abs_path); - add_to_alternates_file(abs_path); + if (!normalize_path_copy(abs_path, abs_path)) + add_to_alternates_file(abs_path); + else + warning("skipping invalid relative alternate: %s/%s", + src_repo, line.buf); free(abs_path); } strbuf_release(&line); diff --git a/builtin/commit.c b/builtin/commit.c index 1cba3b75c8..8976c3d29b 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -183,7 +183,7 @@ static void determine_whence(struct wt_status *s) whence = FROM_MERGE; else if (file_exists(git_path_cherry_pick_head())) { whence = FROM_CHERRY_PICK; - if (file_exists(git_path(SEQ_DIR))) + if (file_exists(git_path_seq_dir())) sequencer_in_use = 1; } else @@ -894,9 +894,14 @@ static int prepare_to_commit(const char *index_file, const char *prefix, if (amend) parent = "HEAD^1"; - if (get_sha1(parent, sha1)) - commitable = !!active_nr; - else { + if (get_sha1(parent, sha1)) { + int i, ita_nr = 0; + + for (i = 0; i < active_nr; i++) + if (ce_intent_to_add(active_cache[i])) + ita_nr++; + commitable = active_nr - ita_nr > 0; + } else { /* * Unless the user did explicitly request a submodule * ignore mode by passing a command line option we do @@ -910,7 +915,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix, if (ignore_submodule_arg && !strcmp(ignore_submodule_arg, "all")) diff_flags |= DIFF_OPT_IGNORE_SUBMODULES; - commitable = index_differs_from(parent, diff_flags); + commitable = index_differs_from(parent, diff_flags, 1); } } strbuf_release(&committer_ident); @@ -1637,7 +1642,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) const char *index_file, *reflog_msg; char *nl; unsigned char sha1[20]; - struct commit_list *parents = NULL, **pptr = &parents; + struct commit_list *parents = NULL; struct stat statbuf; struct commit *current_head = NULL; struct commit_extra_header *extra = NULL; @@ -1683,20 +1688,18 @@ int cmd_commit(int argc, const char **argv, const char *prefix) if (!reflog_msg) reflog_msg = "commit (initial)"; } else if (amend) { - struct commit_list *c; - if (!reflog_msg) reflog_msg = "commit (amend)"; - for (c = current_head->parents; c; c = c->next) - pptr = &commit_list_insert(c->item, pptr)->next; + parents = copy_commit_list(current_head->parents); } else if (whence == FROM_MERGE) { struct strbuf m = STRBUF_INIT; FILE *fp; int allow_fast_forward = 1; + struct commit_list **pptr = &parents; if (!reflog_msg) reflog_msg = "commit (merge)"; - pptr = &commit_list_insert(current_head, pptr)->next; + pptr = commit_list_append(current_head, pptr); fp = fopen(git_path_merge_head(), "r"); if (fp == NULL) die_errno(_("could not open '%s' for reading"), @@ -1707,7 +1710,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) parent = get_merge_parent(m.buf); if (!parent) die(_("Corrupt MERGE_HEAD file (%s)"), m.buf); - pptr = &commit_list_insert(parent, pptr)->next; + pptr = commit_list_append(parent, pptr); } fclose(fp); strbuf_release(&m); @@ -1724,7 +1727,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) reflog_msg = (whence == FROM_CHERRY_PICK) ? "commit (cherry-pick)" : "commit"; - pptr = &commit_list_insert(current_head, pptr)->next; + commit_list_insert(current_head, &parents); } /* Finally, get the commit message */ diff --git a/builtin/count-objects.c b/builtin/count-objects.c index ba9291944f..a04b4f2ef3 100644 --- a/builtin/count-objects.c +++ b/builtin/count-objects.c @@ -8,6 +8,7 @@ #include "dir.h" #include "builtin.h" #include "parse-options.h" +#include "quote.h" static unsigned long garbage; static off_t size_garbage; @@ -73,6 +74,14 @@ static int count_cruft(const char *basename, const char *path, void *data) return 0; } +static int print_alternate(struct alternate_object_database *alt, void *data) +{ + printf("alternate: "); + quote_c_style(alt->path, NULL, stdout, 0); + putchar('\n'); + return 0; +} + static char const * const count_objects_usage[] = { N_("git count-objects [-v] [-H | --human-readable]"), NULL @@ -88,6 +97,8 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix) OPT_END(), }; + git_config(git_default_config, NULL); + argc = parse_options(argc, argv, prefix, opts, count_objects_usage, 0); /* we do not take arguments other than flags for now */ if (argc) @@ -140,6 +151,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix) printf("prune-packable: %lu\n", packed_loose); printf("garbage: %lu\n", garbage); printf("size-garbage: %s\n", garbage_buf.buf); + foreach_alt_odb(print_alternate, NULL); strbuf_release(&loose_buf); strbuf_release(&pack_buf); strbuf_release(&garbage_buf); diff --git a/builtin/fetch.c b/builtin/fetch.c index d5329f915e..b6a5597cbf 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -241,9 +241,10 @@ static void find_non_local_tags(struct transport *transport, * as one to ignore by setting util to NULL. */ if (ends_with(ref->name, "^{}")) { - if (item && !has_object_file(&ref->old_oid) && + if (item && + !has_object_file_with_flags(&ref->old_oid, HAS_SHA1_QUICK) && !will_fetch(head, ref->old_oid.hash) && - !has_sha1_file(item->util) && + !has_sha1_file_with_flags(item->util, HAS_SHA1_QUICK) && !will_fetch(head, item->util)) item->util = NULL; item = NULL; @@ -256,7 +257,8 @@ static void find_non_local_tags(struct transport *transport, * to check if it is a lightweight tag that we want to * fetch. */ - if (item && !has_sha1_file(item->util) && + if (item && + !has_sha1_file_with_flags(item->util, HAS_SHA1_QUICK) && !will_fetch(head, item->util)) item->util = NULL; @@ -276,7 +278,8 @@ static void find_non_local_tags(struct transport *transport, * We may have a final lightweight tag that needs to be * checked to see if it needs fetching. */ - if (item && !has_sha1_file(item->util) && + if (item && + !has_sha1_file_with_flags(item->util, HAS_SHA1_QUICK) && !will_fetch(head, item->util)) item->util = NULL; @@ -574,9 +577,12 @@ static void print_compact(struct strbuf *display, static void format_display(struct strbuf *display, char code, const char *summary, const char *error, - const char *remote, const char *local) + const char *remote, const char *local, + int summary_width) { - strbuf_addf(display, "%c %-*s ", code, TRANSPORT_SUMMARY(summary)); + int width = (summary_width + strlen(summary) - gettext_width(summary)); + + strbuf_addf(display, "%c %-*s ", code, width, summary); if (!compact_format) print_remote_to_local(display, remote, local); else @@ -588,7 +594,8 @@ static void format_display(struct strbuf *display, char code, static int update_local_ref(struct ref *ref, const char *remote, const struct ref *remote_ref, - struct strbuf *display) + struct strbuf *display, + int summary_width) { struct commit *current = NULL, *updated; enum object_type type; @@ -602,7 +609,7 @@ static int update_local_ref(struct ref *ref, if (!oidcmp(&ref->old_oid, &ref->new_oid)) { if (verbosity > 0) format_display(display, '=', _("[up to date]"), NULL, - remote, pretty_ref); + remote, pretty_ref, summary_width); return 0; } @@ -616,7 +623,7 @@ static int update_local_ref(struct ref *ref, */ format_display(display, '!', _("[rejected]"), _("can't fetch in current branch"), - remote, pretty_ref); + remote, pretty_ref, summary_width); return 1; } @@ -626,7 +633,7 @@ static int update_local_ref(struct ref *ref, r = s_update_ref("updating tag", ref, 0); format_display(display, r ? '!' : 't', _("[tag update]"), r ? _("unable to update local ref") : NULL, - remote, pretty_ref); + remote, pretty_ref, summary_width); return r; } @@ -659,7 +666,7 @@ static int update_local_ref(struct ref *ref, r = s_update_ref(msg, ref, 0); format_display(display, r ? '!' : '*', what, r ? _("unable to update local ref") : NULL, - remote, pretty_ref); + remote, pretty_ref, summary_width); return r; } @@ -675,7 +682,7 @@ static int update_local_ref(struct ref *ref, r = s_update_ref("fast-forward", ref, 1); format_display(display, r ? '!' : ' ', quickref.buf, r ? _("unable to update local ref") : NULL, - remote, pretty_ref); + remote, pretty_ref, summary_width); strbuf_release(&quickref); return r; } else if (force || ref->force) { @@ -690,12 +697,12 @@ static int update_local_ref(struct ref *ref, r = s_update_ref("forced-update", ref, 1); format_display(display, r ? '!' : '+', quickref.buf, r ? _("unable to update local ref") : _("forced update"), - remote, pretty_ref); + remote, pretty_ref, summary_width); strbuf_release(&quickref); return r; } else { format_display(display, '!', _("[rejected]"), _("non-fast-forward"), - remote, pretty_ref); + remote, pretty_ref, summary_width); return 1; } } @@ -726,6 +733,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name, char *url; const char *filename = dry_run ? "/dev/null" : git_path_fetch_head(); int want_status; + int summary_width = transport_summary_width(ref_map); fp = fopen(filename, "a"); if (!fp) @@ -835,13 +843,14 @@ static int store_updated_refs(const char *raw_url, const char *remote_name, strbuf_reset(¬e); if (ref) { - rc |= update_local_ref(ref, what, rm, ¬e); + rc |= update_local_ref(ref, what, rm, ¬e, + summary_width); free(ref); } else format_display(¬e, '*', *kind ? kind : "branch", NULL, *what ? what : "HEAD", - "FETCH_HEAD"); + "FETCH_HEAD", summary_width); if (note.len) { if (verbosity >= 0 && !shown_url) { fprintf(stderr, _("From %.*s\n"), @@ -908,6 +917,7 @@ static int prune_refs(struct refspec *refs, int ref_count, struct ref *ref_map, int url_len, i, result = 0; struct ref *ref, *stale_refs = get_stale_heads(refs, ref_count, ref_map); char *url; + int summary_width = transport_summary_width(stale_refs); const char *dangling_msg = dry_run ? _(" (%s will become dangling)") : _(" (%s has become dangling)"); @@ -943,7 +953,8 @@ static int prune_refs(struct refspec *refs, int ref_count, struct ref *ref_map, shown_url = 1; } format_display(&sb, '-', _("[deleted]"), NULL, - _("(none)"), prettify_refname(ref->name)); + _("(none)"), prettify_refname(ref->name), + summary_width); fprintf(stderr, " %s\n",sb.buf); strbuf_release(&sb); warn_dangling_symref(stderr, dangling_msg, ref->name); diff --git a/builtin/fsck.c b/builtin/fsck.c index 055dfdcf9e..f01b81eebf 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -644,14 +644,8 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) fsck_object_dir(get_object_directory()); prepare_alt_odb(); - for (alt = alt_odb_list; alt; alt = alt->next) { - /* directory name, minus trailing slash */ - size_t namelen = alt->name - alt->base - 1; - struct strbuf name = STRBUF_INIT; - strbuf_add(&name, alt->base, namelen); - fsck_object_dir(name.buf); - strbuf_release(&name); - } + for (alt = alt_odb_list; alt; alt = alt->next) + fsck_object_dir(alt->path); } if (check_full) { diff --git a/builtin/ls-files.c b/builtin/ls-files.c index 197f153f50..1592290815 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -14,6 +14,7 @@ #include "resolve-undo.h" #include "string-list.h" #include "pathspec.h" +#include "run-command.h" static int abbrev; static int show_deleted; @@ -28,8 +29,11 @@ static int show_valid_bit; static int line_terminator = '\n'; static int debug_mode; static int show_eol; +static int recurse_submodules; +static struct argv_array submodules_options = ARGV_ARRAY_INIT; static const char *prefix; +static const char *super_prefix; static int max_prefix_len; static int prefix_len; static struct pathspec pathspec; @@ -67,12 +71,25 @@ static void write_eolinfo(const struct cache_entry *ce, const char *path) static void write_name(const char *name) { + /* + * Prepend the super_prefix to name to construct the full_name to be + * written. + */ + struct strbuf full_name = STRBUF_INIT; + if (super_prefix) { + strbuf_addstr(&full_name, super_prefix); + strbuf_addstr(&full_name, name); + name = full_name.buf; + } + /* * With "--full-name", prefix_len=0; this caller needs to pass * an empty string in that case (a NULL is good for ""). */ write_name_quoted_relative(name, prefix_len ? prefix : NULL, stdout, line_terminator); + + strbuf_release(&full_name); } static void show_dir_entry(const char *tag, struct dir_entry *ent) @@ -152,55 +169,117 @@ static void show_killed_files(struct dir_struct *dir) } } +/* + * Compile an argv_array with all of the options supported by --recurse_submodules + */ +static void compile_submodule_options(const struct dir_struct *dir, int show_tag) +{ + if (line_terminator == '\0') + argv_array_push(&submodules_options, "-z"); + if (show_tag) + argv_array_push(&submodules_options, "-t"); + if (show_valid_bit) + argv_array_push(&submodules_options, "-v"); + if (show_cached) + argv_array_push(&submodules_options, "--cached"); + if (show_eol) + argv_array_push(&submodules_options, "--eol"); + if (debug_mode) + argv_array_push(&submodules_options, "--debug"); +} + +/** + * Recursively call ls-files on a submodule + */ +static void show_gitlink(const struct cache_entry *ce) +{ + struct child_process cp = CHILD_PROCESS_INIT; + int status; + int i; + + argv_array_pushf(&cp.args, "--super-prefix=%s%s/", + super_prefix ? super_prefix : "", + ce->name); + argv_array_push(&cp.args, "ls-files"); + argv_array_push(&cp.args, "--recurse-submodules"); + + /* add supported options */ + argv_array_pushv(&cp.args, submodules_options.argv); + + /* + * Pass in the original pathspec args. The submodule will be + * responsible for prepending the 'submodule_prefix' prior to comparing + * against the pathspec for matches. + */ + argv_array_push(&cp.args, "--"); + for (i = 0; i < pathspec.nr; i++) + argv_array_push(&cp.args, pathspec.items[i].original); + + cp.git_cmd = 1; + cp.dir = ce->name; + status = run_command(&cp); + if (status) + exit(status); +} + static void show_ce_entry(const char *tag, const struct cache_entry *ce) { + struct strbuf name = STRBUF_INIT; int len = max_prefix_len; + if (super_prefix) + strbuf_addstr(&name, super_prefix); + strbuf_addstr(&name, ce->name); if (len >= ce_namelen(ce)) die("git ls-files: internal error - cache entry not superset of prefix"); - if (!match_pathspec(&pathspec, ce->name, ce_namelen(ce), - len, ps_matched, - S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode))) - return; + if (recurse_submodules && S_ISGITLINK(ce->ce_mode) && + submodule_path_match(&pathspec, name.buf, ps_matched)) { + show_gitlink(ce); + } else if (match_pathspec(&pathspec, name.buf, name.len, + len, ps_matched, + S_ISDIR(ce->ce_mode) || + S_ISGITLINK(ce->ce_mode))) { + if (tag && *tag && show_valid_bit && + (ce->ce_flags & CE_VALID)) { + static char alttag[4]; + memcpy(alttag, tag, 3); + if (isalpha(tag[0])) + alttag[0] = tolower(tag[0]); + else if (tag[0] == '?') + alttag[0] = '!'; + else { + alttag[0] = 'v'; + alttag[1] = tag[0]; + alttag[2] = ' '; + alttag[3] = 0; + } + tag = alttag; + } - if (tag && *tag && show_valid_bit && - (ce->ce_flags & CE_VALID)) { - static char alttag[4]; - memcpy(alttag, tag, 3); - if (isalpha(tag[0])) - alttag[0] = tolower(tag[0]); - else if (tag[0] == '?') - alttag[0] = '!'; - else { - alttag[0] = 'v'; - alttag[1] = tag[0]; - alttag[2] = ' '; - alttag[3] = 0; + if (!show_stage) { + fputs(tag, stdout); + } else { + printf("%s%06o %s %d\t", + tag, + ce->ce_mode, + find_unique_abbrev(ce->oid.hash, abbrev), + ce_stage(ce)); + } + write_eolinfo(ce, ce->name); + write_name(ce->name); + if (debug_mode) { + const struct stat_data *sd = &ce->ce_stat_data; + + printf(" ctime: %d:%d\n", sd->sd_ctime.sec, sd->sd_ctime.nsec); + printf(" mtime: %d:%d\n", sd->sd_mtime.sec, sd->sd_mtime.nsec); + printf(" dev: %d\tino: %d\n", sd->sd_dev, sd->sd_ino); + printf(" uid: %d\tgid: %d\n", sd->sd_uid, sd->sd_gid); + printf(" size: %d\tflags: %x\n", sd->sd_size, ce->ce_flags); } - tag = alttag; } - if (!show_stage) { - fputs(tag, stdout); - } else { - printf("%s%06o %s %d\t", - tag, - ce->ce_mode, - find_unique_abbrev(ce->oid.hash,abbrev), - ce_stage(ce)); - } - write_eolinfo(ce, ce->name); - write_name(ce->name); - if (debug_mode) { - const struct stat_data *sd = &ce->ce_stat_data; - - printf(" ctime: %d:%d\n", sd->sd_ctime.sec, sd->sd_ctime.nsec); - printf(" mtime: %d:%d\n", sd->sd_mtime.sec, sd->sd_mtime.nsec); - printf(" dev: %d\tino: %d\n", sd->sd_dev, sd->sd_ino); - printf(" uid: %d\tgid: %d\n", sd->sd_uid, sd->sd_gid); - printf(" size: %d\tflags: %x\n", sd->sd_size, ce->ce_flags); - } + strbuf_release(&name); } static void show_ru_info(void) @@ -468,6 +547,8 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) { OPTION_SET_INT, 0, "full-name", &prefix_len, NULL, N_("make the output relative to the project top directory"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL }, + OPT_BOOL(0, "recurse-submodules", &recurse_submodules, + N_("recurse through submodules")), OPT_BOOL(0, "error-unmatch", &error_unmatch, N_("if any is not in the index, treat this as an error")), OPT_STRING(0, "with-tree", &with_tree, N_("tree-ish"), @@ -484,6 +565,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) prefix = cmd_prefix; if (prefix) prefix_len = strlen(prefix); + super_prefix = get_super_prefix(); git_config(git_default_config, NULL); if (read_cache() < 0) @@ -519,13 +601,32 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) if (require_work_tree && !is_inside_work_tree()) setup_work_tree(); + if (recurse_submodules) + compile_submodule_options(&dir, show_tag); + + if (recurse_submodules && + (show_stage || show_deleted || show_others || show_unmerged || + show_killed || show_modified || show_resolve_undo || with_tree)) + die("ls-files --recurse-submodules unsupported mode"); + + if (recurse_submodules && error_unmatch) + die("ls-files --recurse-submodules does not support " + "--error-unmatch"); + parse_pathspec(&pathspec, 0, PATHSPEC_PREFER_CWD | PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP, prefix, argv); - /* Find common prefix for all pathspec's */ - max_prefix = common_prefix(&pathspec); + /* + * Find common prefix for all pathspec's + * This is used as a performance optimization which unfortunately cannot + * be done when recursing into submodules + */ + if (recurse_submodules) + max_prefix = NULL; + else + max_prefix = common_prefix(&pathspec); max_prefix_len = max_prefix ? strlen(max_prefix) : 0; /* Treat unmatching pathspec elements as errors */ diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c index f6df274111..e3b62f2fc7 100644 --- a/builtin/mailinfo.c +++ b/builtin/mailinfo.c @@ -11,15 +11,20 @@ static const char mailinfo_usage[] = "git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding= | -n] [--scissors | --no-scissors] < mail >info"; +static char *prefix_copy(const char *prefix, const char *filename) +{ + if (!prefix || is_absolute_path(filename)) + return xstrdup(filename); + return xstrdup(prefix_filename(prefix, strlen(prefix), filename)); +} + int cmd_mailinfo(int argc, const char **argv, const char *prefix) { const char *def_charset; struct mailinfo mi; int status; + char *msgfile, *patchfile; - /* NEEDSWORK: might want to do the optional .git/ directory - * discovery - */ setup_mailinfo(&mi); def_charset = get_commit_output_encoding(); @@ -54,8 +59,14 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) mi.input = stdin; mi.output = stdout; - status = !!mailinfo(&mi, argv[1], argv[2]); + + msgfile = prefix_copy(prefix, argv[1]); + patchfile = prefix_copy(prefix, argv[2]); + + status = !!mailinfo(&mi, msgfile, patchfile); clear_mailinfo(&mi); + free(msgfile); + free(patchfile); return status; } diff --git a/builtin/merge-base.c b/builtin/merge-base.c index c0d1822eb3..b572a37c26 100644 --- a/builtin/merge-base.c +++ b/builtin/merge-base.c @@ -173,6 +173,9 @@ static int handle_fork_point(int argc, const char **argv) revs.initial = 1; for_each_reflog_ent(refname, collect_one_reflog_ent, &revs); + if (!revs.nr && !get_sha1(refname, sha1)) + add_one_commit(sha1, &revs); + for (i = 0; i < revs.nr; i++) revs.commit[i]->object.flags &= ~TMP_MARK; diff --git a/builtin/merge.c b/builtin/merge.c index a8b57c7d98..b65eeaa87d 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1374,12 +1374,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix) struct commit *commit; if (verbosity >= 0) { - char from[GIT_SHA1_HEXSZ + 1], to[GIT_SHA1_HEXSZ + 1]; - find_unique_abbrev_r(from, head_commit->object.oid.hash, - DEFAULT_ABBREV); - find_unique_abbrev_r(to, remoteheads->item->object.oid.hash, - DEFAULT_ABBREV); - printf(_("Updating %s..%s\n"), from, to); + printf(_("Updating %s..%s\n"), + find_unique_abbrev(head_commit->object.oid.hash, + DEFAULT_ABBREV), + find_unique_abbrev(remoteheads->item->object.oid.hash, + DEFAULT_ABBREV)); } strbuf_addstr(&msg, "Fast-forward"); if (have_message) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 1e7c2a98a5..0fd52bd6b4 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -720,7 +720,7 @@ static off_t write_reused_pack(struct sha1file *f) if (!is_pack_valid(reuse_packfile)) die("packfile is invalid: %s", reuse_packfile->pack_name); - fd = git_open_noatime(reuse_packfile->pack_name); + fd = git_open(reuse_packfile->pack_name); if (fd < 0) die_errno("unable to open packfile for reuse: %s", reuse_packfile->pack_name); diff --git a/builtin/pull.c b/builtin/pull.c index 398aae16c0..d6e46ee6d0 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -17,6 +17,7 @@ #include "revision.h" #include "tempfile.h" #include "lockfile.h" +#include "wt-status.h" enum rebase_type { REBASE_INVALID = -1, @@ -325,73 +326,6 @@ static int git_pull_config(const char *var, const char *value, void *cb) return git_default_config(var, value, cb); } -/** - * Returns 1 if there are unstaged changes, 0 otherwise. - */ -static int has_unstaged_changes(const char *prefix) -{ - struct rev_info rev_info; - int result; - - init_revisions(&rev_info, prefix); - DIFF_OPT_SET(&rev_info.diffopt, IGNORE_SUBMODULES); - DIFF_OPT_SET(&rev_info.diffopt, QUICK); - diff_setup_done(&rev_info.diffopt); - result = run_diff_files(&rev_info, 0); - return diff_result_code(&rev_info.diffopt, result); -} - -/** - * Returns 1 if there are uncommitted changes, 0 otherwise. - */ -static int has_uncommitted_changes(const char *prefix) -{ - struct rev_info rev_info; - int result; - - if (is_cache_unborn()) - return 0; - - init_revisions(&rev_info, prefix); - DIFF_OPT_SET(&rev_info.diffopt, IGNORE_SUBMODULES); - DIFF_OPT_SET(&rev_info.diffopt, QUICK); - add_head_to_pending(&rev_info); - diff_setup_done(&rev_info.diffopt); - result = run_diff_index(&rev_info, 1); - return diff_result_code(&rev_info.diffopt, result); -} - -/** - * If the work tree has unstaged or uncommitted changes, dies with the - * appropriate message. - */ -static void die_on_unclean_work_tree(const char *prefix) -{ - struct lock_file *lock_file = xcalloc(1, sizeof(*lock_file)); - int do_die = 0; - - hold_locked_index(lock_file, 0); - refresh_cache(REFRESH_QUIET); - update_index_if_able(&the_index, lock_file); - rollback_lock_file(lock_file); - - if (has_unstaged_changes(prefix)) { - error(_("Cannot pull with rebase: You have unstaged changes.")); - do_die = 1; - } - - if (has_uncommitted_changes(prefix)) { - if (do_die) - error(_("Additionally, your index contains uncommitted changes.")); - else - error(_("Cannot pull with rebase: Your index contains uncommitted changes.")); - do_die = 1; - } - - if (do_die) - exit(1); -} - /** * Appends merge candidates from FETCH_HEAD that are not marked not-for-merge * into merge_heads. @@ -875,7 +809,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix) die(_("Updating an unborn branch with changes added to the index.")); if (!autostash) - die_on_unclean_work_tree(prefix); + require_clean_work_tree(N_("pull with rebase"), + _("please commit or stash them."), 1, 0); if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs)) hashclr(rebase_fork_point); diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index f7cd180252..e6b3879a5b 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -20,6 +20,7 @@ #include "gpg-interface.h" #include "sigchain.h" #include "fsck.h" +#include "tmp-objdir.h" static const char * const receive_pack_usage[] = { N_("git receive-pack "), @@ -86,6 +87,8 @@ static enum { } use_keepalive; static int keepalive_in_sec = 5; +static struct tmp_objdir *tmp_objdir; + static enum deny_action parse_deny_action(const char *var, const char *value) { if (value) { @@ -224,7 +227,7 @@ static int receive_pack_config(const char *var, const char *value, void *cb) static void show_ref(const char *path, const unsigned char *sha1) { if (sent_capabilities) { - packet_write(1, "%s %s\n", sha1_to_hex(sha1), path); + packet_write_fmt(1, "%s %s\n", sha1_to_hex(sha1), path); } else { struct strbuf cap = STRBUF_INIT; @@ -239,7 +242,7 @@ static void show_ref(const char *path, const unsigned char *sha1) if (advertise_push_options) strbuf_addstr(&cap, " push-options"); strbuf_addf(&cap, " agent=%s", git_user_agent_sanitized()); - packet_write(1, "%s %s%c%s\n", + packet_write_fmt(1, "%s %s%c%s\n", sha1_to_hex(sha1), path, 0, cap.buf); strbuf_release(&cap); sent_capabilities = 1; @@ -664,6 +667,9 @@ static int run_and_feed_hook(const char *hook_name, feed_fn feed, } else argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT"); + if (tmp_objdir) + argv_array_pushv(&proc.env_array, tmp_objdir_env(tmp_objdir)); + if (use_sideband) { memset(&muxer, 0, sizeof(muxer)); muxer.proc = copy_to_sideband; @@ -763,6 +769,7 @@ static int run_update_hook(struct command *cmd) proc.stdout_to_stderr = 1; proc.err = use_sideband ? -1 : 0; proc.argv = argv; + proc.env = tmp_objdir_env(tmp_objdir); code = start_command(&proc); if (code) @@ -834,6 +841,7 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si) !delayed_reachability_test(si, i)) sha1_array_append(&extra, si->shallow->sha1[i]); + opt.env = tmp_objdir_env(tmp_objdir); setup_alternate_shallow(&shallow_lock, &opt.shallow_file, &extra); if (check_connected(command_singleton_iterator, cmd, &opt)) { rollback_lock_file(&shallow_lock); @@ -1155,10 +1163,6 @@ static void check_aliased_update(struct command *cmd, struct string_list *list) struct string_list_item *item; struct command *dst_cmd; unsigned char sha1[GIT_SHA1_RAWSZ]; - char cmd_oldh[GIT_SHA1_HEXSZ + 1], - cmd_newh[GIT_SHA1_HEXSZ + 1], - dst_oldh[GIT_SHA1_HEXSZ + 1], - dst_newh[GIT_SHA1_HEXSZ + 1]; int flag; strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name); @@ -1189,14 +1193,14 @@ static void check_aliased_update(struct command *cmd, struct string_list *list) dst_cmd->skip_update = 1; - find_unique_abbrev_r(cmd_oldh, cmd->old_sha1, DEFAULT_ABBREV); - find_unique_abbrev_r(cmd_newh, cmd->new_sha1, DEFAULT_ABBREV); - find_unique_abbrev_r(dst_oldh, dst_cmd->old_sha1, DEFAULT_ABBREV); - find_unique_abbrev_r(dst_newh, dst_cmd->new_sha1, DEFAULT_ABBREV); rp_error("refusing inconsistent update between symref '%s' (%s..%s) and" " its target '%s' (%s..%s)", - cmd->ref_name, cmd_oldh, cmd_newh, - dst_cmd->ref_name, dst_oldh, dst_newh); + cmd->ref_name, + find_unique_abbrev(cmd->old_sha1, DEFAULT_ABBREV), + find_unique_abbrev(cmd->new_sha1, DEFAULT_ABBREV), + dst_cmd->ref_name, + find_unique_abbrev(dst_cmd->old_sha1, DEFAULT_ABBREV), + find_unique_abbrev(dst_cmd->new_sha1, DEFAULT_ABBREV)); cmd->error_string = dst_cmd->error_string = "inconsistent aliased update"; @@ -1241,12 +1245,17 @@ static void set_connectivity_errors(struct command *commands, for (cmd = commands; cmd; cmd = cmd->next) { struct command *singleton = cmd; + struct check_connected_options opt = CHECK_CONNECTED_INIT; + if (shallow_update && si->shallow_ref[cmd->index]) /* to be checked in update_shallow_ref() */ continue; + + opt.env = tmp_objdir_env(tmp_objdir); if (!check_connected(command_singleton_iterator, &singleton, - NULL)) + &opt)) continue; + cmd->error_string = "missing necessary objects"; } } @@ -1429,6 +1438,7 @@ static void execute_commands(struct command *commands, data.si = si; opt.err_fd = err_fd; opt.progress = err_fd && !quiet; + opt.env = tmp_objdir_env(tmp_objdir); if (check_connected(iterate_receive_command_list, &data, &opt)) set_connectivity_errors(commands, si); @@ -1445,6 +1455,19 @@ static void execute_commands(struct command *commands, return; } + /* + * Now we'll start writing out refs, which means the objects need + * to be in their final positions so that other processes can see them. + */ + if (tmp_objdir_migrate(tmp_objdir) < 0) { + for (cmd = commands; cmd; cmd = cmd->next) { + if (!cmd->error_string) + cmd->error_string = "unable to migrate objects to permanent storage"; + } + return; + } + tmp_objdir = NULL; + check_aliased_updates(commands); free(head_name_to_free); @@ -1640,6 +1663,18 @@ static const char *unpack(int err_fd, struct shallow_info *si) argv_array_push(&child.args, alt_shallow_file); } + tmp_objdir = tmp_objdir_create(); + if (!tmp_objdir) + return "unable to create temporary object directory"; + child.env = tmp_objdir_env(tmp_objdir); + + /* + * Normally we just pass the tmp_objdir environment to the child + * processes that do the heavy lifting, but we may need to see these + * objects ourselves to set up shallow information. + */ + tmp_objdir_add_as_alternate(tmp_objdir); + if (ntohl(hdr.hdr_entries) < unpack_limit) { argv_array_pushl(&child.args, "unpack-objects", hdr_arg, NULL); if (quiet) diff --git a/builtin/remote-ext.c b/builtin/remote-ext.c index 88eb8f9013..11b48bfb41 100644 --- a/builtin/remote-ext.c +++ b/builtin/remote-ext.c @@ -128,9 +128,9 @@ static void send_git_request(int stdin_fd, const char *serv, const char *repo, const char *vhost) { if (!vhost) - packet_write(stdin_fd, "%s %s%c", serv, repo, 0); + packet_write_fmt(stdin_fd, "%s %s%c", serv, repo, 0); else - packet_write(stdin_fd, "%s %s%chost=%s%c", serv, repo, 0, + packet_write_fmt(stdin_fd, "%s %s%chost=%s%c", serv, repo, 0, vhost, 0); } diff --git a/builtin/reset.c b/builtin/reset.c index 5aa86079d3..c04ac076dc 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -24,7 +24,7 @@ static const char * const git_reset_usage[] = { N_("git reset [--mixed | --soft | --hard | --merge | --keep] [-q] []"), - N_("git reset [-q] [--] ..."), + N_("git reset [-q] [] [--] ..."), N_("git reset --patch [] [--] [...]"), NULL }; diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 8479f6ed28..c43decda70 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -145,7 +145,7 @@ static void show_commit(struct commit *commit, void *data) */ if (buf.len && buf.buf[buf.len - 1] == '\n') graph_show_padding(revs->graph); - putchar('\n'); + putchar(info->hdr_termination); } else { /* * If the message buffer is empty, just show diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 4da1f1da25..ff13e59e1d 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -342,11 +342,16 @@ static int try_parent_shorthands(const char *arg) 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 = '^'; @@ -671,8 +676,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) filter &= ~(DO_FLAGS|DO_NOREV); verify = 1; abbrev = DEFAULT_ABBREV; - if (arg[7] == '=') - abbrev = strtoul(arg + 8, NULL, 10); + if (!arg[7]) + continue; + abbrev = strtoul(arg + 8, NULL, 10); if (abbrev < MINIMUM_ABBREV) abbrev = MINIMUM_ABBREV; else if (40 <= abbrev) diff --git a/builtin/revert.c b/builtin/revert.c index 4e693808b1..4ca5b51544 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -71,7 +71,7 @@ static void verify_opt_compatible(const char *me, const char *base_opt, ...) die(_("%s: %s cannot be used with %s"), me, this_opt, base_opt); } -static void parse_args(int argc, const char **argv, struct replay_opts *opts) +static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) { const char * const * usage_str = revert_or_cherry_pick_usage(opts); const char *me = action_name(opts); @@ -115,25 +115,15 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) if (opts->keep_redundant_commits) opts->allow_empty = 1; - /* Set the subcommand */ - if (cmd == 'q') - opts->subcommand = REPLAY_REMOVE_STATE; - else if (cmd == 'c') - opts->subcommand = REPLAY_CONTINUE; - else if (cmd == 'a') - opts->subcommand = REPLAY_ROLLBACK; - else - opts->subcommand = REPLAY_NONE; - /* Check for incompatible command line arguments */ - if (opts->subcommand != REPLAY_NONE) { + if (cmd) { char *this_operation; - if (opts->subcommand == REPLAY_REMOVE_STATE) + if (cmd == 'q') this_operation = "--quit"; - else if (opts->subcommand == REPLAY_CONTINUE) + else if (cmd == 'c') this_operation = "--continue"; else { - assert(opts->subcommand == REPLAY_ROLLBACK); + assert(cmd == 'a'); this_operation = "--abort"; } @@ -156,7 +146,7 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) "--edit", opts->edit, NULL); - if (opts->subcommand != REPLAY_NONE) { + if (cmd) { opts->revs = NULL; } else { struct setup_revision_opt s_r_opt; @@ -174,20 +164,30 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) if (argc > 1) usage_with_options(usage_str, options); + + /* These option values will be free()d */ + opts->gpg_sign = xstrdup_or_null(opts->gpg_sign); + opts->strategy = xstrdup_or_null(opts->strategy); + + if (cmd == 'q') + return sequencer_remove_state(opts); + if (cmd == 'c') + return sequencer_continue(opts); + if (cmd == 'a') + return sequencer_rollback(opts); + return sequencer_pick_revisions(opts); } int cmd_revert(int argc, const char **argv, const char *prefix) { - struct replay_opts opts; + struct replay_opts opts = REPLAY_OPTS_INIT; int res; - memset(&opts, 0, sizeof(opts)); if (isatty(0)) opts.edit = 1; opts.action = REPLAY_REVERT; git_config(git_default_config, NULL); - parse_args(argc, argv, &opts); - res = sequencer_pick_revisions(&opts); + res = run_sequencer(argc, argv, &opts); if (res < 0) die(_("revert failed")); return res; @@ -195,14 +195,12 @@ int cmd_revert(int argc, const char **argv, const char *prefix) int cmd_cherry_pick(int argc, const char **argv, const char *prefix) { - struct replay_opts opts; + struct replay_opts opts = REPLAY_OPTS_INIT; int res; - memset(&opts, 0, sizeof(opts)); opts.action = REPLAY_PICK; git_config(git_default_config, NULL); - parse_args(argc, argv, &opts); - res = sequencer_pick_revisions(&opts); + res = run_sequencer(argc, argv, &opts); if (res < 0) die(_("cherry-pick failed")); return res; diff --git a/builtin/stripspace.c b/builtin/stripspace.c index 15e716ef43..1e62a008cb 100644 --- a/builtin/stripspace.c +++ b/builtin/stripspace.c @@ -44,8 +44,10 @@ int cmd_stripspace(int argc, const char **argv, const char *prefix) if (argc) usage_with_options(stripspace_usage, options); - if (mode == STRIP_COMMENTS || mode == COMMENT_LINES) + if (mode == STRIP_COMMENTS || mode == COMMENT_LINES) { + setup_git_directory_gently(NULL); git_config(git_default_config, NULL); + } if (strbuf_read(&buf, 0, 1024) < 0) die_errno("could not read the input"); diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 444ec06c2a..4beeda5f9f 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -95,6 +95,8 @@ static int chop_last_dir(char **remoteurl, int is_relative) * NEEDSWORK: This works incorrectly on the domain and protocol part. * remote_url url outcome expectation * http://a.com/b ../c http://a.com/c as is + * http://a.com/b/ ../c http://a.com/c same as previous line, but + * ignore trailing slash in url * http://a.com/b ../../c http://c error out * http://a.com/b ../../../c http:/c error out * http://a.com/b ../../../../c http:c error out @@ -113,8 +115,8 @@ static char *relative_url(const char *remote_url, struct strbuf sb = STRBUF_INIT; size_t len = strlen(remoteurl); - if (is_dir_sep(remoteurl[len])) - remoteurl[len] = '\0'; + if (is_dir_sep(remoteurl[len-1])) + remoteurl[len-1] = '\0'; if (!url_is_local_not_ssh(remoteurl) || is_absolute_path(remoteurl)) is_relative = 0; @@ -147,6 +149,8 @@ static char *relative_url(const char *remote_url, } strbuf_reset(&sb); strbuf_addf(&sb, "%s%s%s", remoteurl, colonsep ? ":" : "/", url); + if (ends_with(url, "/")) + strbuf_setlen(&sb, sb.len - 1); free(remoteurl); if (starts_with_dot_slash(sb.buf)) @@ -492,20 +496,16 @@ static int add_possible_reference_from_superproject( { struct submodule_alternate_setup *sas = sas_cb; - /* directory name, minus trailing slash */ - size_t namelen = alt->name - alt->base - 1; - struct strbuf name = STRBUF_INIT; - strbuf_add(&name, alt->base, namelen); - /* * If the alternate object store is another repository, try the * standard layout with .git/modules//objects */ - if (ends_with(name.buf, ".git/objects")) { + if (ends_with(alt->path, ".git/objects")) { char *sm_alternate; struct strbuf sb = STRBUF_INIT; struct strbuf err = STRBUF_INIT; - strbuf_add(&sb, name.buf, name.len - strlen("objects")); + strbuf_add(&sb, alt->path, strlen(alt->path) - strlen("objects")); + /* * We need to end the new path with '/' to mark it as a dir, * otherwise a submodule name containing '/' will be broken @@ -533,7 +533,6 @@ static int add_possible_reference_from_superproject( strbuf_release(&sb); } - strbuf_release(&name); return 0; } diff --git a/builtin/upload-archive.c b/builtin/upload-archive.c index 2caedf1849..cde06977b7 100644 --- a/builtin/upload-archive.c +++ b/builtin/upload-archive.c @@ -43,7 +43,7 @@ int cmd_upload_archive_writer(int argc, const char **argv, const char *prefix) } /* parse all options sent by the client */ - return write_archive(sent_argv.argc, sent_argv.argv, prefix, 0, NULL, 1); + return write_archive(sent_argv.argc, sent_argv.argv, prefix, NULL, 1); } __attribute__((format (printf, 1, 2))) @@ -88,11 +88,11 @@ int cmd_upload_archive(int argc, const char **argv, const char *prefix) writer.git_cmd = 1; if (start_command(&writer)) { int err = errno; - packet_write(1, "NACK unable to spawn subprocess\n"); + packet_write_fmt(1, "NACK unable to spawn subprocess\n"); die("upload-archive: %s", strerror(err)); } - packet_write(1, "ACK\n"); + packet_write_fmt(1, "ACK\n"); packet_flush(1); while (1) { diff --git a/cache.h b/cache.h index 2cfb1cab66..a50a61a197 100644 --- a/cache.h +++ b/cache.h @@ -409,6 +409,7 @@ static inline enum object_type object_type(unsigned int mode) #define GIT_NAMESPACE_ENVIRONMENT "GIT_NAMESPACE" #define GIT_WORK_TREE_ENVIRONMENT "GIT_WORK_TREE" #define GIT_PREFIX_ENVIRONMENT "GIT_PREFIX" +#define GIT_SUPER_PREFIX_ENVIRONMENT "GIT_INTERNAL_SUPER_PREFIX" #define DEFAULT_GIT_DIR_ENVIRONMENT ".git" #define DB_ENVIRONMENT "GIT_OBJECT_DIRECTORY" #define INDEX_ENVIRONMENT "GIT_INDEX_FILE" @@ -433,6 +434,7 @@ static inline enum object_type object_type(unsigned int mode) #define GIT_GLOB_PATHSPECS_ENVIRONMENT "GIT_GLOB_PATHSPECS" #define GIT_NOGLOB_PATHSPECS_ENVIRONMENT "GIT_NOGLOB_PATHSPECS" #define GIT_ICASE_PATHSPECS_ENVIRONMENT "GIT_ICASE_PATHSPECS" +#define GIT_QUARANTINE_ENVIRONMENT "GIT_QUARANTINE_PATH" /* * This environment variable is expected to contain a boolean indicating @@ -475,6 +477,7 @@ extern int get_common_dir_noenv(struct strbuf *sb, const char *gitdir); extern int get_common_dir(struct strbuf *sb, const char *gitdir); extern const char *get_git_namespace(void); extern const char *strip_namespace(const char *namespaced_ref); +extern const char *get_super_prefix(void); extern const char *get_git_work_tree(void); /* @@ -900,8 +903,8 @@ extern char *sha1_pack_index_name(const unsigned char *sha1); * The result will be at least `len` characters long, and will be NUL * terminated. * - * The non-`_r` version returns a static buffer which will be overwritten by - * subsequent calls. + * The non-`_r` version returns a static buffer which remains valid until 4 + * more calls to find_unique_abbrev are made. * * The `_r` variant writes to a buffer supplied by the caller, which must be at * least `GIT_SHA1_HEXSZ + 1` bytes. The return value is the number of bytes @@ -1122,7 +1125,7 @@ extern int write_sha1_file(const void *buf, unsigned long len, const char *type, 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_noatime(const char *name); +extern int git_open(const char *name); extern void *map_sha1_file(const unsigned char *sha1, unsigned long *size); extern int unpack_sha1_header(git_zstream *stream, unsigned char *map, unsigned long mapsize, void *buffer, unsigned long bufsiz); extern int parse_sha1_header(const char *hdr, unsigned long *sizep); @@ -1154,6 +1157,7 @@ static inline int has_sha1_file(const unsigned char *sha1) /* Same as the above, except for struct object_id. */ extern int has_object_file(const struct object_id *oid); +extern int has_object_file_with_flags(const struct object_id *oid, int flags); /* * Return true iff an alternate object database has a loose object @@ -1186,6 +1190,9 @@ static inline int hex2chr(const char *s) #define MINIMUM_ABBREV minimum_abbrev #define DEFAULT_ABBREV default_abbrev +/* used when the code does not know or care what the default abbrev is */ +#define FALLBACK_DEFAULT_ABBREV 7 + struct object_context { unsigned char tree[20]; char path[PATH_MAX]; @@ -1390,16 +1397,46 @@ extern void remove_scheduled_dirs(void); extern struct alternate_object_database { struct alternate_object_database *next; - char *name; - char base[FLEX_ARRAY]; /* more */ + + /* see alt_scratch_buf() */ + struct strbuf scratch; + size_t base_len; + + char path[FLEX_ARRAY]; } *alt_odb_list; extern void prepare_alt_odb(void); extern void read_info_alternates(const char * relative_base, int depth); extern char *compute_alternate_path(const char *path, struct strbuf *err); -extern void add_to_alternates_file(const char *reference); typedef int alt_odb_fn(struct alternate_object_database *, void *); extern int foreach_alt_odb(alt_odb_fn, void*); +/* + * Allocate a "struct alternate_object_database" but do _not_ actually + * add it to the list of alternates. + */ +struct alternate_object_database *alloc_alt_odb(const char *dir); + +/* + * Add the directory to the on-disk alternates file; the new entry will also + * take effect in the current process. + */ +extern void add_to_alternates_file(const char *dir); + +/* + * Add the directory to the in-memory list of alternates (along with any + * recursive alternates it points to), but do not modify the on-disk alternates + * file. + */ +extern void add_to_alternates_memory(const char *dir); + +/* + * Returns a scratch strbuf pre-filled with the alternate object directory, + * including a trailing slash, which can be used to access paths in the + * alternate. Always use this over direct access to alt->scratch, as it + * cleans up any previous use of the scratch buffer. + */ +extern struct strbuf *alt_scratch_buf(struct alternate_object_database *alt); + struct pack_window { struct pack_window *next; unsigned char *base; @@ -1456,6 +1493,12 @@ extern void prepare_packed_git(void); extern void reprepare_packed_git(void); extern void install_packed_git(struct packed_git *pack); +/* + * Give a rough count of objects in the repository. This sacrifices accuracy + * for speed. + */ +unsigned long approximate_object_count(void); + extern struct packed_git *find_sha1_pack(const unsigned char *sha1, struct packed_git *packs); diff --git a/combine-diff.c b/combine-diff.c index 8e2a577bdb..59501db99a 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -1203,9 +1203,9 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, struct re /* Show sha1's */ for (i = 0; i < num_parent; i++) - printf(" %s", diff_unique_abbrev(p->parent[i].oid.hash, - opt->abbrev)); - printf(" %s ", diff_unique_abbrev(p->oid.hash, opt->abbrev)); + printf(" %s", diff_aligned_abbrev(&p->parent[i].oid, + opt->abbrev)); + printf(" %s ", diff_aligned_abbrev(&p->oid, opt->abbrev)); } if (opt->output_format & (DIFF_FORMAT_RAW | DIFF_FORMAT_NAME_STATUS)) { diff --git a/common-main.c b/common-main.c index 44a29e8b13..c654f95551 100644 --- a/common-main.c +++ b/common-main.c @@ -33,7 +33,7 @@ int main(int argc, const char **argv) git_setup_gettext(); - argv[0] = git_extract_argv0_path(argv[0]); + git_extract_argv0_path(argv[0]); restore_sigpipe_to_default(); diff --git a/compat/mingw.h b/compat/mingw.h index 034fff9479..3350169555 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -384,6 +384,9 @@ int mingw_raise(int sig); * ANSI emulation wrappers */ +int winansi_isatty(int fd); +#define isatty winansi_isatty + void winansi_init(void); HANDLE winansi_get_osfhandle(int fd); diff --git a/compat/winansi.c b/compat/winansi.c index db4a5b0a37..477209fce7 100644 --- a/compat/winansi.c +++ b/compat/winansi.c @@ -6,6 +6,12 @@ #include "../git-compat-util.h" #include #include +#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 @@ -81,6 +87,7 @@ static void warn_if_raster_font(void) static int is_console(int fd) { CONSOLE_SCREEN_BUFFER_INFO sbi; + DWORD mode; HANDLE hcon; static int initialized = 0; @@ -95,9 +102,15 @@ static int is_console(int fd) 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; @@ -459,76 +472,50 @@ static HANDLE duplicate_handle(HANDLE hnd) 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 the OS can recycle HANDLE (numbers) just like it + * recycles fd (numbers), so we must update the cached value + * of "console". You can use GetFileType() to see that + * handle and _get_osfhandle(fd) may have the same number + * value, but they refer to different actual files now. + * + * Note that dup2() when given target := {0,1,2} will also + * call SetStdHandle(), so we don't need to worry about that. + */ + dup2(new_fd, fd); + if (console == handle) + console = duplicate; + handle = INVALID_HANDLE_VALUE; + + /* 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 @@ -555,21 +542,35 @@ static void detect_msys_tty(int fd) 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")) + /* + * 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; - /* init ioinfo size if we haven't done so */ - if (init_sizeof_ioinfo()) - 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; @@ -578,6 +579,10 @@ void winansi_init(void) /* 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 */ @@ -621,12 +626,10 @@ void winansi_init(void) */ 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); } diff --git a/configure.ac b/configure.ac index 3a43b7a5b3..0b15f04b10 100644 --- a/configure.ac +++ b/configure.ac @@ -836,9 +836,10 @@ AC_CHECK_TYPE([struct addrinfo],[ ]) GIT_CONF_SUBST([NO_IPV6]) # -# Define NO_REGEX if you have no or inferior regex support in your C library. -AC_CACHE_CHECK([whether the platform regex can handle null bytes], - [ac_cv_c_excellent_regex], [ +# Define NO_REGEX if your C library lacks regex support with REG_STARTEND +# feature. +AC_CACHE_CHECK([whether the platform regex supports REG_STARTEND], + [ac_cv_c_regex_with_reg_startend], [ AC_EGREP_CPP(yippeeyeswehaveit, AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT #include @@ -847,10 +848,10 @@ AC_EGREP_CPP(yippeeyeswehaveit, yippeeyeswehaveit #endif ]), - [ac_cv_c_excellent_regex=yes], - [ac_cv_c_excellent_regex=no]) + [ac_cv_c_regex_with_reg_startend=yes], + [ac_cv_c_regex_with_reg_startend=no]) ]) -if test $ac_cv_c_excellent_regex = yes; then +if test $ac_cv_c_regex_with_reg_startend = yes; then NO_REGEX= else NO_REGEX=YesPlease diff --git a/connect.c b/connect.c index d99d6435fd..8cb93b0720 100644 --- a/connect.c +++ b/connect.c @@ -750,7 +750,7 @@ struct child_process *git_connect(int fd[2], const char *url, * Note: Do not add any other headers here! Doing so * will cause older git-daemon servers to crash. */ - packet_write(fd[1], + packet_write_fmt(fd[1], "%s %s%chost=%s%c", prog, path, 0, target_host, 0); diff --git a/connected.c b/connected.c index 8e3e4b1dc1..136c2ac168 100644 --- a/connected.c +++ b/connected.c @@ -63,6 +63,7 @@ int check_connected(sha1_iterate_fn fn, void *cb_data, _("Checking connectivity")); rev_list.git_cmd = 1; + rev_list.env = opt->env; rev_list.in = -1; rev_list.no_stdout = 1; if (opt->err_fd) diff --git a/connected.h b/connected.h index afa48cc052..4ca325f79d 100644 --- a/connected.h +++ b/connected.h @@ -33,6 +33,11 @@ struct check_connected_options { /* If non-zero, show progress as we traverse the objects. */ int progress; + + /* + * Insert these variables into the environment of the child process. + */ + const char **env; }; #define CHECK_CONNECTED_INIT { 0 } diff --git a/contrib/coccinelle/free.cocci b/contrib/coccinelle/free.cocci new file mode 100644 index 0000000000..e28213161a --- /dev/null +++ b/contrib/coccinelle/free.cocci @@ -0,0 +1,5 @@ +@@ +expression E; +@@ +- if (E) + free(E); diff --git a/contrib/coccinelle/object_id.cocci b/contrib/coccinelle/object_id.cocci index 0307624a03..09afdbf994 100644 --- a/contrib/coccinelle/object_id.cocci +++ b/contrib/coccinelle/object_id.cocci @@ -17,10 +17,13 @@ expression E1; + oid_to_hex(&E1) @@ +identifier f != oid_to_hex; expression E1; @@ + f(...) {... - sha1_to_hex(E1->hash) + oid_to_hex(E1) + ...} @@ expression E1, E2; @@ -29,10 +32,13 @@ expression E1, E2; + oid_to_hex_r(E1, &E2) @@ +identifier f != oid_to_hex_r; expression E1, E2; @@ + f(...) {... - sha1_to_hex_r(E1, E2->hash) + oid_to_hex_r(E1, E2) + ...} @@ expression E1; @@ -41,10 +47,13 @@ expression E1; + oidclr(&E1) @@ +identifier f != oidclr; expression E1; @@ + f(...) {... - hashclr(E1->hash) + oidclr(E1) + ...} @@ expression E1, E2; @@ -53,10 +62,13 @@ expression E1, E2; + oidcmp(&E1, &E2) @@ +identifier f != oidcmp; expression E1, E2; @@ + f(...) {... - hashcmp(E1->hash, E2->hash) + oidcmp(E1, E2) + ...} @@ expression E1, E2; @@ -77,10 +89,13 @@ expression E1, E2; + oidcpy(&E1, &E2) @@ +identifier f != oidcpy; expression E1, E2; @@ + f(...) {... - hashcpy(E1->hash, E2->hash) + oidcpy(E1, E2) + ...} @@ expression E1, E2; diff --git a/contrib/coccinelle/xstrdup_or_null.cocci b/contrib/coccinelle/xstrdup_or_null.cocci new file mode 100644 index 0000000000..3fceef132b --- /dev/null +++ b/contrib/coccinelle/xstrdup_or_null.cocci @@ -0,0 +1,7 @@ +@@ +expression E; +expression V; +@@ +- if (E) +- V = xstrdup(E); ++ V = xstrdup_or_null(E); diff --git a/contrib/credential/libsecret/Makefile b/contrib/credential/libsecret/Makefile new file mode 100644 index 0000000000..3e67552cc5 --- /dev/null +++ b/contrib/credential/libsecret/Makefile @@ -0,0 +1,25 @@ +MAIN:=git-credential-libsecret +all:: $(MAIN) + +CC = gcc +RM = rm -f +CFLAGS = -g -O2 -Wall +PKG_CONFIG = pkg-config + +-include ../../../config.mak.autogen +-include ../../../config.mak + +INCS:=$(shell $(PKG_CONFIG) --cflags libsecret-1 glib-2.0) +LIBS:=$(shell $(PKG_CONFIG) --libs libsecret-1 glib-2.0) + +SRCS:=$(MAIN).c +OBJS:=$(SRCS:.c=.o) + +%.o: %.c + $(CC) $(CFLAGS) $(CPPFLAGS) $(INCS) -o $@ -c $< + +$(MAIN): $(OBJS) + $(CC) -o $@ $(LDFLAGS) $^ $(LIBS) + +clean: + @$(RM) $(MAIN) $(OBJS) diff --git a/contrib/credential/libsecret/git-credential-libsecret.c b/contrib/credential/libsecret/git-credential-libsecret.c new file mode 100644 index 0000000000..4c56979d8a --- /dev/null +++ b/contrib/credential/libsecret/git-credential-libsecret.c @@ -0,0 +1,370 @@ +/* + * Copyright (C) 2011 John Szakmeister + * 2012 Philipp A. Hartmann + * 2016 Mantas Mikulėnas + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Credits: + * - GNOME Keyring API handling originally written by John Szakmeister + * - ported to credential helper API by Philipp A. Hartmann + */ + +#include +#include +#include +#include +#include + +/* + * This credential struct and API is simplified from git's credential.{h,c} + */ +struct credential { + char *protocol; + char *host; + unsigned short port; + char *path; + char *username; + char *password; +}; + +#define CREDENTIAL_INIT { NULL, NULL, 0, NULL, NULL, NULL } + +typedef int (*credential_op_cb)(struct credential *); + +struct credential_operation { + char *name; + credential_op_cb op; +}; + +#define CREDENTIAL_OP_END { NULL, NULL } + +/* ----------------- Secret Service functions ----------------- */ + +static char *make_label(struct credential *c) +{ + if (c->port) + return g_strdup_printf("Git: %s://%s:%hu/%s", + c->protocol, c->host, c->port, c->path ? c->path : ""); + else + return g_strdup_printf("Git: %s://%s/%s", + c->protocol, c->host, c->path ? c->path : ""); +} + +static GHashTable *make_attr_list(struct credential *c) +{ + GHashTable *al = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); + + if (c->username) + g_hash_table_insert(al, "user", g_strdup(c->username)); + if (c->protocol) + g_hash_table_insert(al, "protocol", g_strdup(c->protocol)); + if (c->host) + g_hash_table_insert(al, "server", g_strdup(c->host)); + if (c->port) + g_hash_table_insert(al, "port", g_strdup_printf("%hu", c->port)); + if (c->path) + g_hash_table_insert(al, "object", g_strdup(c->path)); + + return al; +} + +static int keyring_get(struct credential *c) +{ + SecretService *service = NULL; + GHashTable *attributes = NULL; + GError *error = NULL; + GList *items = NULL; + + if (!c->protocol || !(c->host || c->path)) + return EXIT_FAILURE; + + service = secret_service_get_sync(0, NULL, &error); + if (error != NULL) { + g_critical("could not connect to Secret Service: %s", error->message); + g_error_free(error); + return EXIT_FAILURE; + } + + attributes = make_attr_list(c); + items = secret_service_search_sync(service, + SECRET_SCHEMA_COMPAT_NETWORK, + attributes, + SECRET_SEARCH_LOAD_SECRETS, + NULL, + &error); + g_hash_table_unref(attributes); + if (error != NULL) { + g_critical("lookup failed: %s", error->message); + g_error_free(error); + return EXIT_FAILURE; + } + + if (items != NULL) { + SecretItem *item; + SecretValue *secret; + const char *s; + + item = items->data; + secret = secret_item_get_secret(item); + attributes = secret_item_get_attributes(item); + + s = g_hash_table_lookup(attributes, "user"); + if (s) { + g_free(c->username); + c->username = g_strdup(s); + } + + s = secret_value_get_text(secret); + if (s) { + g_free(c->password); + c->password = g_strdup(s); + } + + g_hash_table_unref(attributes); + secret_value_unref(secret); + g_list_free_full(items, g_object_unref); + } + + return EXIT_SUCCESS; +} + + +static int keyring_store(struct credential *c) +{ + char *label = NULL; + GHashTable *attributes = NULL; + GError *error = NULL; + + /* + * Sanity check that what we are storing is actually sensible. + * In particular, we can't make a URL without a protocol field. + * Without either a host or pathname (depending on the scheme), + * we have no primary key. And without a username and password, + * we are not actually storing a credential. + */ + if (!c->protocol || !(c->host || c->path) || + !c->username || !c->password) + return EXIT_FAILURE; + + label = make_label(c); + attributes = make_attr_list(c); + secret_password_storev_sync(SECRET_SCHEMA_COMPAT_NETWORK, + attributes, + NULL, + label, + c->password, + NULL, + &error); + g_free(label); + g_hash_table_unref(attributes); + + if (error != NULL) { + g_critical("store failed: %s", error->message); + g_error_free(error); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +static int keyring_erase(struct credential *c) +{ + GHashTable *attributes = NULL; + GError *error = NULL; + + /* + * Sanity check that we actually have something to match + * against. The input we get is a restrictive pattern, + * so technically a blank credential means "erase everything". + * But it is too easy to accidentally send this, since it is equivalent + * to empty input. So explicitly disallow it, and require that the + * pattern have some actual content to match. + */ + if (!c->protocol && !c->host && !c->path && !c->username) + return EXIT_FAILURE; + + attributes = make_attr_list(c); + secret_password_clearv_sync(SECRET_SCHEMA_COMPAT_NETWORK, + attributes, + NULL, + &error); + g_hash_table_unref(attributes); + + if (error != NULL) { + g_critical("erase failed: %s", error->message); + g_error_free(error); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +/* + * Table with helper operation callbacks, used by generic + * credential helper main function. + */ +static struct credential_operation const credential_helper_ops[] = { + { "get", keyring_get }, + { "store", keyring_store }, + { "erase", keyring_erase }, + CREDENTIAL_OP_END +}; + +/* ------------------ credential functions ------------------ */ + +static void credential_init(struct credential *c) +{ + memset(c, 0, sizeof(*c)); +} + +static void credential_clear(struct credential *c) +{ + g_free(c->protocol); + g_free(c->host); + g_free(c->path); + g_free(c->username); + g_free(c->password); + + credential_init(c); +} + +static int credential_read(struct credential *c) +{ + char *buf; + size_t line_len; + char *key; + char *value; + + key = buf = g_malloc(1024); + + while (fgets(buf, 1024, stdin)) { + line_len = strlen(buf); + + if (line_len && buf[line_len-1] == '\n') + buf[--line_len] = '\0'; + + if (!line_len) + break; + + value = strchr(buf, '='); + if (!value) { + g_warning("invalid credential line: %s", key); + g_free(buf); + return -1; + } + *value++ = '\0'; + + if (!strcmp(key, "protocol")) { + g_free(c->protocol); + c->protocol = g_strdup(value); + } else if (!strcmp(key, "host")) { + g_free(c->host); + c->host = g_strdup(value); + value = strrchr(c->host, ':'); + if (value) { + *value++ = '\0'; + c->port = atoi(value); + } + } else if (!strcmp(key, "path")) { + g_free(c->path); + c->path = g_strdup(value); + } else if (!strcmp(key, "username")) { + g_free(c->username); + c->username = g_strdup(value); + } else if (!strcmp(key, "password")) { + g_free(c->password); + c->password = g_strdup(value); + while (*value) + *value++ = '\0'; + } + /* + * Ignore other lines; we don't know what they mean, but + * this future-proofs us when later versions of git do + * learn new lines, and the helpers are updated to match. + */ + } + + g_free(buf); + + return 0; +} + +static void credential_write_item(FILE *fp, const char *key, const char *value) +{ + if (!value) + return; + fprintf(fp, "%s=%s\n", key, value); +} + +static void credential_write(const struct credential *c) +{ + /* only write username/password, if set */ + credential_write_item(stdout, "username", c->username); + credential_write_item(stdout, "password", c->password); +} + +static void usage(const char *name) +{ + struct credential_operation const *try_op = credential_helper_ops; + const char *basename = strrchr(name, '/'); + + basename = (basename) ? basename + 1 : name; + fprintf(stderr, "usage: %s <", basename); + while (try_op->name) { + fprintf(stderr, "%s", (try_op++)->name); + if (try_op->name) + fprintf(stderr, "%s", "|"); + } + fprintf(stderr, "%s", ">\n"); +} + +int main(int argc, char *argv[]) +{ + int ret = EXIT_SUCCESS; + + struct credential_operation const *try_op = credential_helper_ops; + struct credential cred = CREDENTIAL_INIT; + + if (!argv[1]) { + usage(argv[0]); + exit(EXIT_FAILURE); + } + + g_set_application_name("Git Credential Helper"); + + /* lookup operation callback */ + while (try_op->name && strcmp(argv[1], try_op->name)) + try_op++; + + /* unsupported operation given -- ignore silently */ + if (!try_op->name || !try_op->op) + goto out; + + ret = credential_read(&cred); + if (ret) + goto out; + + /* perform credential operation */ + ret = (*try_op->op)(&cred); + + credential_write(&cred); + +out: + credential_clear(&cred); + return ret; +} diff --git a/contrib/long-running-filter/example.pl b/contrib/long-running-filter/example.pl new file mode 100755 index 0000000000..39457055a5 --- /dev/null +++ b/contrib/long-running-filter/example.pl @@ -0,0 +1,128 @@ +#!/usr/bin/perl +# +# Example implementation for the Git filter protocol version 2 +# See Documentation/gitattributes.txt, section "Filter Protocol" +# +# Please note, this pass-thru filter is a minimal skeleton. No proper +# error handling was implemented. +# + +use strict; +use warnings; + +my $MAX_PACKET_CONTENT_SIZE = 65516; + +sub packet_bin_read { + my $buffer; + my $bytes_read = read STDIN, $buffer, 4; + if ( $bytes_read == 0 ) { + + # EOF - Git stopped talking to us! + exit(); + } + elsif ( $bytes_read != 4 ) { + die "invalid packet: '$buffer'"; + } + my $pkt_size = hex($buffer); + if ( $pkt_size == 0 ) { + return ( 1, "" ); + } + elsif ( $pkt_size > 4 ) { + my $content_size = $pkt_size - 4; + $bytes_read = read STDIN, $buffer, $content_size; + if ( $bytes_read != $content_size ) { + die "invalid packet ($content_size bytes expected; $bytes_read bytes read)"; + } + return ( 0, $buffer ); + } + else { + die "invalid packet size: $pkt_size"; + } +} + +sub packet_txt_read { + my ( $res, $buf ) = packet_bin_read(); + unless ( $buf =~ s/\n$// ) { + die "A non-binary line MUST be terminated by an LF."; + } + return ( $res, $buf ); +} + +sub packet_bin_write { + my $buf = shift; + print STDOUT sprintf( "%04x", length($buf) + 4 ); + print STDOUT $buf; + STDOUT->flush(); +} + +sub packet_txt_write { + packet_bin_write( $_[0] . "\n" ); +} + +sub packet_flush { + print STDOUT sprintf( "%04x", 0 ); + STDOUT->flush(); +} + +( packet_txt_read() eq ( 0, "git-filter-client" ) ) || die "bad initialize"; +( packet_txt_read() eq ( 0, "version=2" ) ) || die "bad version"; +( packet_bin_read() eq ( 1, "" ) ) || die "bad version end"; + +packet_txt_write("git-filter-server"); +packet_txt_write("version=2"); +packet_flush(); + +( packet_txt_read() eq ( 0, "capability=clean" ) ) || die "bad capability"; +( packet_txt_read() eq ( 0, "capability=smudge" ) ) || die "bad capability"; +( packet_bin_read() eq ( 1, "" ) ) || die "bad capability end"; + +packet_txt_write("capability=clean"); +packet_txt_write("capability=smudge"); +packet_flush(); + +while (1) { + my ($command) = packet_txt_read() =~ /^command=([^=]+)$/; + my ($pathname) = packet_txt_read() =~ /^pathname=([^=]+)$/; + + packet_bin_read(); + + my $input = ""; + { + binmode(STDIN); + my $buffer; + my $done = 0; + while ( !$done ) { + ( $done, $buffer ) = packet_bin_read(); + $input .= $buffer; + } + } + + my $output; + if ( $command eq "clean" ) { + ### Perform clean here ### + $output = $input; + } + elsif ( $command eq "smudge" ) { + ### Perform smudge here ### + $output = $input; + } + else { + die "bad command '$command'"; + } + + packet_txt_write("status=success"); + packet_flush(); + while ( length($output) > 0 ) { + my $packet = substr( $output, 0, $MAX_PACKET_CONTENT_SIZE ); + packet_bin_write($packet); + if ( length($output) > $MAX_PACKET_CONTENT_SIZE ) { + $output = substr( $output, $MAX_PACKET_CONTENT_SIZE ); + } + else { + $output = ""; + } + } + packet_flush(); # flush content! + packet_flush(); # empty list, keep "status=success" unchanged! + +} diff --git a/contrib/update-unicode/.gitignore b/contrib/update-unicode/.gitignore new file mode 100644 index 0000000000..b0ebc6aad2 --- /dev/null +++ b/contrib/update-unicode/.gitignore @@ -0,0 +1,3 @@ +uniset/ +UnicodeData.txt +EastAsianWidth.txt diff --git a/contrib/update-unicode/README b/contrib/update-unicode/README new file mode 100644 index 0000000000..b9e2fc8540 --- /dev/null +++ b/contrib/update-unicode/README @@ -0,0 +1,20 @@ +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. diff --git a/contrib/update-unicode/update_unicode.sh b/contrib/update-unicode/update_unicode.sh new file mode 100755 index 0000000000..e05db92d3f --- /dev/null +++ b/contrib/update-unicode/update_unicode.sh @@ -0,0 +1,33 @@ +#!/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 diff --git a/convert.c b/convert.c index 077f5e601e..be91358462 100644 --- a/convert.c +++ b/convert.c @@ -3,6 +3,7 @@ #include "run-command.h" #include "quote.h" #include "sigchain.h" +#include "pkt-line.h" /* * convert.c - convert a file when checking it out and checking it in. @@ -197,17 +198,21 @@ static void check_safe_crlf(const char *path, enum crlf_action crlf_action, * CRLFs would not be restored by checkout */ if (checksafe == SAFE_CRLF_WARN) - warning("CRLF will be replaced by LF in %s.\nThe file will have its original line endings in your working directory.", path); + warning(_("CRLF will be replaced by LF in %s.\n" + "The file will have its original line" + " endings in your working directory."), path); else /* i.e. SAFE_CRLF_FAIL */ - die("CRLF would be replaced by LF in %s.", path); + die(_("CRLF would be replaced by LF in %s."), path); } else if (old_stats->lonelf && !new_stats->lonelf ) { /* * CRLFs would be added by checkout */ if (checksafe == SAFE_CRLF_WARN) - warning("LF will be replaced by CRLF in %s.\nThe file will have its original line endings in your working directory.", path); + warning(_("LF will be replaced by CRLF in %s.\n" + "The file will have its original line" + " endings in your working directory."), path); else /* i.e. SAFE_CRLF_FAIL */ - die("LF would be replaced by CRLF in %s", path); + die(_("LF would be replaced by CRLF in %s"), path); } } @@ -412,7 +417,7 @@ static int filter_buffer_or_fd(int in, int out, void *data) child_process.out = out; if (start_command(&child_process)) - return error("cannot fork to run external filter %s", params->cmd); + return error("cannot fork to run external filter '%s'", params->cmd); sigchain_push(SIGPIPE, SIG_IGN); @@ -430,19 +435,19 @@ static int filter_buffer_or_fd(int in, int out, void *data) if (close(child_process.in)) write_err = 1; if (write_err) - error("cannot feed the input to external filter %s", params->cmd); + error("cannot feed the input to external filter '%s'", params->cmd); sigchain_pop(SIGPIPE); status = finish_command(&child_process); if (status) - error("external filter %s failed %d", params->cmd, status); + error("external filter '%s' failed %d", params->cmd, status); strbuf_release(&cmd); return (write_err || status); } -static int apply_filter(const char *path, const char *src, size_t len, int fd, +static int apply_single_file_filter(const char *path, const char *src, size_t len, int fd, struct strbuf *dst, const char *cmd) { /* @@ -451,17 +456,11 @@ static int apply_filter(const char *path, const char *src, size_t len, int fd, * * (child --> cmd) --> us */ - int ret = 1; + int err = 0; struct strbuf nbuf = STRBUF_INIT; struct async async; struct filter_params params; - if (!cmd || !*cmd) - return 0; - - if (!dst) - return 1; - memset(&async, 0, sizeof(async)); async.proc = filter_buffer_or_fd; async.data = ¶ms; @@ -477,23 +476,304 @@ static int apply_filter(const char *path, const char *src, size_t len, int fd, return 0; /* error was already reported */ if (strbuf_read(&nbuf, async.out, len) < 0) { - error("read from external filter %s failed", cmd); - ret = 0; + err = error("read from external filter '%s' failed", cmd); } if (close(async.out)) { - error("read from external filter %s failed", cmd); - ret = 0; + err = error("read from external filter '%s' failed", cmd); } if (finish_async(&async)) { - error("external filter %s failed", cmd); - ret = 0; + err = error("external filter '%s' failed", cmd); } - if (ret) { + if (!err) { strbuf_swap(dst, &nbuf); } strbuf_release(&nbuf); - return ret; + return !err; +} + +#define CAP_CLEAN (1u<<0) +#define CAP_SMUDGE (1u<<1) + +struct cmd2process { + struct hashmap_entry ent; /* must be the first member! */ + unsigned int supported_capabilities; + const char *cmd; + struct child_process process; +}; + +static int cmd_process_map_initialized; +static struct hashmap cmd_process_map; + +static int cmd2process_cmp(const struct cmd2process *e1, + const struct cmd2process *e2, + const void *unused) +{ + return strcmp(e1->cmd, e2->cmd); +} + +static struct cmd2process *find_multi_file_filter_entry(struct hashmap *hashmap, const char *cmd) +{ + struct cmd2process key; + hashmap_entry_init(&key, strhash(cmd)); + key.cmd = cmd; + return hashmap_get(hashmap, &key, NULL); +} + +static int packet_write_list(int fd, const char *line, ...) +{ + va_list args; + int err; + va_start(args, line); + for (;;) { + if (!line) + break; + if (strlen(line) > LARGE_PACKET_DATA_MAX) + return -1; + err = packet_write_fmt_gently(fd, "%s\n", line); + if (err) + return err; + line = va_arg(args, const char*); + } + va_end(args); + return packet_flush_gently(fd); +} + +static void read_multi_file_filter_status(int fd, struct strbuf *status) +{ + struct strbuf **pair; + char *line; + for (;;) { + line = packet_read_line(fd, NULL); + if (!line) + break; + pair = strbuf_split_str(line, '=', 2); + if (pair[0] && pair[0]->len && pair[1]) { + /* the last "status=" line wins */ + if (!strcmp(pair[0]->buf, "status=")) { + strbuf_reset(status); + strbuf_addbuf(status, pair[1]); + } + } + strbuf_list_free(pair); + } +} + +static void kill_multi_file_filter(struct hashmap *hashmap, struct cmd2process *entry) +{ + if (!entry) + return; + + entry->process.clean_on_exit = 0; + kill(entry->process.pid, SIGTERM); + finish_command(&entry->process); + + hashmap_remove(hashmap, entry, NULL); + free(entry); +} + +static void stop_multi_file_filter(struct child_process *process) +{ + sigchain_push(SIGPIPE, SIG_IGN); + /* Closing the pipe signals the filter to initiate a shutdown. */ + close(process->in); + close(process->out); + sigchain_pop(SIGPIPE); + /* Finish command will wait until the shutdown is complete. */ + finish_command(process); +} + +static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, const char *cmd) +{ + int err; + struct cmd2process *entry; + struct child_process *process; + const char *argv[] = { cmd, NULL }; + struct string_list cap_list = STRING_LIST_INIT_NODUP; + char *cap_buf; + const char *cap_name; + + entry = xmalloc(sizeof(*entry)); + entry->cmd = cmd; + entry->supported_capabilities = 0; + process = &entry->process; + + child_process_init(process); + process->argv = argv; + process->use_shell = 1; + process->in = -1; + process->out = -1; + process->clean_on_exit = 1; + process->clean_on_exit_handler = stop_multi_file_filter; + + if (start_command(process)) { + error("cannot fork to run external filter '%s'", cmd); + return NULL; + } + + hashmap_entry_init(entry, strhash(cmd)); + + sigchain_push(SIGPIPE, SIG_IGN); + + err = packet_write_list(process->in, "git-filter-client", "version=2", NULL); + if (err) + goto done; + + err = strcmp(packet_read_line(process->out, NULL), "git-filter-server"); + if (err) { + error("external filter '%s' does not support filter protocol version 2", cmd); + goto done; + } + err = strcmp(packet_read_line(process->out, NULL), "version=2"); + if (err) + goto done; + err = packet_read_line(process->out, NULL) != NULL; + if (err) + goto done; + + err = packet_write_list(process->in, "capability=clean", "capability=smudge", NULL); + + for (;;) { + cap_buf = packet_read_line(process->out, NULL); + if (!cap_buf) + break; + string_list_split_in_place(&cap_list, cap_buf, '=', 1); + + if (cap_list.nr != 2 || strcmp(cap_list.items[0].string, "capability")) + continue; + + cap_name = cap_list.items[1].string; + if (!strcmp(cap_name, "clean")) { + entry->supported_capabilities |= CAP_CLEAN; + } else if (!strcmp(cap_name, "smudge")) { + entry->supported_capabilities |= CAP_SMUDGE; + } else { + warning( + "external filter '%s' requested unsupported filter capability '%s'", + cmd, cap_name + ); + } + + string_list_clear(&cap_list, 0); + } + +done: + sigchain_pop(SIGPIPE); + + if (err || errno == EPIPE) { + error("initialization for external filter '%s' failed", cmd); + kill_multi_file_filter(hashmap, entry); + return NULL; + } + + hashmap_add(hashmap, entry); + return entry; +} + +static int apply_multi_file_filter(const char *path, const char *src, size_t len, + int fd, struct strbuf *dst, const char *cmd, + const unsigned int wanted_capability) +{ + int err; + struct cmd2process *entry; + struct child_process *process; + struct strbuf nbuf = STRBUF_INIT; + struct strbuf filter_status = STRBUF_INIT; + const char *filter_type; + + if (!cmd_process_map_initialized) { + cmd_process_map_initialized = 1; + hashmap_init(&cmd_process_map, (hashmap_cmp_fn) cmd2process_cmp, 0); + entry = NULL; + } else { + entry = find_multi_file_filter_entry(&cmd_process_map, cmd); + } + + fflush(NULL); + + if (!entry) { + entry = start_multi_file_filter(&cmd_process_map, cmd); + if (!entry) + return 0; + } + process = &entry->process; + + if (!(wanted_capability & entry->supported_capabilities)) + return 0; + + if (CAP_CLEAN & wanted_capability) + filter_type = "clean"; + else if (CAP_SMUDGE & wanted_capability) + filter_type = "smudge"; + else + die("unexpected filter type"); + + sigchain_push(SIGPIPE, SIG_IGN); + + assert(strlen(filter_type) < LARGE_PACKET_DATA_MAX - strlen("command=\n")); + err = packet_write_fmt_gently(process->in, "command=%s\n", filter_type); + if (err) + goto done; + + err = strlen(path) > LARGE_PACKET_DATA_MAX - strlen("pathname=\n"); + if (err) { + error("path name too long for external filter"); + goto done; + } + + err = packet_write_fmt_gently(process->in, "pathname=%s\n", path); + if (err) + goto done; + + err = packet_flush_gently(process->in); + if (err) + goto done; + + if (fd >= 0) + err = write_packetized_from_fd(fd, process->in); + else + err = write_packetized_from_buf(src, len, process->in); + if (err) + goto done; + + read_multi_file_filter_status(process->out, &filter_status); + err = strcmp(filter_status.buf, "success"); + if (err) + goto done; + + err = read_packetized_to_strbuf(process->out, &nbuf) < 0; + if (err) + goto done; + + read_multi_file_filter_status(process->out, &filter_status); + err = strcmp(filter_status.buf, "success"); + +done: + sigchain_pop(SIGPIPE); + + if (err || errno == EPIPE) { + if (!strcmp(filter_status.buf, "error")) { + /* The filter signaled a problem with the file. */ + } else if (!strcmp(filter_status.buf, "abort")) { + /* + * The filter signaled a permanent problem. Don't try to filter + * files with the same command for the lifetime of the current + * Git process. + */ + entry->supported_capabilities &= ~wanted_capability; + } else { + /* + * Something went wrong with the protocol filter. + * Force shutdown and restart if another blob requires filtering. + */ + error("external filter '%s' failed", cmd); + kill_multi_file_filter(&cmd_process_map, entry); + } + } else { + strbuf_swap(dst, &nbuf); + } + strbuf_release(&nbuf); + return !err; } static struct convert_driver { @@ -501,9 +781,35 @@ static struct convert_driver { struct convert_driver *next; const char *smudge; const char *clean; + const char *process; int required; } *user_convert, **user_convert_tail; +static int apply_filter(const char *path, const char *src, size_t len, + int fd, struct strbuf *dst, struct convert_driver *drv, + const unsigned int wanted_capability) +{ + const char *cmd = NULL; + + if (!drv) + return 0; + + if (!dst) + return 1; + + if ((CAP_CLEAN & wanted_capability) && !drv->process && drv->clean) + cmd = drv->clean; + else if ((CAP_SMUDGE & wanted_capability) && !drv->process && drv->smudge) + cmd = drv->smudge; + + if (cmd && *cmd) + return apply_single_file_filter(path, src, len, fd, dst, cmd); + else if (drv->process && *drv->process) + return apply_multi_file_filter(path, src, len, fd, dst, drv->process, wanted_capability); + + return 0; +} + static int read_convert_config(const char *var, const char *value, void *cb) { const char *key, *name; @@ -541,6 +847,9 @@ static int read_convert_config(const char *var, const char *value, void *cb) if (!strcmp("clean", key)) return git_config_string(&drv->clean, var, value); + if (!strcmp("process", key)) + return git_config_string(&drv->process, var, value); + if (!strcmp("required", key)) { drv->required = git_config_bool(var, value); return 0; @@ -842,7 +1151,7 @@ int would_convert_to_git_filter_fd(const char *path) if (!ca.drv->required) return 0; - return apply_filter(path, NULL, 0, -1, NULL, ca.drv->clean); + return apply_filter(path, NULL, 0, -1, NULL, ca.drv, CAP_CLEAN); } const char *get_convert_attr_ascii(const char *path) @@ -875,18 +1184,12 @@ int convert_to_git(const char *path, const char *src, size_t len, struct strbuf *dst, enum safe_crlf checksafe) { int ret = 0; - const char *filter = NULL; - int required = 0; struct conv_attrs ca; convert_attrs(&ca, path); - if (ca.drv) { - filter = ca.drv->clean; - required = ca.drv->required; - } - ret |= apply_filter(path, src, len, -1, dst, filter); - if (!ret && required) + ret |= apply_filter(path, src, len, -1, dst, ca.drv, CAP_CLEAN); + if (!ret && ca.drv && ca.drv->required) die("%s: clean filter '%s' failed", path, ca.drv->name); if (ret && dst) { @@ -908,9 +1211,9 @@ void convert_to_git_filter_fd(const char *path, int fd, struct strbuf *dst, convert_attrs(&ca, path); assert(ca.drv); - assert(ca.drv->clean); + assert(ca.drv->clean || ca.drv->process); - if (!apply_filter(path, NULL, 0, fd, dst, ca.drv->clean)) + if (!apply_filter(path, NULL, 0, fd, dst, ca.drv, CAP_CLEAN)) die("%s: clean filter '%s' failed", path, ca.drv->name); crlf_to_git(path, dst->buf, dst->len, dst, ca.crlf_action, checksafe); @@ -922,15 +1225,9 @@ static int convert_to_working_tree_internal(const char *path, const char *src, int normalizing) { int ret = 0, ret_filter = 0; - const char *filter = NULL; - int required = 0; struct conv_attrs ca; convert_attrs(&ca, path); - if (ca.drv) { - filter = ca.drv->smudge; - required = ca.drv->required; - } ret |= ident_to_worktree(path, src, len, dst, ca.ident); if (ret) { @@ -939,9 +1236,10 @@ static int convert_to_working_tree_internal(const char *path, const char *src, } /* * CRLF conversion can be skipped if normalizing, unless there - * is a smudge filter. The filter might expect CRLFs. + * is a smudge or process filter (even if the process filter doesn't + * support smudge). The filters might expect CRLFs. */ - if (filter || !normalizing) { + if ((ca.drv && (ca.drv->smudge || ca.drv->process)) || !normalizing) { ret |= crlf_to_worktree(path, src, len, dst, ca.crlf_action); if (ret) { src = dst->buf; @@ -949,8 +1247,8 @@ static int convert_to_working_tree_internal(const char *path, const char *src, } } - ret_filter = apply_filter(path, src, len, -1, dst, filter); - if (!ret_filter && required) + ret_filter = apply_filter(path, src, len, -1, dst, ca.drv, CAP_SMUDGE); + if (!ret_filter && ca.drv && ca.drv->required) die("%s: smudge filter %s failed", path, ca.drv->name); return ret | ret_filter; @@ -1402,7 +1700,7 @@ struct stream_filter *get_stream_filter(const char *path, const unsigned char *s struct stream_filter *filter = NULL; convert_attrs(&ca, path); - if (ca.drv && (ca.drv->smudge || ca.drv->clean)) + if (ca.drv && (ca.drv->process || ca.drv->smudge || ca.drv->clean)) return NULL; if (ca.crlf_action == CRLF_AUTO || ca.crlf_action == CRLF_AUTO_CRLF) diff --git a/credential-cache--daemon.c b/credential-cache--daemon.c index 1e5f16a3a1..46c5937526 100644 --- a/credential-cache--daemon.c +++ b/credential-cache--daemon.c @@ -219,11 +219,11 @@ static void serve_cache(const char *socket_path, int debug) close(fd); } -static const char permissions_advice[] = +static const char permissions_advice[] = N_( "The permissions on your socket directory are too loose; other\n" "users may be able to read your cached credentials. Consider running:\n" "\n" -" chmod 0700 %s"; +" chmod 0700 %s"); static void init_socket_directory(const char *path) { struct stat st; @@ -232,7 +232,7 @@ static void init_socket_directory(const char *path) if (!stat(dir, &st)) { if (st.st_mode & 077) - die(permissions_advice, dir); + die(_(permissions_advice), dir); } else { /* * We must be sure to create the directory with the correct mode, diff --git a/daemon.c b/daemon.c index 425aad0507..473e6b6b63 100644 --- a/daemon.c +++ b/daemon.c @@ -160,6 +160,7 @@ static const char *path_ok(const char *directory, struct hostinfo *hi) { static char rpath[PATH_MAX]; static char interp_path[PATH_MAX]; + size_t rlen; const char *path; const char *dir; @@ -187,8 +188,12 @@ static const char *path_ok(const char *directory, struct hostinfo *hi) namlen = slash - dir; restlen -= namlen; loginfo("userpath <%s>, request <%s>, namlen %d, restlen %d, slash <%s>", user_path, dir, namlen, restlen, slash); - snprintf(rpath, PATH_MAX, "%.*s/%s%.*s", - namlen, dir, user_path, restlen, slash); + rlen = snprintf(rpath, sizeof(rpath), "%.*s/%s%.*s", + namlen, dir, user_path, restlen, slash); + if (rlen >= sizeof(rpath)) { + logerror("user-path too large: %s", rpath); + return NULL; + } dir = rpath; } } @@ -207,7 +212,15 @@ static const char *path_ok(const char *directory, struct hostinfo *hi) strbuf_expand(&expanded_path, interpolated_path, expand_path, &context); - strlcpy(interp_path, expanded_path.buf, PATH_MAX); + + rlen = strlcpy(interp_path, expanded_path.buf, + sizeof(interp_path)); + if (rlen >= sizeof(interp_path)) { + logerror("interpolated path too large: %s", + interp_path); + return NULL; + } + strbuf_release(&expanded_path); loginfo("Interpolated dir '%s'", interp_path); @@ -219,7 +232,11 @@ static const char *path_ok(const char *directory, struct hostinfo *hi) logerror("'%s': Non-absolute path denied (base-path active)", dir); return NULL; } - snprintf(rpath, PATH_MAX, "%s%s", base_path, dir); + rlen = snprintf(rpath, sizeof(rpath), "%s%s", base_path, dir); + if (rlen >= sizeof(rpath)) { + logerror("base-path too large: %s", rpath); + return NULL; + } dir = rpath; } @@ -281,7 +298,7 @@ static int daemon_error(const char *dir, const char *msg) { if (!informative_errors) msg = "access denied or repository not exported"; - packet_write(1, "ERR %s: %s", msg, dir); + packet_write_fmt(1, "ERR %s: %s", msg, dir); return -1; } diff --git a/diff-lib.c b/diff-lib.c index 3007c8524c..52447466b5 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -214,6 +214,12 @@ int run_diff_files(struct rev_info *revs, unsigned int option) !is_null_oid(&ce->oid), ce->name, 0); continue; + } else if (revs->diffopt.ita_invisible_in_index && + ce_intent_to_add(ce)) { + diff_addremove(&revs->diffopt, '+', ce->ce_mode, + EMPTY_BLOB_SHA1_BIN, 0, + ce->name, 0); + continue; } changed = match_stat_with_submodule(&revs->diffopt, ce, &st, @@ -379,6 +385,14 @@ static void do_oneway_diff(struct unpack_trees_options *o, struct rev_info *revs = o->unpack_data; int match_missing, cached; + /* i-t-a entries do not actually exist in the index */ + if (revs->diffopt.ita_invisible_in_index && + idx && ce_intent_to_add(idx)) { + idx = NULL; + if (!tree) + return; /* nothing to diff.. */ + } + /* if the entry is not checked out, don't examine work tree */ cached = o->index_only || (idx && ((idx->ce_flags & CE_VALID) || ce_skip_worktree(idx))); @@ -521,7 +535,8 @@ int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt) return 0; } -int index_differs_from(const char *def, int diff_flags) +int index_differs_from(const char *def, int diff_flags, + int ita_invisible_in_index) { struct rev_info rev; struct setup_revision_opt opt; @@ -533,6 +548,7 @@ int index_differs_from(const char *def, int diff_flags) DIFF_OPT_SET(&rev.diffopt, QUICK); DIFF_OPT_SET(&rev.diffopt, EXIT_WITH_STATUS); rev.diffopt.flags |= diff_flags; + rev.diffopt.ita_invisible_in_index = ita_invisible_in_index; run_diff_index(&rev, 1); if (rev.pending.alloc) free(rev.pending.objects); diff --git a/diff.c b/diff.c index 1d304e0550..ec8728362d 100644 --- a/diff.c +++ b/diff.c @@ -43,6 +43,7 @@ static int diff_stat_graph_width; static int diff_dirstat_permille_default = 30; static struct diff_options default_diff_options; static long diff_algorithm; +static unsigned ws_error_highlight_default = WSEH_NEW; static char diff_colors[][COLOR_MAXLEN] = { GIT_COLOR_RESET, @@ -172,6 +173,43 @@ long parse_algorithm_value(const char *value) return -1; } +static int parse_one_token(const char **arg, const char *token) +{ + const char *rest; + if (skip_prefix(*arg, token, &rest) && (!*rest || *rest == ',')) { + *arg = rest; + return 1; + } + return 0; +} + +static int parse_ws_error_highlight(const char *arg) +{ + const char *orig_arg = arg; + unsigned val = 0; + + while (*arg) { + if (parse_one_token(&arg, "none")) + val = 0; + else if (parse_one_token(&arg, "default")) + val = WSEH_NEW; + else if (parse_one_token(&arg, "all")) + val = WSEH_NEW | WSEH_OLD | WSEH_CONTEXT; + else if (parse_one_token(&arg, "new")) + val |= WSEH_NEW; + else if (parse_one_token(&arg, "old")) + val |= WSEH_OLD; + else if (parse_one_token(&arg, "context")) + val |= WSEH_CONTEXT; + else { + return -1 - (int)(arg - orig_arg); + } + if (*arg) + arg++; + } + return val; +} + /* * These are to give UI layer defaults. * The core-level commands such as git-diff-files should @@ -256,6 +294,15 @@ int git_diff_ui_config(const char *var, const char *value, void *cb) if (git_diff_heuristic_config(var, value, cb) < 0) return -1; + + if (!strcmp(var, "diff.wserrorhighlight")) { + int val = parse_ws_error_highlight(value); + if (val < 0) + return -1; + ws_error_highlight_default = val; + return 0; + } + if (git_color_config(var, value, cb) < 0) return -1; @@ -1976,7 +2023,7 @@ static void show_dirstat(struct diff_options *options) if (DIFF_FILE_VALID(p->one) && DIFF_FILE_VALID(p->two)) { diff_populate_filespec(p->one, 0); diff_populate_filespec(p->two, 0); - diffcore_count_changes(p->one, p->two, NULL, NULL, 0, + diffcore_count_changes(p->one, p->two, NULL, NULL, &copied, &added); diff_free_filespec_data(p->one); diff_free_filespec_data(p->two); @@ -3049,6 +3096,21 @@ static int similarity_index(struct diff_filepair *p) return p->score * 100 / MAX_SCORE; } +static const char *diff_abbrev_oid(const struct object_id *oid, int abbrev) +{ + if (startup_info->have_repository) + return find_unique_abbrev(oid->hash, abbrev); + else { + char *hex = oid_to_hex(oid); + if (abbrev < 0) + abbrev = FALLBACK_DEFAULT_ABBREV; + if (abbrev > GIT_SHA1_HEXSZ) + die("BUG: oid abbreviation out of range: %d", abbrev); + hex[abbrev] = '\0'; + return hex; + } +} + static void fill_metainfo(struct strbuf *msg, const char *name, const char *other, @@ -3107,9 +3169,9 @@ static void fill_metainfo(struct strbuf *msg, (!fill_mmfile(&mf, two) && diff_filespec_is_binary(two))) abbrev = 40; } - strbuf_addf(msg, "%s%sindex %s..", line_prefix, set, - find_unique_abbrev(one->oid.hash, abbrev)); - strbuf_add_unique_abbrev(msg, two->oid.hash, abbrev); + strbuf_addf(msg, "%s%sindex %s..%s", line_prefix, set, + diff_abbrev_oid(&one->oid, abbrev), + diff_abbrev_oid(&two->oid, abbrev)); if (one->mode == two->mode) strbuf_addf(msg, " %06o", one->mode); strbuf_addf(msg, "%s\n", reset); @@ -3307,7 +3369,7 @@ void diff_setup(struct diff_options *options) options->rename_limit = -1; options->dirstat_permille = diff_dirstat_permille_default; options->context = diff_context_default; - options->ws_error_highlight = WSEH_NEW; + options->ws_error_highlight = ws_error_highlight_default; DIFF_OPT_SET(options, RENAME_EMPTY); /* pathchange left =NULL by default */ @@ -3421,7 +3483,7 @@ void diff_setup_done(struct diff_options *options) */ read_cache(); } - if (options->abbrev <= 0 || 40 < options->abbrev) + if (40 < options->abbrev) options->abbrev = 40; /* full */ /* @@ -3698,40 +3760,14 @@ static void enable_patch_output(int *fmt) { *fmt |= DIFF_FORMAT_PATCH; } -static int parse_one_token(const char **arg, const char *token) +static int parse_ws_error_highlight_opt(struct diff_options *opt, const char *arg) { - const char *rest; - if (skip_prefix(*arg, token, &rest) && (!*rest || *rest == ',')) { - *arg = rest; - return 1; - } - return 0; -} + int val = parse_ws_error_highlight(arg); -static int parse_ws_error_highlight(struct diff_options *opt, const char *arg) -{ - const char *orig_arg = arg; - unsigned val = 0; - while (*arg) { - if (parse_one_token(&arg, "none")) - val = 0; - else if (parse_one_token(&arg, "default")) - val = WSEH_NEW; - else if (parse_one_token(&arg, "all")) - val = WSEH_NEW | WSEH_OLD | WSEH_CONTEXT; - else if (parse_one_token(&arg, "new")) - val |= WSEH_NEW; - else if (parse_one_token(&arg, "old")) - val |= WSEH_OLD; - else if (parse_one_token(&arg, "context")) - val |= WSEH_CONTEXT; - else { - error("unknown value after ws-error-highlight=%.*s", - (int)(arg - orig_arg), orig_arg); - return 0; - } - if (*arg) - arg++; + if (val < 0) { + error("unknown value after ws-error-highlight=%.*s", + -1 - val, arg); + return 0; } opt->ws_error_highlight = val; return 1; @@ -3950,7 +3986,11 @@ int diff_opt_parse(struct diff_options *options, else if (skip_prefix(arg, "--submodule=", &arg)) return parse_submodule_opt(options, arg); else if (skip_prefix(arg, "--ws-error-highlight=", &arg)) - return parse_ws_error_highlight(options, arg); + return parse_ws_error_highlight_opt(options, arg); + else if (!strcmp(arg, "--ita-invisible-in-index")) + options->ita_invisible_in_index = 1; + else if (!strcmp(arg, "--ita-visible-in-index")) + options->ita_invisible_in_index = 0; /* misc options */ else if (!strcmp(arg, "-z")) @@ -4136,27 +4176,46 @@ void diff_free_filepair(struct diff_filepair *p) free(p); } -/* This is different from find_unique_abbrev() in that - * it stuffs the result with dots for alignment. - */ -const char *diff_unique_abbrev(const unsigned char *sha1, int len) +const char *diff_aligned_abbrev(const struct object_id *oid, int len) { int abblen; const char *abbrev; - if (len == 40) - return sha1_to_hex(sha1); - abbrev = find_unique_abbrev(sha1, len); + if (len == GIT_SHA1_HEXSZ) + return oid_to_hex(oid); + + abbrev = diff_abbrev_oid(oid, len); abblen = strlen(abbrev); - if (abblen < 37) { - static char hex[41]; + + /* + * In well-behaved cases, where the abbbreviated result is the + * same as the requested length, append three dots after the + * abbreviation (hence the whole logic is limited to the case + * where abblen < 37); when the actual abbreviated result is a + * bit longer than the requested length, we reduce the number + * of dots so that they match the well-behaved ones. However, + * if the actual abbreviation is longer than the requested + * length by more than three, we give up on aligning, and add + * three dots anyway, to indicate that the output is not the + * full object name. Yes, this may be suboptimal, but this + * appears only in "diff --raw --abbrev" output and it is not + * worth the effort to change it now. Note that this would + * likely to work fine when the automatic sizing of default + * abbreviation length is used--we would be fed -1 in "len" in + * that case, and will end up always appending three-dots, but + * the automatic sizing is supposed to give abblen that ensures + * uniqueness across all objects (statistically speaking). + */ + if (abblen < GIT_SHA1_HEXSZ - 3) { + static char hex[GIT_SHA1_HEXSZ + 1]; if (len < abblen && abblen <= len + 2) xsnprintf(hex, sizeof(hex), "%s%.*s", abbrev, len+3-abblen, ".."); else xsnprintf(hex, sizeof(hex), "%s...", abbrev); return hex; } - return sha1_to_hex(sha1); + + return oid_to_hex(oid); } static void diff_flush_raw(struct diff_filepair *p, struct diff_options *opt) @@ -4167,9 +4226,9 @@ static void diff_flush_raw(struct diff_filepair *p, struct diff_options *opt) fprintf(opt->file, "%s", diff_line_prefix(opt)); if (!(opt->output_format & DIFF_FORMAT_NAME_STATUS)) { fprintf(opt->file, ":%06o %06o %s ", p->one->mode, p->two->mode, - diff_unique_abbrev(p->one->oid.hash, opt->abbrev)); + diff_aligned_abbrev(&p->one->oid, opt->abbrev)); fprintf(opt->file, "%s ", - diff_unique_abbrev(p->two->oid.hash, opt->abbrev)); + diff_aligned_abbrev(&p->two->oid, opt->abbrev)); } if (p->score) { fprintf(opt->file, "%c%03d%c", p->status, similarity_index(p), @@ -4638,25 +4697,25 @@ static int is_summary_empty(const struct diff_queue_struct *q) } static const char rename_limit_warning[] = -"inexact rename detection was skipped due to too many files."; +N_("inexact rename detection was skipped due to too many files."); static const char degrade_cc_to_c_warning[] = -"only found copies from modified paths due to too many files."; +N_("only found copies from modified paths due to too many files."); static const char rename_limit_advice[] = -"you may want to set your %s variable to at least " -"%d and retry the command."; +N_("you may want to set your %s variable to at least " + "%d and retry the command."); void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc) { if (degraded_cc) - warning(degrade_cc_to_c_warning); + warning(_(degrade_cc_to_c_warning)); else if (needed) - warning(rename_limit_warning); + warning(_(rename_limit_warning)); else return; if (0 < needed && needed < 32767) - warning(rename_limit_advice, varname, needed); + warning(_(rename_limit_advice), varname, needed); } void diff_flush(struct diff_options *options) diff --git a/diff.h b/diff.h index 25ae60d5ff..e9ccb38c26 100644 --- a/diff.h +++ b/diff.h @@ -146,6 +146,7 @@ struct diff_options { int dirstat_permille; int setup; int abbrev; + int ita_invisible_in_index; /* white-space error highlighting */ #define WSEH_NEW 1 #define WSEH_CONTEXT 2 @@ -340,7 +341,11 @@ extern void diff_warn_rename_limit(const char *varname, int needed, int degraded #define DIFF_STATUS_FILTER_AON '*' #define DIFF_STATUS_FILTER_BROKEN 'B' -extern const char *diff_unique_abbrev(const unsigned char *, int); +/* + * This is different from find_unique_abbrev() in that + * it stuffs the result with dots for alignment. + */ +extern const char *diff_aligned_abbrev(const struct object_id *sha1, int); /* do not report anything on removed paths */ #define DIFF_SILENT_ON_REMOVED 01 @@ -356,7 +361,7 @@ extern int diff_result_code(struct diff_options *, int); extern void diff_no_index(struct rev_info *, int, const char **); -extern int index_differs_from(const char *def, int diff_flags); +extern int index_differs_from(const char *def, int diff_flags, int ita_invisible_in_index); /* * Fill the contents of the filespec "df", respecting any textconv defined by diff --git a/diffcore-break.c b/diffcore-break.c index 881a74f29e..c64359f489 100644 --- a/diffcore-break.c +++ b/diffcore-break.c @@ -73,7 +73,6 @@ static int should_break(struct diff_filespec *src, if (diffcore_count_changes(src, dst, &src->cnt_data, &dst->cnt_data, - 0, &src_copied, &literal_added)) return 0; diff --git a/diffcore-delta.c b/diffcore-delta.c index 2ebedb32d1..ebe70fb068 100644 --- a/diffcore-delta.c +++ b/diffcore-delta.c @@ -166,7 +166,6 @@ int diffcore_count_changes(struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p, - unsigned long delta_limit, unsigned long *src_copied, unsigned long *literal_added) { diff --git a/diffcore-rename.c b/diffcore-rename.c index 54a2396653..f7444c86bd 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -145,7 +145,6 @@ static int estimate_similarity(struct diff_filespec *src, * call into this function in that case. */ unsigned long max_size, delta_size, base_size, src_copied, literal_added; - unsigned long delta_limit; int score; /* We deal only with regular files. Symlink renames are handled @@ -191,11 +190,8 @@ static int estimate_similarity(struct diff_filespec *src, if (!dst->cnt_data && diff_populate_filespec(dst, 0)) return 0; - delta_limit = (unsigned long) - (base_size * (MAX_SCORE-minimum_score) / MAX_SCORE); if (diffcore_count_changes(src, dst, &src->cnt_data, &dst->cnt_data, - delta_limit, &src_copied, &literal_added)) return 0; diff --git a/diffcore.h b/diffcore.h index c11b8465fc..6230241354 100644 --- a/diffcore.h +++ b/diffcore.h @@ -142,7 +142,6 @@ extern int diffcore_count_changes(struct diff_filespec *src, struct diff_filespec *dst, void **src_count_p, void **dst_count_p, - unsigned long delta_limit, unsigned long *src_copied, unsigned long *literal_added); diff --git a/dir.c b/dir.c index 3bad1ade8d..bfa8c8a9a5 100644 --- a/dir.c +++ b/dir.c @@ -207,8 +207,9 @@ int within_depth(const char *name, int namelen, return 1; } -#define DO_MATCH_EXCLUDE 1 -#define DO_MATCH_DIRECTORY 2 +#define DO_MATCH_EXCLUDE (1<<0) +#define DO_MATCH_DIRECTORY (1<<1) +#define DO_MATCH_SUBMODULE (1<<2) /* * Does 'match' match the given name? @@ -283,6 +284,32 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix, item->nowildcard_len - prefix)) return MATCHED_FNMATCH; + /* Perform checks to see if "name" is a super set of the pathspec */ + if (flags & DO_MATCH_SUBMODULE) { + /* name is a literal prefix of the pathspec */ + if ((namelen < matchlen) && + (match[namelen] == '/') && + !ps_strncmp(item, match, name, namelen)) + return MATCHED_RECURSIVELY; + + /* name" doesn't match up to the first wild character */ + if (item->nowildcard_len < item->len && + ps_strncmp(item, match, name, + item->nowildcard_len - prefix)) + return 0; + + /* + * Here is where we would perform a wildmatch to check if + * "name" can be matched as a directory (or a prefix) against + * the pathspec. Since wildmatch doesn't have this capability + * at the present we have to punt and say that it is a match, + * potentially returning a false positive + * The submodules themselves will be able to perform more + * accurate matching to determine if the pathspec matches. + */ + return MATCHED_RECURSIVELY; + } + return 0; } @@ -386,6 +413,21 @@ int match_pathspec(const struct pathspec *ps, return negative ? 0 : positive; } +/** + * Check if a submodule is a superset of the pathspec + */ +int submodule_path_match(const struct pathspec *ps, + const char *submodule_name, + char *seen) +{ + int matched = do_match_pathspec(ps, submodule_name, + strlen(submodule_name), + 0, seen, + DO_MATCH_DIRECTORY | + DO_MATCH_SUBMODULE); + return matched; +} + int report_path_error(const char *ps_matched, const struct pathspec *pathspec, const char *prefix) @@ -2195,8 +2237,6 @@ static GIT_PATH_FUNC(git_path_info_exclude, "info/exclude") void setup_standard_excludes(struct dir_struct *dir) { - const char *path; - dir->exclude_per_dir = ".gitignore"; /* core.excludefile defaulting to $XDG_HOME/git/ignore */ @@ -2207,10 +2247,12 @@ void setup_standard_excludes(struct dir_struct *dir) dir->untracked ? &dir->ss_excludes_file : NULL); /* per repository user preference */ - path = git_path_info_exclude(); - if (!access_or_warn(path, R_OK, 0)) - add_excludes_from_file_1(dir, path, - dir->untracked ? &dir->ss_info_exclude : NULL); + if (startup_info->have_repository) { + const char *path = git_path_info_exclude(); + if (!access_or_warn(path, R_OK, 0)) + add_excludes_from_file_1(dir, path, + dir->untracked ? &dir->ss_info_exclude : NULL); + } } int remove_path(const char *name) diff --git a/dir.h b/dir.h index da1a858b3a..97c83bb383 100644 --- a/dir.h +++ b/dir.h @@ -304,6 +304,10 @@ extern int git_fnmatch(const struct pathspec_item *item, const char *pattern, const char *string, int prefix); +extern int submodule_path_match(const struct pathspec *ps, + const char *submodule_name, + char *seen); + static inline int ce_path_match(const struct cache_entry *ce, const struct pathspec *pathspec, char *seen) diff --git a/environment.c b/environment.c index cd5aa57179..0935ec696e 100644 --- a/environment.c +++ b/environment.c @@ -16,7 +16,7 @@ int trust_executable_bit = 1; int trust_ctime = 1; int check_stat = 1; int has_symlinks = 1; -int minimum_abbrev = 4, default_abbrev = 7; +int minimum_abbrev = 4, default_abbrev = -1; int ignore_case; int assume_unchanged; int prefer_symlink_refs; @@ -99,6 +99,8 @@ static char *work_tree; static const char *namespace; static size_t namespace_len; +static const char *super_prefix; + static const char *git_dir, *git_common_dir; static char *git_object_dir, *git_index_file, *git_graft_file; int git_db_env, git_index_env, git_graft_env, git_common_dir_env; @@ -119,6 +121,7 @@ const char * const local_repo_env[] = { NO_REPLACE_OBJECTS_ENVIRONMENT, GIT_REPLACE_REF_BASE_ENVIRONMENT, GIT_PREFIX_ENVIRONMENT, + GIT_SUPER_PREFIX_ENVIRONMENT, GIT_SHALLOW_FILE_ENVIRONMENT, GIT_COMMON_DIR_ENVIRONMENT, NULL @@ -228,6 +231,16 @@ const char *strip_namespace(const char *namespaced_ref) return namespaced_ref + namespace_len; } +const char *get_super_prefix(void) +{ + static int initialized; + if (!initialized) { + super_prefix = getenv(GIT_SUPER_PREFIX_ENVIRONMENT); + initialized = 1; + } + return super_prefix; +} + static int git_work_tree_initialized; /* diff --git a/exec_cmd.c b/exec_cmd.c index 9d5703a157..19ac2146d0 100644 --- a/exec_cmd.c +++ b/exec_cmd.c @@ -38,21 +38,17 @@ char *system_path(const char *path) 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) diff --git a/exec_cmd.h b/exec_cmd.h index 1f6b43378b..ff0b48048a 100644 --- a/exec_cmd.h +++ b/exec_cmd.h @@ -4,7 +4,7 @@ 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); diff --git a/fetch-pack.c b/fetch-pack.c index cb45c346ea..601f0779a1 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -240,7 +240,7 @@ static enum ack_type get_ack(int fd, unsigned char *result_sha1) return ACK; } } - die(_("git fetch_pack: expected ACK/NAK, got '%s'"), line); + die(_("git fetch-pack: expected ACK/NAK, got '%s'"), line); } static void send_request(struct fetch_pack_args *args, diff --git a/git-compat-util.h b/git-compat-util.h index 43718dabae..87237b092b 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -851,11 +851,14 @@ static inline void copy_array(void *dst, const void *src, size_t n, size_t size) * times, and it must be assignable as an lvalue. */ #define FLEX_ALLOC_MEM(x, flexname, buf, len) do { \ - (x) = NULL; /* silence -Wuninitialized for offset calculation */ \ - (x) = xalloc_flex(sizeof(*(x)), (char *)(&((x)->flexname)) - (char *)(x), (buf), (len)); \ + size_t flex_array_len_ = (len); \ + (x) = xcalloc(1, st_add3(sizeof(*(x)), flex_array_len_, 1)); \ + memcpy((void *)(x)->flexname, (buf), flex_array_len_); \ } while (0) #define FLEXPTR_ALLOC_MEM(x, ptrname, buf, len) do { \ - (x) = xalloc_flex(sizeof(*(x)), sizeof(*(x)), (buf), (len)); \ + size_t flex_array_len_ = (len); \ + (x) = xcalloc(1, st_add3(sizeof(*(x)), flex_array_len_, 1)); \ + memcpy((x) + 1, (buf), flex_array_len_); \ (x)->ptrname = (void *)((x)+1); \ } while(0) #define FLEX_ALLOC_STR(x, flexname, str) \ @@ -863,14 +866,6 @@ static inline void copy_array(void *dst, const void *src, size_t n, size_t size) #define FLEXPTR_ALLOC_STR(x, ptrname, str) \ FLEXPTR_ALLOC_MEM((x), ptrname, (str), strlen(str)) -static inline void *xalloc_flex(size_t base_len, size_t offset, - const void *src, size_t src_len) -{ - unsigned char *ret = xcalloc(1, st_add3(base_len, src_len, 1)); - memcpy(ret + offset, src, src_len); - return ret; -} - static inline char *xstrdup_or_null(const char *str) { return str ? xstrdup(str) : NULL; @@ -1106,6 +1101,6 @@ struct tm *git_gmtime_r(const time_t *, struct tm *); #define getc_unlocked(fh) getc(fh) #endif -#endif - extern int cmd_main(int, const char **); + +#endif diff --git a/git-gui/GIT-VERSION-GEN b/git-gui/GIT-VERSION-GEN index a88b6824b9..92373d251a 100755 --- a/git-gui/GIT-VERSION-GEN +++ b/git-gui/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=0.20.GITGUI +DEF_VER=0.21.GITGUI LF=' ' diff --git a/git-gui/Makefile b/git-gui/Makefile index 4f00bdd3d6..fe30be38dc 100644 --- a/git-gui/Makefile +++ b/git-gui/Makefile @@ -259,7 +259,7 @@ lib/tclIndex: $(ALL_LIBFILES) GIT-GUI-VARS rm -f $@ ; \ echo '# Autogenerated by git-gui Makefile' >$@ && \ echo >>$@ && \ - $(foreach p,$(PRELOAD_FILES) $(ALL_LIBFILES),echo '$(subst lib/,,$p)' >>$@ &&) \ + $(foreach p,$(PRELOAD_FILES) $(sort $(ALL_LIBFILES)),echo '$(subst lib/,,$p)' >>$@ &&) \ echo >>$@ ; \ fi diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh index 11048c7a0e..5bc21b878d 100755 --- a/git-gui/git-gui.sh +++ b/git-gui/git-gui.sh @@ -275,6 +275,10 @@ proc is_Cygwin {} { set _iscygwin 0 } else { set _iscygwin 1 + # Handle MSys2 which is only cygwin when MSYSTEM is MSYS. + if {[info exists ::env(MSYSTEM)] && $::env(MSYSTEM) ne "MSYS"} { + set _iscygwin 0 + } } } else { set _iscygwin 0 @@ -530,28 +534,10 @@ proc _lappend_nice {cmd_var} { } proc git {args} { - set opt [list] - - while {1} { - switch -- [lindex $args 0] { - --nice { - _lappend_nice opt - } - - default { - break - } - - } - - set args [lrange $args 1 end] - } - - set cmdp [_git_cmd [lindex $args 0]] - set args [lrange $args 1 end] - - _trace_exec [concat $opt $cmdp $args] - set result [eval exec $opt $cmdp $args] + set fd [eval [list git_read] $args] + fconfigure $fd -translation binary -encoding utf-8 + set result [string trimright [read $fd] "\n"] + close $fd if {$::_trace} { puts stderr "< $result" } @@ -1107,7 +1093,7 @@ git-version proc _parse_config {arr_name args} { [list git_read config] \ $args \ [list --null --list]] - fconfigure $fd_rc -translation binary + fconfigure $fd_rc -translation binary -encoding utf-8 set buf [read $fd_rc] close $fd_rc } @@ -1616,11 +1602,13 @@ proc run_prepare_commit_msg_hook {} { if {[file isfile [gitdir MERGE_MSG]]} { set pcm_source "merge" set fd_mm [open [gitdir MERGE_MSG] r] + fconfigure $fd_mm -encoding utf-8 puts -nonewline $fd_pcm [read $fd_mm] close $fd_mm } elseif {[file isfile [gitdir SQUASH_MSG]]} { set pcm_source "squash" set fd_sm [open [gitdir SQUASH_MSG] r] + fconfigure $fd_sm -encoding utf-8 puts -nonewline $fd_pcm [read $fd_sm] close $fd_sm } else { @@ -1685,7 +1673,7 @@ proc read_diff_index {fd after} { set i [split [string range $buf_rdi $c [expr {$z1 - 2}]] { }] set p [string range $buf_rdi $z1 [expr {$z2 - 1}]] merge_state \ - [encoding convertfrom $p] \ + [encoding convertfrom utf-8 $p] \ [lindex $i 4]? \ [list [lindex $i 0] [lindex $i 2]] \ [list] @@ -1718,7 +1706,7 @@ proc read_diff_files {fd after} { set i [split [string range $buf_rdf $c [expr {$z1 - 2}]] { }] set p [string range $buf_rdf $z1 [expr {$z2 - 1}]] merge_state \ - [encoding convertfrom $p] \ + [encoding convertfrom utf-8 $p] \ ?[lindex $i 4] \ [list] \ [list [lindex $i 0] [lindex $i 2]] @@ -1741,7 +1729,7 @@ proc read_ls_others {fd after} { set pck [split $buf_rlo "\0"] set buf_rlo [lindex $pck end] foreach p [lrange $pck 0 end-1] { - set p [encoding convertfrom $p] + set p [encoding convertfrom utf-8 $p] if {[string index $p end] eq {/}} { set p [string range $p 0 end-1] } @@ -2505,13 +2493,28 @@ proc force_first_diff {after} { } } -proc toggle_or_diff {w x y} { +proc toggle_or_diff {mode w args} { global file_states file_lists current_diff_path ui_index ui_workdir global last_clicked selected_paths - set pos [split [$w index @$x,$y] .] - set lno [lindex $pos 0] - set col [lindex $pos 1] + if {$mode eq "click"} { + foreach {x y} $args break + set pos [split [$w index @$x,$y] .] + foreach {lno col} $pos break + } else { + if {$last_clicked ne {}} { + set lno [lindex $last_clicked 1] + } else { + set lno [expr {int([lindex [$w tag ranges in_diff] 0])}] + } + if {$mode eq "toggle"} { + set col 0; set y 2 + } else { + incr lno [expr {$mode eq "up" ? -1 : 1}] + set col 1 + } + } + set path [lindex $file_lists($w) [expr {$lno - 1}]] if {$path eq {}} { set last_clicked {} @@ -2519,6 +2522,7 @@ proc toggle_or_diff {w x y} { } set last_clicked [list $w $lno] + focus $w array unset selected_paths $ui_index tag remove in_sel 0.0 end $ui_workdir tag remove in_sel 0.0 end @@ -2598,7 +2602,7 @@ proc add_range_to_selection {w x y} { global file_lists last_clicked selected_paths if {[lindex $last_clicked 0] ne $w} { - toggle_or_diff $w $x $y + toggle_or_diff click $w $x $y return } @@ -3007,7 +3011,7 @@ bind all <$M1B-Key-W> {destroy [winfo toplevel %W]} set subcommand_args {} proc usage {} { - set s "usage: $::argv0 $::subcommand $::subcommand_args" + set s "[mc usage:] $::argv0 $::subcommand $::subcommand_args" if {[tk windowingsystem] eq "win32"} { wm withdraw . tk_messageBox -icon info -message $s \ @@ -3139,7 +3143,7 @@ gui { # fall through to setup UI for commits } default { - set err "usage: $argv0 \[{blame|browser|citool}\]" + set err "[mc usage:] $argv0 \[{blame|browser|citool}\]" if {[tk windowingsystem] eq "win32"} { wm withdraw . tk_messageBox -icon error -message $err \ @@ -3178,16 +3182,38 @@ if {$use_ttk} { } pack .vpane -anchor n -side top -fill both -expand 1 +# -- Working Directory File List + +textframe .vpane.files.workdir -height 100 -width 200 +tlabel .vpane.files.workdir.title -text [mc "Unstaged Changes"] \ + -background lightsalmon -foreground black +ttext $ui_workdir -background white -foreground black \ + -borderwidth 0 \ + -width 20 -height 10 \ + -wrap none \ + -takefocus 1 -highlightthickness 1\ + -cursor $cursor_ptr \ + -xscrollcommand {.vpane.files.workdir.sx set} \ + -yscrollcommand {.vpane.files.workdir.sy set} \ + -state disabled +${NS}::scrollbar .vpane.files.workdir.sx -orient h -command [list $ui_workdir xview] +${NS}::scrollbar .vpane.files.workdir.sy -orient v -command [list $ui_workdir yview] +pack .vpane.files.workdir.title -side top -fill x +pack .vpane.files.workdir.sx -side bottom -fill x +pack .vpane.files.workdir.sy -side right -fill y +pack $ui_workdir -side left -fill both -expand 1 + # -- Index File List # -${NS}::frame .vpane.files.index -height 100 -width 200 +textframe .vpane.files.index -height 100 -width 200 tlabel .vpane.files.index.title \ -text [mc "Staged Changes (Will Commit)"] \ -background lightgreen -foreground black -text $ui_index -background white -foreground black \ +ttext $ui_index -background white -foreground black \ -borderwidth 0 \ -width 20 -height 10 \ -wrap none \ + -takefocus 1 -highlightthickness 1\ -cursor $cursor_ptr \ -xscrollcommand {.vpane.files.index.sx set} \ -yscrollcommand {.vpane.files.index.sy set} \ @@ -3199,26 +3225,8 @@ pack .vpane.files.index.sx -side bottom -fill x pack .vpane.files.index.sy -side right -fill y pack $ui_index -side left -fill both -expand 1 -# -- Working Directory File List +# -- Insert the workdir and index into the panes # -${NS}::frame .vpane.files.workdir -height 100 -width 200 -tlabel .vpane.files.workdir.title -text [mc "Unstaged Changes"] \ - -background lightsalmon -foreground black -text $ui_workdir -background white -foreground black \ - -borderwidth 0 \ - -width 20 -height 10 \ - -wrap none \ - -cursor $cursor_ptr \ - -xscrollcommand {.vpane.files.workdir.sx set} \ - -yscrollcommand {.vpane.files.workdir.sy set} \ - -state disabled -${NS}::scrollbar .vpane.files.workdir.sx -orient h -command [list $ui_workdir xview] -${NS}::scrollbar .vpane.files.workdir.sy -orient v -command [list $ui_workdir yview] -pack .vpane.files.workdir.title -side top -fill x -pack .vpane.files.workdir.sx -side bottom -fill x -pack .vpane.files.workdir.sy -side right -fill y -pack $ui_workdir -side left -fill both -expand 1 - .vpane.files add .vpane.files.workdir .vpane.files add .vpane.files.index if {!$use_ttk} { @@ -3301,7 +3309,7 @@ if {![is_enabled nocommit]} { # ${NS}::frame .vpane.lower.commarea.buffer ${NS}::frame .vpane.lower.commarea.buffer.header -set ui_comm .vpane.lower.commarea.buffer.t +set ui_comm .vpane.lower.commarea.buffer.frame.t set ui_coml .vpane.lower.commarea.buffer.header.l if {![is_enabled nocommit]} { @@ -3344,20 +3352,25 @@ if {![is_enabled nocommit]} { pack .vpane.lower.commarea.buffer.header.new -side right } -text $ui_comm -background white -foreground black \ +textframe .vpane.lower.commarea.buffer.frame +ttext $ui_comm -background white -foreground black \ -borderwidth 1 \ -undo true \ -maxundo 20 \ -autoseparators true \ + -takefocus 1 \ + -highlightthickness 1 \ -relief sunken \ -width $repo_config(gui.commitmsgwidth) -height 9 -wrap none \ -font font_diff \ - -yscrollcommand {.vpane.lower.commarea.buffer.sby set} -${NS}::scrollbar .vpane.lower.commarea.buffer.sby \ + -yscrollcommand {.vpane.lower.commarea.buffer.frame.sby set} +${NS}::scrollbar .vpane.lower.commarea.buffer.frame.sby \ -command [list $ui_comm yview] -pack .vpane.lower.commarea.buffer.header -side top -fill x -pack .vpane.lower.commarea.buffer.sby -side right -fill y + +pack .vpane.lower.commarea.buffer.frame.sby -side right -fill y pack $ui_comm -side left -fill y +pack .vpane.lower.commarea.buffer.header -side top -fill x +pack .vpane.lower.commarea.buffer.frame -side left -fill y pack .vpane.lower.commarea.buffer -side left -fill y # -- Commit Message Buffer Context Menu @@ -3455,12 +3468,13 @@ bind_button3 .vpane.lower.diff.header.path "tk_popup $ctxm %X %Y" # -- Diff Body # -${NS}::frame .vpane.lower.diff.body +textframe .vpane.lower.diff.body set ui_diff .vpane.lower.diff.body.t -text $ui_diff -background white -foreground black \ +ttext $ui_diff -background white -foreground black \ -borderwidth 0 \ -width 80 -height 5 -wrap none \ -font font_diff \ + -takefocus 1 -highlightthickness 1 \ -xscrollcommand {.vpane.lower.diff.body.sbx set} \ -yscrollcommand {.vpane.lower.diff.body.sby set} \ -state disabled @@ -3815,10 +3829,10 @@ bind . <$M1B-Key-r> ui_do_rescan bind . <$M1B-Key-R> ui_do_rescan bind . <$M1B-Key-s> do_signoff bind . <$M1B-Key-S> do_signoff -bind . <$M1B-Key-t> do_add_selection -bind . <$M1B-Key-T> do_add_selection -bind . <$M1B-Key-u> do_unstage_selection -bind . <$M1B-Key-U> do_unstage_selection +bind . <$M1B-Key-t> { toggle_or_diff toggle %W } +bind . <$M1B-Key-T> { toggle_or_diff toggle %W } +bind . <$M1B-Key-u> { toggle_or_diff toggle %W } +bind . <$M1B-Key-U> { toggle_or_diff toggle %W } bind . <$M1B-Key-j> do_revert_selection bind . <$M1B-Key-J> do_revert_selection bind . <$M1B-Key-i> do_add_all @@ -3830,9 +3844,11 @@ bind . <$M1B-Key-plus> {show_more_context;break} bind . <$M1B-Key-KP_Add> {show_more_context;break} bind . <$M1B-Key-Return> do_commit foreach i [list $ui_index $ui_workdir] { - bind $i "toggle_or_diff $i %x %y; break" - bind $i <$M1B-Button-1> "add_one_to_selection $i %x %y; break" - bind $i "add_range_to_selection $i %x %y; break" + bind $i { toggle_or_diff click %W %x %y; break } + bind $i <$M1B-Button-1> { add_one_to_selection %W %x %y; break } + bind $i { add_range_to_selection %W %x %y; break } + bind $i { toggle_or_diff up %W; break } + bind $i { toggle_or_diff down %W; break } } unset i diff --git a/git-gui/lib/blame.tcl b/git-gui/lib/blame.tcl index b1d15f4621..a1aeb8b96e 100644 --- a/git-gui/lib/blame.tcl +++ b/git-gui/lib/blame.tcl @@ -70,7 +70,7 @@ constructor new {i_commit i_path i_jump} { set path $i_path make_toplevel top w - wm title $top [append "[appname] ([reponame]): " [mc "File Viewer"]] + wm title $top [mc "%s (%s): File Viewer" [appname] [reponame]] set font_w [font measure font_diff "0"] diff --git a/git-gui/lib/branch_checkout.tcl b/git-gui/lib/branch_checkout.tcl index 2e459a8297..d06037decc 100644 --- a/git-gui/lib/branch_checkout.tcl +++ b/git-gui/lib/branch_checkout.tcl @@ -13,7 +13,7 @@ constructor dialog {} { global use_ttk NS make_dialog top w wm withdraw $w - wm title $top [append "[appname] ([reponame]): " [mc "Checkout Branch"]] + wm title $top [mc "%s (%s): Checkout Branch" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } diff --git a/git-gui/lib/branch_create.tcl b/git-gui/lib/branch_create.tcl index 4bb907705c..ba367d551d 100644 --- a/git-gui/lib/branch_create.tcl +++ b/git-gui/lib/branch_create.tcl @@ -20,7 +20,7 @@ constructor dialog {} { make_dialog top w wm withdraw $w - wm title $top [append "[appname] ([reponame]): " [mc "Create Branch"]] + wm title $top [mc "%s (%s): Create Branch" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } diff --git a/git-gui/lib/branch_delete.tcl b/git-gui/lib/branch_delete.tcl index 867938ec6a..a5051637bb 100644 --- a/git-gui/lib/branch_delete.tcl +++ b/git-gui/lib/branch_delete.tcl @@ -13,7 +13,7 @@ constructor dialog {} { make_dialog top w wm withdraw $w - wm title $top [append "[appname] ([reponame]): " [mc "Delete Branch"]] + wm title $top [mc "%s (%s): Delete Branch" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } @@ -128,7 +128,7 @@ method _delete {} { set b [lindex $i 0] set o [lindex $i 1] if {[catch {git branch -D $b} err]} { - append failed " - $b: $err\n" + append failed [mc " - %s:" $b] " $err\n" } } diff --git a/git-gui/lib/branch_rename.tcl b/git-gui/lib/branch_rename.tcl index 6e510ec2e3..3a2d79a9cc 100644 --- a/git-gui/lib/branch_rename.tcl +++ b/git-gui/lib/branch_rename.tcl @@ -12,7 +12,7 @@ constructor dialog {} { make_dialog top w wm withdraw $w - wm title $top [append "[appname] ([reponame]): " [mc "Rename Branch"]] + wm title $top [mc "%s (%s): Rename Branch" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } diff --git a/git-gui/lib/browser.tcl b/git-gui/lib/browser.tcl index 0328338fda..a982983667 100644 --- a/git-gui/lib/browser.tcl +++ b/git-gui/lib/browser.tcl @@ -24,7 +24,7 @@ constructor new {commit {path {}}} { global cursor_ptr M1B use_ttk NS make_dialog top w wm withdraw $top - wm title $top [append "[appname] ([reponame]): " [mc "File Browser"]] + wm title $top [mc "%s (%s): File Browser" [appname] [reponame]] if {$path ne {}} { if {[string index $path end] ne {/}} { @@ -197,7 +197,7 @@ method _ls {tree_id {name {}}} { $w conf -state disabled set fd [git_read ls-tree -z $tree_id] - fconfigure $fd -blocking 0 -translation binary -encoding binary + fconfigure $fd -blocking 0 -translation binary -encoding utf-8 fileevent $fd readable [cb _read $fd] } @@ -272,7 +272,7 @@ constructor dialog {} { global use_ttk NS make_dialog top w wm withdraw $top - wm title $top [append "[appname] ([reponame]): " [mc "Browse Branch Files"]] + wm title $top [mc "%s (%s): Browse Branch Files" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" wm transient $top . diff --git a/git-gui/lib/commit.tcl b/git-gui/lib/commit.tcl index 01d2cc280b..83620b7cbc 100644 --- a/git-gui/lib/commit.tcl +++ b/git-gui/lib/commit.tcl @@ -2,7 +2,7 @@ # Copyright (C) 2006, 2007 Shawn Pearce proc load_last_commit {} { - global HEAD PARENT MERGE_HEAD commit_type ui_comm + global HEAD PARENT MERGE_HEAD commit_type ui_comm commit_author global repo_config if {[llength $PARENT] == 0} { @@ -34,6 +34,8 @@ You are currently in the middle of a merge that has not been fully completed. Y lappend parents [string range $line 7 end] } elseif {[string match {encoding *} $line]} { set enc [string tolower [string range $line 9 end]] + } elseif {[regexp "author (.*)\\s<(.*)>\\s(\\d.*$)" $line all name email time]} { + set commit_author [list name $name email $email date $time] } } set msg [read $fd] @@ -106,9 +108,10 @@ proc do_signoff {} { } proc create_new_commit {} { - global commit_type ui_comm + global commit_type ui_comm commit_author set commit_type normal + unset -nocomplain commit_author $ui_comm delete 0.0 end $ui_comm edit reset $ui_comm edit modified false @@ -322,11 +325,12 @@ proc commit_writetree {curHEAD msg_p} { } proc commit_committree {fd_wt curHEAD msg_p} { - global HEAD PARENT MERGE_HEAD commit_type + global HEAD PARENT MERGE_HEAD commit_type commit_author global current_branch global ui_comm selected_commit_type global file_states selected_paths rescan_active global repo_config + global env gets $fd_wt tree_id if {[catch {close $fd_wt} err]} { @@ -366,6 +370,9 @@ A rescan will be automatically started now. } } + if {[info exists commit_author]} { + set old_author [commit_author_ident $commit_author] + } # -- Create the commit. # set cmd [list commit-tree $tree_id] @@ -381,8 +388,14 @@ A rescan will be automatically started now. error_popup [strcat [mc "commit-tree failed:"] "\n\n$err"] ui_status [mc "Commit failed."] unlock_index + unset -nocomplain commit_author + commit_author_reset $old_author return } + if {[info exists commit_author]} { + unset -nocomplain commit_author + commit_author_reset $old_author + } # -- Update the HEAD ref. # @@ -509,3 +522,20 @@ proc commit_postcommit_wait {fd_ph cmt_id} { } fconfigure $fd_ph -blocking 0 } + +proc commit_author_ident {details} { + global env + array set author $details + set old [array get env GIT_AUTHOR_*] + set env(GIT_AUTHOR_NAME) $author(name) + set env(GIT_AUTHOR_EMAIL) $author(email) + set env(GIT_AUTHOR_DATE) $author(date) + return $old +} +proc commit_author_reset {details} { + global env + unset env(GIT_AUTHOR_NAME) env(GIT_AUTHOR_EMAIL) env(GIT_AUTHOR_DATE) + if {$details ne {}} { + array set env $details + } +} diff --git a/git-gui/lib/database.tcl b/git-gui/lib/database.tcl index 1f187ed286..85783081e0 100644 --- a/git-gui/lib/database.tcl +++ b/git-gui/lib/database.tcl @@ -54,7 +54,7 @@ proc do_stats {} { set value "$value[lindex $s 2]" } - ${NS}::label $w.stat.l_$name -text "$label:" -anchor w + ${NS}::label $w.stat.l_$name -text [mc "%s:" $label] -anchor w ${NS}::label $w.stat.v_$name -text $value -anchor w grid $w.stat.l_$name $w.stat.v_$name -sticky we -padx {0 5} } @@ -63,7 +63,7 @@ proc do_stats {} { bind $w "grab $w; focus $w.buttons.close" bind $w [list destroy $w] bind $w [list destroy $w] - wm title $w [append "[appname] ([reponame]): " [mc "Database Statistics"]] + wm title $w [mc "%s (%s): Database Statistics" [appname] [reponame]] wm deiconify $w tkwait window $w } diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl index 0d56986215..4cae10a4c7 100644 --- a/git-gui/lib/diff.tcl +++ b/git-gui/lib/diff.tcl @@ -127,6 +127,9 @@ proc show_diff {path w {lno {}} {scroll_pos {}} {callback {}}} { } else { start_show_diff $cont_info } + + global current_diff_path selected_paths + set selected_paths($current_diff_path) 1 } proc show_unmerged_diff {cont_info} { @@ -220,10 +223,9 @@ proc show_other_diff {path w m cont_info} { } $ui_diff conf -state normal if {$type eq {submodule}} { - $ui_diff insert end [append \ - "* " \ - [mc "Git Repository (subproject)"] \ - "\n"] d_info + $ui_diff insert end \ + "* [mc "Git Repository (subproject)"]\n" \ + d_info } elseif {![catch {set type [exec file $path]}]} { set n [string length $path] if {[string equal -length $n $path $type]} { @@ -608,7 +610,7 @@ proc apply_hunk {x y} { puts -nonewline $p $current_diff_header puts -nonewline $p [$ui_diff get $s_lno $e_lno] close $p} err]} { - error_popup [append $failed_msg "\n\n$err"] + error_popup "$failed_msg\n\n$err" unlock_index return } @@ -826,7 +828,7 @@ proc apply_range_or_line {x y} { puts -nonewline $p $current_diff_header puts -nonewline $p $wholepatch close $p} err]} { - error_popup [append $failed_msg "\n\n$err"] + error_popup "$failed_msg\n\n$err" } unlock_index diff --git a/git-gui/lib/error.tcl b/git-gui/lib/error.tcl index c0fa69af56..8968a57f33 100644 --- a/git-gui/lib/error.tcl +++ b/git-gui/lib/error.tcl @@ -17,7 +17,7 @@ proc error_popup {msg} { set cmd [list tk_messageBox \ -icon error \ -type ok \ - -title [append "$title: " [mc "error"]] \ + -title [mc "%s: error" $title] \ -message $msg] if {[winfo ismapped [_error_parent]]} { lappend cmd -parent [_error_parent] @@ -33,7 +33,7 @@ proc warn_popup {msg} { set cmd [list tk_messageBox \ -icon warning \ -type ok \ - -title [append "$title: " [mc "warning"]] \ + -title [mc "%s: warning" $title] \ -message $msg] if {[winfo ismapped [_error_parent]]} { lappend cmd -parent [_error_parent] @@ -77,7 +77,7 @@ proc hook_failed_popup {hook msg {is_fatal 1}} { wm withdraw $w ${NS}::frame $w.m - ${NS}::label $w.m.l1 -text "$hook hook failed:" \ + ${NS}::label $w.m.l1 -text [mc "%s hook failed:" $hook] \ -anchor w \ -justify left \ -font font_uibold @@ -113,7 +113,7 @@ proc hook_failed_popup {hook msg {is_fatal 1}} { bind $w "grab $w; focus $w" bind $w "destroy $w" - wm title $w [strcat "[appname] ([reponame]): " [mc "error"]] + wm title $w [mc "%s (%s): error" [appname] [reponame]] wm deiconify $w tkwait window $w } diff --git a/git-gui/lib/index.tcl b/git-gui/lib/index.tcl index 3a3e534aef..b588db11d9 100644 --- a/git-gui/lib/index.tcl +++ b/git-gui/lib/index.tcl @@ -115,7 +115,7 @@ proc write_update_indexinfo {fd pathList totalCnt batch after} { set info [lindex $s 2] if {$info eq {}} continue - puts -nonewline $fd "$info\t[encoding convertto $path]\0" + puts -nonewline $fd "$info\t[encoding convertto utf-8 $path]\0" display_file $path $new } @@ -186,7 +186,7 @@ proc write_update_index {fd pathList totalCnt batch after} { ?M {set new M_} ?? {continue} } - puts -nonewline $fd "[encoding convertto $path]\0" + puts -nonewline $fd "[encoding convertto utf-8 $path]\0" display_file $path $new } @@ -247,7 +247,7 @@ proc write_checkout_index {fd pathList totalCnt batch after} { ?M - ?T - ?D { - puts -nonewline $fd "[encoding convertto $path]\0" + puts -nonewline $fd "[encoding convertto utf-8 $path]\0" display_file $path ?_ } } diff --git a/git-gui/lib/merge.tcl b/git-gui/lib/merge.tcl index 5ab6f8f102..9f253db5b3 100644 --- a/git-gui/lib/merge.tcl +++ b/git-gui/lib/merge.tcl @@ -112,7 +112,16 @@ method _start {} { close $fh set _last_merged_branch $branch - set cmd [list git merge --strategy=recursive FETCH_HEAD] + if {[git-version >= "2.5.0"]} { + set cmd [list git merge --strategy=recursive FETCH_HEAD] + } else { + set cmd [list git] + lappend cmd merge + lappend cmd --strategy=recursive + lappend cmd [git fmt-merge-msg <[gitdir FETCH_HEAD]] + lappend cmd HEAD + lappend cmd $name + } ui_status [mc "Merging %s and %s..." $current_branch $stitle] set cons [console::new [mc "Merge"] "merge $stitle"] @@ -144,7 +153,7 @@ constructor dialog {} { } make_dialog top w - wm title $top [append "[appname] ([reponame]): " [mc "Merge"]] + wm title $top [mc "%s (%s): Merge" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } diff --git a/git-gui/lib/option.tcl b/git-gui/lib/option.tcl index b5b6b2fea6..e43971bfa3 100644 --- a/git-gui/lib/option.tcl +++ b/git-gui/lib/option.tcl @@ -179,7 +179,7 @@ proc do_options {} { i-* { regexp -- {-(\d+)\.\.(\d+)$} $type _junk min max ${NS}::frame $w.$f.$optid - ${NS}::label $w.$f.$optid.l -text "$text:" + ${NS}::label $w.$f.$optid.l -text [mc "%s:" $text] pack $w.$f.$optid.l -side left -anchor w -fill x tspinbox $w.$f.$optid.v \ -textvariable ${f}_config_new($name) \ @@ -194,7 +194,7 @@ proc do_options {} { c - t { ${NS}::frame $w.$f.$optid - ${NS}::label $w.$f.$optid.l -text "$text:" + ${NS}::label $w.$f.$optid.l -text [mc "%s:" $text] ${NS}::entry $w.$f.$optid.v \ -width 20 \ -textvariable ${f}_config_new($name) @@ -217,7 +217,7 @@ proc do_options {} { s { set opts [eval [lindex $option 3]] ${NS}::frame $w.$f.$optid - ${NS}::label $w.$f.$optid.l -text "$text:" + ${NS}::label $w.$f.$optid.l -text [mc "%s:" $text] if {$use_ttk} { ttk::combobox $w.$f.$optid.v \ -textvariable ${f}_config_new($name) \ @@ -279,7 +279,7 @@ proc do_options {} { [font configure $font -size] ${NS}::frame $w.global.$name - ${NS}::label $w.global.$name.l -text "$text:" + ${NS}::label $w.global.$name.l -text [mc "%s:" $text] ${NS}::button $w.global.$name.b \ -text [mc "Change Font"] \ -command [list \ diff --git a/git-gui/lib/remote.tcl b/git-gui/lib/remote.tcl index 4e5c784418..ef77ed7399 100644 --- a/git-gui/lib/remote.tcl +++ b/git-gui/lib/remote.tcl @@ -246,22 +246,22 @@ proc update_all_remotes_menu_entry {} { if {$have_remote > 1} { make_sure_remote_submenues_exist $remote_m if {[$fetch_m type end] eq "command" \ - && [$fetch_m entrycget end -label] ne "All"} { + && [$fetch_m entrycget end -label] ne [mc "All"]} { $fetch_m insert end separator $fetch_m insert end command \ - -label "All" \ + -label [mc "All"] \ -command fetch_from_all $prune_m insert end separator $prune_m insert end command \ - -label "All" \ + -label [mc "All"] \ -command prune_from_all } } else { if {[winfo exists $fetch_m]} { if {[$fetch_m type end] eq "command" \ - && [$fetch_m entrycget end -label] eq "All"} { + && [$fetch_m entrycget end -label] eq [mc "All"]} { delete_from_menu $fetch_m end delete_from_menu $fetch_m end diff --git a/git-gui/lib/remote_add.tcl b/git-gui/lib/remote_add.tcl index 50029d0cee..480a6b30d0 100644 --- a/git-gui/lib/remote_add.tcl +++ b/git-gui/lib/remote_add.tcl @@ -17,7 +17,7 @@ constructor dialog {} { make_dialog top w wm withdraw $top - wm title $top [append "[appname] ([reponame]): " [mc "Add Remote"]] + wm title $top [mc "%s (%s): Add Remote" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } diff --git a/git-gui/lib/remote_branch_delete.tcl b/git-gui/lib/remote_branch_delete.tcl index fcc06d03a1..5ba9fcadd1 100644 --- a/git-gui/lib/remote_branch_delete.tcl +++ b/git-gui/lib/remote_branch_delete.tcl @@ -26,7 +26,7 @@ constructor dialog {} { global all_remotes M1B use_ttk NS make_dialog top w - wm title $top [append "[appname] ([reponame]): " [mc "Delete Branch Remotely"]] + wm title $top [mc "%s (%s): Delete Branch Remotely" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" } diff --git a/git-gui/lib/shortcut.tcl b/git-gui/lib/shortcut.tcl index 78878ef89d..97d1d7aa02 100644 --- a/git-gui/lib/shortcut.tcl +++ b/git-gui/lib/shortcut.tcl @@ -5,17 +5,20 @@ proc do_windows_shortcut {} { global _gitworktree set fn [tk_getSaveFile \ -parent . \ - -title [append "[appname] ([reponame]): " [mc "Create Desktop Icon"]] \ + -title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ -initialfile "Git [reponame].lnk"] if {$fn != {}} { if {[file extension $fn] ne {.lnk}} { set fn ${fn}.lnk } + # Use git-gui.exe if available (ie: git-for-windows) + set cmdLine [auto_execok git-gui.exe] + if {$cmdLine eq {}} { + set cmdLine [list [info nameofexecutable] \ + [file normalize $::argv0]] + } if {[catch { - win32_create_lnk $fn [list \ - [info nameofexecutable] \ - [file normalize $::argv0] \ - ] \ + win32_create_lnk $fn $cmdLine \ [file normalize $_gitworktree] } err]} { error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"] @@ -37,7 +40,7 @@ proc do_cygwin_shortcut {} { } set fn [tk_getSaveFile \ -parent . \ - -title [append "[appname] ([reponame]): " [mc "Create Desktop Icon"]] \ + -title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ -initialdir $desktop \ -initialfile "Git [reponame].lnk"] if {$fn != {}} { @@ -69,7 +72,7 @@ proc do_macosx_app {} { set fn [tk_getSaveFile \ -parent . \ - -title [append "[appname] ([reponame]): " [mc "Create Desktop Icon"]] \ + -title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ -initialdir [file join $env(HOME) Desktop] \ -initialfile "Git [reponame].app"] if {$fn != {}} { diff --git a/git-gui/lib/themed.tcl b/git-gui/lib/themed.tcl index 8b88d3678b..351a712c8c 100644 --- a/git-gui/lib/themed.tcl +++ b/git-gui/lib/themed.tcl @@ -78,6 +78,57 @@ proc InitTheme {} { } } +# Define a style used for the surround of text widgets. +proc InitEntryFrame {} { + ttk::style theme settings default { + ttk::style layout EntryFrame { + EntryFrame.field -sticky nswe -border 0 -children { + EntryFrame.fill -sticky nswe -children { + EntryFrame.padding -sticky nswe + } + } + } + ttk::style configure EntryFrame -padding 1 -relief sunken + ttk::style map EntryFrame -background {} + } + ttk::style theme settings classic { + ttk::style configure EntryFrame -padding 2 -relief sunken + ttk::style map EntryFrame -background {} + } + ttk::style theme settings alt { + ttk::style configure EntryFrame -padding 2 + ttk::style map EntryFrame -background {} + } + ttk::style theme settings clam { + ttk::style configure EntryFrame -padding 2 + ttk::style map EntryFrame -background {} + } + + # Ignore errors for missing native themes + catch { + ttk::style theme settings winnative { + ttk::style configure EntryFrame -padding 2 + } + ttk::style theme settings xpnative { + ttk::style configure EntryFrame -padding 1 + ttk::style element create EntryFrame.field vsapi \ + EDIT 1 {disabled 4 focus 3 active 2 {} 1} -padding 1 + } + ttk::style theme settings vista { + ttk::style configure EntryFrame -padding 2 + ttk::style element create EntryFrame.field vsapi \ + EDIT 6 {disabled 4 focus 3 active 2 {} 1} -padding 2 + } + } + + bind EntryFrame {%W instate !disabled {%W state active}} + bind EntryFrame {%W state !active} + bind EntryFrame <> { + set pad [ttk::style lookup EntryFrame -padding] + %W configure -padding [expr {$pad eq {} ? 1 : $pad}] + } +} + proc gold_frame {w args} { global use_ttk if {$use_ttk} { @@ -123,7 +174,7 @@ proc paddedlabel {w args} { # place a themed frame over the surface. proc Dialog {w args} { eval [linsert $args 0 toplevel $w -class Dialog] - catch {wm attributes $w -type dialog} + catch {wm attributes $w -type dialog} pave_toplevel $w return $w } @@ -193,6 +244,40 @@ proc tspinbox {w args} { } } +# Create a text widget with any theme specific properties. +proc ttext {w args} { + global use_ttk + if {$use_ttk} { + switch -- [ttk::style theme use] { + "vista" - "xpnative" { + lappend args -highlightthickness 0 -borderwidth 0 + } + } + } + set w [eval [linsert $args 0 text $w]] + if {$use_ttk} { + if {[winfo class [winfo parent $w]] eq "EntryFrame"} { + bind $w {[winfo parent %W] state focus} + bind $w {[winfo parent %W] state !focus} + } + } + return $w +} + +# themed frame suitable for surrounding a text field. +proc textframe {w args} { + global use_ttk + if {$use_ttk} { + if {[catch {ttk::style layout EntryFrame}]} { + InitEntryFrame + } + eval [linsert $args 0 ttk::frame $w -class EntryFrame -style EntryFrame] + } else { + eval [linsert $args 0 frame $w] + } + return $w +} + proc tentry {w args} { global use_ttk if {$use_ttk} { diff --git a/git-gui/lib/tools.tcl b/git-gui/lib/tools.tcl index 6ec94113db..413f1a1700 100644 --- a/git-gui/lib/tools.tcl +++ b/git-gui/lib/tools.tcl @@ -69,6 +69,7 @@ proc tools_populate_one {fullname} { proc tools_exec {fullname} { global repo_config env current_diff_path global current_branch is_detached + global selected_paths if {[is_config_true "guitool.$fullname.needsfile"]} { if {$current_diff_path eq {}} { @@ -100,6 +101,7 @@ proc tools_exec {fullname} { set env(GIT_GUITOOL) $fullname set env(FILENAME) $current_diff_path + set env(FILENAMES) [join [array names selected_paths] \n] if {$is_detached} { set env(CUR_BRANCH) "" } else { @@ -121,6 +123,7 @@ proc tools_exec {fullname} { unset env(GIT_GUITOOL) unset env(FILENAME) + unset env(FILENAMES) unset env(CUR_BRANCH) catch { unset env(ARGS) } catch { unset env(REVISION) } diff --git a/git-gui/lib/tools_dlg.tcl b/git-gui/lib/tools_dlg.tcl index 7eeda9daf2..c05413ce43 100644 --- a/git-gui/lib/tools_dlg.tcl +++ b/git-gui/lib/tools_dlg.tcl @@ -19,7 +19,7 @@ constructor dialog {} { global repo_config use_ttk NS make_dialog top w - wm title $top [append "[appname] ([reponame]): " [mc "Add Tool"]] + wm title $top [mc "%s (%s): Add Tool" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" wm transient $top . @@ -184,7 +184,7 @@ constructor dialog {} { load_config 1 make_dialog top w - wm title $top [append "[appname] ([reponame]): " [mc "Remove Tool"]] + wm title $top [mc "%s (%s): Remove Tool" [appname] [reponame]] if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" wm transient $top . @@ -280,7 +280,7 @@ constructor dialog {fullname} { } make_dialog top w -autodelete 0 - wm title $top [append "[appname] ([reponame]): " $title] + wm title $top "[mc "%s (%s):" [appname] [reponame]] $title" if {$top ne {.}} { wm geometry $top "+[winfo rootx .]+[winfo rooty .]" wm transient $top . diff --git a/git-gui/lib/transport.tcl b/git-gui/lib/transport.tcl index e5d211edea..a1a424aab5 100644 --- a/git-gui/lib/transport.tcl +++ b/git-gui/lib/transport.tcl @@ -226,7 +226,7 @@ proc do_push_anywhere {} { bind $w "grab $w; focus $w.buttons.create" bind $w "destroy $w" bind $w [list start_push_anywhere_action $w] - wm title $w [append "[appname] ([reponame]): " [mc "Push"]] + wm title $w [mc "%s (%s): Push" [appname] [reponame]] wm deiconify $w tkwait window $w } diff --git a/git-gui/po/bg.po b/git-gui/po/bg.po index 4d9b039dc2..5af78f15a8 100644 --- a/git-gui/po/bg.po +++ b/git-gui/po/bg.po @@ -1,15 +1,15 @@ # Bulgarian translation of git-gui po-file. -# Copyright (C) 2012, 2013, 2014, 2015 Alexander Shopov . +# Copyright (C) 2012, 2013, 2014, 2015, 2016 Alexander Shopov . # This file is distributed under the same license as the git package. -# Alexander Shopov , 2012, 2013, 2014, 2015. +# Alexander Shopov , 2012, 2013, 2014, 2015, 2016. # # msgid "" msgstr "" "Project-Id-Version: git-gui master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-04-07 07:37+0300\n" -"PO-Revision-Date: 2015-04-07 07:46+0300\n" +"POT-Creation-Date: 2016-10-13 15:16+0300\n" +"PO-Revision-Date: 2016-10-13 15:16+0300\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -18,33 +18,33 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: git-gui.sh:861 +#: git-gui.sh:865 #, tcl-format msgid "Invalid font specified in %s:" msgstr "Указан е неправилен шрифт в „%s“:" -#: git-gui.sh:915 +#: git-gui.sh:919 msgid "Main Font" msgstr "Основен шрифт" -#: git-gui.sh:916 +#: git-gui.sh:920 msgid "Diff/Console Font" msgstr "Шрифт за разликите/конзолата" -#: git-gui.sh:931 git-gui.sh:945 git-gui.sh:958 git-gui.sh:1048 -#: git-gui.sh:1067 git-gui.sh:3125 +#: git-gui.sh:935 git-gui.sh:949 git-gui.sh:962 git-gui.sh:1052 git-gui.sh:1071 +#: git-gui.sh:3147 msgid "git-gui: fatal error" msgstr "git-gui: фатална грешка" -#: git-gui.sh:932 +#: git-gui.sh:936 msgid "Cannot find git in PATH." msgstr "Командата git липсва в пътя (PATH)." -#: git-gui.sh:959 +#: git-gui.sh:963 msgid "Cannot parse Git version string:" msgstr "Низът с версията на Git не може да бъде интерпретиран:" -#: git-gui.sh:984 +#: git-gui.sh:988 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -63,503 +63,506 @@ msgstr "" "\n" "Да се приеме ли, че „%s“ е версия „1.5.0“?\n" -#: git-gui.sh:1281 +#: git-gui.sh:1285 msgid "Git directory not found:" msgstr "Директорията на Git не е открита:" -#: git-gui.sh:1315 +#: git-gui.sh:1319 msgid "Cannot move to top of working directory:" msgstr "Не може да се премине към родителската директория." -#: git-gui.sh:1323 +#: git-gui.sh:1327 msgid "Cannot use bare repository:" msgstr "Голо хранилище не може да се използва:" -#: git-gui.sh:1331 +#: git-gui.sh:1335 msgid "No working directory" msgstr "Работната директория липсва" -#: git-gui.sh:1503 lib/checkout_op.tcl:306 +#: git-gui.sh:1507 lib/checkout_op.tcl:306 msgid "Refreshing file status..." msgstr "Обновяване на състоянието на файла…" -#: git-gui.sh:1563 +#: git-gui.sh:1567 msgid "Scanning for modified files ..." msgstr "Проверка за променени файлове…" -#: git-gui.sh:1639 +#: git-gui.sh:1645 msgid "Calling prepare-commit-msg hook..." msgstr "Куката „prepare-commit-msg“ се изпълнява в момента…" -#: git-gui.sh:1656 +#: git-gui.sh:1662 msgid "Commit declined by prepare-commit-msg hook." msgstr "Подаването е отхвърлено от куката „prepare-commit-msg“." -#: git-gui.sh:1814 lib/browser.tcl:252 +#: git-gui.sh:1820 lib/browser.tcl:252 msgid "Ready." msgstr "Готово." -#: git-gui.sh:1978 +#: git-gui.sh:1984 #, tcl-format msgid "" "Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." msgstr "" -"Достигнат е максималният брой файлове за показване (gui.maxfilesdisplayed = " -"%s). Файловете са общо %s." +"Достигнат е максималният размер на списъка за извеждане(gui." +"maxfilesdisplayed = %s), съответно не са показани всички %s файла." -#: git-gui.sh:2101 +#: git-gui.sh:2107 msgid "Unmodified" msgstr "Непроменен" -#: git-gui.sh:2103 +#: git-gui.sh:2109 msgid "Modified, not staged" msgstr "Променен, но не е в индекса" -#: git-gui.sh:2104 git-gui.sh:2116 +#: git-gui.sh:2110 git-gui.sh:2122 msgid "Staged for commit" msgstr "В индекса за подаване" -#: git-gui.sh:2105 git-gui.sh:2117 +#: git-gui.sh:2111 git-gui.sh:2123 msgid "Portions staged for commit" msgstr "Части са в индекса за подаване" -#: git-gui.sh:2106 git-gui.sh:2118 +#: git-gui.sh:2112 git-gui.sh:2124 msgid "Staged for commit, missing" msgstr "В индекса за подаване, но липсва" -#: git-gui.sh:2108 +#: git-gui.sh:2114 msgid "File type changed, not staged" msgstr "Видът на файла е сменен, но не е в индекса" -#: git-gui.sh:2109 git-gui.sh:2110 +#: git-gui.sh:2115 git-gui.sh:2116 msgid "File type changed, old type staged for commit" -msgstr "Видът на файла е сменен, но в индекса е все още старият" +msgstr "Видът на файла е сменен, но новият вид не е в индекса" -#: git-gui.sh:2111 +#: git-gui.sh:2117 msgid "File type changed, staged" msgstr "Видът на файла е сменен и е в индекса" -#: git-gui.sh:2112 +#: git-gui.sh:2118 msgid "File type change staged, modification not staged" -msgstr "Видът на файла е сменен, но промяната не е в индекса" +msgstr "Видът на файла е сменен в индекса, но не и съдържанието" -#: git-gui.sh:2113 +#: git-gui.sh:2119 msgid "File type change staged, file missing" -msgstr "Видът на файла е сменен, файлът липсва" +msgstr "Видът на файла е сменен в индекса, но файлът липсва" -#: git-gui.sh:2115 +#: git-gui.sh:2121 msgid "Untracked, not staged" msgstr "Неследен" -#: git-gui.sh:2120 +#: git-gui.sh:2126 msgid "Missing" msgstr "Липсващ" -#: git-gui.sh:2121 +#: git-gui.sh:2127 msgid "Staged for removal" msgstr "В индекса за изтриване" -#: git-gui.sh:2122 +#: git-gui.sh:2128 msgid "Staged for removal, still present" msgstr "В индекса за изтриване, но още го има" -#: git-gui.sh:2124 git-gui.sh:2125 git-gui.sh:2126 git-gui.sh:2127 -#: git-gui.sh:2128 git-gui.sh:2129 +#: git-gui.sh:2130 git-gui.sh:2131 git-gui.sh:2132 git-gui.sh:2133 +#: git-gui.sh:2134 git-gui.sh:2135 msgid "Requires merge resolution" msgstr "Изисква коригиране при сливане" -#: git-gui.sh:2164 +#: git-gui.sh:2170 msgid "Starting gitk... please wait..." msgstr "Стартиране на „gitk“…, изчакайте…" -#: git-gui.sh:2176 +#: git-gui.sh:2182 msgid "Couldn't find gitk in PATH" msgstr "Командата „gitk“ липсва в пътищата, определени от променливата PATH." -#: git-gui.sh:2235 +#: git-gui.sh:2241 msgid "Couldn't find git gui in PATH" msgstr "" "Командата „git gui“ липсва в пътищата, определени от променливата PATH." -#: git-gui.sh:2654 lib/choose_repository.tcl:41 +#: git-gui.sh:2676 lib/choose_repository.tcl:41 msgid "Repository" msgstr "Хранилище" -#: git-gui.sh:2655 +#: git-gui.sh:2677 msgid "Edit" msgstr "Редактиране" -#: git-gui.sh:2657 lib/choose_rev.tcl:567 +#: git-gui.sh:2679 lib/choose_rev.tcl:567 msgid "Branch" msgstr "Клон" -#: git-gui.sh:2660 lib/choose_rev.tcl:554 +#: git-gui.sh:2682 lib/choose_rev.tcl:554 msgid "Commit@@noun" msgstr "Подаване" -#: git-gui.sh:2663 lib/merge.tcl:123 lib/merge.tcl:152 lib/merge.tcl:170 +#: git-gui.sh:2685 lib/merge.tcl:127 lib/merge.tcl:174 msgid "Merge" msgstr "Сливане" -#: git-gui.sh:2664 lib/choose_rev.tcl:563 +#: git-gui.sh:2686 lib/choose_rev.tcl:563 msgid "Remote" msgstr "Отдалечено хранилище" -#: git-gui.sh:2667 +#: git-gui.sh:2689 msgid "Tools" msgstr "Команди" -#: git-gui.sh:2676 +#: git-gui.sh:2698 msgid "Explore Working Copy" msgstr "Разглеждане на работното копие" -#: git-gui.sh:2682 +#: git-gui.sh:2704 msgid "Git Bash" msgstr "Bash за Git" -#: git-gui.sh:2692 +#: git-gui.sh:2714 msgid "Browse Current Branch's Files" msgstr "Разглеждане на файловете в текущия клон" -#: git-gui.sh:2696 +#: git-gui.sh:2718 msgid "Browse Branch Files..." msgstr "Разглеждане на текущия клон…" -#: git-gui.sh:2701 +#: git-gui.sh:2723 msgid "Visualize Current Branch's History" msgstr "Визуализация на историята на текущия клон" -#: git-gui.sh:2705 +#: git-gui.sh:2727 msgid "Visualize All Branch History" msgstr "Визуализация на историята на всички клонове" -#: git-gui.sh:2712 +#: git-gui.sh:2734 #, tcl-format msgid "Browse %s's Files" -msgstr "Разглеждане на файловете в %s" +msgstr "Разглеждане на файловете в „%s“" -#: git-gui.sh:2714 +#: git-gui.sh:2736 #, tcl-format msgid "Visualize %s's History" -msgstr "Визуализация на историята на %s" +msgstr "Визуализация на историята на „%s“" -#: git-gui.sh:2719 lib/database.tcl:40 lib/database.tcl:66 +#: git-gui.sh:2741 lib/database.tcl:40 msgid "Database Statistics" msgstr "Статистика на базата от данни" -#: git-gui.sh:2722 lib/database.tcl:33 +#: git-gui.sh:2744 lib/database.tcl:33 msgid "Compress Database" msgstr "Компресиране на базата от данни" -#: git-gui.sh:2725 +#: git-gui.sh:2747 msgid "Verify Database" msgstr "Проверка на базата от данни" -#: git-gui.sh:2732 git-gui.sh:2736 git-gui.sh:2740 lib/shortcut.tcl:8 -#: lib/shortcut.tcl:40 lib/shortcut.tcl:72 +#: git-gui.sh:2754 git-gui.sh:2758 git-gui.sh:2762 msgid "Create Desktop Icon" msgstr "Добавяне на икона на работния плот" -#: git-gui.sh:2748 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201 +#: git-gui.sh:2770 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201 msgid "Quit" msgstr "Спиране на програмата" -#: git-gui.sh:2756 +#: git-gui.sh:2778 msgid "Undo" msgstr "Отмяна" -#: git-gui.sh:2759 +#: git-gui.sh:2781 msgid "Redo" msgstr "Повторение" -#: git-gui.sh:2763 git-gui.sh:3368 +#: git-gui.sh:2785 git-gui.sh:3399 msgid "Cut" msgstr "Отрязване" -#: git-gui.sh:2766 git-gui.sh:3371 git-gui.sh:3445 git-gui.sh:3530 +#: git-gui.sh:2788 git-gui.sh:3402 git-gui.sh:3476 git-gui.sh:3562 #: lib/console.tcl:69 msgid "Copy" msgstr "Копиране" -#: git-gui.sh:2769 git-gui.sh:3374 +#: git-gui.sh:2791 git-gui.sh:3405 msgid "Paste" msgstr "Поставяне" -#: git-gui.sh:2772 git-gui.sh:3377 lib/remote_branch_delete.tcl:39 -#: lib/branch_delete.tcl:28 +#: git-gui.sh:2794 git-gui.sh:3408 lib/branch_delete.tcl:28 +#: lib/remote_branch_delete.tcl:39 msgid "Delete" msgstr "Изтриване" -#: git-gui.sh:2776 git-gui.sh:3381 git-gui.sh:3534 lib/console.tcl:71 +#: git-gui.sh:2798 git-gui.sh:3412 git-gui.sh:3566 lib/console.tcl:71 msgid "Select All" msgstr "Избиране на всичко" -#: git-gui.sh:2785 +#: git-gui.sh:2807 msgid "Create..." msgstr "Създаване…" -#: git-gui.sh:2791 +#: git-gui.sh:2813 msgid "Checkout..." msgstr "Изтегляне…" -#: git-gui.sh:2797 +#: git-gui.sh:2819 msgid "Rename..." msgstr "Преименуване…" -#: git-gui.sh:2802 +#: git-gui.sh:2824 msgid "Delete..." msgstr "Изтриване…" -#: git-gui.sh:2807 +#: git-gui.sh:2829 msgid "Reset..." msgstr "Отмяна на промените…" -#: git-gui.sh:2817 +#: git-gui.sh:2839 msgid "Done" msgstr "Готово" -#: git-gui.sh:2819 +#: git-gui.sh:2841 msgid "Commit@@verb" msgstr "Подаване" -#: git-gui.sh:2828 git-gui.sh:3309 +#: git-gui.sh:2850 git-gui.sh:3335 msgid "New Commit" msgstr "Ново подаване" -#: git-gui.sh:2836 git-gui.sh:3316 +#: git-gui.sh:2858 git-gui.sh:3342 msgid "Amend Last Commit" msgstr "Поправяне на последното подаване" -#: git-gui.sh:2846 git-gui.sh:3270 lib/remote_branch_delete.tcl:101 +#: git-gui.sh:2868 git-gui.sh:3296 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "Обновяване" -#: git-gui.sh:2852 +#: git-gui.sh:2874 msgid "Stage To Commit" msgstr "Към индекса за подаване" -#: git-gui.sh:2858 +#: git-gui.sh:2880 msgid "Stage Changed Files To Commit" msgstr "Всички променени файлове към индекса за подаване" -#: git-gui.sh:2864 +#: git-gui.sh:2886 msgid "Unstage From Commit" msgstr "Изваждане от индекса за подаване" -#: git-gui.sh:2870 lib/index.tcl:442 +#: git-gui.sh:2892 lib/index.tcl:442 msgid "Revert Changes" msgstr "Връщане на оригинала" -#: git-gui.sh:2878 git-gui.sh:3581 git-gui.sh:3612 +#: git-gui.sh:2900 git-gui.sh:3613 git-gui.sh:3644 msgid "Show Less Context" msgstr "По-малко контекст" -#: git-gui.sh:2882 git-gui.sh:3585 git-gui.sh:3616 +#: git-gui.sh:2904 git-gui.sh:3617 git-gui.sh:3648 msgid "Show More Context" msgstr "Повече контекст" -#: git-gui.sh:2889 git-gui.sh:3283 git-gui.sh:3392 +#: git-gui.sh:2911 git-gui.sh:3309 git-gui.sh:3423 msgid "Sign Off" msgstr "Подписване" -#: git-gui.sh:2905 +#: git-gui.sh:2927 msgid "Local Merge..." msgstr "Локално сливане…" -#: git-gui.sh:2910 +#: git-gui.sh:2932 msgid "Abort Merge..." msgstr "Преустановяване на сливане…" -#: git-gui.sh:2922 git-gui.sh:2950 +#: git-gui.sh:2944 git-gui.sh:2972 msgid "Add..." msgstr "Добавяне…" -#: git-gui.sh:2926 +#: git-gui.sh:2948 msgid "Push..." -msgstr "Избутване…" +msgstr "Изтласкване…" -#: git-gui.sh:2930 +#: git-gui.sh:2952 msgid "Delete Branch..." msgstr "Изтриване на клон…" -#: git-gui.sh:2940 git-gui.sh:3563 +#: git-gui.sh:2962 git-gui.sh:3595 msgid "Options..." msgstr "Опции…" -#: git-gui.sh:2951 +#: git-gui.sh:2973 msgid "Remove..." msgstr "Премахване…" -#: git-gui.sh:2960 lib/choose_repository.tcl:55 +#: git-gui.sh:2982 lib/choose_repository.tcl:55 msgid "Help" msgstr "Помощ" -#: git-gui.sh:2964 git-gui.sh:2968 lib/choose_repository.tcl:49 -#: lib/choose_repository.tcl:58 lib/about.tcl:14 +#: git-gui.sh:2986 git-gui.sh:2990 lib/about.tcl:14 +#: lib/choose_repository.tcl:49 lib/choose_repository.tcl:58 #, tcl-format msgid "About %s" msgstr "Относно %s" -#: git-gui.sh:2992 +#: git-gui.sh:3014 msgid "Online Documentation" msgstr "Документация в Интернет" -#: git-gui.sh:2995 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61 +#: git-gui.sh:3017 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61 msgid "Show SSH Key" msgstr "Показване на ключа за SSH" -#: git-gui.sh:3014 git-gui.sh:3146 +#: git-gui.sh:3032 git-gui.sh:3164 +msgid "usage:" +msgstr "употреба:" + +#: git-gui.sh:3036 git-gui.sh:3168 msgid "Usage" msgstr "Употреба" -#: git-gui.sh:3095 lib/blame.tcl:573 +#: git-gui.sh:3117 lib/blame.tcl:573 msgid "Error" msgstr "Грешка" -#: git-gui.sh:3126 +#: git-gui.sh:3148 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" msgstr "" "ФАТАЛНА ГРЕШКА: пътят %s не може да бъде открит: такъв файл или директория " "няма" -#: git-gui.sh:3159 +#: git-gui.sh:3181 msgid "Current Branch:" msgstr "Текущ клон:" -#: git-gui.sh:3185 -msgid "Staged Changes (Will Commit)" -msgstr "Промени в индекса (за подаване)" - -#: git-gui.sh:3205 +#: git-gui.sh:3206 msgid "Unstaged Changes" msgstr "Промени извън индекса" -#: git-gui.sh:3276 +#: git-gui.sh:3228 +msgid "Staged Changes (Will Commit)" +msgstr "Промени в индекса (за подаване)" + +#: git-gui.sh:3302 msgid "Stage Changed" msgstr "Индексът е променен" -#: git-gui.sh:3295 lib/transport.tcl:137 lib/transport.tcl:229 +#: git-gui.sh:3321 lib/transport.tcl:137 msgid "Push" msgstr "Изтласкване" -#: git-gui.sh:3330 +#: git-gui.sh:3356 msgid "Initial Commit Message:" msgstr "Първоначално съобщение при подаване:" -#: git-gui.sh:3331 +#: git-gui.sh:3357 msgid "Amended Commit Message:" msgstr "Поправено съобщение при подаване:" -#: git-gui.sh:3332 +#: git-gui.sh:3358 msgid "Amended Initial Commit Message:" msgstr "Поправено първоначално съобщение при подаване:" -#: git-gui.sh:3333 +#: git-gui.sh:3359 msgid "Amended Merge Commit Message:" msgstr "Поправено съобщение при подаване със сливане:" -#: git-gui.sh:3334 +#: git-gui.sh:3360 msgid "Merge Commit Message:" msgstr "Съобщение при подаване със сливане:" -#: git-gui.sh:3335 +#: git-gui.sh:3361 msgid "Commit Message:" msgstr "Съобщение при подаване:" -#: git-gui.sh:3384 git-gui.sh:3538 lib/console.tcl:73 +#: git-gui.sh:3415 git-gui.sh:3570 lib/console.tcl:73 msgid "Copy All" msgstr "Копиране на всичко" -#: git-gui.sh:3408 lib/blame.tcl:105 +#: git-gui.sh:3439 lib/blame.tcl:105 msgid "File:" msgstr "Файл:" -#: git-gui.sh:3526 +#: git-gui.sh:3558 msgid "Refresh" msgstr "Обновяване" -#: git-gui.sh:3547 +#: git-gui.sh:3579 msgid "Decrease Font Size" msgstr "По-едър шрифт" -#: git-gui.sh:3551 +#: git-gui.sh:3583 msgid "Increase Font Size" msgstr "По-дребен шрифт" -#: git-gui.sh:3559 lib/blame.tcl:294 +#: git-gui.sh:3591 lib/blame.tcl:294 msgid "Encoding" msgstr "Кодиране" -#: git-gui.sh:3570 +#: git-gui.sh:3602 msgid "Apply/Reverse Hunk" msgstr "Прилагане/връщане на парче" -#: git-gui.sh:3575 +#: git-gui.sh:3607 msgid "Apply/Reverse Line" msgstr "Прилагане/връщане на ред" -#: git-gui.sh:3594 +#: git-gui.sh:3626 msgid "Run Merge Tool" msgstr "Изпълнение на програмата за сливане" -#: git-gui.sh:3599 +#: git-gui.sh:3631 msgid "Use Remote Version" msgstr "Версия от отдалеченото хранилище" -#: git-gui.sh:3603 +#: git-gui.sh:3635 msgid "Use Local Version" msgstr "Локална версия" -#: git-gui.sh:3607 +#: git-gui.sh:3639 msgid "Revert To Base" msgstr "Връщане към родителската версия" -#: git-gui.sh:3625 +#: git-gui.sh:3657 msgid "Visualize These Changes In The Submodule" msgstr "Визуализиране на промените в подмодула" -#: git-gui.sh:3629 +#: git-gui.sh:3661 msgid "Visualize Current Branch History In The Submodule" msgstr "Визуализация на историята на текущия клон в историята за подмодула" -#: git-gui.sh:3633 +#: git-gui.sh:3665 msgid "Visualize All Branch History In The Submodule" msgstr "Визуализация на историята на всички клони в историята за подмодула" -#: git-gui.sh:3638 +#: git-gui.sh:3670 msgid "Start git gui In The Submodule" msgstr "Стартиране на „git gui“ за подмодула" -#: git-gui.sh:3673 +#: git-gui.sh:3705 msgid "Unstage Hunk From Commit" msgstr "Изваждане на парчето от подаването" -#: git-gui.sh:3675 +#: git-gui.sh:3707 msgid "Unstage Lines From Commit" msgstr "Изваждане на редовете от подаването" -#: git-gui.sh:3677 +#: git-gui.sh:3709 msgid "Unstage Line From Commit" msgstr "Изваждане на реда от подаването" -#: git-gui.sh:3680 +#: git-gui.sh:3712 msgid "Stage Hunk For Commit" msgstr "Добавяне на парчето за подаване" -#: git-gui.sh:3682 +#: git-gui.sh:3714 msgid "Stage Lines For Commit" msgstr "Добавяне на редовете за подаване" -#: git-gui.sh:3684 +#: git-gui.sh:3716 msgid "Stage Line For Commit" msgstr "Добавяне на реда за подаване" -#: git-gui.sh:3709 +#: git-gui.sh:3741 msgid "Initializing..." msgstr "Инициализиране…" -#: git-gui.sh:3852 +#: git-gui.sh:3886 #, tcl-format msgid "" "Possible environment issues exist.\n" @@ -576,7 +579,7 @@ msgstr "" "от %s:\n" "\n" -#: git-gui.sh:3881 +#: git-gui.sh:3915 msgid "" "\n" "This is due to a known issue with the\n" @@ -586,7 +589,7 @@ msgstr "" "Това е познат проблем и се дължи на\n" "версията на Tcl включена в Cygwin." -#: git-gui.sh:3886 +#: git-gui.sh:3920 #, tcl-format msgid "" "\n" @@ -602,199 +605,126 @@ msgstr "" "е да поставите настройките „user.name“ и\n" "„user.email“ в личния си файл „~/.gitconfig“.\n" -#: lib/spellcheck.tcl:57 -msgid "Unsupported spell checker" -msgstr "Тази програма за проверка на правописа не се поддържа" - -#: lib/spellcheck.tcl:65 -msgid "Spell checking is unavailable" -msgstr "Липсва програма за проверка на правописа" - -#: lib/spellcheck.tcl:68 -msgid "Invalid spell checking configuration" -msgstr "Неправилни настройки на проверката на правописа" +#: lib/about.tcl:26 +msgid "git-gui - a graphical user interface for Git." +msgstr "git-gui — графичен интерфейс за Git." -#: lib/spellcheck.tcl:70 +#: lib/blame.tcl:73 #, tcl-format -msgid "Reverting dictionary to %s." -msgstr "Ползване на речник за език „%s“." - -#: lib/spellcheck.tcl:73 -msgid "Spell checker silently failed on startup" -msgstr "Програмата за правопис даже не стартира успешно." - -#: lib/spellcheck.tcl:80 -msgid "Unrecognized spell checker" -msgstr "Непозната програма за проверка на правописа" - -#: lib/spellcheck.tcl:186 -msgid "No Suggestions" -msgstr "Няма предложения" - -#: lib/spellcheck.tcl:388 -msgid "Unexpected EOF from spell checker" -msgstr "Неочакван край на файл от програмата за проверка на правописа" - -#: lib/spellcheck.tcl:392 -msgid "Spell Checker Failed" -msgstr "Грешка в програмата за проверка на правописа" - -#: lib/remote_add.tcl:20 -msgid "Add Remote" -msgstr "Добавяне на отдалечено хранилище" - -#: lib/remote_add.tcl:25 -msgid "Add New Remote" -msgstr "Добавяне на отдалечено хранилище" - -#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 -msgid "Add" -msgstr "Добавяне" - -#: lib/remote_add.tcl:34 lib/browser.tcl:292 lib/branch_checkout.tcl:30 -#: lib/transport.tcl:141 lib/branch_rename.tcl:32 lib/choose_font.tcl:45 -#: lib/option.tcl:127 lib/tools_dlg.tcl:41 lib/tools_dlg.tcl:202 -#: lib/tools_dlg.tcl:345 lib/remote_branch_delete.tcl:43 -#: lib/checkout_op.tcl:579 lib/branch_create.tcl:37 lib/branch_delete.tcl:34 -#: lib/merge.tcl:174 -msgid "Cancel" -msgstr "Отказване" - -#: lib/remote_add.tcl:39 -msgid "Remote Details" -msgstr "Данни за отдалеченото хранилище" - -#: lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 lib/branch_create.tcl:44 -msgid "Name:" -msgstr "Име:" +msgid "%s (%s): File Viewer" +msgstr "%s (%s): Преглед на файлове" -#: lib/remote_add.tcl:50 -msgid "Location:" -msgstr "Местоположение:" +#: lib/blame.tcl:79 +msgid "Commit:" +msgstr "Подаване:" -#: lib/remote_add.tcl:60 -msgid "Further Action" -msgstr "Следващо действие" +#: lib/blame.tcl:280 +msgid "Copy Commit" +msgstr "Копиране на подаване" -#: lib/remote_add.tcl:63 -msgid "Fetch Immediately" -msgstr "Незабавно доставяне" +#: lib/blame.tcl:284 +msgid "Find Text..." +msgstr "Търсене на текст…" -#: lib/remote_add.tcl:69 -msgid "Initialize Remote Repository and Push" -msgstr "Инициализиране на отдалеченото хранилище и изтласкване на промените" +#: lib/blame.tcl:288 +msgid "Goto Line..." +msgstr "Към ред…" -#: lib/remote_add.tcl:75 -msgid "Do Nothing Else Now" -msgstr "Да не се прави нищо" +#: lib/blame.tcl:297 +msgid "Do Full Copy Detection" +msgstr "Пълно търсене на копиране" -#: lib/remote_add.tcl:100 -msgid "Please supply a remote name." -msgstr "Задайте име за отдалеченото хранилище." +#: lib/blame.tcl:301 +msgid "Show History Context" +msgstr "Показване на контекста от историята" -#: lib/remote_add.tcl:113 -#, tcl-format -msgid "'%s' is not an acceptable remote name." -msgstr "Отдалечено хранилище не може да се казва „%s“." +#: lib/blame.tcl:304 +msgid "Blame Parent Commit" +msgstr "Анотиране на родителското подаване" -#: lib/remote_add.tcl:124 +#: lib/blame.tcl:466 #, tcl-format -msgid "Failed to add remote '%s' of location '%s'." -msgstr "Неуспешно добавяне на отдалеченото хранилище „%s“ от адрес „%s“." +msgid "Reading %s..." +msgstr "Чете се „%s“…" -#: lib/remote_add.tcl:132 lib/transport.tcl:6 -#, tcl-format -msgid "fetch %s" -msgstr "доставяне на „%s“" +#: lib/blame.tcl:594 +msgid "Loading copy/move tracking annotations..." +msgstr "Зареждане на анотациите за проследяване на копирането/преместването…" -#: lib/remote_add.tcl:133 -#, tcl-format -msgid "Fetching the %s" -msgstr "Доставяне на „%s“" +#: lib/blame.tcl:614 +msgid "lines annotated" +msgstr "реда анотирани" -#: lib/remote_add.tcl:156 -#, tcl-format -msgid "Do not know how to initialize repository at location '%s'." -msgstr "Хранилището с местоположение „%s“ не може да бъде инициализирано." +#: lib/blame.tcl:806 +msgid "Loading original location annotations..." +msgstr "Зареждане на анотациите за първоначалното местоположение…" -#: lib/remote_add.tcl:162 lib/transport.tcl:54 lib/transport.tcl:92 -#: lib/transport.tcl:110 -#, tcl-format -msgid "push %s" -msgstr "изтласкване на „%s“" +#: lib/blame.tcl:809 +msgid "Annotation complete." +msgstr "Анотирането завърши." -#: lib/remote_add.tcl:163 -#, tcl-format -msgid "Setting up the %s (at %s)" -msgstr "Добавяне на хранилище „%s“ (с адрес „%s“)" +#: lib/blame.tcl:839 +msgid "Busy" +msgstr "Операцията не е завършила" -#: lib/browser.tcl:17 -msgid "Starting..." -msgstr "Стартиране…" +#: lib/blame.tcl:840 +msgid "Annotation process is already running." +msgstr "В момента тече процес на анотиране." -#: lib/browser.tcl:27 -msgid "File Browser" -msgstr "Файлов браузър" +#: lib/blame.tcl:879 +msgid "Running thorough copy detection..." +msgstr "Изпълнява се цялостен процес на откриване на копиране…" -#: lib/browser.tcl:132 lib/browser.tcl:149 -#, tcl-format -msgid "Loading %s..." -msgstr "Зареждане на „%s“…" +#: lib/blame.tcl:947 +msgid "Loading annotation..." +msgstr "Зареждане на анотации…" -#: lib/browser.tcl:193 -msgid "[Up To Parent]" -msgstr "[Към родителя]" +#: lib/blame.tcl:1000 +msgid "Author:" +msgstr "Автор:" -#: lib/browser.tcl:275 lib/browser.tcl:282 -msgid "Browse Branch Files" -msgstr "Разглеждане на файловете в клона" +#: lib/blame.tcl:1004 +msgid "Committer:" +msgstr "Подал:" -#: lib/browser.tcl:288 lib/choose_repository.tcl:422 -#: lib/choose_repository.tcl:509 lib/choose_repository.tcl:518 -#: lib/choose_repository.tcl:1074 -msgid "Browse" -msgstr "Разглеждане" +#: lib/blame.tcl:1009 +msgid "Original File:" +msgstr "Първоначален файл:" -#: lib/browser.tcl:297 lib/branch_checkout.tcl:35 lib/tools_dlg.tcl:321 -msgid "Revision" -msgstr "Версия" +#: lib/blame.tcl:1057 +msgid "Cannot find HEAD commit:" +msgstr "Подаването за връх „HEAD“ не може да се открие:" -#: lib/tools.tcl:75 -#, tcl-format -msgid "Running %s requires a selected file." -msgstr "За изпълнението на „%s“ трябва да изберете файл." +#: lib/blame.tcl:1112 +msgid "Cannot find parent commit:" +msgstr "Родителското подаване не може да бъде открито" -#: lib/tools.tcl:91 -#, tcl-format -msgid "Are you sure you want to run %1$s on file \"%2$s\"?" -msgstr "Сигурни ли сте, че искате да изпълните „%1$s“ върху файла „%2$s“?" +#: lib/blame.tcl:1127 +msgid "Unable to display parent" +msgstr "Родителят не може да бъде показан" -#: lib/tools.tcl:95 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "Сигурни ли сте, че искате да изпълните „%s“?" +#: lib/blame.tcl:1128 lib/diff.tcl:358 +msgid "Error loading diff:" +msgstr "Грешка при зареждане на разлика:" -#: lib/tools.tcl:116 -#, tcl-format -msgid "Tool: %s" -msgstr "Команда: %s" +#: lib/blame.tcl:1269 +msgid "Originally By:" +msgstr "Първоначално от:" -#: lib/tools.tcl:117 -#, tcl-format -msgid "Running: %s" -msgstr "Изпълнение: %s" +#: lib/blame.tcl:1275 +msgid "In File:" +msgstr "Във файл:" -#: lib/tools.tcl:155 -#, tcl-format -msgid "Tool completed successfully: %s" -msgstr "Командата завърши успешно: %s" +#: lib/blame.tcl:1280 +msgid "Copied Or Moved Here By:" +msgstr "Копирано или преместено тук от:" -#: lib/tools.tcl:157 +#: lib/branch_checkout.tcl:16 #, tcl-format -msgid "Tool failed: %s" -msgstr "Командата върна грешка: %s" +msgid "%s (%s): Checkout Branch" +msgstr "%s (%s): Клон за изтегляне" -#: lib/branch_checkout.tcl:16 lib/branch_checkout.tcl:21 +#: lib/branch_checkout.tcl:21 msgid "Checkout Branch" msgstr "Клон за изтегляне" @@ -802,7 +732,19 @@ msgstr "Клон за изтегляне" msgid "Checkout" msgstr "Изтегляне" -#: lib/branch_checkout.tcl:39 lib/option.tcl:310 lib/branch_create.tcl:69 +#: lib/branch_checkout.tcl:30 lib/branch_create.tcl:37 lib/branch_delete.tcl:34 +#: lib/branch_rename.tcl:32 lib/browser.tcl:292 lib/checkout_op.tcl:579 +#: lib/choose_font.tcl:45 lib/merge.tcl:178 lib/option.tcl:127 +#: lib/remote_add.tcl:34 lib/remote_branch_delete.tcl:43 lib/tools_dlg.tcl:41 +#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/transport.tcl:141 +msgid "Cancel" +msgstr "Отказване" + +#: lib/branch_checkout.tcl:35 lib/browser.tcl:297 lib/tools_dlg.tcl:321 +msgid "Revision" +msgstr "Версия" + +#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:69 lib/option.tcl:310 msgid "Options" msgstr "Опции" @@ -814,167 +756,129 @@ msgstr "Изтегляне на промените от следения кло msgid "Detach From Local Branch" msgstr "Изтриване от локалния клон" -#: lib/transport.tcl:7 +#: lib/branch_create.tcl:23 #, tcl-format -msgid "Fetching new changes from %s" -msgstr "Доставяне на промените от „%s“" +msgid "%s (%s): Create Branch" +msgstr "%s (%s): Създаване на клон" -#: lib/transport.tcl:18 -#, tcl-format -msgid "remote prune %s" -msgstr "окастряне на следящите клони към „%s“" - -#: lib/transport.tcl:19 -#, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "Окастряне на следящите клони на изтритите клони от „%s“" - -#: lib/transport.tcl:25 -msgid "fetch all remotes" -msgstr "доставяне на всички отдалечени хранилища" - -#: lib/transport.tcl:26 -msgid "Fetching new changes from all remotes" -msgstr "Доставяне на новите промени от всички отдалечени хранилища" - -#: lib/transport.tcl:40 -msgid "remote prune all remotes" -msgstr "окастряне на всички следящи клони" +#: lib/branch_create.tcl:28 +msgid "Create New Branch" +msgstr "Създаване на нов клон" -#: lib/transport.tcl:41 -msgid "Pruning tracking branches deleted from all remotes" -msgstr "" -"Окастряне на всички клони, които следят изтрити клони от отдалечени хранилища" +#: lib/branch_create.tcl:33 lib/choose_repository.tcl:407 +msgid "Create" +msgstr "Създаване" -#: lib/transport.tcl:55 -#, tcl-format -msgid "Pushing changes to %s" -msgstr "Изтласкване на промените към „%s“" +#: lib/branch_create.tcl:42 +msgid "Branch Name" +msgstr "Име на клона" -#: lib/transport.tcl:93 -#, tcl-format -msgid "Mirroring to %s" -msgstr "Изтласкване на всичко към „%s“" +#: lib/branch_create.tcl:44 lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 +msgid "Name:" +msgstr "Име:" -#: lib/transport.tcl:111 -#, tcl-format -msgid "Pushing %s %s to %s" -msgstr "Изтласкване на %s „%s“ към „%s“" +#: lib/branch_create.tcl:57 +msgid "Match Tracking Branch Name" +msgstr "Съвпадане по името на следения клон" -#: lib/transport.tcl:132 -msgid "Push Branches" -msgstr "Клони за изтласкване" +#: lib/branch_create.tcl:66 +msgid "Starting Revision" +msgstr "Начална версия" -#: lib/transport.tcl:147 -msgid "Source Branches" -msgstr "Клони-източници" +#: lib/branch_create.tcl:72 +msgid "Update Existing Branch:" +msgstr "Обновяване на съществуващ клон:" -#: lib/transport.tcl:162 -msgid "Destination Repository" -msgstr "Целево хранилище" +#: lib/branch_create.tcl:75 +msgid "No" +msgstr "Не" -#: lib/transport.tcl:165 lib/remote_branch_delete.tcl:51 -msgid "Remote:" -msgstr "Отдалечено хранилище:" +#: lib/branch_create.tcl:80 +msgid "Fast Forward Only" +msgstr "Само тривиално превъртащо сливане" -#: lib/transport.tcl:187 lib/remote_branch_delete.tcl:72 -msgid "Arbitrary Location:" -msgstr "Произволно местоположение:" +#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 +msgid "Reset" +msgstr "Отначало" -#: lib/transport.tcl:205 -msgid "Transfer Options" -msgstr "Настройки при пренасянето" +#: lib/branch_create.tcl:97 +msgid "Checkout After Creation" +msgstr "Преминаване към клона след създаването му" -#: lib/transport.tcl:207 -msgid "Force overwrite existing branch (may discard changes)" -msgstr "" -"Изрично презаписване на съществуващ клон (някои промени може да бъдат " -"загубени)" +#: lib/branch_create.tcl:132 +msgid "Please select a tracking branch." +msgstr "Изберете клон за следени." -#: lib/transport.tcl:211 -msgid "Use thin pack (for slow network connections)" -msgstr "Максимална компресия (за бавни мрежови връзки)" +#: lib/branch_create.tcl:141 +#, tcl-format +msgid "Tracking branch %s is not a branch in the remote repository." +msgstr "Следящият клон — „%s“, не съществува в отдалеченото хранилище." -#: lib/transport.tcl:215 -msgid "Include tags" -msgstr "Включване на етикетите" +#: lib/branch_create.tcl:154 lib/branch_rename.tcl:92 +msgid "Please supply a branch name." +msgstr "Дайте име на клона." -#: lib/status_bar.tcl:87 +#: lib/branch_create.tcl:165 lib/branch_rename.tcl:112 #, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%s… %*i от общо %*i %s (%3i%%)" +msgid "'%s' is not an acceptable branch name." +msgstr "„%s“ не може да се използва за име на клон." -#: lib/remote.tcl:200 -msgid "Push to" -msgstr "Изтласкване към" +#: lib/branch_delete.tcl:16 +#, tcl-format +msgid "%s (%s): Delete Branch" +msgstr "%s (%s): Изтриване на клон" -#: lib/remote.tcl:218 -msgid "Remove Remote" -msgstr "Премахване на отдалечено хранилище" +#: lib/branch_delete.tcl:21 +msgid "Delete Local Branch" +msgstr "Изтриване на локален клон" -#: lib/remote.tcl:223 -msgid "Prune from" -msgstr "Окастряне от" +#: lib/branch_delete.tcl:39 +msgid "Local Branches" +msgstr "Локални клони" -#: lib/remote.tcl:228 -msgid "Fetch from" -msgstr "Доставяне от" +#: lib/branch_delete.tcl:51 +msgid "Delete Only If Merged Into" +msgstr "Изтриване, само ако промените са слети и другаде" -#: lib/sshkey.tcl:31 -msgid "No keys found." -msgstr "Не са открити ключове." +#: lib/branch_delete.tcl:53 lib/remote_branch_delete.tcl:120 +msgid "Always (Do not perform merge checks)" +msgstr "Винаги (без проверка за сливане)" -#: lib/sshkey.tcl:34 +#: lib/branch_delete.tcl:103 #, tcl-format -msgid "Found a public key in: %s" -msgstr "Открит е публичен ключ в „%s“" - -#: lib/sshkey.tcl:40 -msgid "Generate Key" -msgstr "Генериране на ключ" - -#: lib/sshkey.tcl:55 lib/checkout_op.tcl:146 lib/console.tcl:81 -#: lib/database.tcl:30 -msgid "Close" -msgstr "Затваряне" - -#: lib/sshkey.tcl:58 -msgid "Copy To Clipboard" -msgstr "Копиране към системния буфер" +msgid "The following branches are not completely merged into %s:" +msgstr "Не всички промени в клоните са слети в „%s“:" -#: lib/sshkey.tcl:72 -msgid "Your OpenSSH Public Key" -msgstr "Публичният ви ключ за OpenSSH" +#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:218 +msgid "" +"Recovering deleted branches is difficult.\n" +"\n" +"Delete the selected branches?" +msgstr "" +"Възстановяването на изтрити клони може да е трудно.\n" +"\n" +"Сигурни ли сте, че искате да триете?" -#: lib/sshkey.tcl:80 -msgid "Generating..." -msgstr "Генериране…" +#: lib/branch_delete.tcl:131 +#, tcl-format +msgid " - %s:" +msgstr " — „%s:“" -#: lib/sshkey.tcl:86 +#: lib/branch_delete.tcl:141 #, tcl-format msgid "" -"Could not start ssh-keygen:\n" -"\n" +"Failed to delete branches:\n" "%s" msgstr "" -"Програмата „ssh-keygen“ не може да бъде стартирана:\n" -"\n" +"Неуспешно триене на клони:\n" "%s" -#: lib/sshkey.tcl:113 -msgid "Generation failed." -msgstr "Неуспешно генериране." - -#: lib/sshkey.tcl:120 -msgid "Generation succeeded, but no keys found." -msgstr "Генерирането завърши успешно, а не са намерени ключове." - -#: lib/sshkey.tcl:123 +#: lib/branch_rename.tcl:15 #, tcl-format -msgid "Your key is in: %s" -msgstr "Ключът ви е в „%s“" +msgid "%s (%s): Rename Branch" +msgstr "%s (%s): Преименуване на клон" -#: lib/branch_rename.tcl:15 lib/branch_rename.tcl:23 +#: lib/branch_rename.tcl:23 msgid "Rename Branch" msgstr "Преименуване на клон" @@ -994,426 +898,777 @@ msgstr "Ново име:" msgid "Please select a branch to rename." msgstr "Изберете клон за преименуване." -#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154 -msgid "Please supply a branch name." -msgstr "Дайте име на клона." - #: lib/branch_rename.tcl:102 lib/checkout_op.tcl:202 #, tcl-format msgid "Branch '%s' already exists." msgstr "Клонът „%s“ вече съществува." -#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165 -#, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "„%s“ не може да се използва за име на клон." - #: lib/branch_rename.tcl:123 #, tcl-format msgid "Failed to rename '%s'." msgstr "Неуспешно преименуване на „%s“." -#: lib/choose_font.tcl:41 -msgid "Select" -msgstr "Избор" - -#: lib/choose_font.tcl:55 -msgid "Font Family" -msgstr "Шрифт" +#: lib/browser.tcl:17 +msgid "Starting..." +msgstr "Стартиране…" -#: lib/choose_font.tcl:76 -msgid "Font Size" -msgstr "Размер" +#: lib/browser.tcl:27 +#, tcl-format +msgid "%s (%s): File Browser" +msgstr "%s (%s): Файлов браузър" -#: lib/choose_font.tcl:93 -msgid "Font Example" -msgstr "Мостра" +#: lib/browser.tcl:132 lib/browser.tcl:149 +#, tcl-format +msgid "Loading %s..." +msgstr "Зареждане на „%s“…" -#: lib/choose_font.tcl:105 -msgid "" -"This is example text.\n" -"If you like this text, it can be your font." -msgstr "" -"Това е примерен текст.\n" -"Ако ви харесва как изглежда, изберете шрифта." +#: lib/browser.tcl:193 +msgid "[Up To Parent]" +msgstr "[Към родителя]" -#: lib/option.tcl:11 +#: lib/browser.tcl:275 #, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "Неправилно глобално кодиране „%s“" +msgid "%s (%s): Browse Branch Files" +msgstr "%s (%s): Разглеждане на файловете в клона" -#: lib/option.tcl:19 -#, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "Неправилно кодиране „%s“ на хранилището" +#: lib/browser.tcl:282 +msgid "Browse Branch Files" +msgstr "Разглеждане на файловете в клона" -#: lib/option.tcl:119 -msgid "Restore Defaults" -msgstr "Стандартни настройки" +#: lib/browser.tcl:288 lib/choose_repository.tcl:422 +#: lib/choose_repository.tcl:509 lib/choose_repository.tcl:518 +#: lib/choose_repository.tcl:1074 +msgid "Browse" +msgstr "Разглеждане" -#: lib/option.tcl:123 -msgid "Save" -msgstr "Запазване" +#: lib/checkout_op.tcl:85 +#, tcl-format +msgid "Fetching %s from %s" +msgstr "Доставяне на „%s“ от „%s“" -#: lib/option.tcl:133 +#: lib/checkout_op.tcl:133 #, tcl-format -msgid "%s Repository" -msgstr "Хранилище „%s“" +msgid "fatal: Cannot resolve %s" +msgstr "фатална грешка: „%s“ не може да се открие" -#: lib/option.tcl:134 -msgid "Global (All Repositories)" -msgstr "Глобално (за всички хранилища)" +#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:30 +#: lib/sshkey.tcl:55 +msgid "Close" +msgstr "Затваряне" -#: lib/option.tcl:140 -msgid "User Name" -msgstr "Потребителско име" +#: lib/checkout_op.tcl:175 +#, tcl-format +msgid "Branch '%s' does not exist." +msgstr "Клонът „%s“ не съществува." -#: lib/option.tcl:141 -msgid "Email Address" -msgstr "Адрес на е-поща" +#: lib/checkout_op.tcl:194 +#, tcl-format +msgid "Failed to configure simplified git-pull for '%s'." +msgstr "Неуспешно настройване на опростен git-pull за „%s“." -#: lib/option.tcl:143 -msgid "Summarize Merge Commits" -msgstr "Обобщаване на подаванията при сливане" +#: lib/checkout_op.tcl:229 +#, tcl-format +msgid "" +"Branch '%s' already exists.\n" +"\n" +"It cannot fast-forward to %s.\n" +"A merge is required." +msgstr "" +"Клонът „%s“ съществува.\n" +"\n" +"Той не може да бъде тривиално слят до „%s“.\n" +"Необходимо е сливане." -#: lib/option.tcl:144 -msgid "Merge Verbosity" -msgstr "Подробности при сливанията" +#: lib/checkout_op.tcl:243 +#, tcl-format +msgid "Merge strategy '%s' not supported." +msgstr "Стратегия за сливане „%s“ не се поддържа." -#: lib/option.tcl:145 -msgid "Show Diffstat After Merge" -msgstr "Извеждане на статистика след сливанията" +#: lib/checkout_op.tcl:262 +#, tcl-format +msgid "Failed to update '%s'." +msgstr "Неуспешно обновяване на „%s“." -#: lib/option.tcl:146 -msgid "Use Merge Tool" -msgstr "Използване на програма за сливане" +#: lib/checkout_op.tcl:274 +msgid "Staging area (index) is already locked." +msgstr "Индексът вече е заключен." -#: lib/option.tcl:148 -msgid "Trust File Modification Timestamps" -msgstr "Доверие във времето на промяна на файловете" +#: lib/checkout_op.tcl:289 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before the current branch can be changed.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"Състоянието при последната проверка не отговаря на състоянието на " +"хранилището.\n" +"\n" +"Някой друг процес за Git е променил хранилището междувременно. Състоянието " +"трябва да бъде проверено, преди да се премине към нов клон.\n" +"\n" +"Автоматично ще започне нова проверка.\n" -#: lib/option.tcl:149 -msgid "Prune Tracking Branches During Fetch" -msgstr "Окастряне на следящите клонове при доставяне" +#: lib/checkout_op.tcl:345 +#, tcl-format +msgid "Updating working directory to '%s'..." +msgstr "Работната директория се привежда към „%s“…" -#: lib/option.tcl:150 -msgid "Match Tracking Branches" -msgstr "Напасване на следящите клонове" +#: lib/checkout_op.tcl:346 +msgid "files checked out" +msgstr "файла са изтеглени" -#: lib/option.tcl:151 -msgid "Use Textconv For Diffs and Blames" +#: lib/checkout_op.tcl:376 +#, tcl-format +msgid "Aborted checkout of '%s' (file level merging is required)." msgstr "" -"Преобразуване на текста с „textconv“ при анотиране и извеждане на разлики" +"Преустановяване на изтеглянето на „%s“ (необходимо е пофайлово сливане)." -#: lib/option.tcl:152 -msgid "Blame Copy Only On Changed Files" -msgstr "Анотиране на копието само по променените файлове" +#: lib/checkout_op.tcl:377 +msgid "File level merge required." +msgstr "Необходимо е пофайлово сливане." -#: lib/option.tcl:153 -msgid "Maximum Length of Recent Repositories List" -msgstr "Максимална дължина на списъка със скоро ползвани хранилища" +#: lib/checkout_op.tcl:381 +#, tcl-format +msgid "Staying on branch '%s'." +msgstr "Оставане върху клона „%s“." -#: lib/option.tcl:154 -msgid "Minimum Letters To Blame Copy On" -msgstr "Минимален брой знаци за анотиране на копието" +#: lib/checkout_op.tcl:452 +msgid "" +"You are no longer on a local branch.\n" +"\n" +"If you wanted to be on a branch, create one now starting from 'This Detached " +"Checkout'." +msgstr "" +"Вече не сте на локален клон.\n" +"\n" +"Ако искате да сте на клон, създайте базиран на „Това несвързано изтегляне“." -#: lib/option.tcl:155 -msgid "Blame History Context Radius (days)" -msgstr "Исторически обхват за анотиране в дни" +#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 +#, tcl-format +msgid "Checked out '%s'." +msgstr "„%s“ е изтеглен." -#: lib/option.tcl:156 -msgid "Number of Diff Context Lines" -msgstr "Брой редове за контекста при извеждане на разликите" +#: lib/checkout_op.tcl:535 +#, tcl-format +msgid "Resetting '%s' to '%s' will lose the following commits:" +msgstr "" +"Зануляването на „%s“ към „%s“ ще доведе до загубването на следните подавания:" -#: lib/option.tcl:157 -msgid "Additional Diff Parameters" -msgstr "Допълнителни аргументи към „git diff“" +#: lib/checkout_op.tcl:557 +msgid "Recovering lost commits may not be easy." +msgstr "Възстановяването на загубените подавания може да е трудно." -#: lib/option.tcl:158 -msgid "Commit Message Text Width" -msgstr "Широчина на текста на съобщението при подаване" +#: lib/checkout_op.tcl:562 +#, tcl-format +msgid "Reset '%s'?" +msgstr "Зануляване на „%s“?" -#: lib/option.tcl:159 -msgid "New Branch Name Template" -msgstr "Шаблон за името на новите клони" +#: lib/checkout_op.tcl:567 lib/merge.tcl:170 lib/tools_dlg.tcl:336 +msgid "Visualize" +msgstr "Визуализация" -#: lib/option.tcl:160 -msgid "Default File Contents Encoding" -msgstr "Стандартно кодиране на файловете" +#: lib/checkout_op.tcl:635 +#, tcl-format +msgid "" +"Failed to set current branch.\n" +"\n" +"This working directory is only partially switched. We successfully updated " +"your files, but failed to update an internal Git file.\n" +"\n" +"This should not have occurred. %s will now close and give up." +msgstr "" +"Неуспешно задаване на текущия клон.\n" +"\n" +"Работната директория е само частично обновена: файловете са обновени " +"успешно, но някой от вътрешните, служебни файлове на Git не е бил.\n" +"\n" +"Това състояние е аварийно и не трябва да се случва. Програмата „%s“ ще " +"преустанови работа." -#: lib/option.tcl:161 -msgid "Warn before committing to a detached head" -msgstr "Предупреждаване при подаването при несвързан връх" +#: lib/choose_font.tcl:41 +msgid "Select" +msgstr "Избор" -#: lib/option.tcl:162 -msgid "Staging of untracked files" -msgstr "Вкарване на неследени файлове в индекса" +#: lib/choose_font.tcl:55 +msgid "Font Family" +msgstr "Шрифт" -#: lib/option.tcl:163 -msgid "Show untracked files" -msgstr "Показване на неследените файлове" +#: lib/choose_font.tcl:76 +msgid "Font Size" +msgstr "Размер" -#: lib/option.tcl:164 -msgid "Tab spacing" -msgstr "Размер на табулацията в интервали" +#: lib/choose_font.tcl:93 +msgid "Font Example" +msgstr "Мостра" -#: lib/option.tcl:210 -msgid "Change" -msgstr "Смяна" +#: lib/choose_font.tcl:105 +msgid "" +"This is example text.\n" +"If you like this text, it can be your font." +msgstr "" +"Това е примерен текст.\n" +"Ако ви харесва как изглежда, изберете шрифта." + +#: lib/choose_repository.tcl:33 +msgid "Git Gui" +msgstr "ГПИ на Git" + +#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412 +msgid "Create New Repository" +msgstr "Създаване на ново хранилище" + +#: lib/choose_repository.tcl:98 +msgid "New..." +msgstr "Ново…" + +#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496 +msgid "Clone Existing Repository" +msgstr "Клониране на съществуващо хранилище" + +#: lib/choose_repository.tcl:116 +msgid "Clone..." +msgstr "Клониране…" + +#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064 +msgid "Open Existing Repository" +msgstr "Отваряне на съществуващо хранилище" + +#: lib/choose_repository.tcl:129 +msgid "Open..." +msgstr "Отваряне…" + +#: lib/choose_repository.tcl:142 +msgid "Recent Repositories" +msgstr "Скоро ползвани" + +#: lib/choose_repository.tcl:148 +msgid "Open Recent Repository:" +msgstr "Отваряне на хранилище ползвано наскоро:" + +#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323 +#: lib/choose_repository.tcl:330 +#, tcl-format +msgid "Failed to create repository %s:" +msgstr "Неуспешно създаване на хранилището „%s“:" + +#: lib/choose_repository.tcl:417 +msgid "Directory:" +msgstr "Директория:" + +#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573 +#: lib/choose_repository.tcl:1098 +msgid "Git Repository" +msgstr "Хранилище на Git" + +#: lib/choose_repository.tcl:472 +#, tcl-format +msgid "Directory %s already exists." +msgstr "Вече съществува директория „%s“." + +#: lib/choose_repository.tcl:476 +#, tcl-format +msgid "File %s already exists." +msgstr "Вече съществува файл „%s“." + +#: lib/choose_repository.tcl:491 +msgid "Clone" +msgstr "Клониране" + +#: lib/choose_repository.tcl:504 +msgid "Source Location:" +msgstr "Адрес на източника:" + +#: lib/choose_repository.tcl:513 +msgid "Target Directory:" +msgstr "Целева директория:" + +#: lib/choose_repository.tcl:523 +msgid "Clone Type:" +msgstr "Вид клониране:" + +#: lib/choose_repository.tcl:528 +msgid "Standard (Fast, Semi-Redundant, Hardlinks)" +msgstr "Стандартно (бързо, частично споделяне на файлове, твърди връзки)" + +#: lib/choose_repository.tcl:533 +msgid "Full Copy (Slower, Redundant Backup)" +msgstr "Пълно (бавно, пълноценно резервно копие)" + +#: lib/choose_repository.tcl:538 +msgid "Shared (Fastest, Not Recommended, No Backup)" +msgstr "Споделено (най-бързо, не се препоръчва, не прави резервно копие)" + +#: lib/choose_repository.tcl:545 +msgid "Recursively clone submodules too" +msgstr "Рекурсивно клониране и на подмодулите" + +#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626 +#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842 +#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112 +#, tcl-format +msgid "Not a Git repository: %s" +msgstr "Това не е хранилище на Git: %s" + +#: lib/choose_repository.tcl:615 +msgid "Standard only available for local repository." +msgstr "Само локални хранилища могат да се клонират стандартно" + +#: lib/choose_repository.tcl:619 +msgid "Shared only available for local repository." +msgstr "Само локални хранилища могат да се клонират споделено" + +#: lib/choose_repository.tcl:640 +#, tcl-format +msgid "Location %s already exists." +msgstr "Местоположението „%s“ вече съществува." + +#: lib/choose_repository.tcl:651 +msgid "Failed to configure origin" +msgstr "Неуспешно настройване на хранилището-източник" + +#: lib/choose_repository.tcl:663 +msgid "Counting objects" +msgstr "Преброяване на обекти" + +#: lib/choose_repository.tcl:664 +msgid "buckets" +msgstr "клетки" + +#: lib/choose_repository.tcl:688 +#, tcl-format +msgid "Unable to copy objects/info/alternates: %s" +msgstr "Обектите/информацията/синонимите не могат да бъдат копирани: %s" + +#: lib/choose_repository.tcl:724 +#, tcl-format +msgid "Nothing to clone from %s." +msgstr "Няма какво да се клонира от „%s“." + +#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940 +#: lib/choose_repository.tcl:952 +msgid "The 'master' branch has not been initialized." +msgstr "Основният клон — „master“ не е инициализиран." + +#: lib/choose_repository.tcl:739 +msgid "Hardlinks are unavailable. Falling back to copying." +msgstr "Не се поддържат твърди връзки. Преминава се към копиране." + +#: lib/choose_repository.tcl:751 +#, tcl-format +msgid "Cloning from %s" +msgstr "Клониране на „%s“" + +#: lib/choose_repository.tcl:782 +msgid "Copying objects" +msgstr "Копиране на обекти" + +#: lib/choose_repository.tcl:783 +msgid "KiB" +msgstr "KiB" + +#: lib/choose_repository.tcl:807 +#, tcl-format +msgid "Unable to copy object: %s" +msgstr "Неуспешно копиране на обект: %s" + +#: lib/choose_repository.tcl:817 +msgid "Linking objects" +msgstr "Създаване на връзки към обектите" + +#: lib/choose_repository.tcl:818 +msgid "objects" +msgstr "обекти" + +#: lib/choose_repository.tcl:826 +#, tcl-format +msgid "Unable to hardlink object: %s" +msgstr "Неуспешно създаване на твърда връзка към обект: %s" + +#: lib/choose_repository.tcl:881 +msgid "Cannot fetch branches and objects. See console output for details." +msgstr "" +"Клоните и обектите не могат да бъдат изтеглени. За повече информация " +"погледнете изхода на конзолата." + +#: lib/choose_repository.tcl:892 +msgid "Cannot fetch tags. See console output for details." +msgstr "" +"Етикетите не могат да бъдат изтеглени. За повече информация погледнете " +"изхода на конзолата." + +#: lib/choose_repository.tcl:916 +msgid "Cannot determine HEAD. See console output for details." +msgstr "" +"Върхът „HEAD“ не може да бъде определен. За повече информация погледнете " +"изхода на конзолата." + +#: lib/choose_repository.tcl:925 +#, tcl-format +msgid "Unable to cleanup %s" +msgstr "„%s“ не може да се зачисти" + +#: lib/choose_repository.tcl:931 +msgid "Clone failed." +msgstr "Неуспешно клониране." + +#: lib/choose_repository.tcl:938 +msgid "No default branch obtained." +msgstr "Не е получен клон по подразбиране." + +#: lib/choose_repository.tcl:949 +#, tcl-format +msgid "Cannot resolve %s as a commit." +msgstr "Няма подаване отговарящо на „%s“." + +#: lib/choose_repository.tcl:961 +msgid "Creating working directory" +msgstr "Създаване на работната директория" + +#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136 +#: lib/index.tcl:207 +msgid "files" +msgstr "файлове" + +#: lib/choose_repository.tcl:981 +msgid "Cannot clone submodules." +msgstr "Подмодулите не могат да се клонират." + +#: lib/choose_repository.tcl:990 +msgid "Cloning submodules" +msgstr "Клониране на подмодули" + +#: lib/choose_repository.tcl:1015 +msgid "Initial file checkout failed." +msgstr "Неуспешно първоначално изтегляне." + +#: lib/choose_repository.tcl:1059 +msgid "Open" +msgstr "Отваряне" + +#: lib/choose_repository.tcl:1069 +msgid "Repository:" +msgstr "Хранилище:" + +#: lib/choose_repository.tcl:1118 +#, tcl-format +msgid "Failed to open repository %s:" +msgstr "Неуспешно отваряне на хранилището „%s“:" + +#: lib/choose_rev.tcl:52 +msgid "This Detached Checkout" +msgstr "Това несвързано изтегляне" + +#: lib/choose_rev.tcl:60 +msgid "Revision Expression:" +msgstr "Израз за версия:" + +#: lib/choose_rev.tcl:72 +msgid "Local Branch" +msgstr "Локален клон" -#: lib/option.tcl:254 -msgid "Spelling Dictionary:" -msgstr "Правописен речник:" +#: lib/choose_rev.tcl:77 +msgid "Tracking Branch" +msgstr "Следящ клон" -#: lib/option.tcl:284 -msgid "Change Font" -msgstr "Смяна на шрифта" +#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 +msgid "Tag" +msgstr "Етикет" -#: lib/option.tcl:288 +#: lib/choose_rev.tcl:321 #, tcl-format -msgid "Choose %s" -msgstr "Избор на „%s“" +msgid "Invalid revision: %s" +msgstr "Неправилна версия: %s" -#: lib/option.tcl:294 -msgid "pt." -msgstr "тчк." +#: lib/choose_rev.tcl:342 +msgid "No revision selected." +msgstr "Не е избрана версия." -#: lib/option.tcl:308 -msgid "Preferences" -msgstr "Настройки" +#: lib/choose_rev.tcl:350 +msgid "Revision expression is empty." +msgstr "Изразът за версия е празен." -#: lib/option.tcl:345 -msgid "Failed to completely save options:" -msgstr "Неуспешно запазване на настройките:" +#: lib/choose_rev.tcl:537 +msgid "Updated" +msgstr "Обновен" -#: lib/encoding.tcl:443 -msgid "Default" -msgstr "Стандартното" +#: lib/choose_rev.tcl:565 +msgid "URL" +msgstr "Адрес" -#: lib/encoding.tcl:448 -#, tcl-format -msgid "System (%s)" -msgstr "Системното (%s)" +#: lib/commit.tcl:9 +msgid "" +"There is nothing to amend.\n" +"\n" +"You are about to create the initial commit. There is no commit before this " +"to amend.\n" +msgstr "" +"Няма какво да се поправи.\n" +"\n" +"Ще създадете първоначалното подаване. Преди него няма други подавания, които " +"да поправите.\n" -#: lib/encoding.tcl:459 lib/encoding.tcl:465 -msgid "Other" -msgstr "Друго" +#: lib/commit.tcl:18 +msgid "" +"Cannot amend while merging.\n" +"\n" +"You are currently in the middle of a merge that has not been fully " +"completed. You cannot amend the prior commit unless you first abort the " +"current merge activity.\n" +msgstr "" +"По време на сливане не може да поправяте.\n" +"\n" +"В момента все още не сте завършили операция по сливане. Не може да поправите " +"предишното подаване, освен ако първо не преустановите текущото сливане.\n" -#: lib/mergetool.tcl:8 -msgid "Force resolution to the base version?" -msgstr "Да се използва базовата версия" +#: lib/commit.tcl:48 +msgid "Error loading commit data for amend:" +msgstr "Грешка при зареждане на данните от подаване, които да се поправят:" -#: lib/mergetool.tcl:9 -msgid "Force resolution to this branch?" -msgstr "Да се използва версията от този клон" +#: lib/commit.tcl:75 +msgid "Unable to obtain your identity:" +msgstr "Идентификацията ви не може да бъде определена:" -#: lib/mergetool.tcl:10 -msgid "Force resolution to the other branch?" -msgstr "Да се използва версията от другия клон" +#: lib/commit.tcl:80 +msgid "Invalid GIT_COMMITTER_IDENT:" +msgstr "Неправилно поле „GIT_COMMITTER_IDENT“:" -#: lib/mergetool.tcl:14 +#: lib/commit.tcl:129 #, tcl-format +msgid "warning: Tcl does not support encoding '%s'." +msgstr "предупреждение: Tcl не поддържа кодирането „%s“." + +#: lib/commit.tcl:149 msgid "" -"Note that the diff shows only conflicting changes.\n" +"Last scanned state does not match repository state.\n" "\n" -"%s will be overwritten.\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before another commit can be created.\n" "\n" -"This operation can be undone only by restarting the merge." +"The rescan will be automatically started now.\n" msgstr "" -"Разликата показва само разликите с конфликт.\n" +"Състоянието при последната проверка не отговаря на състоянието на " +"хранилището.\n" "\n" -"Файлът „%s“ ще бъде презаписан.\n" +"Някой друг процес за Git е променил хранилището междувременно. Състоянието " +"трябва да бъде проверено преди ново подаване.\n" "\n" -"Тази операция може да бъде отменена само чрез започване на сливането наново." +"Автоматично ще започне нова проверка.\n" -#: lib/mergetool.tcl:45 +#: lib/commit.tcl:173 #, tcl-format -msgid "File %s seems to have unresolved conflicts, still stage?" +msgid "" +"Unmerged files cannot be committed.\n" +"\n" +"File %s has merge conflicts. You must resolve them and stage the file " +"before committing.\n" msgstr "" -"Изглежда, че все още има некоригирани конфликти във файла „%s“. Да се добави " -"ли файлът към индекса?" +"Неслетите файлове не могат да бъдат подавани.\n" +"\n" +"Във файла „%s“ има конфликти при сливане. За да го подадете, трябва първо да " +"коригирате конфликтите и да добавите файла към индекса за подаване.\n" -#: lib/mergetool.tcl:60 +#: lib/commit.tcl:181 #, tcl-format -msgid "Adding resolution for %s" -msgstr "Добавяне на корекция на конфликтите в „%s“" - -#: lib/mergetool.tcl:141 -msgid "Cannot resolve deletion or link conflicts using a tool" +msgid "" +"Unknown file state %s detected.\n" +"\n" +"File %s cannot be committed by this program.\n" msgstr "" -"Конфликтите при символни връзки или изтриване не могат да бъдат коригирани с " -"външна програма." - -#: lib/mergetool.tcl:146 -msgid "Conflict file does not exist" -msgstr "Файлът, в който е конфликтът, не съществува" - -#: lib/mergetool.tcl:246 -#, tcl-format -msgid "Not a GUI merge tool: '%s'" -msgstr "Това не е графична програма за сливане: „%s“" - -#: lib/mergetool.tcl:275 -#, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "Неподдържана програма за сливане: „%s“" - -#: lib/mergetool.tcl:310 -msgid "Merge tool is already running, terminate it?" -msgstr "Програмата за сливане вече е стартирана. Да бъде ли изключена?" +"Непознато състояние на файл „%s“.\n" +"\n" +"Файлът „%s“ не може да бъде подаден чрез текущата програма.\n" -#: lib/mergetool.tcl:330 -#, tcl-format +#: lib/commit.tcl:189 msgid "" -"Error retrieving versions:\n" -"%s" +"No changes to commit.\n" +"\n" +"You must stage at least 1 file before you can commit.\n" msgstr "" -"Грешка при изтеглянето на версии:\n" -"%s" +"Няма промени за подаване.\n" +"\n" +"Трябва да добавите поне един файл към индекса, за да подадете.\n" -#: lib/mergetool.tcl:350 -#, tcl-format +#: lib/commit.tcl:204 msgid "" -"Could not start the merge tool:\n" +"Please supply a commit message.\n" "\n" -"%s" +"A good commit message has the following format:\n" +"\n" +"- First line: Describe in one sentence what you did.\n" +"- Second line: Blank\n" +"- Remaining lines: Describe why this change is good.\n" msgstr "" -"Програмата за сливане не може да бъде стартирана:\n" +"Задайте добро съобщение при подаване.\n" "\n" -"%s" - -#: lib/mergetool.tcl:354 -msgid "Running merge tool..." -msgstr "Стартиране на програмата за сливане…" +"Използвайте следния формат:\n" +"\n" +"● Първи ред: описание в едно изречение на промяната.\n" +"● Втори ред: празен.\n" +"● Останалите редове: опишете защо се налага тази промяна.\n" -#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 -msgid "Merge tool failed." -msgstr "Грешка в програмата за сливане." +#: lib/commit.tcl:235 +msgid "Calling pre-commit hook..." +msgstr "Изпълняване на куката преди подаване…" -#: lib/tools_dlg.tcl:22 -msgid "Add Tool" -msgstr "Добавяне на команда" +#: lib/commit.tcl:250 +msgid "Commit declined by pre-commit hook." +msgstr "Подаването е отхвърлено от куката преди подаване." -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "Добавяне на команда" +#: lib/commit.tcl:269 +msgid "" +"You are about to commit on a detached head. This is a potentially dangerous " +"thing to do because if you switch to another branch you will lose your " +"changes and it can be difficult to retrieve them later from the reflog. You " +"should probably cancel this commit and create a new branch to continue.\n" +" \n" +" Do you really want to proceed with your Commit?" +msgstr "" +"Ще подадете към несвързан, отделѐн указател „HEAD“. Това е опасно, защото " +"при преминаването към клон ще загубите промените си, като единственият начин " +"да ги върнете ще е чрез журнала на указателите (reflog). Най-вероятно трябва " +"да не правите това подаване, а да създадете нов клон, преди да продължите.\n" +" \n" +"Сигурни ли сте, че искате да извършите текущото подаване?" -#: lib/tools_dlg.tcl:34 -msgid "Add globally" -msgstr "Глобално добавяне" +#: lib/commit.tcl:290 +msgid "Calling commit-msg hook..." +msgstr "Изпълняване на куката за съобщението при подаване…" -#: lib/tools_dlg.tcl:46 -msgid "Tool Details" -msgstr "Подробности за командата" +#: lib/commit.tcl:305 +msgid "Commit declined by commit-msg hook." +msgstr "Подаването е отхвърлено от куката за съобщението при подаване." -#: lib/tools_dlg.tcl:49 -msgid "Use '/' separators to create a submenu tree:" -msgstr "За създаване на подменюта използвайте знака „/“ за разделител:" +#: lib/commit.tcl:318 +msgid "Committing changes..." +msgstr "Подаване на промените…" -#: lib/tools_dlg.tcl:60 -msgid "Command:" -msgstr "Команда:" +#: lib/commit.tcl:334 +msgid "write-tree failed:" +msgstr "неуспешно запазване на дървото (write-tree):" -#: lib/tools_dlg.tcl:71 -msgid "Show a dialog before running" -msgstr "Преди изпълнение да се извежда диалогов прозорец" +#: lib/commit.tcl:335 lib/commit.tcl:382 lib/commit.tcl:403 +msgid "Commit failed." +msgstr "Неуспешно подаване." -#: lib/tools_dlg.tcl:77 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "Потребителят да укаже версия (задаване на променливата $REVISION)" +#: lib/commit.tcl:352 +#, tcl-format +msgid "Commit %s appears to be corrupt" +msgstr "Подаването „%s“ изглежда повредено" -#: lib/tools_dlg.tcl:82 -msgid "Ask the user for additional arguments (sets $ARGS)" +#: lib/commit.tcl:357 +msgid "" +"No changes to commit.\n" +"\n" +"No files were modified by this commit and it was not a merge commit.\n" +"\n" +"A rescan will be automatically started now.\n" msgstr "" -"Потребителят да укаже допълнителни аргументи (задаване на променливата $ARGS)" +"Няма промени за подаване.\n" +"\n" +"В това подаване не са променяни никакви файлове, а и не е подаване със " +"сливане.\n" +"\n" +"Автоматично ще започне нова проверка.\n" -#: lib/tools_dlg.tcl:89 -msgid "Don't show the command output window" -msgstr "Без показване на прозорец с изхода от командата" +#: lib/commit.tcl:364 +msgid "No changes to commit." +msgstr "Няма промени за подаване." -#: lib/tools_dlg.tcl:94 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "" -"Стартиране само след избор на разлика (променливата $FILENAME не е празна)" +#: lib/commit.tcl:381 +msgid "commit-tree failed:" +msgstr "неуспешно подаване на дървото (commit-tree):" -#: lib/tools_dlg.tcl:118 -msgid "Please supply a name for the tool." -msgstr "Задайте име за командата." +#: lib/commit.tcl:402 +msgid "update-ref failed:" +msgstr "неуспешно обновяване на указателите (update-ref):" -#: lib/tools_dlg.tcl:126 +#: lib/commit.tcl:495 #, tcl-format -msgid "Tool '%s' already exists." -msgstr "Командата „%s“ вече съществува." +msgid "Created commit %s: %s" +msgstr "Успешно подаване %s: %s" -#: lib/tools_dlg.tcl:148 -#, tcl-format -msgid "" -"Could not add tool:\n" -"%s" -msgstr "" -"Командата не може да бъде добавена:\n" -"%s" +#: lib/console.tcl:59 +msgid "Working... please wait..." +msgstr "В момента се извършва действие, изчакайте…" -#: lib/tools_dlg.tcl:187 -msgid "Remove Tool" -msgstr "Премахване на команда" +#: lib/console.tcl:186 +msgid "Success" +msgstr "Успех" -#: lib/tools_dlg.tcl:193 -msgid "Remove Tool Commands" -msgstr "Премахване на команди" +#: lib/console.tcl:200 +msgid "Error: Command Failed" +msgstr "Грешка: неуспешно изпълнение на команда" -#: lib/tools_dlg.tcl:198 -msgid "Remove" -msgstr "Премахване" +#: lib/database.tcl:42 +msgid "Number of loose objects" +msgstr "Брой непакетирани обекти" -#: lib/tools_dlg.tcl:231 -msgid "(Blue denotes repository-local tools)" -msgstr "(командите към локалното хранилище са обозначени в синьо)" +#: lib/database.tcl:43 +msgid "Disk space used by loose objects" +msgstr "Дисково пространство заето от непакетирани обекти" -#: lib/tools_dlg.tcl:292 -#, tcl-format -msgid "Run Command: %s" -msgstr "Изпълнение на командата „%s“" +#: lib/database.tcl:44 +msgid "Number of packed objects" +msgstr "Брой пакетирани обекти" -#: lib/tools_dlg.tcl:306 -msgid "Arguments" -msgstr "Аргументи" +#: lib/database.tcl:45 +msgid "Number of packs" +msgstr "Брой пакети" -#: lib/tools_dlg.tcl:336 lib/checkout_op.tcl:567 lib/merge.tcl:166 -msgid "Visualize" -msgstr "Визуализация" +#: lib/database.tcl:46 +msgid "Disk space used by packed objects" +msgstr "Дисково пространство заето от пакетирани обекти" -#: lib/tools_dlg.tcl:341 -msgid "OK" -msgstr "Добре" +#: lib/database.tcl:47 +msgid "Packed objects waiting for pruning" +msgstr "Пакетирани обекти за окастряне" -#: lib/search.tcl:48 -msgid "Find:" -msgstr "Търсене:" +#: lib/database.tcl:48 +msgid "Garbage files" +msgstr "Файлове за боклука" -#: lib/search.tcl:50 -msgid "Next" -msgstr "Следваща поява" +#: lib/database.tcl:57 lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220 +#: lib/option.tcl:282 +#, tcl-format +msgid "%s:" +msgstr "%s:" -#: lib/search.tcl:51 -msgid "Prev" -msgstr "Предишна поява" +#: lib/database.tcl:66 +#, tcl-format +msgid "%s (%s): Database Statistics" +msgstr "%s (%s): Статистика на базата от данни" -#: lib/search.tcl:52 -msgid "RegExp" -msgstr "Рег. израз" +#: lib/database.tcl:72 +msgid "Compressing the object database" +msgstr "Компресиране на базата с данни за обектите" -#: lib/search.tcl:54 -msgid "Case" -msgstr "Регистър" +#: lib/database.tcl:83 +msgid "Verifying the object database with fsck-objects" +msgstr "Проверка на базата с данни за обектите с програмата „fsck-objects“" -#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 -msgid "Cannot write shortcut:" -msgstr "Клавишната комбинация не може да бъде запазена:" +#: lib/database.tcl:107 +#, tcl-format +msgid "" +"This repository currently has approximately %i loose objects.\n" +"\n" +"To maintain optimal performance it is strongly recommended that you compress " +"the database.\n" +"\n" +"Compress the database now?" +msgstr "" +"В това хранилище в момента има към %i непакетирани обекти.\n" +"\n" +"За добра производителност се препоръчва да компресирате базата с данни за " +"обектите.\n" +"\n" +"Да се започне ли компресирането?" -#: lib/shortcut.tcl:137 -msgid "Cannot write icon:" -msgstr "Иконата не може да бъде запазена:" +#: lib/date.tcl:25 +#, tcl-format +msgid "Invalid date from Git: %s" +msgstr "Неправилни данни от Git: %s" #: lib/diff.tcl:77 #, tcl-format @@ -1443,7 +1698,7 @@ msgstr "" msgid "Loading diff of %s..." msgstr "Зареждане на разликите в „%s“…" -#: lib/diff.tcl:140 +#: lib/diff.tcl:143 msgid "" "LOCAL: deleted\n" "REMOTE:\n" @@ -1451,7 +1706,7 @@ msgstr "" "ЛОКАЛНО: изтрит\n" "ОТДАЛЕЧЕНО:\n" -#: lib/diff.tcl:145 +#: lib/diff.tcl:148 msgid "" "REMOTE: deleted\n" "LOCAL:\n" @@ -1459,32 +1714,32 @@ msgstr "" "ОТДАЛЕЧЕНО: изтрит\n" "ЛОКАЛНО:\n" -#: lib/diff.tcl:152 +#: lib/diff.tcl:155 msgid "LOCAL:\n" msgstr "ЛОКАЛНО:\n" -#: lib/diff.tcl:155 +#: lib/diff.tcl:158 msgid "REMOTE:\n" msgstr "ОТДАЛЕЧЕНО:\n" -#: lib/diff.tcl:217 lib/diff.tcl:355 +#: lib/diff.tcl:220 lib/diff.tcl:357 #, tcl-format msgid "Unable to display %s" msgstr "Файлът „%s“ не може да бъде показан" -#: lib/diff.tcl:218 +#: lib/diff.tcl:221 msgid "Error loading file:" msgstr "Грешка при зареждане на файл:" -#: lib/diff.tcl:225 +#: lib/diff.tcl:227 msgid "Git Repository (subproject)" msgstr "Хранилище на Git (подмодул)" -#: lib/diff.tcl:237 +#: lib/diff.tcl:239 msgid "* Binary file (not showing content)." msgstr "● Двоичен файл (съдържанието не се показва)." -#: lib/diff.tcl:242 +#: lib/diff.tcl:244 #, tcl-format msgid "" "* Untracked file is %d bytes.\n" @@ -1493,1222 +1748,1060 @@ msgstr "" "● Неследеният файл е %d байта.\n" "● Показват се само първите %d байта.\n" -#: lib/diff.tcl:248 -#, tcl-format -msgid "" -"\n" -"* Untracked file clipped here by %s.\n" -"* To see the entire file, use an external editor.\n" -msgstr "" -"\n" -"● Неследеният файл е отрязан дотук от програмата „%s“.\n" -"● Използвайте външен редактор, за да видите целия файл.\n" - -#: lib/diff.tcl:356 lib/blame.tcl:1128 -msgid "Error loading diff:" -msgstr "Грешка при зареждане на разлика:" - -#: lib/diff.tcl:578 -msgid "Failed to unstage selected hunk." -msgstr "Избраното парче не може да бъде извадено от индекса." - -#: lib/diff.tcl:585 -msgid "Failed to stage selected hunk." -msgstr "Избраното парче не може да бъде добавено към индекса." - -#: lib/diff.tcl:664 -msgid "Failed to unstage selected line." -msgstr "Избраният ред не може да бъде изваден от индекса." - -#: lib/diff.tcl:672 -msgid "Failed to stage selected line." -msgstr "Избраният ред не може да бъде добавен към индекса." - -#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "Изтриване на отдалечения клон" - -#: lib/remote_branch_delete.tcl:48 -msgid "From Repository" -msgstr "От хранилище" - -#: lib/remote_branch_delete.tcl:88 -msgid "Branches" -msgstr "Клони" - -#: lib/remote_branch_delete.tcl:110 -msgid "Delete Only If" -msgstr "Изтриване, само ако" - -#: lib/remote_branch_delete.tcl:112 -msgid "Merged Into:" -msgstr "Слят в:" - -#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53 -msgid "Always (Do not perform merge checks)" -msgstr "Винаги (без проверка за сливане)" - -#: lib/remote_branch_delete.tcl:153 -msgid "A branch is required for 'Merged Into'." -msgstr "За данните „Слят в“ е необходимо да зададете клон." - -#: lib/remote_branch_delete.tcl:185 -#, tcl-format -msgid "" -"The following branches are not completely merged into %s:\n" -"\n" -" - %s" -msgstr "" -"Следните клони не са слети напълно в „%s“:\n" -"\n" -" ● %s" - -#: lib/remote_branch_delete.tcl:190 +#: lib/diff.tcl:250 #, tcl-format msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." -msgstr "" -"Поне една от пробите за сливане е неуспешна, защото не сте доставили всички " -"необходими подавания. Пробвайте първо да доставите подаванията от „%s“." - -#: lib/remote_branch_delete.tcl:208 -msgid "Please select one or more branches to delete." -msgstr "Изберете поне един клон за изтриване." - -#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115 -msgid "" -"Recovering deleted branches is difficult.\n" -"\n" -"Delete the selected branches?" -msgstr "" -"Възстановяването на изтрити клони може да е трудно.\n" "\n" -"Сигурни ли сте, че искате да триете?" - -#: lib/remote_branch_delete.tcl:227 -#, tcl-format -msgid "Deleting branches from %s" -msgstr "Изтриване на клони от „%s“" - -#: lib/remote_branch_delete.tcl:300 -msgid "No repository selected." -msgstr "Не е избрано хранилище." - -#: lib/remote_branch_delete.tcl:305 -#, tcl-format -msgid "Scanning %s..." -msgstr "Претърсване на „%s“…" - -#: lib/choose_repository.tcl:33 -msgid "Git Gui" -msgstr "ГПИ на Git" - -#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412 -msgid "Create New Repository" -msgstr "Създаване на ново хранилище" - -#: lib/choose_repository.tcl:98 -msgid "New..." -msgstr "Ново…" - -#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496 -msgid "Clone Existing Repository" -msgstr "Клониране на съществуващо хранилище" +"* Untracked file clipped here by %s.\n" +"* To see the entire file, use an external editor.\n" +msgstr "" +"\n" +"● Неследеният файл е отрязан дотук от програмата „%s“.\n" +"● Използвайте външен редактор, за да видите целия файл.\n" -#: lib/choose_repository.tcl:116 -msgid "Clone..." -msgstr "Клониране…" +#: lib/diff.tcl:580 +msgid "Failed to unstage selected hunk." +msgstr "Избраното парче не може да бъде извадено от индекса." -#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064 -msgid "Open Existing Repository" -msgstr "Отваряне на съществуващо хранилище" +#: lib/diff.tcl:587 +msgid "Failed to stage selected hunk." +msgstr "Избраното парче не може да бъде добавено към индекса." -#: lib/choose_repository.tcl:129 -msgid "Open..." -msgstr "Отваряне…" +#: lib/diff.tcl:666 +msgid "Failed to unstage selected line." +msgstr "Избраният ред не може да бъде изваден от индекса." -#: lib/choose_repository.tcl:142 -msgid "Recent Repositories" -msgstr "Скоро ползвани" +#: lib/diff.tcl:674 +msgid "Failed to stage selected line." +msgstr "Избраният ред не може да бъде добавен към индекса." -#: lib/choose_repository.tcl:148 -msgid "Open Recent Repository:" -msgstr "Отваряне на хранилище ползвано наскоро:" +#: lib/encoding.tcl:443 +msgid "Default" +msgstr "Стандартното" -#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323 -#: lib/choose_repository.tcl:330 +#: lib/encoding.tcl:448 #, tcl-format -msgid "Failed to create repository %s:" -msgstr "Неуспешно създаване на хранилището „%s“:" - -#: lib/choose_repository.tcl:407 lib/branch_create.tcl:33 -msgid "Create" -msgstr "Създаване" +msgid "System (%s)" +msgstr "Системното (%s)" -#: lib/choose_repository.tcl:417 -msgid "Directory:" -msgstr "Директория:" +#: lib/encoding.tcl:459 lib/encoding.tcl:465 +msgid "Other" +msgstr "Друго" -#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573 -#: lib/choose_repository.tcl:1098 -msgid "Git Repository" -msgstr "Хранилище на Git" +#: lib/error.tcl:20 +#, tcl-format +msgid "%s: error" +msgstr "%s: грешка" -#: lib/choose_repository.tcl:472 +#: lib/error.tcl:36 #, tcl-format -msgid "Directory %s already exists." -msgstr "Вече съществува директория „%s“." +msgid "%s: warning" +msgstr "%s: предупреждение" -#: lib/choose_repository.tcl:476 +#: lib/error.tcl:80 #, tcl-format -msgid "File %s already exists." -msgstr "Вече съществува файл „%s“." +msgid "%s hook failed:" +msgstr "%s: грешка от куката" -#: lib/choose_repository.tcl:491 -msgid "Clone" -msgstr "Клониране" +#: lib/error.tcl:96 +msgid "You must correct the above errors before committing." +msgstr "Преди да можете да подадете, коригирайте горните грешки." -#: lib/choose_repository.tcl:504 -msgid "Source Location:" -msgstr "Адрес на източника:" +#: lib/error.tcl:116 +#, tcl-format +msgid "%s (%s): error" +msgstr "%s (%s): грешка" -#: lib/choose_repository.tcl:513 -msgid "Target Directory:" -msgstr "Целева директория:" +#: lib/index.tcl:6 +msgid "Unable to unlock the index." +msgstr "Индексът не може да бъде отключен." -#: lib/choose_repository.tcl:523 -msgid "Clone Type:" -msgstr "Вид клониране:" +#: lib/index.tcl:17 +msgid "Index Error" +msgstr "Грешка в индекса" -#: lib/choose_repository.tcl:528 -msgid "Standard (Fast, Semi-Redundant, Hardlinks)" -msgstr "Стандартно (бързо, частично споделяне на файлове, твърди връзки)" +#: lib/index.tcl:19 +msgid "" +"Updating the Git index failed. A rescan will be automatically started to " +"resynchronize git-gui." +msgstr "" +"Неуспешно обновяване на индекса на Git. Автоматично ще започне нова проверка " +"за синхронизирането на git-gui." -#: lib/choose_repository.tcl:533 -msgid "Full Copy (Slower, Redundant Backup)" -msgstr "Пълно (бавно, пълноценно резервно копие)" +#: lib/index.tcl:30 +msgid "Continue" +msgstr "Продължаване" -#: lib/choose_repository.tcl:538 -msgid "Shared (Fastest, Not Recommended, No Backup)" -msgstr "Споделено (най-бързо, не се препоръчва, не прави резервно копие)" +#: lib/index.tcl:33 +msgid "Unlock Index" +msgstr "Отключване на индекса" -#: lib/choose_repository.tcl:545 -msgid "Recursively clone submodules too" -msgstr "Рекурсивно клониране и на подмодулите" +#: lib/index.tcl:294 +msgid "Unstaging selected files from commit" +msgstr "Изваждане на избраните файлове от подаването" -#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626 -#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842 -#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112 +#: lib/index.tcl:298 #, tcl-format -msgid "Not a Git repository: %s" -msgstr "Това не е хранилище на Git: %s" +msgid "Unstaging %s from commit" +msgstr "Изваждане на „%s“ от подаването" -#: lib/choose_repository.tcl:615 -msgid "Standard only available for local repository." -msgstr "Само локални хранилища могат да се клонират стандартно" +#: lib/index.tcl:337 +msgid "Ready to commit." +msgstr "Готовност за подаване." -#: lib/choose_repository.tcl:619 -msgid "Shared only available for local repository." -msgstr "Само локални хранилища могат да се клонират споделено" +#: lib/index.tcl:346 +msgid "Adding selected files" +msgstr "Добавяне на избраните файлове" -#: lib/choose_repository.tcl:640 +#: lib/index.tcl:350 #, tcl-format -msgid "Location %s already exists." -msgstr "Местоположението „%s“ вече съществува." - -#: lib/choose_repository.tcl:651 -msgid "Failed to configure origin" -msgstr "Неуспешно настройване на хранилището-източник" +msgid "Adding %s" +msgstr "Добавяне на „%s“" -#: lib/choose_repository.tcl:663 -msgid "Counting objects" -msgstr "Преброяване на обекти" +#: lib/index.tcl:380 +#, tcl-format +msgid "Stage %d untracked files?" +msgstr "Да се добавят ли %d неследени файла към индекса?" -#: lib/choose_repository.tcl:664 -msgid "buckets" -msgstr "клетки" +#: lib/index.tcl:388 +msgid "Adding all changed files" +msgstr "Добавяне на всички променени файлове" -#: lib/choose_repository.tcl:688 +#: lib/index.tcl:428 #, tcl-format -msgid "Unable to copy objects/info/alternates: %s" -msgstr "Обектите/информацията/синонимите не могат да бъдат копирани: %s" +msgid "Revert changes in file %s?" +msgstr "Да се махнат ли промените във файла „%s“?" -#: lib/choose_repository.tcl:724 +#: lib/index.tcl:430 #, tcl-format -msgid "Nothing to clone from %s." -msgstr "Няма какво да се клонира от „%s“." - -#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940 -#: lib/choose_repository.tcl:952 -msgid "The 'master' branch has not been initialized." -msgstr "Основният клон — „master“ не е инициализиран." - -#: lib/choose_repository.tcl:739 -msgid "Hardlinks are unavailable. Falling back to copying." -msgstr "Не се поддържат твърди връзки. Преминава се към копиране." +msgid "Revert changes in these %i files?" +msgstr "Да се махнат ли промените в тези %i файла?" -#: lib/choose_repository.tcl:751 -#, tcl-format -msgid "Cloning from %s" -msgstr "Клониране на „%s“" +#: lib/index.tcl:438 +msgid "Any unstaged changes will be permanently lost by the revert." +msgstr "" +"Всички промени, които не са били вкарани в индекса, ще бъдат безвъзвратно " +"загубени." -#: lib/choose_repository.tcl:782 -msgid "Copying objects" -msgstr "Копиране на обекти" +#: lib/index.tcl:441 +msgid "Do Nothing" +msgstr "Нищо да не се прави" -#: lib/choose_repository.tcl:783 -msgid "KiB" -msgstr "KiB" +#: lib/index.tcl:459 +msgid "Reverting selected files" +msgstr "Махане на промените в избраните файлове" -#: lib/choose_repository.tcl:807 +#: lib/index.tcl:463 #, tcl-format -msgid "Unable to copy object: %s" -msgstr "Неуспешно копиране на обект: %s" +msgid "Reverting %s" +msgstr "Махане на промените в „%s“" -#: lib/choose_repository.tcl:817 -msgid "Linking objects" -msgstr "Създаване на връзки към обектите" +#: lib/line.tcl:17 +msgid "Goto Line:" +msgstr "Към ред:" -#: lib/choose_repository.tcl:818 -msgid "objects" -msgstr "обекти" +#: lib/line.tcl:23 +msgid "Go" +msgstr "Придвижване" -#: lib/choose_repository.tcl:826 -#, tcl-format -msgid "Unable to hardlink object: %s" -msgstr "Неуспешно създаване на твърда връзка към обект: %s" +#: lib/merge.tcl:13 +msgid "" +"Cannot merge while amending.\n" +"\n" +"You must finish amending this commit before starting any type of merge.\n" +msgstr "" +"По време на поправяне не може да сливане.\n" +"\n" +"Трябва да завършите поправянето на текущото подаване, преди да започнете " +"сливане.\n" -#: lib/choose_repository.tcl:881 -msgid "Cannot fetch branches and objects. See console output for details." +#: lib/merge.tcl:27 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before a merge can be performed.\n" +"\n" +"The rescan will be automatically started now.\n" msgstr "" -"Клоните и обектите не могат да бъдат изтеглени. За повече информация " -"погледнете изхода на конзолата." +"Последно установеното състояние не отговаря на това в хранилището.\n" +"\n" +"Някой друг процес за Git е променил хранилището междувременно. Състоянието " +"трябва да бъде проверено, преди да се извърши сливане.\n" +"\n" +"Автоматично ще започне нова проверка.\n" +"\n" -#: lib/choose_repository.tcl:892 -msgid "Cannot fetch tags. See console output for details." +#: lib/merge.tcl:45 +#, tcl-format +msgid "" +"You are in the middle of a conflicted merge.\n" +"\n" +"File %s has merge conflicts.\n" +"\n" +"You must resolve them, stage the file, and commit to complete the current " +"merge. Only then can you begin another merge.\n" msgstr "" -"Етикетите не могат да бъдат изтеглени. За повече информация погледнете " -"изхода на конзолата." +"В момента тече сливане, но има конфликти.\n" +"\n" +"Погледнете файла „%s“.\n" +"\n" +"Трябва да коригирате конфликтите в него, да го добавите към индекса и да " +"завършите текущото сливане чрез подаване. Чак тогава може да започнете ново " +"сливане.\n" -#: lib/choose_repository.tcl:916 -msgid "Cannot determine HEAD. See console output for details." +#: lib/merge.tcl:55 +#, tcl-format +msgid "" +"You are in the middle of a change.\n" +"\n" +"File %s is modified.\n" +"\n" +"You should complete the current commit before starting a merge. Doing so " +"will help you abort a failed merge, should the need arise.\n" msgstr "" -"Върхът „HEAD“ не може да бъде определен. За повече информация погледнете " -"изхода на конзолата." +"В момента тече подаване.\n" +"\n" +"Файлът „%s“ е променен.\n" +"\n" +"Трябва да завършите текущото подаване, преди да започнете сливане. Така ще " +"можете лесно да преустановите сливането, ако възникне нужда.\n" -#: lib/choose_repository.tcl:925 +#: lib/merge.tcl:108 #, tcl-format -msgid "Unable to cleanup %s" -msgstr "„%s“ не може да се зачисти" +msgid "%s of %s" +msgstr "%s от общо %s" -#: lib/choose_repository.tcl:931 -msgid "Clone failed." -msgstr "Неуспешно клониране." +#: lib/merge.tcl:126 +#, tcl-format +msgid "Merging %s and %s..." +msgstr "Сливане на „%s“ и „%s“…" -#: lib/choose_repository.tcl:938 -msgid "No default branch obtained." -msgstr "Не е получен клон по подразбиране." +#: lib/merge.tcl:137 +msgid "Merge completed successfully." +msgstr "Сливането завърши успешно." -#: lib/choose_repository.tcl:949 -#, tcl-format -msgid "Cannot resolve %s as a commit." -msgstr "Няма подаване отговарящо на „%s“." +#: lib/merge.tcl:139 +msgid "Merge failed. Conflict resolution is required." +msgstr "Неуспешно сливане — има конфликти за коригиране." -#: lib/choose_repository.tcl:961 -msgid "Creating working directory" -msgstr "Създаване на работната директория" +#: lib/merge.tcl:156 +#, tcl-format +msgid "%s (%s): Merge" +msgstr "%s (%s): Сливане" -#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136 -#: lib/index.tcl:207 -msgid "files" -msgstr "файлове" +#: lib/merge.tcl:164 +#, tcl-format +msgid "Merge Into %s" +msgstr "Сливане в „%s“" -#: lib/choose_repository.tcl:981 -msgid "Cannot clone submodules." -msgstr "Подмодулите не могат да се клонират." +#: lib/merge.tcl:183 +msgid "Revision To Merge" +msgstr "Версия за сливане" -#: lib/choose_repository.tcl:990 -msgid "Cloning submodules" -msgstr "Клониране на подмодулите" +#: lib/merge.tcl:218 +msgid "" +"Cannot abort while amending.\n" +"\n" +"You must finish amending this commit.\n" +msgstr "" +"Поправянето не може да бъде преустановено.\n" +"\n" +"Трябва да завършите поправката на това подаване.\n" -#: lib/choose_repository.tcl:1015 -msgid "Initial file checkout failed." -msgstr "Неуспешно първоначално изтегляне." +#: lib/merge.tcl:228 +msgid "" +"Abort merge?\n" +"\n" +"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with aborting the current merge?" +msgstr "" +"Да се преустанови ли сливането?\n" +"\n" +"В такъв случай ●ВСИЧКИ● неподадени промени ще бъдат безвъзвратно загубени.\n" +"\n" +"Наистина ли да се преустанови сливането?" -#: lib/choose_repository.tcl:1059 -msgid "Open" -msgstr "Отваряне" +#: lib/merge.tcl:234 +msgid "" +"Reset changes?\n" +"\n" +"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with resetting the current changes?" +msgstr "" +"Да се занулят ли промените?\n" +"\n" +"В такъв случай ●ВСИЧКИ● неподадени промени ще бъдат безвъзвратно загубени.\n" +"\n" +"Наистина ли да се занулят промените?" -#: lib/choose_repository.tcl:1069 -msgid "Repository:" -msgstr "Хранилище:" +#: lib/merge.tcl:245 +msgid "Aborting" +msgstr "Преустановяване" -#: lib/choose_repository.tcl:1118 -#, tcl-format -msgid "Failed to open repository %s:" -msgstr "Неуспешно отваряне на хранилището „%s“:" +#: lib/merge.tcl:245 +msgid "files reset" +msgstr "файла със занулени промени" -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "git-gui — графичен интерфейс за Git." +#: lib/merge.tcl:273 +msgid "Abort failed." +msgstr "Неуспешно преустановяване." -#: lib/checkout_op.tcl:85 -#, tcl-format -msgid "Fetching %s from %s" -msgstr "Доставяне на „%s“ от „%s“" +#: lib/merge.tcl:275 +msgid "Abort completed. Ready." +msgstr "Успешно преустановяване. Готовност за следващо действие." -#: lib/checkout_op.tcl:133 -#, tcl-format -msgid "fatal: Cannot resolve %s" -msgstr "фатална грешка: „%s“ не може да се открие" +#: lib/mergetool.tcl:8 +msgid "Force resolution to the base version?" +msgstr "Да се използва базовата версия" -#: lib/checkout_op.tcl:175 -#, tcl-format -msgid "Branch '%s' does not exist." -msgstr "Клонът „%s“ не съществува." +#: lib/mergetool.tcl:9 +msgid "Force resolution to this branch?" +msgstr "Да се използва версията от този клон" -#: lib/checkout_op.tcl:194 -#, tcl-format -msgid "Failed to configure simplified git-pull for '%s'." -msgstr "Неуспешно настройване на опростен git-pull за „%s“." +#: lib/mergetool.tcl:10 +msgid "Force resolution to the other branch?" +msgstr "Да се използва версията от другия клон" -#: lib/checkout_op.tcl:229 +#: lib/mergetool.tcl:14 #, tcl-format msgid "" -"Branch '%s' already exists.\n" +"Note that the diff shows only conflicting changes.\n" "\n" -"It cannot fast-forward to %s.\n" -"A merge is required." +"%s will be overwritten.\n" +"\n" +"This operation can be undone only by restarting the merge." msgstr "" -"Клонът „%s“ съществува.\n" +"Разликата показва само разликите с конфликт.\n" "\n" -"Той не може да бъде тривиално слят до „%s“.\n" -"Необходимо е сливане." +"Файлът „%s“ ще бъде презаписан.\n" +"\n" +"Тази операция може да бъде отменена само чрез започване на сливането наново." -#: lib/checkout_op.tcl:243 +#: lib/mergetool.tcl:45 #, tcl-format -msgid "Merge strategy '%s' not supported." -msgstr "Стратегия за сливане „%s“ не се поддържа." +msgid "File %s seems to have unresolved conflicts, still stage?" +msgstr "" +"Изглежда, че все още има некоригирани конфликти във файла „%s“. Да се добави " +"ли файлът към индекса?" -#: lib/checkout_op.tcl:262 +#: lib/mergetool.tcl:60 #, tcl-format -msgid "Failed to update '%s'." -msgstr "Неуспешно обновяване на „%s“." - -#: lib/checkout_op.tcl:274 -msgid "Staging area (index) is already locked." -msgstr "Индексът вече е заключен." +msgid "Adding resolution for %s" +msgstr "Добавяне на корекция на конфликтите в „%s“" -#: lib/checkout_op.tcl:289 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before the current branch can be changed.\n" -"\n" -"The rescan will be automatically started now.\n" +#: lib/mergetool.tcl:141 +msgid "Cannot resolve deletion or link conflicts using a tool" msgstr "" -"Състоянието при последната проверка не отговаря на състоянието на " -"хранилището.\n" -"\n" -"Някой друг процес за Git е променил хранилището междувременно. Състоянието " -"трябва да бъде проверено, преди да се премине към нов клон.\n" -"\n" -"Автоматично ще започне нова проверка.\n" +"Конфликтите при символни връзки или изтриване не могат да бъдат коригирани с " +"външна програма." -#: lib/checkout_op.tcl:345 -#, tcl-format -msgid "Updating working directory to '%s'..." -msgstr "Работната директория се привежда към „%s“…" +#: lib/mergetool.tcl:146 +msgid "Conflict file does not exist" +msgstr "Файлът, в който е конфликтът, не съществува" -#: lib/checkout_op.tcl:346 -msgid "files checked out" -msgstr "файла са изтеглени" +#: lib/mergetool.tcl:246 +#, tcl-format +msgid "Not a GUI merge tool: '%s'" +msgstr "Това не е графична програма за сливане: „%s“" -#: lib/checkout_op.tcl:376 +#: lib/mergetool.tcl:275 #, tcl-format -msgid "Aborted checkout of '%s' (file level merging is required)." -msgstr "" -"Преустановяване на изтеглянето на „%s“ (необходимо е пофайлово сливане)." +msgid "Unsupported merge tool '%s'" +msgstr "Неподдържана програма за сливане: „%s“" -#: lib/checkout_op.tcl:377 -msgid "File level merge required." -msgstr "Необходимо е пофайлово сливане." +#: lib/mergetool.tcl:310 +msgid "Merge tool is already running, terminate it?" +msgstr "Програмата за сливане вече е стартирана. Да бъде ли изключена?" -#: lib/checkout_op.tcl:381 +#: lib/mergetool.tcl:330 #, tcl-format -msgid "Staying on branch '%s'." -msgstr "Оставане върху клона „%s“." +msgid "" +"Error retrieving versions:\n" +"%s" +msgstr "" +"Грешка при изтеглянето на версии:\n" +"%s" -#: lib/checkout_op.tcl:452 +#: lib/mergetool.tcl:350 +#, tcl-format msgid "" -"You are no longer on a local branch.\n" +"Could not start the merge tool:\n" "\n" -"If you wanted to be on a branch, create one now starting from 'This Detached " -"Checkout'." +"%s" msgstr "" -"Вече не сте на локален клон.\n" +"Програмата за сливане не може да бъде стартирана:\n" "\n" -"Ако искате да сте на клон, създайте базиран на „Това несвързано изтегляне“." +"%s" -#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 +#: lib/mergetool.tcl:354 +msgid "Running merge tool..." +msgstr "Стартиране на програмата за сливане…" + +#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +msgid "Merge tool failed." +msgstr "Грешка в програмата за сливане." + +#: lib/option.tcl:11 #, tcl-format -msgid "Checked out '%s'." -msgstr "„%s“ е изтеглен." +msgid "Invalid global encoding '%s'" +msgstr "Неправилно глобално кодиране „%s“" -#: lib/checkout_op.tcl:535 +#: lib/option.tcl:19 #, tcl-format -msgid "Resetting '%s' to '%s' will lose the following commits:" -msgstr "" -"Зануляването на „%s“ към „%s“ ще доведе до загубването на следните подавания:" +msgid "Invalid repo encoding '%s'" +msgstr "Неправилно кодиране „%s“ на хранилището" -#: lib/checkout_op.tcl:557 -msgid "Recovering lost commits may not be easy." -msgstr "Възстановяването на загубените подавания може да е трудно." +#: lib/option.tcl:119 +msgid "Restore Defaults" +msgstr "Стандартни настройки" -#: lib/checkout_op.tcl:562 +#: lib/option.tcl:123 +msgid "Save" +msgstr "Запазване" + +#: lib/option.tcl:133 #, tcl-format -msgid "Reset '%s'?" -msgstr "Зануляване на „%s“?" +msgid "%s Repository" +msgstr "Хранилище „%s“" -#: lib/checkout_op.tcl:571 lib/branch_create.tcl:85 -msgid "Reset" -msgstr "Отначало" +#: lib/option.tcl:134 +msgid "Global (All Repositories)" +msgstr "Глобално (за всички хранилища)" -#: lib/checkout_op.tcl:635 -#, tcl-format -msgid "" -"Failed to set current branch.\n" -"\n" -"This working directory is only partially switched. We successfully updated " -"your files, but failed to update an internal Git file.\n" -"\n" -"This should not have occurred. %s will now close and give up." -msgstr "" -"Неуспешно задаване на текущия клон.\n" -"\n" -"Работната директория е само частично обновена: файловете са обновени " -"успешно, но някой от вътрешните, служебни файлове на Git не е бил.\n" -"\n" -"Това състояние е аварийно и не трябва да се случва. Програмата „%s“ ще " -"преустанови работа." +#: lib/option.tcl:140 +msgid "User Name" +msgstr "Потребителско име" -#: lib/branch_create.tcl:23 -msgid "Create Branch" -msgstr "Създаване на клон" +#: lib/option.tcl:141 +msgid "Email Address" +msgstr "Адрес на е-поща" -#: lib/branch_create.tcl:28 -msgid "Create New Branch" -msgstr "Създаване на нов клон" +#: lib/option.tcl:143 +msgid "Summarize Merge Commits" +msgstr "Обобщаване на подаванията при сливане" -#: lib/branch_create.tcl:42 -msgid "Branch Name" -msgstr "Име на клона" +#: lib/option.tcl:144 +msgid "Merge Verbosity" +msgstr "Подробности при сливанията" -#: lib/branch_create.tcl:57 -msgid "Match Tracking Branch Name" -msgstr "Съвпадане по името на следения клон" +#: lib/option.tcl:145 +msgid "Show Diffstat After Merge" +msgstr "Извеждане на статистика след сливанията" -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "Начална версия" +#: lib/option.tcl:146 +msgid "Use Merge Tool" +msgstr "Използване на програма за сливане" -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "Обновяване на съществуващ клон:" +#: lib/option.tcl:148 +msgid "Trust File Modification Timestamps" +msgstr "Доверие във времето на промяна на файловете" -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "Не" +#: lib/option.tcl:149 +msgid "Prune Tracking Branches During Fetch" +msgstr "Окастряне на следящите клонове при доставяне" -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "Само тривиално превъртащо сливане" +#: lib/option.tcl:150 +msgid "Match Tracking Branches" +msgstr "Напасване на следящите клонове" -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "Преминаване към клона след създаването му" +#: lib/option.tcl:151 +msgid "Use Textconv For Diffs and Blames" +msgstr "Използване на „textconv“ за разликите и анотирането" -#: lib/branch_create.tcl:132 -msgid "Please select a tracking branch." -msgstr "Изберете клон за следени." +#: lib/option.tcl:152 +msgid "Blame Copy Only On Changed Files" +msgstr "Анотиране на копието само по променените файлове" -#: lib/branch_create.tcl:141 -#, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "Следящият клон — „%s“, не съществува в отдалеченото хранилище." +#: lib/option.tcl:153 +msgid "Maximum Length of Recent Repositories List" +msgstr "Максимален брой на списъка „Скоро ползвани“ хранилища" -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "В момента се извършва действие, изчакайте…" +#: lib/option.tcl:154 +msgid "Minimum Letters To Blame Copy On" +msgstr "Минимален брой знаци за анотиране на копието" -#: lib/console.tcl:186 -msgid "Success" -msgstr "Успех" +#: lib/option.tcl:155 +msgid "Blame History Context Radius (days)" +msgstr "Исторически обхват за анотиране в дни" -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "Грешка: неуспешно изпълнение на команда" +#: lib/option.tcl:156 +msgid "Number of Diff Context Lines" +msgstr "Брой редове за контекста на разликите" -#: lib/choose_rev.tcl:52 -msgid "This Detached Checkout" -msgstr "Това несвързано изтегляне" +#: lib/option.tcl:157 +msgid "Additional Diff Parameters" +msgstr "Аргументи към командата за разликите" -#: lib/choose_rev.tcl:60 -msgid "Revision Expression:" -msgstr "Израз за версия:" +#: lib/option.tcl:158 +msgid "Commit Message Text Width" +msgstr "Широчина на текста на съобщението при подаване" -#: lib/choose_rev.tcl:72 -msgid "Local Branch" -msgstr "Локален клон" +#: lib/option.tcl:159 +msgid "New Branch Name Template" +msgstr "Шаблон за името на новите клони" -#: lib/choose_rev.tcl:77 -msgid "Tracking Branch" -msgstr "Следящ клон" +#: lib/option.tcl:160 +msgid "Default File Contents Encoding" +msgstr "Кодиране на файловете" -#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 -msgid "Tag" -msgstr "Етикет" +#: lib/option.tcl:161 +msgid "Warn before committing to a detached head" +msgstr "Предупреждаване при подаване към несвързан указател" -#: lib/choose_rev.tcl:321 -#, tcl-format -msgid "Invalid revision: %s" -msgstr "Неправилна версия: %s" +#: lib/option.tcl:162 +msgid "Staging of untracked files" +msgstr "Добавяне на неследените файлове към индекса" -#: lib/choose_rev.tcl:342 -msgid "No revision selected." -msgstr "Не е избрана версия." +#: lib/option.tcl:163 +msgid "Show untracked files" +msgstr "Показване на неследените файлове" -#: lib/choose_rev.tcl:350 -msgid "Revision expression is empty." -msgstr "Изразът за версия е празен." +#: lib/option.tcl:164 +msgid "Tab spacing" +msgstr "Ширина на табулацията" -#: lib/choose_rev.tcl:537 -msgid "Updated" -msgstr "Обновен" +#: lib/option.tcl:210 +msgid "Change" +msgstr "Смяна" -#: lib/choose_rev.tcl:565 -msgid "URL" -msgstr "Адрес" +#: lib/option.tcl:254 +msgid "Spelling Dictionary:" +msgstr "Правописен речник:" -#: lib/line.tcl:17 -msgid "Goto Line:" -msgstr "Към ред:" +#: lib/option.tcl:284 +msgid "Change Font" +msgstr "Смяна на шрифта" -#: lib/line.tcl:23 -msgid "Go" -msgstr "Придвижване" +#: lib/option.tcl:288 +#, tcl-format +msgid "Choose %s" +msgstr "Избор на „%s“" -#: lib/commit.tcl:9 -msgid "" -"There is nothing to amend.\n" -"\n" -"You are about to create the initial commit. There is no commit before this " -"to amend.\n" -msgstr "" -"Няма какво да се поправи.\n" -"\n" -"Ще създадете първоначалното подаване. Преди него няма други подавания, които " -"да поправите.\n" +#: lib/option.tcl:294 +msgid "pt." +msgstr "тчк." -#: lib/commit.tcl:18 -msgid "" -"Cannot amend while merging.\n" -"\n" -"You are currently in the middle of a merge that has not been fully " -"completed. You cannot amend the prior commit unless you first abort the " -"current merge activity.\n" -msgstr "" -"По време на сливане не може да поправяте.\n" -"\n" -"В момента все още не сте завършили операция по сливане. Не може да поправите " -"предишното подаване, освен ако първо не преустановите текущото сливане.\n" +#: lib/option.tcl:308 +msgid "Preferences" +msgstr "Настройки" -#: lib/commit.tcl:48 -msgid "Error loading commit data for amend:" -msgstr "Грешка при зареждане на данните от подаване, които да се поправят:" +#: lib/option.tcl:345 +msgid "Failed to completely save options:" +msgstr "Неуспешно запазване на настройките:" -#: lib/commit.tcl:75 -msgid "Unable to obtain your identity:" -msgstr "Идентификацията ви не може да бъде определена:" +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "Изтласкване към" -#: lib/commit.tcl:80 -msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "Неправилно поле „GIT_COMMITTER_IDENT“:" +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "Премахване на отдалечено хранилище" -#: lib/commit.tcl:129 -#, tcl-format -msgid "warning: Tcl does not support encoding '%s'." -msgstr "предупреждение: Tcl не поддържа кодирането „%s“." +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "Окастряне от" + +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "Доставяне от" -#: lib/commit.tcl:149 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before another commit can be created.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"Състоянието при последната проверка не отговаря на състоянието на " -"хранилището.\n" -"\n" -"Някой друг процес за Git е променил хранилището междувременно. Състоянието " -"трябва да бъде проверено преди ново подаване.\n" -"\n" -"Автоматично ще започне нова проверка.\n" +#: lib/remote.tcl:253 lib/remote.tcl:258 +msgid "All" +msgstr "Всички" -#: lib/commit.tcl:173 +#: lib/remote_add.tcl:20 #, tcl-format -msgid "" -"Unmerged files cannot be committed.\n" -"\n" -"File %s has merge conflicts. You must resolve them and stage the file " -"before committing.\n" -msgstr "" -"Неслетите файлове не могат да бъдат подавани.\n" -"\n" -"Във файла „%s“ има конфликти при сливане. За да го подадете, трябва първо да " -"коригирате конфликтите и да добавите файла към индекса за подаване.\n" +msgid "%s (%s): Add Remote" +msgstr "%s (%s): Добавяне на отдалечено хранилище" -#: lib/commit.tcl:181 -#, tcl-format -msgid "" -"Unknown file state %s detected.\n" -"\n" -"File %s cannot be committed by this program.\n" -msgstr "" -"Непознато състояние на файл „%s“.\n" -"\n" -"Файлът „%s“ не може да бъде подаден чрез текущата програма.\n" +#: lib/remote_add.tcl:25 +msgid "Add New Remote" +msgstr "Добавяне на отдалечено хранилище" -#: lib/commit.tcl:189 -msgid "" -"No changes to commit.\n" -"\n" -"You must stage at least 1 file before you can commit.\n" -msgstr "" -"Няма промени за подаване.\n" -"\n" -"Трябва да добавите поне един файл към индекса, за да подадете.\n" +#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 +msgid "Add" +msgstr "Добавяне" -#: lib/commit.tcl:204 -msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" -"\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" -msgstr "" -"Задайте добро съобщение при подаване.\n" -"\n" -"Използвайте следния формат:\n" -"\n" -"● Първи ред: описание в едно изречение на промяната.\n" -"● Втори ред: празен.\n" -"● Останалите редове: опишете защо се налага тази промяна.\n" +#: lib/remote_add.tcl:39 +msgid "Remote Details" +msgstr "Данни за отдалеченото хранилище" -#: lib/commit.tcl:235 -msgid "Calling pre-commit hook..." -msgstr "Изпълняване на куката преди подаване…" +#: lib/remote_add.tcl:50 +msgid "Location:" +msgstr "Местоположение:" -#: lib/commit.tcl:250 -msgid "Commit declined by pre-commit hook." -msgstr "Подаването е отхвърлено от куката преди подаване." +#: lib/remote_add.tcl:60 +msgid "Further Action" +msgstr "Следващо действие" -#: lib/commit.tcl:269 -msgid "" -"You are about to commit on a detached head. This is a potentially dangerous " -"thing to do because if you switch to another branch you will lose your " -"changes and it can be difficult to retrieve them later from the reflog. You " -"should probably cancel this commit and create a new branch to continue.\n" -" \n" -" Do you really want to proceed with your Commit?" -msgstr "" -"Ще подавате към несвързан връх. Това е опасно — при изтеглянето на друг клон " -"ще изгубите промените си. След това може да е невъзможно да ги възстановите " -"от журнала на указателите „reflog“. Най-вероятно трябва да отмените това " -"подаване и да създадете клон, в който да подадете.\n" -" \n" -"Сигурни ли сте, че искате да подадете към несвързан връх?" +#: lib/remote_add.tcl:63 +msgid "Fetch Immediately" +msgstr "Незабавно доставяне" -#: lib/commit.tcl:290 -msgid "Calling commit-msg hook..." -msgstr "Изпълняване на куката за съобщението при подаване…" +#: lib/remote_add.tcl:69 +msgid "Initialize Remote Repository and Push" +msgstr "Инициализиране на отдалеченото хранилище и изтласкване на промените" -#: lib/commit.tcl:305 -msgid "Commit declined by commit-msg hook." -msgstr "Подаването е отхвърлено от куката за съобщението при подаване." +#: lib/remote_add.tcl:75 +msgid "Do Nothing Else Now" +msgstr "Да не се прави нищо" -#: lib/commit.tcl:318 -msgid "Committing changes..." -msgstr "Подаване на промените…" +#: lib/remote_add.tcl:100 +msgid "Please supply a remote name." +msgstr "Задайте име за отдалеченото хранилище." -#: lib/commit.tcl:334 -msgid "write-tree failed:" -msgstr "неуспешно запазване на дървото (write-tree):" +#: lib/remote_add.tcl:113 +#, tcl-format +msgid "'%s' is not an acceptable remote name." +msgstr "Отдалечено хранилище не може да се казва „%s“." -#: lib/commit.tcl:335 lib/commit.tcl:379 lib/commit.tcl:400 -msgid "Commit failed." -msgstr "Неуспешно подаване." +#: lib/remote_add.tcl:124 +#, tcl-format +msgid "Failed to add remote '%s' of location '%s'." +msgstr "Неуспешно добавяне на отдалеченото хранилище „%s“ от адрес „%s“." -#: lib/commit.tcl:352 +#: lib/remote_add.tcl:132 lib/transport.tcl:6 #, tcl-format -msgid "Commit %s appears to be corrupt" -msgstr "Подаването „%s“ изглежда повредено" +msgid "fetch %s" +msgstr "доставяне на „%s“" -#: lib/commit.tcl:357 -msgid "" -"No changes to commit.\n" -"\n" -"No files were modified by this commit and it was not a merge commit.\n" -"\n" -"A rescan will be automatically started now.\n" -msgstr "" -"Няма промени за подаване.\n" -"\n" -"В това подаване не са променяни никакви файлове, а и не е подаване със " -"сливане.\n" -"\n" -"Автоматично ще започне нова проверка.\n" +#: lib/remote_add.tcl:133 +#, tcl-format +msgid "Fetching the %s" +msgstr "Доставяне на „%s“" -#: lib/commit.tcl:364 -msgid "No changes to commit." -msgstr "Няма промени за подаване." +#: lib/remote_add.tcl:156 +#, tcl-format +msgid "Do not know how to initialize repository at location '%s'." +msgstr "Хранилището с местоположение „%s“ не може да бъде инициализирано." -#: lib/commit.tcl:378 -msgid "commit-tree failed:" -msgstr "неуспешно подаване на дървото (commit-tree):" +#: lib/remote_add.tcl:162 lib/transport.tcl:54 lib/transport.tcl:92 +#: lib/transport.tcl:110 +#, tcl-format +msgid "push %s" +msgstr "изтласкване на „%s“" -#: lib/commit.tcl:399 -msgid "update-ref failed:" -msgstr "неуспешно обновяване на указателите (update-ref):" +#: lib/remote_add.tcl:163 +#, tcl-format +msgid "Setting up the %s (at %s)" +msgstr "Добавяне на хранилище „%s“ (с адрес „%s“)" -#: lib/commit.tcl:492 +#: lib/remote_branch_delete.tcl:29 #, tcl-format -msgid "Created commit %s: %s" -msgstr "Успешно подаване %s: %s" +msgid "%s (%s): Delete Branch Remotely" +msgstr "%s (%s): Изтриване на отдалечения клон" -#: lib/branch_delete.tcl:16 -msgid "Delete Branch" -msgstr "Изтриване на клон" +#: lib/remote_branch_delete.tcl:34 +msgid "Delete Branch Remotely" +msgstr "Изтриване на отдалечения клон" -#: lib/branch_delete.tcl:21 -msgid "Delete Local Branch" -msgstr "Изтриване на локален клон" +#: lib/remote_branch_delete.tcl:48 +msgid "From Repository" +msgstr "От хранилище" -#: lib/branch_delete.tcl:39 -msgid "Local Branches" -msgstr "Локални клони" +#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:165 +msgid "Remote:" +msgstr "Отдалечено хранилище:" -#: lib/branch_delete.tcl:51 -msgid "Delete Only If Merged Into" -msgstr "Изтриване, само ако промените са слети и другаде" +#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:187 +msgid "Arbitrary Location:" +msgstr "Произволно местоположение:" -#: lib/branch_delete.tcl:103 -#, tcl-format -msgid "The following branches are not completely merged into %s:" -msgstr "Не всички промени в клоните са слети в „%s“:" +#: lib/remote_branch_delete.tcl:88 +msgid "Branches" +msgstr "Клони" -#: lib/branch_delete.tcl:141 +#: lib/remote_branch_delete.tcl:110 +msgid "Delete Only If" +msgstr "Изтриване, само ако" + +#: lib/remote_branch_delete.tcl:112 +msgid "Merged Into:" +msgstr "Слят в:" + +#: lib/remote_branch_delete.tcl:153 +msgid "A branch is required for 'Merged Into'." +msgstr "За данните „Слят в“ е необходимо да зададете клон." + +#: lib/remote_branch_delete.tcl:185 #, tcl-format msgid "" -"Failed to delete branches:\n" -"%s" +"The following branches are not completely merged into %s:\n" +"\n" +" - %s" msgstr "" -"Неуспешно триене на клони:\n" -"%s" +"Следните клони не са слети напълно в „%s“:\n" +"\n" +" ● %s" -#: lib/blame.tcl:73 -msgid "File Viewer" -msgstr "Преглед на файлове" +#: lib/remote_branch_delete.tcl:190 +#, tcl-format +msgid "" +"One or more of the merge tests failed because you have not fetched the " +"necessary commits. Try fetching from %s first." +msgstr "" +"Поне една от пробите за сливане е неуспешна, защото не сте доставили всички " +"необходими подавания. Пробвайте първо да доставите подаванията от „%s“." -#: lib/blame.tcl:79 -msgid "Commit:" -msgstr "Подаване:" +#: lib/remote_branch_delete.tcl:208 +msgid "Please select one or more branches to delete." +msgstr "Изберете поне един клон за изтриване." -#: lib/blame.tcl:280 -msgid "Copy Commit" -msgstr "Копиране на подаване" +#: lib/remote_branch_delete.tcl:227 +#, tcl-format +msgid "Deleting branches from %s" +msgstr "Изтриване на клони от „%s“" -#: lib/blame.tcl:284 -msgid "Find Text..." -msgstr "Търсене на текст…" +#: lib/remote_branch_delete.tcl:300 +msgid "No repository selected." +msgstr "Не е избрано хранилище." -#: lib/blame.tcl:288 -msgid "Goto Line..." -msgstr "Към ред…" +#: lib/remote_branch_delete.tcl:305 +#, tcl-format +msgid "Scanning %s..." +msgstr "Претърсване на „%s“…" -#: lib/blame.tcl:297 -msgid "Do Full Copy Detection" -msgstr "Пълно търсене на копиране" +#: lib/search.tcl:48 +msgid "Find:" +msgstr "Търсене:" -#: lib/blame.tcl:301 -msgid "Show History Context" -msgstr "Показване на контекста от историята" +#: lib/search.tcl:50 +msgid "Next" +msgstr "Следваща поява" -#: lib/blame.tcl:304 -msgid "Blame Parent Commit" -msgstr "Анотиране на родителското подаване" +#: lib/search.tcl:51 +msgid "Prev" +msgstr "Предишна поява" -#: lib/blame.tcl:466 -#, tcl-format -msgid "Reading %s..." -msgstr "Чете се „%s“…" +#: lib/search.tcl:52 +msgid "RegExp" +msgstr "РегИзр" -#: lib/blame.tcl:594 -msgid "Loading copy/move tracking annotations..." -msgstr "Зареждане на анотациите за проследяване на копирането/преместването…" +#: lib/search.tcl:54 +msgid "Case" +msgstr "Главни/малки" -#: lib/blame.tcl:614 -msgid "lines annotated" -msgstr "реда анотирани" +#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75 +#, tcl-format +msgid "%s (%s): Create Desktop Icon" +msgstr "%s (%s): Добавяне на икона на работния плот" -#: lib/blame.tcl:806 -msgid "Loading original location annotations..." -msgstr "Зареждане на анотациите за първоначалното местоположение…" +#: lib/shortcut.tcl:24 lib/shortcut.tcl:65 +msgid "Cannot write shortcut:" +msgstr "Клавишната комбинация не може да бъде запазена:" -#: lib/blame.tcl:809 -msgid "Annotation complete." -msgstr "Анотирането завърши." +#: lib/shortcut.tcl:140 +msgid "Cannot write icon:" +msgstr "Иконата не може да бъде запазена:" -#: lib/blame.tcl:839 -msgid "Busy" -msgstr "Операцията не е завършила" +#: lib/spellcheck.tcl:57 +msgid "Unsupported spell checker" +msgstr "Тази програма за проверка на правописа не се поддържа" -#: lib/blame.tcl:840 -msgid "Annotation process is already running." -msgstr "В момента тече процес на анотиране." +#: lib/spellcheck.tcl:65 +msgid "Spell checking is unavailable" +msgstr "Липсва програма за проверка на правописа" -#: lib/blame.tcl:879 -msgid "Running thorough copy detection..." -msgstr "Изпълнява се цялостен процес на откриване на копиране…" +#: lib/spellcheck.tcl:68 +msgid "Invalid spell checking configuration" +msgstr "Неправилни настройки на проверката на правописа" -#: lib/blame.tcl:947 -msgid "Loading annotation..." -msgstr "Зареждане на анотации…" +#: lib/spellcheck.tcl:70 +#, tcl-format +msgid "Reverting dictionary to %s." +msgstr "Ползване на речник за език „%s“." -#: lib/blame.tcl:1000 -msgid "Author:" -msgstr "Автор:" +#: lib/spellcheck.tcl:73 +msgid "Spell checker silently failed on startup" +msgstr "Програмата за правопис даже не стартира успешно." -#: lib/blame.tcl:1004 -msgid "Committer:" -msgstr "Подал:" +#: lib/spellcheck.tcl:80 +msgid "Unrecognized spell checker" +msgstr "Непозната програма за проверка на правописа" -#: lib/blame.tcl:1009 -msgid "Original File:" -msgstr "Първоначален файл:" +#: lib/spellcheck.tcl:186 +msgid "No Suggestions" +msgstr "Няма предложения" -#: lib/blame.tcl:1057 -msgid "Cannot find HEAD commit:" -msgstr "Подаването за връх „HEAD“ не може да се открие:" +#: lib/spellcheck.tcl:388 +msgid "Unexpected EOF from spell checker" +msgstr "Неочакван край на файл от програмата за проверка на правописа" -#: lib/blame.tcl:1112 -msgid "Cannot find parent commit:" -msgstr "Родителското подаване не може да бъде открито" +#: lib/spellcheck.tcl:392 +msgid "Spell Checker Failed" +msgstr "Грешка в програмата за проверка на правописа" -#: lib/blame.tcl:1127 -msgid "Unable to display parent" -msgstr "Родителят не може да бъде показан" +#: lib/sshkey.tcl:31 +msgid "No keys found." +msgstr "Не са открити ключове." -#: lib/blame.tcl:1269 -msgid "Originally By:" -msgstr "Първоначално от:" +#: lib/sshkey.tcl:34 +#, tcl-format +msgid "Found a public key in: %s" +msgstr "Открит е публичен ключ в „%s“" -#: lib/blame.tcl:1275 -msgid "In File:" -msgstr "Във файл:" +#: lib/sshkey.tcl:40 +msgid "Generate Key" +msgstr "Генериране на ключ" -#: lib/blame.tcl:1280 -msgid "Copied Or Moved Here By:" -msgstr "Копирано или преместено тук от:" +#: lib/sshkey.tcl:58 +msgid "Copy To Clipboard" +msgstr "Копиране към системния буфер" -#: lib/index.tcl:6 -msgid "Unable to unlock the index." -msgstr "Индексът не може да бъде отключен." +#: lib/sshkey.tcl:72 +msgid "Your OpenSSH Public Key" +msgstr "Публичният ви ключ за OpenSSH" -#: lib/index.tcl:17 -msgid "Index Error" -msgstr "Грешка в индекса" +#: lib/sshkey.tcl:80 +msgid "Generating..." +msgstr "Генериране…" -#: lib/index.tcl:19 +#: lib/sshkey.tcl:86 +#, tcl-format msgid "" -"Updating the Git index failed. A rescan will be automatically started to " -"resynchronize git-gui." +"Could not start ssh-keygen:\n" +"\n" +"%s" msgstr "" -"Неуспешно обновяване на индекса на Git. Автоматично ще започне нова проверка " -"за синхронизирането на git-gui." +"Програмата „ssh-keygen“ не може да бъде стартирана:\n" +"\n" +"%s" -#: lib/index.tcl:30 -msgid "Continue" -msgstr "Продължаване" +#: lib/sshkey.tcl:113 +msgid "Generation failed." +msgstr "Неуспешно генериране." -#: lib/index.tcl:33 -msgid "Unlock Index" -msgstr "Отключване на индекса" +#: lib/sshkey.tcl:120 +msgid "Generation succeeded, but no keys found." +msgstr "Генерирането завърши успешно, а не са намерени ключове." -#: lib/index.tcl:298 +#: lib/sshkey.tcl:123 #, tcl-format -msgid "Unstaging %s from commit" -msgstr "Изваждане на „%s“ от подаването" +msgid "Your key is in: %s" +msgstr "Ключът ви е в „%s“" -#: lib/index.tcl:337 -msgid "Ready to commit." -msgstr "Готовност за подаване." +#: lib/status_bar.tcl:87 +#, tcl-format +msgid "%s ... %*i of %*i %s (%3i%%)" +msgstr "%s… %*i от общо %*i %s (%3i%%)" -#: lib/index.tcl:350 +#: lib/tools.tcl:76 #, tcl-format -msgid "Adding %s" -msgstr "Добавяне на „%s“" +msgid "Running %s requires a selected file." +msgstr "За изпълнението на „%s“ трябва да изберете файл." -#: lib/index.tcl:380 +#: lib/tools.tcl:92 #, tcl-format -msgid "Stage %d untracked files?" -msgstr "Да се вкарат ли %d неследени файла в индекса?" +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "Сигурни ли сте, че искате да изпълните „%1$s“ върху файла „%2$s“?" -#: lib/index.tcl:428 +#: lib/tools.tcl:96 #, tcl-format -msgid "Revert changes in file %s?" -msgstr "Да се махнат ли промените във файла „%s“?" +msgid "Are you sure you want to run %s?" +msgstr "Сигурни ли сте, че искате да изпълните „%s“?" -#: lib/index.tcl:430 +#: lib/tools.tcl:118 #, tcl-format -msgid "Revert changes in these %i files?" -msgstr "Да се махнат ли промените в тези %i файла?" +msgid "Tool: %s" +msgstr "Команда: %s" -#: lib/index.tcl:438 -msgid "Any unstaged changes will be permanently lost by the revert." +#: lib/tools.tcl:119 +#, tcl-format +msgid "Running: %s" +msgstr "Изпълнение: %s" + +#: lib/tools.tcl:158 +#, tcl-format +msgid "Tool completed successfully: %s" +msgstr "Командата завърши успешно: %s" + +#: lib/tools.tcl:160 +#, tcl-format +msgid "Tool failed: %s" +msgstr "Командата върна грешка: %s" + +#: lib/tools_dlg.tcl:22 +#, tcl-format +msgid "%s (%s): Add Tool" +msgstr "%s (%s): Добавяне на команда" + +#: lib/tools_dlg.tcl:28 +msgid "Add New Tool Command" +msgstr "Добавяне на команда" + +#: lib/tools_dlg.tcl:34 +msgid "Add globally" +msgstr "Глобално добавяне" + +#: lib/tools_dlg.tcl:46 +msgid "Tool Details" +msgstr "Подробности за командата" + +#: lib/tools_dlg.tcl:49 +msgid "Use '/' separators to create a submenu tree:" +msgstr "За създаване на подменюта използвайте знака „/“ за разделител:" + +#: lib/tools_dlg.tcl:60 +msgid "Command:" +msgstr "Команда:" + +#: lib/tools_dlg.tcl:71 +msgid "Show a dialog before running" +msgstr "Преди изпълнение да се извежда диалогов прозорец" + +#: lib/tools_dlg.tcl:77 +msgid "Ask the user to select a revision (sets $REVISION)" +msgstr "Потребителят да укаже версия (задаване на променливата $REVISION)" + +#: lib/tools_dlg.tcl:82 +msgid "Ask the user for additional arguments (sets $ARGS)" msgstr "" -"Всички промени, които не са били вкарани в индекса, ще бъдат безвъзвратно " -"загубени." +"Потребителят да укаже допълнителни аргументи (задаване на променливата $ARGS)" -#: lib/index.tcl:441 -msgid "Do Nothing" -msgstr "Нищо да не се прави" +#: lib/tools_dlg.tcl:89 +msgid "Don't show the command output window" +msgstr "Без показване на прозорец с изхода от командата" + +#: lib/tools_dlg.tcl:94 +msgid "Run only if a diff is selected ($FILENAME not empty)" +msgstr "" +"Стартиране само след избор на разлика (променливата $FILENAME не е празна)" -#: lib/index.tcl:459 -msgid "Reverting selected files" -msgstr "Махане на промените в избраните файлове" +#: lib/tools_dlg.tcl:118 +msgid "Please supply a name for the tool." +msgstr "Задайте име за командата." -#: lib/index.tcl:463 +#: lib/tools_dlg.tcl:126 #, tcl-format -msgid "Reverting %s" -msgstr "Махане на промените в „%s“" +msgid "Tool '%s' already exists." +msgstr "Командата „%s“ вече съществува." -#: lib/date.tcl:25 +#: lib/tools_dlg.tcl:148 #, tcl-format -msgid "Invalid date from Git: %s" -msgstr "Неправилни данни от Git: %s" - -#: lib/database.tcl:42 -msgid "Number of loose objects" -msgstr "Брой непакетирани обекти" +msgid "" +"Could not add tool:\n" +"%s" +msgstr "" +"Командата не може да бъде добавена:\n" +"%s" -#: lib/database.tcl:43 -msgid "Disk space used by loose objects" -msgstr "Дисково пространство заето от непакетирани обекти" +#: lib/tools_dlg.tcl:187 +#, tcl-format +msgid "%s (%s): Remove Tool" +msgstr "%s (%s): Премахване на команда" -#: lib/database.tcl:44 -msgid "Number of packed objects" -msgstr "Брой пакетирани обекти" +#: lib/tools_dlg.tcl:193 +msgid "Remove Tool Commands" +msgstr "Премахване на команди" -#: lib/database.tcl:45 -msgid "Number of packs" -msgstr "Брой пакети" +#: lib/tools_dlg.tcl:198 +msgid "Remove" +msgstr "Премахване" -#: lib/database.tcl:46 -msgid "Disk space used by packed objects" -msgstr "Дисково пространство заето от пакетирани обекти" +#: lib/tools_dlg.tcl:231 +msgid "(Blue denotes repository-local tools)" +msgstr "(командите към локалното хранилище са обозначени в синьо)" -#: lib/database.tcl:47 -msgid "Packed objects waiting for pruning" -msgstr "Пакетирани обекти за окастряне" +#: lib/tools_dlg.tcl:283 +#, tcl-format +msgid "%s (%s):" +msgstr "%s (%s):" -#: lib/database.tcl:48 -msgid "Garbage files" -msgstr "Файлове за боклука" +#: lib/tools_dlg.tcl:292 +#, tcl-format +msgid "Run Command: %s" +msgstr "Изпълнение на командата „%s“" -#: lib/database.tcl:72 -msgid "Compressing the object database" -msgstr "Компресиране на базата с данни за обектите" +#: lib/tools_dlg.tcl:306 +msgid "Arguments" +msgstr "Аргументи" -#: lib/database.tcl:83 -msgid "Verifying the object database with fsck-objects" -msgstr "Проверка на базата с данни за обектите с програмата „fsck-objects“" +#: lib/tools_dlg.tcl:341 +msgid "OK" +msgstr "Добре" -#: lib/database.tcl:107 +#: lib/transport.tcl:7 #, tcl-format -msgid "" -"This repository currently has approximately %i loose objects.\n" -"\n" -"To maintain optimal performance it is strongly recommended that you compress " -"the database.\n" -"\n" -"Compress the database now?" -msgstr "" -"В това хранилище в момента има към %i непакетирани обекти.\n" -"\n" -"За добра производителност се препоръчва да компресирате базата с данни за " -"обектите.\n" -"\n" -"Да се започне ли компресирането?" +msgid "Fetching new changes from %s" +msgstr "Доставяне на промените от „%s“" -#: lib/error.tcl:20 lib/error.tcl:116 -msgid "error" -msgstr "грешка" +#: lib/transport.tcl:18 +#, tcl-format +msgid "remote prune %s" +msgstr "окастряне на следящите клони към „%s“" -#: lib/error.tcl:36 -msgid "warning" -msgstr "предупреждение" +#: lib/transport.tcl:19 +#, tcl-format +msgid "Pruning tracking branches deleted from %s" +msgstr "Окастряне на следящите клони на изтритите клони от „%s“" -#: lib/error.tcl:96 -msgid "You must correct the above errors before committing." -msgstr "Преди да можете да подадете, коригирайте горните грешки." +#: lib/transport.tcl:25 +msgid "fetch all remotes" +msgstr "доставяне от всички отдалечени" -#: lib/merge.tcl:13 -msgid "" -"Cannot merge while amending.\n" -"\n" -"You must finish amending this commit before starting any type of merge.\n" -msgstr "" -"По време на поправяне не може да сливане.\n" -"\n" -"Трябва да завършите поправянето на текущото подаване, преди да започнете " -"сливане.\n" +#: lib/transport.tcl:26 +msgid "Fetching new changes from all remotes" +msgstr "Доставяне на промените от всички отдалечени хранилища" -#: lib/merge.tcl:27 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before a merge can be performed.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"Последно установеното състояние не отговаря на това в хранилището.\n" -"\n" -"Някой друг процес за Git е променил хранилището междувременно. Състоянието " -"трябва да бъде проверено, преди да се извърши сливане.\n" -"\n" -"Автоматично ще започне нова проверка.\n" -"\n" +#: lib/transport.tcl:40 +msgid "remote prune all remotes" +msgstr "окастряне на следящите изтрити" -#: lib/merge.tcl:45 -#, tcl-format -msgid "" -"You are in the middle of a conflicted merge.\n" -"\n" -"File %s has merge conflicts.\n" -"\n" -"You must resolve them, stage the file, and commit to complete the current " -"merge. Only then can you begin another merge.\n" +#: lib/transport.tcl:41 +msgid "Pruning tracking branches deleted from all remotes" msgstr "" -"В момента тече сливане, но има конфликти.\n" -"\n" -"Погледнете файла „%s“.\n" -"\n" -"Трябва да коригирате конфликтите в него, да го добавите към индекса и да " -"завършите текущото сливане чрез подаване. Чак тогава може да започнете ново " -"сливане.\n" +"Окастряне на следящите клони на изтритите клони от всички отдалечени " +"хранилища" -#: lib/merge.tcl:55 +#: lib/transport.tcl:55 #, tcl-format -msgid "" -"You are in the middle of a change.\n" -"\n" -"File %s is modified.\n" -"\n" -"You should complete the current commit before starting a merge. Doing so " -"will help you abort a failed merge, should the need arise.\n" -msgstr "" -"В момента тече подаване.\n" -"\n" -"Файлът „%s“ е променен.\n" -"\n" -"Трябва да завършите текущото подаване, преди да започнете сливане. Така ще " -"можете лесно да преустановите сливането, ако възникне нужда.\n" +msgid "Pushing changes to %s" +msgstr "Изтласкване на промените към „%s“" -#: lib/merge.tcl:108 +#: lib/transport.tcl:93 #, tcl-format -msgid "%s of %s" -msgstr "%s от общо %s" +msgid "Mirroring to %s" +msgstr "Изтласкване на всичко към „%s“" -#: lib/merge.tcl:122 +#: lib/transport.tcl:111 #, tcl-format -msgid "Merging %s and %s..." -msgstr "Сливане на „%s“ и „%s“…" - -#: lib/merge.tcl:133 -msgid "Merge completed successfully." -msgstr "Сливането завърши успешно." - -#: lib/merge.tcl:135 -msgid "Merge failed. Conflict resolution is required." -msgstr "Неуспешно сливане — има конфликти за коригиране." +msgid "Pushing %s %s to %s" +msgstr "Изтласкване на %s „%s“ към „%s“" -#: lib/merge.tcl:160 -#, tcl-format -msgid "Merge Into %s" -msgstr "Сливане в „%s“" +#: lib/transport.tcl:132 +msgid "Push Branches" +msgstr "Клони за изтласкване" -#: lib/merge.tcl:179 -msgid "Revision To Merge" -msgstr "Версия за сливане" +#: lib/transport.tcl:147 +msgid "Source Branches" +msgstr "Клони-източници" -#: lib/merge.tcl:214 -msgid "" -"Cannot abort while amending.\n" -"\n" -"You must finish amending this commit.\n" -msgstr "" -"Поправянето не може да бъде преустановено.\n" -"\n" -"Трябва да завършите поправката на това подаване.\n" +#: lib/transport.tcl:162 +msgid "Destination Repository" +msgstr "Целево хранилище" -#: lib/merge.tcl:224 -msgid "" -"Abort merge?\n" -"\n" -"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with aborting the current merge?" -msgstr "" -"Да се преустанови ли сливането?\n" -"\n" -"В такъв случай ●ВСИЧКИ● неподадени промени ще бъдат безвъзвратно загубени.\n" -"\n" -"Наистина ли да се преустанови сливането?" +#: lib/transport.tcl:205 +msgid "Transfer Options" +msgstr "Настройки при пренасянето" -#: lib/merge.tcl:230 -msgid "" -"Reset changes?\n" -"\n" -"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with resetting the current changes?" +#: lib/transport.tcl:207 +msgid "Force overwrite existing branch (may discard changes)" msgstr "" -"Да се занулят ли промените?\n" -"\n" -"В такъв случай ●ВСИЧКИ● неподадени промени ще бъдат безвъзвратно загубени.\n" -"\n" -"Наистина ли да се занулят промените?" - -#: lib/merge.tcl:241 -msgid "Aborting" -msgstr "Преустановяване" +"Изрично презаписване на съществуващ клон (някои промени може да бъдат " +"загубени)" -#: lib/merge.tcl:241 -msgid "files reset" -msgstr "файла със занулени промени" +#: lib/transport.tcl:211 +msgid "Use thin pack (for slow network connections)" +msgstr "Максимална компресия (за бавни мрежови връзки)" -#: lib/merge.tcl:269 -msgid "Abort failed." -msgstr "Неуспешно преустановяване." +#: lib/transport.tcl:215 +msgid "Include tags" +msgstr "Включване на етикетите" -#: lib/merge.tcl:271 -msgid "Abort completed. Ready." -msgstr "Успешно преустановяване. Готовност за следващо действие." +#: lib/transport.tcl:229 +#, tcl-format +msgid "%s (%s): Push" +msgstr "%s (%s): Изтласкване" diff --git a/git-gui/po/ru.po b/git-gui/po/ru.po index ca4343b40c..9f5305c43e 100644 --- a/git-gui/po/ru.po +++ b/git-gui/po/ru.po @@ -1,19 +1,22 @@ # Translation of git-gui to russian # Copyright (C) 2007 Shawn Pearce # This file is distributed under the same license as the git-gui package. -# Irina Riesen , 2007. -# +# Translators: +# Dimitriy Ryazantcev , 2015-2016 +# Irina Riesen , 2007 msgid "" msgstr "" -"Project-Id-Version: git-gui\n" +"Project-Id-Version: Git Russian Localization Project\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-01-26 15:47-0800\n" -"PO-Revision-Date: 2007-10-22 22:30-0200\n" -"Last-Translator: Alex Riesen \n" -"Language-Team: Russian Translation \n" +"PO-Revision-Date: 2016-06-30 12:39+0000\n" +"Last-Translator: Dimitriy Ryazantcev \n" +"Language-Team: Russian (http://www.transifex.com/djm00n/git-po-ru/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: git-gui.sh:41 git-gui.sh:793 git-gui.sh:807 git-gui.sh:820 git-gui.sh:903 #: git-gui.sh:922 @@ -51,14 +54,7 @@ msgid "" "%s requires at least Git 1.5.0 or later.\n" "\n" "Assume '%s' is version 1.5.0?\n" -msgstr "" -"Невозможно определить версию Git\n" -"\n" -"%s указывает на версию '%s'.\n" -"\n" -"для %s требуется версия Git, начиная с 1.5.0\n" -"\n" -"Принять '%s' как версию 1.5.0?\n" +msgstr "Невозможно определить версию Git\n\n%s указывает на версию «%s».\n\nдля %s требуется версия Git, начиная с 1.5.0\n\nПредположить, что «%s» и есть версия 1.5.0?\n" #: git-gui.sh:1128 msgid "Git directory not found:" @@ -78,20 +74,19 @@ msgstr "Отсутствует рабочий каталог" #: git-gui.sh:1334 lib/checkout_op.tcl:306 msgid "Refreshing file status..." -msgstr "Обновление информации о состоянии файлов..." +msgstr "Обновление информации о состоянии файлов…" #: git-gui.sh:1390 msgid "Scanning for modified files ..." -msgstr "Поиск измененных файлов..." +msgstr "Поиск измененных файлов…" #: git-gui.sh:1454 msgid "Calling prepare-commit-msg hook..." -msgstr "Вызов программы поддержки репозитория prepare-commit-msg..." +msgstr "Вызов перехватчика prepare-commit-msg…" #: git-gui.sh:1471 msgid "Commit declined by prepare-commit-msg hook." -msgstr "" -"Сохранение прервано программой поддержки репозитория prepare-commit-msg" +msgstr "Коммит прерван перехватчиком prepare-commit-msg." #: git-gui.sh:1629 lib/browser.tcl:246 msgid "Ready." @@ -108,31 +103,31 @@ msgstr "Не изменено" #: git-gui.sh:1915 msgid "Modified, not staged" -msgstr "Изменено, не подготовлено" +msgstr "Изменено, не в индексе" #: git-gui.sh:1916 git-gui.sh:1924 msgid "Staged for commit" -msgstr "Подготовлено для сохранения" +msgstr "В индексе для коммита" #: git-gui.sh:1917 git-gui.sh:1925 msgid "Portions staged for commit" -msgstr "Части, подготовленные для сохранения" +msgstr "Части, в индексе для коммита" #: git-gui.sh:1918 git-gui.sh:1926 msgid "Staged for commit, missing" -msgstr "Подготовлено для сохранения, отсутствует" +msgstr "В индексе для коммита, отсутствует" #: git-gui.sh:1920 msgid "File type changed, not staged" -msgstr "Тип файла изменён, не подготовлено" +msgstr "Тип файла изменён, не в индексе" #: git-gui.sh:1921 msgid "File type changed, staged" -msgstr "Тип файла изменён, подготовлено" +msgstr "Тип файла изменён, в индексе" #: git-gui.sh:1923 msgid "Untracked, not staged" -msgstr "Не отслеживается, не подготовлено" +msgstr "Не отслеживается, не в индексе" #: git-gui.sh:1928 msgid "Missing" @@ -140,11 +135,11 @@ msgstr "Отсутствует" #: git-gui.sh:1929 msgid "Staged for removal" -msgstr "Подготовлено для удаления" +msgstr "В индексе для удаления" #: git-gui.sh:1930 msgid "Staged for removal, still present" -msgstr "Подготовлено для удаления, еще не удалено" +msgstr "В индексе для удаления, еще не удалено" #: git-gui.sh:1932 git-gui.sh:1933 git-gui.sh:1934 git-gui.sh:1935 #: git-gui.sh:1936 git-gui.sh:1937 @@ -153,7 +148,7 @@ msgstr "Требуется разрешение конфликта при сли #: git-gui.sh:1972 msgid "Starting gitk... please wait..." -msgstr "Запускается gitk... Подождите, пожалуйста..." +msgstr "Запускается gitk… Подождите, пожалуйста…" #: git-gui.sh:1984 msgid "Couldn't find gitk in PATH" @@ -173,11 +168,11 @@ msgstr "Редактировать" #: git-gui.sh:2458 lib/choose_rev.tcl:561 msgid "Branch" -msgstr "Ветвь" +msgstr "Ветка" #: git-gui.sh:2461 lib/choose_rev.tcl:548 msgid "Commit@@noun" -msgstr "Состояние" +msgstr "Коммит" #: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168 msgid "Merge" @@ -197,29 +192,29 @@ msgstr "Просмотр рабочего каталога" #: git-gui.sh:2483 msgid "Browse Current Branch's Files" -msgstr "Просмотреть файлы текущей ветви" +msgstr "Просмотреть файлы текущей ветки" #: git-gui.sh:2487 msgid "Browse Branch Files..." -msgstr "Показать файлы ветви..." +msgstr "Показать файлы ветки…" #: git-gui.sh:2492 msgid "Visualize Current Branch's History" -msgstr "Показать историю текущей ветви" +msgstr "Показать историю текущей ветки" #: git-gui.sh:2496 msgid "Visualize All Branch History" -msgstr "Показать историю всех ветвей" +msgstr "Показать историю всех веток" #: git-gui.sh:2503 #, tcl-format msgid "Browse %s's Files" -msgstr "Показать файлы ветви %s" +msgstr "Показать файлы ветки %s" #: git-gui.sh:2505 #, tcl-format msgid "Visualize %s's History" -msgstr "Показать историю ветви %s" +msgstr "Показать историю ветки %s" #: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67 msgid "Database Statistics" @@ -274,23 +269,23 @@ msgstr "Выделить все" #: git-gui.sh:2576 msgid "Create..." -msgstr "Создать..." +msgstr "Создать…" #: git-gui.sh:2582 msgid "Checkout..." -msgstr "Перейти..." +msgstr "Перейти…" #: git-gui.sh:2588 msgid "Rename..." -msgstr "Переименовать..." +msgstr "Переименовать…" #: git-gui.sh:2593 msgid "Delete..." -msgstr "Удалить..." +msgstr "Удалить…" #: git-gui.sh:2598 msgid "Reset..." -msgstr "Сбросить..." +msgstr "Сбросить…" #: git-gui.sh:2608 msgid "Done" @@ -298,15 +293,15 @@ msgstr "Завершено" #: git-gui.sh:2610 msgid "Commit@@verb" -msgstr "Сохранить" +msgstr "Закоммитить" #: git-gui.sh:2619 git-gui.sh:3050 msgid "New Commit" -msgstr "Новое состояние" +msgstr "Новый коммит" #: git-gui.sh:2627 git-gui.sh:3057 msgid "Amend Last Commit" -msgstr "Исправить последнее состояние" +msgstr "Исправить последний коммит" #: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99 msgid "Rescan" @@ -314,19 +309,19 @@ msgstr "Перечитать" #: git-gui.sh:2643 msgid "Stage To Commit" -msgstr "Подготовить для сохранения" +msgstr "Добавить в индекс" #: git-gui.sh:2649 msgid "Stage Changed Files To Commit" -msgstr "Подготовить измененные файлы для сохранения" +msgstr "Добавить изменённые файлы в индекс" #: git-gui.sh:2655 msgid "Unstage From Commit" -msgstr "Убрать из подготовленного" +msgstr "Убрать из издекса" #: git-gui.sh:2661 lib/index.tcl:412 msgid "Revert Changes" -msgstr "Отменить изменения" +msgstr "Обратить изменения" #: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341 msgid "Show Less Context" @@ -342,31 +337,31 @@ msgstr "Вставить Signed-off-by" #: git-gui.sh:2696 msgid "Local Merge..." -msgstr "Локальное слияние..." +msgstr "Локальное слияние…" #: git-gui.sh:2701 msgid "Abort Merge..." -msgstr "Прервать слияние..." +msgstr "Прервать слияние…" #: git-gui.sh:2713 git-gui.sh:2741 msgid "Add..." -msgstr "Добавить..." +msgstr "Добавить…" #: git-gui.sh:2717 msgid "Push..." -msgstr "Отправить..." +msgstr "Отправить…" #: git-gui.sh:2721 msgid "Delete Branch..." -msgstr "Удалить ветвь..." +msgstr "Удалить ветку…" #: git-gui.sh:2731 git-gui.sh:3292 msgid "Options..." -msgstr "Настройки..." +msgstr "Настройки…" #: git-gui.sh:2742 msgid "Remove..." -msgstr "Удалить..." +msgstr "Удалить…" #: git-gui.sh:2751 lib/choose_repository.tcl:50 msgid "Help" @@ -393,11 +388,11 @@ msgstr "критическая ошибка: %s: нет такого файла #: git-gui.sh:2926 msgid "Current Branch:" -msgstr "Текущая ветвь:" +msgstr "Текущая ветка:" #: git-gui.sh:2947 msgid "Staged Changes (Will Commit)" -msgstr "Подготовлено (будет сохранено)" +msgstr "Изменения в индексе (будут закоммичены)" #: git-gui.sh:2967 msgid "Unstaged Changes" @@ -405,7 +400,7 @@ msgstr "Изменено (не будет сохранено)" #: git-gui.sh:3017 msgid "Stage Changed" -msgstr "Подготовить все" +msgstr "Индексировать всё" #: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193 msgid "Push" @@ -413,27 +408,27 @@ msgstr "Отправить" #: git-gui.sh:3071 msgid "Initial Commit Message:" -msgstr "Комментарий к первому состоянию:" +msgstr "Сообщение первого коммита:" #: git-gui.sh:3072 msgid "Amended Commit Message:" -msgstr "Комментарий к исправленному состоянию:" +msgstr "Сообщение исправленного коммита:" #: git-gui.sh:3073 msgid "Amended Initial Commit Message:" -msgstr "Комментарий к исправленному первоначальному состоянию:" +msgstr "Сообщение исправленного первого коммита:" #: git-gui.sh:3074 msgid "Amended Merge Commit Message:" -msgstr "Комментарий к исправленному слиянию:" +msgstr "Сообщение исправленного слияния:" #: git-gui.sh:3075 msgid "Merge Commit Message:" -msgstr "Комментарий к слиянию:" +msgstr "Сообщение слияния:" #: git-gui.sh:3076 msgid "Commit Message:" -msgstr "Комментарий к состоянию:" +msgstr "Сообщение коммита:" #: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73 msgid "Copy All" @@ -481,51 +476,51 @@ msgstr "Взять локальную версию" #: git-gui.sh:3336 msgid "Revert To Base" -msgstr "Отменить изменения" +msgstr "Обратить изменения" #: git-gui.sh:3354 msgid "Visualize These Changes In The Submodule" -msgstr "" +msgstr "Показать эти изменения подмодуля" #: git-gui.sh:3358 msgid "Visualize Current Branch History In The Submodule" -msgstr "Показать историю текущей ветви подмодуля" +msgstr "Показать историю текущей ветки подмодуля" #: git-gui.sh:3362 msgid "Visualize All Branch History In The Submodule" -msgstr "Показать историю всех ветвей подмодуля" +msgstr "Показать историю всех веток подмодуля" #: git-gui.sh:3367 msgid "Start git gui In The Submodule" -msgstr "" +msgstr "Запустить git gui в подмодуле" #: git-gui.sh:3389 msgid "Unstage Hunk From Commit" -msgstr "Не сохранять часть" +msgstr "Убрать блок из индекса" #: git-gui.sh:3391 msgid "Unstage Lines From Commit" -msgstr "Убрать строки из подготовленного" +msgstr "Убрать строки из индекса" #: git-gui.sh:3393 msgid "Unstage Line From Commit" -msgstr "Убрать строку из подготовленного" +msgstr "Убрать строку из индекса" #: git-gui.sh:3396 msgid "Stage Hunk For Commit" -msgstr "Подготовить часть для сохранения" +msgstr "Добавить блок в индекс" #: git-gui.sh:3398 msgid "Stage Lines For Commit" -msgstr "Подготовить строки для сохранения" +msgstr "Добавить строки в индекс" #: git-gui.sh:3400 msgid "Stage Line For Commit" -msgstr "Подготовить строку для сохранения" +msgstr "Добавить строку в индекс" #: git-gui.sh:3424 msgid "Initializing..." -msgstr "Инициализация..." +msgstr "Инициализация…" #: git-gui.sh:3541 #, tcl-format @@ -536,23 +531,14 @@ msgid "" "going to be ignored by any Git subprocess run\n" "by %s:\n" "\n" -msgstr "" -"Возможны ошибки в переменных окружения.\n" -"\n" -"Переменные окружения, которые возможно\n" -"будут проигнорированы командами Git,\n" -"запущенными из %s\n" -"\n" +msgstr "Возможны ошибки в переменных окружения.\n\nПеременные окружения, которые возможно\nбудут проигнорированы командами Git,\nзапущенными из %s\n\n" #: git-gui.sh:3570 msgid "" "\n" "This is due to a known issue with the\n" "Tcl binary distributed by Cygwin." -msgstr "" -"\n" -"Это известная проблема с Tcl,\n" -"распространяемым Cygwin." +msgstr "\nЭто известная проблема с Tcl,\nраспространяемым Cygwin." #: git-gui.sh:3575 #, tcl-format @@ -563,13 +549,7 @@ msgid "" "is placing values for the user.name and\n" "user.email settings into your personal\n" "~/.gitconfig file.\n" -msgstr "" -"\n" -"\n" -"Вместо использования %s можно\n" -"сохранить значения user.name и\n" -"user.email в Вашем персональном\n" -"файле ~/.gitconfig.\n" +msgstr "\n\nВместо использования %s можно\nсохранить значения user.name и\nuser.email в Вашем персональном\nфайле ~/.gitconfig.\n" #: lib/about.tcl:26 msgid "git-gui - a graphical user interface for Git." @@ -581,15 +561,15 @@ msgstr "Просмотр файла" #: lib/blame.tcl:78 msgid "Commit:" -msgstr "Сохраненное состояние:" +msgstr "Коммит:" #: lib/blame.tcl:271 msgid "Copy Commit" -msgstr "Скопировать SHA-1" +msgstr "Копировать SHA-1" #: lib/blame.tcl:275 msgid "Find Text..." -msgstr "Найти текст..." +msgstr "Найти текст…" #: lib/blame.tcl:284 msgid "Do Full Copy Detection" @@ -601,16 +581,16 @@ msgstr "Показать исторический контекст" #: lib/blame.tcl:291 msgid "Blame Parent Commit" -msgstr "Рассмотреть состояние предка" +msgstr "Авторы родительского коммита" #: lib/blame.tcl:450 #, tcl-format msgid "Reading %s..." -msgstr "Чтение %s..." +msgstr "Чтение %s…" #: lib/blame.tcl:557 msgid "Loading copy/move tracking annotations..." -msgstr "Загрузка аннотации копирований/переименований..." +msgstr "Загрузка аннотации копирований/переименований…" #: lib/blame.tcl:577 msgid "lines annotated" @@ -618,7 +598,7 @@ msgstr "строк прокомментировано" #: lib/blame.tcl:769 msgid "Loading original location annotations..." -msgstr "Загрузка аннотаций первоначального положения объекта..." +msgstr "Загрузка аннотаций первоначального положения объекта…" #: lib/blame.tcl:772 msgid "Annotation complete." @@ -634,11 +614,11 @@ msgstr "Аннотация уже запущена" #: lib/blame.tcl:842 msgid "Running thorough copy detection..." -msgstr "Выполнение полного поиска копий..." +msgstr "Выполнение полного поиска копий…" #: lib/blame.tcl:910 msgid "Loading annotation..." -msgstr "Загрузка аннотации..." +msgstr "Загрузка аннотации…" #: lib/blame.tcl:963 msgid "Author:" @@ -646,7 +626,7 @@ msgstr "Автор:" #: lib/blame.tcl:967 msgid "Committer:" -msgstr "Сохранил:" +msgstr "Коммитер:" #: lib/blame.tcl:972 msgid "Original File:" @@ -654,11 +634,11 @@ msgstr "Исходный файл:" #: lib/blame.tcl:1020 msgid "Cannot find HEAD commit:" -msgstr "Невозможно найти текущее состояние:" +msgstr "Не удалось найти текущее состояние:" #: lib/blame.tcl:1075 msgid "Cannot find parent commit:" -msgstr "Невозможно найти состояние предка:" +msgstr "Не удалось найти родительское состояние:" #: lib/blame.tcl:1090 msgid "Unable to display parent" @@ -682,7 +662,7 @@ msgstr "Скопировано/перемещено в:" #: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19 msgid "Checkout Branch" -msgstr "Перейти на ветвь" +msgstr "Перейти на ветку" #: lib/branch_checkout.tcl:23 msgid "Checkout" @@ -707,19 +687,19 @@ msgstr "Настройки" #: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92 msgid "Fetch Tracking Branch" -msgstr "Получить изменения из внешней ветви" +msgstr "Извлечь изменения из внешней ветки" #: lib/branch_checkout.tcl:44 msgid "Detach From Local Branch" -msgstr "Отсоединить от локальной ветви" +msgstr "Отсоединить от локальной ветки" #: lib/branch_create.tcl:22 msgid "Create Branch" -msgstr "Создание ветви" +msgstr "Создать ветку" #: lib/branch_create.tcl:27 msgid "Create New Branch" -msgstr "Создать новую ветвь" +msgstr "Создать новую ветку" #: lib/branch_create.tcl:31 lib/choose_repository.tcl:381 msgid "Create" @@ -727,7 +707,7 @@ msgstr "Создать" #: lib/branch_create.tcl:40 msgid "Branch Name" -msgstr "Название ветви" +msgstr "Имя ветки" #: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50 msgid "Name:" @@ -735,7 +715,7 @@ msgstr "Название:" #: lib/branch_create.tcl:58 msgid "Match Tracking Branch Name" -msgstr "Взять из имен ветвей слежения" +msgstr "Соответствовать имени отслеживаемой ветки" #: lib/branch_create.tcl:66 msgid "Starting Revision" @@ -743,7 +723,7 @@ msgstr "Начальная версия" #: lib/branch_create.tcl:72 msgid "Update Existing Branch:" -msgstr "Обновить имеющуюся ветвь:" +msgstr "Обновить имеющуюся ветку:" #: lib/branch_create.tcl:75 msgid "No" @@ -763,33 +743,33 @@ msgstr "После создания сделать текущей" #: lib/branch_create.tcl:131 msgid "Please select a tracking branch." -msgstr "Укажите ветвь слежения." +msgstr "Укажите отлеживаемую ветку." #: lib/branch_create.tcl:140 #, tcl-format msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "Ветвь слежения %s не является ветвью во внешнем репозитории." +msgstr "Отслеживаемая ветка %s не является веткой на внешнем репозитории." #: lib/branch_create.tcl:153 lib/branch_rename.tcl:86 msgid "Please supply a branch name." -msgstr "Укажите название ветви." +msgstr "Укажите имя ветки." #: lib/branch_create.tcl:164 lib/branch_rename.tcl:106 #, tcl-format msgid "'%s' is not an acceptable branch name." -msgstr "Недопустимое название ветви '%s'." +msgstr "Недопустимое имя ветки «%s»." #: lib/branch_delete.tcl:15 msgid "Delete Branch" -msgstr "Удаление ветви" +msgstr "Удаление ветки" #: lib/branch_delete.tcl:20 msgid "Delete Local Branch" -msgstr "Удалить локальную ветвь" +msgstr "Удалить локальную ветку" #: lib/branch_delete.tcl:37 msgid "Local Branches" -msgstr "Локальные ветви" +msgstr "Локальные ветки" #: lib/branch_delete.tcl:52 msgid "Delete Only If Merged Into" @@ -802,30 +782,25 @@ msgstr "Всегда (не выполнять проверку на слияни #: lib/branch_delete.tcl:103 #, tcl-format msgid "The following branches are not completely merged into %s:" -msgstr "Ветви, которые не полностью сливаются с %s:" +msgstr "Ветки, которые не полностью сливаются с %s:" #: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:217 msgid "" "Recovering deleted branches is difficult.\n" "\n" "Delete the selected branches?" -msgstr "" -"Восстановить удаленные ветви сложно.\n" -"\n" -"Продолжить?" +msgstr "Восстановить удаленные ветки сложно.\n\nПродолжить?" #: lib/branch_delete.tcl:141 #, tcl-format msgid "" "Failed to delete branches:\n" "%s" -msgstr "" -"Не удалось удалить ветви:\n" -"%s" +msgstr "Не удалось удалить ветки:\n%s" #: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22 msgid "Rename Branch" -msgstr "Переименование ветви" +msgstr "Переименование ветки" #: lib/branch_rename.tcl:26 msgid "Rename" @@ -833,7 +808,7 @@ msgstr "Переименовать" #: lib/branch_rename.tcl:36 msgid "Branch:" -msgstr "Ветвь:" +msgstr "Ветка:" #: lib/branch_rename.tcl:39 msgid "New Name:" @@ -841,21 +816,21 @@ msgstr "Новое название:" #: lib/branch_rename.tcl:75 msgid "Please select a branch to rename." -msgstr "Укажите ветвь для переименования." +msgstr "Укажите ветку для переименования." #: lib/branch_rename.tcl:96 lib/checkout_op.tcl:202 #, tcl-format msgid "Branch '%s' already exists." -msgstr "Ветвь '%s' уже существует." +msgstr "Ветка «%s» уже существует." #: lib/branch_rename.tcl:117 #, tcl-format msgid "Failed to rename '%s'." -msgstr "Не удалось переименовать '%s'. " +msgstr "Не удалось переименовать «%s». " #: lib/browser.tcl:17 msgid "Starting..." -msgstr "Запуск..." +msgstr "Запуск…" #: lib/browser.tcl:26 msgid "File Browser" @@ -864,7 +839,7 @@ msgstr "Просмотр списка файлов" #: lib/browser.tcl:126 lib/browser.tcl:143 #, tcl-format msgid "Loading %s..." -msgstr "Загрузка %s..." +msgstr "Загрузка %s…" #: lib/browser.tcl:187 msgid "[Up To Parent]" @@ -872,7 +847,7 @@ msgstr "[На уровень выше]" #: lib/browser.tcl:267 lib/browser.tcl:273 msgid "Browse Branch Files" -msgstr "Показать файлы ветви" +msgstr "Показать файлы ветки" #: lib/browser.tcl:278 lib/choose_repository.tcl:398 #: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497 @@ -883,7 +858,7 @@ msgstr "Показать" #: lib/checkout_op.tcl:85 #, tcl-format msgid "Fetching %s from %s" -msgstr "Получение %s из %s " +msgstr "Извлечение %s из %s " #: lib/checkout_op.tcl:133 #, tcl-format @@ -898,12 +873,12 @@ msgstr "Закрыть" #: lib/checkout_op.tcl:175 #, tcl-format msgid "Branch '%s' does not exist." -msgstr "Ветвь '%s' не существует " +msgstr "Ветка «%s» не существует." #: lib/checkout_op.tcl:194 #, tcl-format msgid "Failed to configure simplified git-pull for '%s'." -msgstr "Ошибка создания упрощённой конфигурации git pull для '%s'." +msgstr "Ошибка создания упрощённой конфигурации git pull для «%s»." #: lib/checkout_op.tcl:229 #, tcl-format @@ -912,21 +887,17 @@ msgid "" "\n" "It cannot fast-forward to %s.\n" "A merge is required." -msgstr "" -"Ветвь '%s' уже существует.\n" -"\n" -"Она не может быть прокручена(fast-forward) к %s.\n" -"Требуется слияние." +msgstr "Ветка «%s» уже существует.\n\nОна не может быть перемотана вперед к %s.\nТребуется слияние." #: lib/checkout_op.tcl:243 #, tcl-format msgid "Merge strategy '%s' not supported." -msgstr "Неизвестная стратегия слияния: '%s'." +msgstr "Неизвестная стратегия слияния «%s»." #: lib/checkout_op.tcl:262 #, tcl-format msgid "Failed to update '%s'." -msgstr "Не удалось обновить '%s'." +msgstr "Не удалось обновить «%s»." #: lib/checkout_op.tcl:274 msgid "Staging area (index) is already locked." @@ -936,22 +907,15 @@ msgstr "Рабочая область заблокирована другим п msgid "" "Last scanned state does not match repository state.\n" "\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before the current branch can be changed.\n" +"Another Git program has modified this repository since the last scan. A rescan must be performed before the current branch can be changed.\n" "\n" "The rescan will be automatically started now.\n" -msgstr "" -"Последнее прочитанное состояние репозитория не соответствует текущему.\n" -"\n" -"С момента последней проверки репозиторий был изменен другой программой Git. " -"Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь.\n" -"\n" -"Это будет сделано сейчас автоматически.\n" +msgstr "Последнее прочитанное состояние репозитория не соответствует текущему.\n\nС момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем текущая ветка может быть изменена.\n\nЭто будет сделано сейчас автоматически.\n" #: lib/checkout_op.tcl:345 #, tcl-format msgid "Updating working directory to '%s'..." -msgstr "Обновление рабочего каталога из '%s'..." +msgstr "Обновление рабочего каталога из «%s»…" #: lib/checkout_op.tcl:346 msgid "files checked out" @@ -960,7 +924,7 @@ msgstr "файлы извлечены" #: lib/checkout_op.tcl:376 #, tcl-format msgid "Aborted checkout of '%s' (file level merging is required)." -msgstr "Прерван переход на '%s' (требуется слияние содержания файлов)" +msgstr "Прерван переход на «%s» (требуется слияние содержимого файлов)" #: lib/checkout_op.tcl:377 msgid "File level merge required." @@ -969,38 +933,33 @@ msgstr "Требуется слияние содержания файлов." #: lib/checkout_op.tcl:381 #, tcl-format msgid "Staying on branch '%s'." -msgstr "Ветвь '%s' остается текущей." +msgstr "Ветка «%s» остаётся текущей." #: lib/checkout_op.tcl:452 msgid "" "You are no longer on a local branch.\n" "\n" -"If you wanted to be on a branch, create one now starting from 'This Detached " -"Checkout'." -msgstr "" -"Вы находитесь не в локальной ветви.\n" -"\n" -"Если вы хотите снова вернуться к какой-нибудь ветви, создайте ее сейчас, " -"начиная с 'Текущего отсоединенного состояния'." +"If you wanted to be on a branch, create one now starting from 'This Detached Checkout'." +msgstr "Вы более не находитесь на локальной ветке.\n\nЕсли вы хотите снова вернуться к какой-нибудь ветке, создайте её сейчас, начиная с «Текущего отсоединенного состояния»." #: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 #, tcl-format msgid "Checked out '%s'." -msgstr "Ветвь '%s' сделана текущей." +msgstr "Выполнен переход на «%s»." #: lib/checkout_op.tcl:535 #, tcl-format msgid "Resetting '%s' to '%s' will lose the following commits:" -msgstr "Сброс '%s' в '%s' приведет к потере следующих сохраненных состояний: " +msgstr "Сброс «%s» на «%s» приведет к потере следующих коммитов:" #: lib/checkout_op.tcl:557 msgid "Recovering lost commits may not be easy." -msgstr "Восстановить потерянные сохраненные состояния будет сложно." +msgstr "Восстановить потерянные коммиты будет сложно." #: lib/checkout_op.tcl:562 #, tcl-format msgid "Reset '%s'?" -msgstr "Сбросить '%s'?" +msgstr "Сбросить «%s»?" #: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343 msgid "Visualize" @@ -1011,17 +970,10 @@ msgstr "Наглядно" msgid "" "Failed to set current branch.\n" "\n" -"This working directory is only partially switched. We successfully updated " -"your files, but failed to update an internal Git file.\n" +"This working directory is only partially switched. We successfully updated your files, but failed to update an internal Git file.\n" "\n" "This should not have occurred. %s will now close and give up." -msgstr "" -"Не удалось установить текущую ветвь.\n" -"\n" -"Ваш рабочий каталог обновлен только частично. Были обновлены все файлы кроме " -"служебных файлов Git. \n" -"\n" -"Этого не должно было произойти. %s завершается." +msgstr "Не удалось установить текущую ветку.\n\nВаш рабочий каталог обновлён только частично. Были обновлены все файлы кроме служебных файлов Git. \n\nЭтого не должно было произойти. %s завершается." #: lib/choose_font.tcl:39 msgid "Select" @@ -1043,9 +995,7 @@ msgstr "Пример текста" msgid "" "This is example text.\n" "If you like this text, it can be your font." -msgstr "" -"Это пример текста.\n" -"Если Вам нравится этот текст, это может быть Ваш шрифт." +msgstr "Это пример текста.\nЕсли Вам нравится этот текст, это может быть Ваш шрифт." #: lib/choose_repository.tcl:28 msgid "Git Gui" @@ -1057,7 +1007,7 @@ msgstr "Создать новый репозиторий" #: lib/choose_repository.tcl:93 msgid "New..." -msgstr "Новый..." +msgstr "Новый…" #: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471 msgid "Clone Existing Repository" @@ -1065,7 +1015,7 @@ msgstr "Склонировать существующий репозиторий #: lib/choose_repository.tcl:106 msgid "Clone..." -msgstr "Склонировать..." +msgstr "Клонировать…" #: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016 msgid "Open Existing Repository" @@ -1073,7 +1023,7 @@ msgstr "Выбрать существующий репозиторий" #: lib/choose_repository.tcl:119 msgid "Open..." -msgstr "Открыть..." +msgstr "Открыть…" #: lib/choose_repository.tcl:132 msgid "Recent Repositories" @@ -1126,7 +1076,7 @@ msgstr "Тип клона:" #: lib/choose_repository.tcl:508 msgid "Standard (Fast, Semi-Redundant, Hardlinks)" -msgstr "Стандартный (Быстрый, полуизбыточный, \"жесткие\" ссылки)" +msgstr "Стандартный (Быстрый, полуизбыточный, «жесткие» ссылки)" #: lib/choose_repository.tcl:514 msgid "Full Copy (Slower, Redundant Backup)" @@ -1166,7 +1116,7 @@ msgstr "Считаю объекты" #: lib/choose_repository.tcl:641 msgid "buckets" -msgstr "" +msgstr "блоки" #: lib/choose_repository.tcl:665 #, tcl-format @@ -1181,11 +1131,11 @@ msgstr "Нечего клонировать с %s." #: lib/choose_repository.tcl:703 lib/choose_repository.tcl:917 #: lib/choose_repository.tcl:929 msgid "The 'master' branch has not been initialized." -msgstr "Не инициализирована ветвь 'master'." +msgstr "Не инициализирована ветвь «master»." #: lib/choose_repository.tcl:716 msgid "Hardlinks are unavailable. Falling back to copying." -msgstr "\"Жесткие ссылки\" недоступны. Будет использовано копирование." +msgstr "«Жесткие ссылки» недоступны. Будет использовано копирование." #: lib/choose_repository.tcl:728 #, tcl-format @@ -1216,16 +1166,15 @@ msgstr "объекты" #: lib/choose_repository.tcl:803 #, tcl-format msgid "Unable to hardlink object: %s" -msgstr "Не могу \"жестко связать\" объект: %s" +msgstr "Не могу создать «жесткую ссылку» на объект: %s" #: lib/choose_repository.tcl:858 msgid "Cannot fetch branches and objects. See console output for details." -msgstr "" -"Не могу получить ветви и объекты. Дополнительная информация на консоли." +msgstr "Не удалось извлечь ветки и объекты. Дополнительная информация на консоли." #: lib/choose_repository.tcl:869 msgid "Cannot fetch tags. See console output for details." -msgstr "Не могу получить метки. Дополнительная информация на консоли." +msgstr "Не удалось извлечь метки. Дополнительная информация на консоли." #: lib/choose_repository.tcl:893 msgid "Cannot determine HEAD. See console output for details." @@ -1242,12 +1191,12 @@ msgstr "Клонирование не удалось." #: lib/choose_repository.tcl:915 msgid "No default branch obtained." -msgstr "Не было получено ветви по умолчанию." +msgstr "Ветка по умолчанию не была получена." #: lib/choose_repository.tcl:926 #, tcl-format msgid "Cannot resolve %s as a commit." -msgstr "Не могу распознать %s как состояние." +msgstr "Не могу распознать %s как коммит." #: lib/choose_repository.tcl:938 msgid "Creating working directory" @@ -1285,11 +1234,11 @@ msgstr "Выражение для определения версии:" #: lib/choose_rev.tcl:74 msgid "Local Branch" -msgstr "Локальная ветвь:" +msgstr "Локальная ветка:" #: lib/choose_rev.tcl:79 msgid "Tracking Branch" -msgstr "Ветвь слежения" +msgstr "Отслеживаемая ветка" #: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538 msgid "Tag" @@ -1320,29 +1269,19 @@ msgstr "Ссылка" msgid "" "There is nothing to amend.\n" "\n" -"You are about to create the initial commit. There is no commit before this " -"to amend.\n" -msgstr "" -"Отсутствует состояние для исправления.\n" -"\n" -"Вы создаете первое состояние в репозитории, здесь еще нечего исправлять.\n" +"You are about to create the initial commit. There is no commit before this to amend.\n" +msgstr "Отсутствует коммиты для исправления.\n\nВы создаете начальный коммит, здесь еще нечего исправлять.\n" #: lib/commit.tcl:18 msgid "" "Cannot amend while merging.\n" "\n" -"You are currently in the middle of a merge that has not been fully " -"completed. You cannot amend the prior commit unless you first abort the " -"current merge activity.\n" -msgstr "" -"Невозможно исправить состояние во время операции слияния.\n" -"\n" -"Текущее слияние не завершено. Невозможно исправить предыдущее сохраненное " -"состояние, не прерывая эту операцию.\n" +"You are currently in the middle of a merge that has not been fully completed. You cannot amend the prior commit unless you first abort the current merge activity.\n" +msgstr "Невозможно исправить коммит во время слияния.\n\nТекущее слияние не завершено. Невозможно исправить предыдуий коммит, не прерывая эту операцию.\n" #: lib/commit.tcl:48 msgid "Error loading commit data for amend:" -msgstr "Ошибка при загрузке данных для исправления сохраненного состояния:" +msgstr "Ошибка при загрузке данных для исправления коммита:" #: lib/commit.tcl:75 msgid "Unable to obtain your identity:" @@ -1350,41 +1289,29 @@ msgstr "Невозможно получить информацию об авто #: lib/commit.tcl:80 msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "Неверный GIT_COMMITTER_IDENT:" +msgstr "Недопустимый GIT_COMMITTER_IDENT:" #: lib/commit.tcl:129 #, tcl-format msgid "warning: Tcl does not support encoding '%s'." -msgstr "предупреждение: Tcl не поддерживает кодировку '%s'." +msgstr "предупреждение: Tcl не поддерживает кодировку «%s»." #: lib/commit.tcl:149 msgid "" "Last scanned state does not match repository state.\n" "\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before another commit can be created.\n" +"Another Git program has modified this repository since the last scan. A rescan must be performed before another commit can be created.\n" "\n" "The rescan will be automatically started now.\n" -msgstr "" -"Последнее прочитанное состояние репозитория не соответствует текущему.\n" -"\n" -"С момента последней проверки репозиторий был изменен другой программой Git. " -"Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь. \n" -"\n" -"Это будет сделано сейчас автоматически.\n" +msgstr "Последнее прочитанное состояние репозитория не соответствует текущему.\n\nС момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь. \n\nЭто будет сделано сейчас автоматически.\n" #: lib/commit.tcl:172 #, tcl-format msgid "" "Unmerged files cannot be committed.\n" "\n" -"File %s has merge conflicts. You must resolve them and stage the file " -"before committing.\n" -msgstr "" -"Нельзя сохранить файлы с незавершённой операцией слияния.\n" -"\n" -"Для файла %s возник конфликт слияния. Разрешите конфликт и добавьте к " -"подготовленным файлам перед сохранением.\n" +"File %s has merge conflicts. You must resolve them and stage the file before committing.\n" +msgstr "Нельзя выполнить коммит с незавершённой операцией слияния.\n\nДля файла %s возник конфликт слияния. Разрешите конфликт и добавьте их в индекс перед выполнением коммита.\n" #: lib/commit.tcl:180 #, tcl-format @@ -1392,20 +1319,14 @@ msgid "" "Unknown file state %s detected.\n" "\n" "File %s cannot be committed by this program.\n" -msgstr "" -"Обнаружено неизвестное состояние файла %s.\n" -"\n" -"Файл %s не может быть сохранен данной программой.\n" +msgstr "Обнаружено неизвестное состояние файла %s.\n\nФайл %s не может быть закоммичен этой программой.\n" #: lib/commit.tcl:188 msgid "" "No changes to commit.\n" "\n" "You must stage at least 1 file before you can commit.\n" -msgstr "" -"Отсутствуют изменения для сохранения.\n" -"\n" -"Подготовьте хотя бы один файл до создания сохраненного состояния.\n" +msgstr "Отсутствуют изменения для сохранения.\n\nДобавьте в индекс хотя бы один файл перед выполнением коммита.\n" #: lib/commit.tcl:203 msgid "" @@ -1416,34 +1337,27 @@ msgid "" "- First line: Describe in one sentence what you did.\n" "- Second line: Blank\n" "- Remaining lines: Describe why this change is good.\n" -msgstr "" -"Напишите комментарий к сохраненному состоянию.\n" -"\n" -"Рекомендуется следующий формат комментария:\n" -"\n" -"- первая строка: краткое описание сделанных изменений.\n" -"- вторая строка пустая\n" -"- оставшиеся строки: опишите, что дают ваши изменения.\n" +msgstr "Укажите сообщение коммита.\n\nРекомендуется следующий формат сообщения:\n\n- в первой строке краткое описание сделанных изменений\n- вторая строка пустая\n- в оставшихся строках опишите, что дают ваши изменения\n" #: lib/commit.tcl:234 msgid "Calling pre-commit hook..." -msgstr "Вызов программы поддержки репозитория pre-commit..." +msgstr "Вызов перехватчика pre-commit…" #: lib/commit.tcl:249 msgid "Commit declined by pre-commit hook." -msgstr "Сохранение прервано программой поддержки репозитория pre-commit" +msgstr "Коммит прерван переватчиком pre-commit." #: lib/commit.tcl:272 msgid "Calling commit-msg hook..." -msgstr "Вызов программы поддержки репозитория commit-msg..." +msgstr "Вызов перехватчика commit-msg…" #: lib/commit.tcl:287 msgid "Commit declined by commit-msg hook." -msgstr "Сохранение прервано программой поддержки репозитория commit-msg" +msgstr "Коммит прерван переватчиком commit-msg" #: lib/commit.tcl:300 msgid "Committing changes..." -msgstr "Сохранение изменений..." +msgstr "Коммит изменений…" #: lib/commit.tcl:316 msgid "write-tree failed:" @@ -1451,12 +1365,12 @@ msgstr "Программа write-tree завершилась с ошибкой:" #: lib/commit.tcl:317 lib/commit.tcl:361 lib/commit.tcl:382 msgid "Commit failed." -msgstr "Сохранить состояние не удалось." +msgstr "Не удалось закоммитить изменения." #: lib/commit.tcl:334 #, tcl-format msgid "Commit %s appears to be corrupt" -msgstr "Состояние %s выглядит поврежденным" +msgstr "Коммит %s похоже поврежден" #: lib/commit.tcl:339 msgid "" @@ -1465,16 +1379,11 @@ msgid "" "No files were modified by this commit and it was not a merge commit.\n" "\n" "A rescan will be automatically started now.\n" -msgstr "" -"Отсутствуют изменения для сохранения.\n" -"\n" -"Ни один файл не был изменен и не было слияния.\n" -"\n" -"Сейчас автоматически запустится перечитывание репозитория.\n" +msgstr "Нет изменения для коммита.\n\nНи один файл не был изменен и не было слияния.\n\nСейчас автоматически запустится перечитывание репозитория.\n" #: lib/commit.tcl:346 msgid "No changes to commit." -msgstr "Отсутствуют изменения для сохранения." +msgstr "Нет изменения для коммита." #: lib/commit.tcl:360 msgid "commit-tree failed:" @@ -1487,11 +1396,11 @@ msgstr "Программа update-ref завершилась с ошибкой:" #: lib/commit.tcl:469 #, tcl-format msgid "Created commit %s: %s" -msgstr "Создано состояние %s: %s " +msgstr "Создан коммит %s: %s " #: lib/console.tcl:59 msgid "Working... please wait..." -msgstr "В процессе... пожалуйста, ждите..." +msgstr "В процессе… пожалуйста, ждите…" #: lib/console.tcl:186 msgid "Success" @@ -1542,16 +1451,10 @@ msgstr "Проверка базы объектов при помощи fsck" msgid "" "This repository currently has approximately %i loose objects.\n" "\n" -"To maintain optimal performance it is strongly recommended that you compress " -"the database.\n" +"To maintain optimal performance it is strongly recommended that you compress the database.\n" "\n" "Compress the database now?" -msgstr "" -"Этот репозиторий сейчас содержит примерно %i свободных объектов\n" -"\n" -"Для лучшей производительности рекомендуется сжать базу данных.\n" -"\n" -"Сжать базу данных сейчас?" +msgstr "Этот репозиторий сейчас содержит примерно %i свободных объектов\n\nДля лучшей производительности рекомендуется сжать базу данных.\n\nСжать базу данных сейчас?" #: lib/date.tcl:25 #, tcl-format @@ -1565,41 +1468,27 @@ msgid "" "\n" "%s has no changes.\n" "\n" -"The modification date of this file was updated by another application, but " -"the content within the file was not changed.\n" -"\n" -"A rescan will be automatically started to find other files which may have " -"the same state." -msgstr "" -"Изменений не обнаружено.\n" +"The modification date of this file was updated by another application, but the content within the file was not changed.\n" "\n" -"в %s отсутствуют изменения.\n" -"\n" -"Дата изменения файла была обновлена другой программой, но содержимое файла " -"осталось прежним.\n" -"\n" -"Сейчас будет запущено перечитывание репозитория, чтобы найти подобные файлы." +"A rescan will be automatically started to find other files which may have the same state." +msgstr "Изменений не обнаружено.\n\nв %s отсутствуют изменения.\n\nДата изменения файла была обновлена другой программой, но содержимое файла осталось прежним.\n\nСейчас будет запущено перечитывание репозитория, чтобы найти подобные файлы." #: lib/diff.tcl:104 #, tcl-format msgid "Loading diff of %s..." -msgstr "Загрузка изменений в %s..." +msgstr "Загрузка изменений %s…" #: lib/diff.tcl:125 msgid "" "LOCAL: deleted\n" "REMOTE:\n" -msgstr "" -"ЛОКАЛЬНО: удалён\n" -"ВНЕШНИЙ:\n" +msgstr "ЛОКАЛЬНО: удалён\nВНЕШНИЙ:\n" #: lib/diff.tcl:130 msgid "" "REMOTE: deleted\n" "LOCAL:\n" -msgstr "" -"ВНЕШНИЙ: удалён\n" -"ЛОКАЛЬНО:\n" +msgstr "ВНЕШНИЙ: удалён\nЛОКАЛЬНО:\n" #: lib/diff.tcl:137 msgid "LOCAL:\n" @@ -1631,9 +1520,7 @@ msgstr "* Двоичный файл (содержимое не показано) msgid "" "* Untracked file is %d bytes.\n" "* Showing only first %d bytes.\n" -msgstr "" -"* Размер неподготовленного файла %d байт.\n" -"* Показано первых %d байт.\n" +msgstr "* Размер неотслеживаемого файла %d байт.\n* Показано первых %d байт.\n" #: lib/diff.tcl:233 #, tcl-format @@ -1641,10 +1528,7 @@ msgid "" "\n" "* Untracked file clipped here by %s.\n" "* To see the entire file, use an external editor.\n" -msgstr "" -"\n" -"* Неподготовленный файл обрезан: %s.\n" -"* Чтобы увидеть весь файл, используйте программу-редактор.\n" +msgstr "\n* Неотслеживаемый файл обрезан: %s.\n* Чтобы увидеть весь файл, используйте внешний редактор.\n" #: lib/diff.tcl:482 msgid "Failed to unstage selected hunk." @@ -1652,7 +1536,7 @@ msgstr "Не удалось исключить выбранную часть." #: lib/diff.tcl:489 msgid "Failed to stage selected hunk." -msgstr "Не удалось подготовить к сохранению выбранную часть." +msgstr "Не удалось проиндексировать выбранный блок изменений." #: lib/diff.tcl:568 msgid "Failed to unstage selected line." @@ -1660,7 +1544,7 @@ msgstr "Не удалось исключить выбранную строку." #: lib/diff.tcl:576 msgid "Failed to stage selected line." -msgstr "Не удалось подготовить к сохранению выбранную строку." +msgstr "Не удалось проиндексировать выбранную строку." #: lib/encoding.tcl:443 msgid "Default" @@ -1685,7 +1569,7 @@ msgstr "предупреждение" #: lib/error.tcl:94 msgid "You must correct the above errors before committing." -msgstr "Прежде чем сохранить, исправьте вышеуказанные ошибки." +msgstr "Перед коммитом, исправьте вышеуказанные ошибки." #: lib/index.tcl:6 msgid "Unable to unlock the index." @@ -1699,9 +1583,7 @@ msgstr "Ошибка в индексе" msgid "" "Updating the Git index failed. A rescan will be automatically started to " "resynchronize git-gui." -msgstr "" -"Не удалось обновить индекс Git. Состояние репозитория будет перечитано " -"автоматически." +msgstr "Не удалось обновить индекс Git. Состояние репозитория будет перечитано автоматически." #: lib/index.tcl:28 msgid "Continue" @@ -1714,32 +1596,30 @@ msgstr "Разблокировать индекс" #: lib/index.tcl:289 #, tcl-format msgid "Unstaging %s from commit" -msgstr "Удаление %s из подготовленного" +msgstr "Удаление %s из индекса" #: lib/index.tcl:328 msgid "Ready to commit." -msgstr "Подготовлено для сохранения" +msgstr "Готов для коммита." #: lib/index.tcl:341 #, tcl-format msgid "Adding %s" -msgstr "Добавление %s..." +msgstr "Добавление %s…" #: lib/index.tcl:398 #, tcl-format msgid "Revert changes in file %s?" -msgstr "Отменить изменения в файле %s?" +msgstr "Обратить изменения в файле %s?" #: lib/index.tcl:400 #, tcl-format msgid "Revert changes in these %i files?" -msgstr "Отменить изменения в %i файле(-ах)?" +msgstr "Обратить изменения в %i файле(-ах)?" #: lib/index.tcl:408 msgid "Any unstaged changes will be permanently lost by the revert." -msgstr "" -"Любые изменения, не подготовленные к сохранению, будут потеряны при данной " -"операции." +msgstr "Любые непроиндексированные изменения, будут потеряны при обращении изменений." #: lib/index.tcl:411 msgid "Do Nothing" @@ -1747,38 +1627,28 @@ msgstr "Ничего не делать" #: lib/index.tcl:429 msgid "Reverting selected files" -msgstr "Удаление изменений в выбранных файлах" +msgstr "Обращение изменений в выбранных файлах" #: lib/index.tcl:433 #, tcl-format msgid "Reverting %s" -msgstr "Отмена изменений в %s" +msgstr "Обращение изменений в %s" #: lib/merge.tcl:13 msgid "" "Cannot merge while amending.\n" "\n" "You must finish amending this commit before starting any type of merge.\n" -msgstr "" -"Невозможно выполнить слияние во время исправления.\n" -"\n" -"Завершите исправление данного состояния перед выполнением операции слияния.\n" +msgstr "Невозможно выполнить слияние во время исправления.\n\nЗавершите исправление данного коммита перед выполнением операции слияния.\n" #: lib/merge.tcl:27 msgid "" "Last scanned state does not match repository state.\n" "\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before a merge can be performed.\n" +"Another Git program has modified this repository since the last scan. A rescan must be performed before a merge can be performed.\n" "\n" "The rescan will be automatically started now.\n" -msgstr "" -"Последнее прочитанное состояние репозитория не соответствует текущему.\n" -"\n" -"С момента последней проверки репозиторий был изменен другой программой Git. " -"Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь.\n" -"\n" -"Это будет сделано сейчас автоматически.\n" +msgstr "Последнее прочитанное состояние репозитория не соответствует текущему.\n\nС момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем слияние может быть сделано.\n\nЭто будет сделано сейчас автоматически.\n" #: lib/merge.tcl:45 #, tcl-format @@ -1787,15 +1657,8 @@ msgid "" "\n" "File %s has merge conflicts.\n" "\n" -"You must resolve them, stage the file, and commit to complete the current " -"merge. Only then can you begin another merge.\n" -msgstr "" -"Предыдущее слияние не завершено из-за конфликта.\n" -"\n" -"Для файла %s возник конфликт слияния.\n" -"\n" -"Разрешите конфликт, подготовьте файл и сохраните. Только после этого можно " -"начать следующее слияние.\n" +"You must resolve them, stage the file, and commit to complete the current merge. Only then can you begin another merge.\n" +msgstr "Предыдущее слияние не завершено из-за конфликта.\n\nДля файла %s возник конфликт слияния.\n\nРазрешите конфликт, добавьте файл в индекс и закоммитьте. Только после этого можно начать следующее слияние.\n" #: lib/merge.tcl:55 #, tcl-format @@ -1804,15 +1667,8 @@ msgid "" "\n" "File %s is modified.\n" "\n" -"You should complete the current commit before starting a merge. Doing so " -"will help you abort a failed merge, should the need arise.\n" -msgstr "" -"Изменения не сохранены.\n" -"\n" -"Файл %s изменен.\n" -"\n" -"Подготовьте и сохраните изменения перед началом слияния. В случае " -"необходимости это позволит прервать операцию слияния.\n" +"You should complete the current commit before starting a merge. Doing so will help you abort a failed merge, should the need arise.\n" +msgstr "Вы находитесь в процессе изменений.\n\nФайл %s изменён.\n\nВы должны завершить текущий коммит перед началом слияния. В случае необходимости, это позволит прервать операцию слияния.\n" #: lib/merge.tcl:107 #, tcl-format @@ -1822,7 +1678,7 @@ msgstr "%s из %s" #: lib/merge.tcl:120 #, tcl-format msgid "Merging %s and %s..." -msgstr "Слияние %s и %s..." +msgstr "Слияние %s и %s…" #: lib/merge.tcl:131 msgid "Merge completed successfully." @@ -1846,10 +1702,7 @@ msgid "" "Cannot abort while amending.\n" "\n" "You must finish amending this commit.\n" -msgstr "" -"Невозможно прервать исправление.\n" -"\n" -"Завершите текущее исправление сохраненного состояния.\n" +msgstr "Невозможно прервать исправление.\n\nЗавершите текущее исправление коммита.\n" #: lib/merge.tcl:222 msgid "" @@ -1858,12 +1711,7 @@ msgid "" "Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" "\n" "Continue with aborting the current merge?" -msgstr "" -"Прервать операцию слияния?\n" -"\n" -"Прерывание этой операции приведет к потере *ВСЕХ* несохраненных изменений.\n" -"\n" -"Продолжить?" +msgstr "Прервать операцию слияния?\n\nПрерывание текущего слияния приведет к потере *ВСЕХ* несохраненных изменений.\n\nПродолжить?" #: lib/merge.tcl:228 msgid "" @@ -1872,12 +1720,7 @@ msgid "" "Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" "\n" "Continue with resetting the current changes?" -msgstr "" -"Прервать операцию слияния?\n" -"\n" -"Прерывание этой операции приведет к потере *ВСЕХ* несохраненных изменений.\n" -"\n" -"Продолжить?" +msgstr "Сбросить изменения?\n\nСброс изменений приведет к потере *ВСЕХ* несохраненных изменений.\n\nПродолжить?" #: lib/merge.tcl:239 msgid "Aborting" @@ -1901,11 +1744,11 @@ msgstr "Использовать базовую версию для разреш #: lib/mergetool.tcl:9 msgid "Force resolution to this branch?" -msgstr "Использовать версию этой ветви для разрешения конфликта?" +msgstr "Использовать версию из этой ветки для разрешения конфликта?" #: lib/mergetool.tcl:10 msgid "Force resolution to the other branch?" -msgstr "Использовать версию другой ветви для разрешения конфликта?" +msgstr "Использовать версию из другой ветки для разрешения конфликта?" #: lib/mergetool.tcl:14 #, tcl-format @@ -1915,19 +1758,12 @@ msgid "" "%s will be overwritten.\n" "\n" "This operation can be undone only by restarting the merge." -msgstr "" -"Внимание! Список изменений показывает только конфликтующие отличия.\n" -"\n" -"%s будет переписан.\n" -"\n" -"Это действие можно отменить только перезапуском операции слияния." +msgstr "Внимание! Список изменений показывает только конфликтующие отличия.\n\n%s будет переписан.\n\nЭто действие можно отменить только перезапуском операции слияния." #: lib/mergetool.tcl:45 #, tcl-format msgid "File %s seems to have unresolved conflicts, still stage?" -msgstr "" -"Файл %s, похоже, содержит необработанные конфликты. Продолжить подготовку к " -"сохранению?" +msgstr "Похоже, что файл %s содержит неразрешенные конфликты. Продолжить индексацию?" #: lib/mergetool.tcl:60 #, tcl-format @@ -1936,8 +1772,7 @@ msgstr "Добавляю результат разрешения для %s" #: lib/mergetool.tcl:141 msgid "Cannot resolve deletion or link conflicts using a tool" -msgstr "" -"Программа слияния не обрабатывает конфликты с удалением или участием ссылок" +msgstr "Программа слияния не обрабатывает конфликты с удалением или участием ссылок" #: lib/mergetool.tcl:146 msgid "Conflict file does not exist" @@ -1946,12 +1781,12 @@ msgstr "Конфликтующий файл не существует" #: lib/mergetool.tcl:264 #, tcl-format msgid "Not a GUI merge tool: '%s'" -msgstr "'%s' не является программой слияния" +msgstr "«%s» не является программой слияния" #: lib/mergetool.tcl:268 #, tcl-format msgid "Unsupported merge tool '%s'" -msgstr "Неизвестная программа слияния '%s'" +msgstr "Неподдерживаемая программа слияния «%s»" #: lib/mergetool.tcl:303 msgid "Merge tool is already running, terminate it?" @@ -1962,9 +1797,7 @@ msgstr "Программа слияния уже работает. Прерва msgid "" "Error retrieving versions:\n" "%s" -msgstr "" -"Ошибка получения версий:\n" -"%s" +msgstr "Ошибка получения версий:\n%s" #: lib/mergetool.tcl:343 #, tcl-format @@ -1972,14 +1805,11 @@ msgid "" "Could not start the merge tool:\n" "\n" "%s" -msgstr "" -"Ошибка запуска программы слияния:\n" -"\n" -"%s" +msgstr "Ошибка запуска программы слияния:\n\n%s" #: lib/mergetool.tcl:347 msgid "Running merge tool..." -msgstr "Запуск программы слияния..." +msgstr "Запуск программы слияния…" #: lib/mergetool.tcl:375 lib/mergetool.tcl:383 msgid "Merge tool failed." @@ -1988,12 +1818,12 @@ msgstr "Ошибка выполнения программы слияния." #: lib/option.tcl:11 #, tcl-format msgid "Invalid global encoding '%s'" -msgstr "Ошибка в глобальной установке кодировки '%s'" +msgstr "Неверная глобальная кодировка «%s»" #: lib/option.tcl:19 #, tcl-format msgid "Invalid repo encoding '%s'" -msgstr "Неверная кодировка репозитория: '%s'" +msgstr "Неверная кодировка репозитория «%s»" #: lib/option.tcl:117 msgid "Restore Defaults" @@ -2022,7 +1852,7 @@ msgstr "Адрес электронной почты" #: lib/option.tcl:141 msgid "Summarize Merge Commits" -msgstr "Суммарный комментарий при слиянии" +msgstr "Суммарное сообщение при слиянии" #: lib/option.tcl:142 msgid "Merge Verbosity" @@ -2042,11 +1872,11 @@ msgstr "Доверять времени модификации файла" #: lib/option.tcl:147 msgid "Prune Tracking Branches During Fetch" -msgstr "Чистка ветвей слежения при получении изменений" +msgstr "Чистка отслеживаемых веток при извлечении изменений" #: lib/option.tcl:148 msgid "Match Tracking Branches" -msgstr "Имя новой ветви взять из имен ветвей слежения" +msgstr "Такое же имя, как и у отслеживаемой ветки" #: lib/option.tcl:149 msgid "Blame Copy Only On Changed Files" @@ -2066,11 +1896,11 @@ msgstr "Число строк в контексте diff" #: lib/option.tcl:153 msgid "Commit Message Text Width" -msgstr "Ширина текста комментария" +msgstr "Ширина текста сообщения коммита" #: lib/option.tcl:154 msgid "New Branch Name Template" -msgstr "Шаблон для имени новой ветви" +msgstr "Шаблон для имени новой ветки" #: lib/option.tcl:155 msgid "Default File Contents Encoding" @@ -2093,7 +1923,6 @@ msgstr "Изменить" msgid "Choose %s" msgstr "Выберите %s" -# carbon copy #: lib/option.tcl:264 msgid "pt." msgstr "pt." @@ -2116,7 +1945,7 @@ msgstr "Чистка" #: lib/remote.tcl:173 msgid "Fetch from" -msgstr "Получение из" +msgstr "Извлечение из" #: lib/remote.tcl:215 msgid "Push to" @@ -2132,7 +1961,7 @@ msgstr "Добавить внешний репозиторий" #: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36 msgid "Add" -msgstr "" +msgstr "Добавить" #: lib/remote_add.tcl:37 msgid "Remote Details" @@ -2148,7 +1977,7 @@ msgstr "Следующая операция" #: lib/remote_add.tcl:65 msgid "Fetch Immediately" -msgstr "Скачать сразу" +msgstr "Сразу извлечь изменения" #: lib/remote_add.tcl:71 msgid "Initialize Remote Repository and Push" @@ -2165,27 +1994,27 @@ msgstr "Укажите название внешнего репозитория. #: lib/remote_add.tcl:114 #, tcl-format msgid "'%s' is not an acceptable remote name." -msgstr "Недопустимое название внешнего репозитория '%s'." +msgstr "«%s» не является допустимым именем внешнего репозитория." #: lib/remote_add.tcl:125 #, tcl-format msgid "Failed to add remote '%s' of location '%s'." -msgstr "Не удалось добавить '%s' из '%s'. " +msgstr "Не удалось добавить «%s» из «%s». " #: lib/remote_add.tcl:133 lib/transport.tcl:6 #, tcl-format msgid "fetch %s" -msgstr "получение %s" +msgstr "извлечение %s" #: lib/remote_add.tcl:134 #, tcl-format msgid "Fetching the %s" -msgstr "Получение %s" +msgstr "Извлечение %s" #: lib/remote_add.tcl:157 #, tcl-format msgid "Do not know how to initialize repository at location '%s'." -msgstr "Невозможно инициализировать репозиторий в '%s'." +msgstr "Невозможно инициализировать репозиторий в «%s»." #: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63 #: lib/transport.tcl:81 @@ -2200,7 +2029,7 @@ msgstr "Настройка %s (в %s)" #: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 msgid "Delete Branch Remotely" -msgstr "Удаление ветви во внешнем репозитории" +msgstr "Удаление ветки во внешнем репозитории" #: lib/remote_branch_delete.tcl:47 msgid "From Repository" @@ -2216,7 +2045,7 @@ msgstr "Указанное положение:" #: lib/remote_branch_delete.tcl:84 msgid "Branches" -msgstr "Ветви" +msgstr "Ветки" #: lib/remote_branch_delete.tcl:109 msgid "Delete Only If" @@ -2228,7 +2057,7 @@ msgstr "Слияние с:" #: lib/remote_branch_delete.tcl:152 msgid "A branch is required for 'Merged Into'." -msgstr "Для опции 'Слияние с' требуется указать ветвь." +msgstr "Для операции «Слияние с» требуется указать ветку." #: lib/remote_branch_delete.tcl:184 #, tcl-format @@ -2236,28 +2065,23 @@ msgid "" "The following branches are not completely merged into %s:\n" "\n" " - %s" -msgstr "" -"Следующие ветви могут быть объединены с %s при помощи операции слияния:\n" -"\n" -" - %s" +msgstr "Следующие ветки могут быть объединены с %s при помощи операции слияния:\n\n - %s" #: lib/remote_branch_delete.tcl:189 #, tcl-format msgid "" "One or more of the merge tests failed because you have not fetched the " "necessary commits. Try fetching from %s first." -msgstr "" -"Некоторые тесты на слияние не прошли, потому что Вы не получили необходимые " -"состояния. Попытайтесь получить их из %s." +msgstr "Некоторые тесты на слияние не прошли, потому что вы не извлекли необходимые коммиты. Попытайтесь извлечь их из %s." #: lib/remote_branch_delete.tcl:207 msgid "Please select one or more branches to delete." -msgstr "Укажите одну или несколько ветвей для удаления." +msgstr "Укажите одну или несколько веток для удаления." #: lib/remote_branch_delete.tcl:226 #, tcl-format msgid "Deleting branches from %s" -msgstr "Удаление ветвей из %s" +msgstr "Удаление веток из %s" #: lib/remote_branch_delete.tcl:292 msgid "No repository selected." @@ -2266,7 +2090,7 @@ msgstr "Не указан репозиторий." #: lib/remote_branch_delete.tcl:297 #, tcl-format msgid "Scanning %s..." -msgstr "Перечитывание %s... " +msgstr "Перечитывание %s…" #: lib/search.tcl:21 msgid "Find:" @@ -2352,7 +2176,7 @@ msgstr "Ваш публичный ключ OpenSSH" #: lib/sshkey.tcl:78 msgid "Generating..." -msgstr "Создание..." +msgstr "Создание…" #: lib/sshkey.tcl:84 #, tcl-format @@ -2360,10 +2184,7 @@ msgid "" "Could not start ssh-keygen:\n" "\n" "%s" -msgstr "" -"Ошибка запуска ssh-keygen:\n" -"\n" -"%s" +msgstr "Ошибка запуска ssh-keygen:\n\n%s" #: lib/sshkey.tcl:111 msgid "Generation failed." @@ -2381,7 +2202,7 @@ msgstr "Ваш ключ находится в: %s" #: lib/status_bar.tcl:83 #, tcl-format msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%s ... %*i из %*i %s (%3i%%)" +msgstr "%s … %*i из %*i %s (%3i%%)" #: lib/tools.tcl:75 #, tcl-format @@ -2431,7 +2252,7 @@ msgstr "Описание вспомогательной операции" #: lib/tools_dlg.tcl:48 msgid "Use '/' separators to create a submenu tree:" -msgstr "Используйте '/' для создания подменю" +msgstr "Используйте «/» для создания подменю" #: lib/tools_dlg.tcl:61 msgid "Command:" @@ -2464,16 +2285,14 @@ msgstr "Укажите название вспомогательной опер #: lib/tools_dlg.tcl:129 #, tcl-format msgid "Tool '%s' already exists." -msgstr "Вспомогательная операция '%s' уже существует." +msgstr "Вспомогательная операция «%s» уже существует." #: lib/tools_dlg.tcl:151 #, tcl-format msgid "" "Could not add tool:\n" "%s" -msgstr "" -"Ошибка добавления программы:\n" -"%s" +msgstr "Ошибка добавления программы:\n%s" #: lib/tools_dlg.tcl:190 msgid "Remove Tool" @@ -2507,9 +2326,8 @@ msgstr "OK" #: lib/transport.tcl:7 #, tcl-format msgid "Fetching new changes from %s" -msgstr "Получение изменений из %s " +msgstr "Извлечение изменений из %s " -# carbon copy #: lib/transport.tcl:18 #, tcl-format msgid "remote prune %s" @@ -2518,7 +2336,7 @@ msgstr "чистка внешнего %s" #: lib/transport.tcl:19 #, tcl-format msgid "Pruning tracking branches deleted from %s" -msgstr "Чистка ветвей слежения, удаленных из %s" +msgstr "Чистка отслеживаемых веток, удалённых из %s" #: lib/transport.tcl:26 #, tcl-format @@ -2537,11 +2355,11 @@ msgstr "Отправка %s %s в %s" #: lib/transport.tcl:100 msgid "Push Branches" -msgstr "Отправить изменения в ветвях" +msgstr "Отправить ветки" #: lib/transport.tcl:114 msgid "Source Branches" -msgstr "Исходные ветви" +msgstr "Исходные ветки" #: lib/transport.tcl:131 msgid "Destination Repository" @@ -2553,7 +2371,7 @@ msgstr "Настройки отправки" #: lib/transport.tcl:171 msgid "Force overwrite existing branch (may discard changes)" -msgstr "Намеренно переписать существующую ветвь (возможна потеря изменений)" +msgstr "Принудительно перезаписать существующую ветку (возможна потеря изменений)" #: lib/transport.tcl:175 msgid "Use thin pack (for slow network connections)" diff --git a/git-mergetool.sh b/git-mergetool.sh index bf862705d8..e52b4e4f24 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -3,12 +3,13 @@ # This program resolves merge conflicts in git # # Copyright (c) 2006 Theodore Y. Ts'o +# Copyright (c) 2009-2016 David Aguilar # # This file is licensed under the GPL v2, or a later version # at the discretion of Junio C Hamano. # -USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...' +USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [-O] [file to merge] ...' SUBDIRECTORY_OK=Yes NONGIT_OK=Yes OPTIONS_SPEC= @@ -365,51 +366,6 @@ merge_file () { return 0 } -prompt=$(git config --bool mergetool.prompt) -guessed_merge_tool=false - -while test $# != 0 -do - case "$1" in - --tool-help=*) - TOOL_MODE=${1#--tool-help=} - show_tool_help - ;; - --tool-help) - show_tool_help - ;; - -t|--tool*) - case "$#,$1" in - *,*=*) - merge_tool=$(expr "z$1" : 'z-[^=]*=\(.*\)') - ;; - 1,*) - usage ;; - *) - merge_tool="$2" - shift ;; - esac - ;; - -y|--no-prompt) - prompt=false - ;; - --prompt) - prompt=true - ;; - --) - shift - break - ;; - -*) - usage - ;; - *) - break - ;; - esac - shift -done - prompt_after_failed_merge () { while true do @@ -426,57 +382,113 @@ prompt_after_failed_merge () { done } -git_dir_init -require_work_tree +print_noop_and_exit () { + echo "No files need merging" + exit 0 +} + +main () { + prompt=$(git config --bool mergetool.prompt) + guessed_merge_tool=false + orderfile= + + while test $# != 0 + do + case "$1" in + --tool-help=*) + TOOL_MODE=${1#--tool-help=} + show_tool_help + ;; + --tool-help) + show_tool_help + ;; + -t|--tool*) + case "$#,$1" in + *,*=*) + merge_tool=$(expr "z$1" : 'z-[^=]*=\(.*\)') + ;; + 1,*) + usage ;; + *) + merge_tool="$2" + shift ;; + esac + ;; + -y|--no-prompt) + prompt=false + ;; + --prompt) + prompt=true + ;; + -O*) + orderfile="$1" + ;; + --) + shift + break + ;; + -*) + usage + ;; + *) + break + ;; + esac + shift + done + + git_dir_init + require_work_tree -if test -z "$merge_tool" -then - # Check if a merge tool has been configured - merge_tool=$(get_configured_merge_tool) - # Try to guess an appropriate merge tool if no tool has been set. if test -z "$merge_tool" then - merge_tool=$(guess_merge_tool) || exit - guessed_merge_tool=true + # Check if a merge tool has been configured + merge_tool=$(get_configured_merge_tool) + # Try to guess an appropriate merge tool if no tool has been set. + if test -z "$merge_tool" + then + merge_tool=$(guess_merge_tool) || exit + guessed_merge_tool=true + fi + fi + merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)" + merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)" + + if test $# -eq 0 && test -e "$GIT_DIR/MERGE_RR" + then + set -- $(git rerere remaining) + if test $# -eq 0 + then + print_noop_and_exit + fi fi -fi -merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)" -merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)" -files= + files=$(git -c core.quotePath=false \ + diff --name-only --diff-filter=U \ + ${orderfile:+"$orderfile"} -- "$@") -if test $# -eq 0 -then cd_to_toplevel - if test -e "$GIT_DIR/MERGE_RR" + if test -z "$files" then - files=$(git rerere remaining) - else - files=$(git ls-files -u | sed -e 's/^[^ ]* //' | sort -u) + print_noop_and_exit fi -else - files=$(git ls-files -u -- "$@" | sed -e 's/^[^ ]* //' | sort -u) -fi -if test -z "$files" -then - echo "No files need merging" - exit 0 -fi + printf "Merging:\n" + printf "%s\n" "$files" -printf "Merging:\n" -printf "%s\n" "$files" + rc=0 + for i in $files + do + printf "\n" + if ! merge_file "$i" + then + rc=1 + prompt_after_failed_merge || exit 1 + fi + done -rc=0 -for i in $files -do - printf "\n" - if ! merge_file "$i" - then - rc=1 - prompt_after_failed_merge || exit 1 - fi -done + exit $rc +} -exit $rc +main "$@" diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index ca994c5c54..41fd374c72 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -93,8 +93,17 @@ eval ' GIT_CHERRY_PICK_HELP="$resolvemsg" export GIT_CHERRY_PICK_HELP -comment_char=$(git config --get core.commentchar 2>/dev/null | cut -c1) -: ${comment_char:=#} +comment_char=$(git config --get core.commentchar 2>/dev/null) +case "$comment_char" in +'' | auto) + comment_char="#" + ;; +?) + ;; +*) + comment_char=$(echo "$comment_char" | cut -c1) + ;; +esac warn () { printf '%s\n' "$*" >&2 diff --git a/git-sh-setup.sh b/git-sh-setup.sh index a8a4576342..240c7ebcd1 100644 --- a/git-sh-setup.sh +++ b/git-sh-setup.sh @@ -2,9 +2,6 @@ # to set up some variables pointing at the normal git directories and # a few helper shell functions. -# Source git-sh-i18n for gettext support. -. git-sh-i18n - # Having this variable in your environment would break scripts because # you would cause "cd" to be taken to unexpected places. If you # like CDPATH, define it for your interactive shell sessions without @@ -46,6 +43,9 @@ git_broken_path_fix () { # @@BROKEN_PATH_FIX@@ +# Source git-sh-i18n for gettext support. +. "$(git --exec-path)/git-sh-i18n" + die () { die_with_status 1 "$@" } diff --git a/git-stash.sh b/git-stash.sh index 90d63f293e..4546abaaef 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -384,9 +384,8 @@ parse_flags_and_rev() i_tree= u_tree= - REV=$(git rev-parse --no-flags --symbolic --sq "$@") || exit 1 - FLAGS= + REV= for opt do case "$opt" in @@ -404,6 +403,9 @@ parse_flags_and_rev() die "$(eval_gettext "unknown option: \$opt")" FLAGS="${FLAGS}${FLAGS:+ }$opt" ;; + *) + REV="${REV}${REV:+ }'$opt'" + ;; esac done @@ -422,6 +424,15 @@ parse_flags_and_rev() ;; esac + case "$1" in + *[!0-9]*) + : + ;; + *) + set -- "${ref_stash}@{$1}" + ;; + esac + REV=$(git rev-parse --symbolic --verify --quiet "$1") || { reference="$1" die "$(eval_gettext "\$reference is not a valid reference")" diff --git a/git-svn.perl b/git-svn.perl index 4d41d220a0..fa42364785 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -44,6 +44,7 @@ command_close_pipe command_bidi_pipe command_close_bidi_pipe + get_record ); BEGIN { @@ -1699,7 +1700,7 @@ sub cmd_gc { "files will not be compressed.\n"; } File::Find::find({ wanted => \&gc_directory, no_chdir => 1}, - "$ENV{GIT_DIR}/svn"); + Git::SVN::svn_dir()); } ########################### utility functions ######################### @@ -1733,7 +1734,7 @@ sub post_fetch_checkout { return unless verify_ref('HEAD^0'); return if $ENV{GIT_DIR} !~ m#^(?:.*/)?\.git$#; - my $index = $ENV{GIT_INDEX_FILE} || "$ENV{GIT_DIR}/index"; + my $index = command_oneline(qw(rev-parse --git-path index)); return if -f $index; return if command_oneline(qw/rev-parse --is-inside-work-tree/) eq 'false'; @@ -1835,8 +1836,9 @@ sub get_tree_from_treeish { sub get_commit_entry { my ($treeish) = shift; my %log_entry = ( log => '', tree => get_tree_from_treeish($treeish) ); - my $commit_editmsg = "$ENV{GIT_DIR}/COMMIT_EDITMSG"; - my $commit_msg = "$ENV{GIT_DIR}/COMMIT_MSG"; + my @git_path = qw(rev-parse --git-path); + my $commit_editmsg = command_oneline(@git_path, 'COMMIT_EDITMSG'); + my $commit_msg = command_oneline(@git_path, 'COMMIT_MSG'); open my $log_fh, '>', $commit_editmsg or croak $!; my $type = command_oneline(qw/cat-file -t/, $treeish); @@ -1880,10 +1882,9 @@ sub get_commit_entry { { require Encode; # SVN requires messages to be UTF-8 when entering the repo - local $/; open $log_fh, '<', $commit_msg or croak $!; binmode $log_fh; - chomp($log_entry{log} = <$log_fh>); + chomp($log_entry{log} = get_record($log_fh, undef)); my $enc = Git::config('i18n.commitencoding') || 'UTF-8'; my $msg = $log_entry{log}; diff --git a/git.c b/git.c index ab5c99cf70..dce529fcbf 100644 --- a/git.c +++ b/git.c @@ -35,8 +35,7 @@ static void save_env_before_alias(void) orig_cwd = xgetcwd(); for (i = 0; i < ARRAY_SIZE(env_names); i++) { orig_env[i] = getenv(env_names[i]); - if (orig_env[i]) - orig_env[i] = xstrdup(orig_env[i]); + orig_env[i] = xstrdup_or_null(orig_env[i]); } } @@ -164,6 +163,20 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) setenv(GIT_WORK_TREE_ENVIRONMENT, cmd, 1); if (envchanged) *envchanged = 1; + } else if (!strcmp(cmd, "--super-prefix")) { + if (*argc < 2) { + fprintf(stderr, "No prefix given for --super-prefix.\n" ); + usage(git_usage_string); + } + setenv(GIT_SUPER_PREFIX_ENVIRONMENT, (*argv)[1], 1); + if (envchanged) + *envchanged = 1; + (*argv)++; + (*argc)--; + } else if (skip_prefix(cmd, "--super-prefix=", &cmd)) { + setenv(GIT_SUPER_PREFIX_ENVIRONMENT, cmd, 1); + if (envchanged) + *envchanged = 1; } else if (!strcmp(cmd, "--bare")) { char *cwd = xgetcwd(); is_bare_repository_cfg = 1; @@ -310,6 +323,7 @@ static int handle_alias(int *argcp, const char ***argv) * RUN_SETUP for reading from the configuration file. */ #define NEED_WORK_TREE (1<<3) +#define SUPPORT_SUPER_PREFIX (1<<4) struct cmd_struct { const char *cmd; @@ -344,6 +358,13 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) } commit_pager_choice(); + if (!help && get_super_prefix()) { + if (!(p->option & SUPPORT_SUPER_PREFIX)) + die("%s doesn't support --super-prefix", p->cmd); + if (prefix) + die("can't use --super-prefix from a subdirectory"); + } + if (!help && p->option & NEED_WORK_TREE) setup_work_tree(); @@ -375,7 +396,7 @@ static struct cmd_struct commands[] = { { "am", cmd_am, RUN_SETUP | NEED_WORK_TREE }, { "annotate", cmd_annotate, RUN_SETUP }, { "apply", cmd_apply, RUN_SETUP_GENTLY }, - { "archive", cmd_archive }, + { "archive", cmd_archive, RUN_SETUP_GENTLY }, { "bisect--helper", cmd_bisect__helper, RUN_SETUP }, { "blame", cmd_blame, RUN_SETUP }, { "branch", cmd_branch, RUN_SETUP }, @@ -421,10 +442,10 @@ static struct cmd_struct commands[] = { { "init-db", cmd_init_db }, { "interpret-trailers", cmd_interpret_trailers, RUN_SETUP_GENTLY }, { "log", cmd_log, RUN_SETUP }, - { "ls-files", cmd_ls_files, RUN_SETUP }, + { "ls-files", cmd_ls_files, RUN_SETUP | SUPPORT_SUPER_PREFIX }, { "ls-remote", cmd_ls_remote, RUN_SETUP_GENTLY }, { "ls-tree", cmd_ls_tree, RUN_SETUP }, - { "mailinfo", cmd_mailinfo }, + { "mailinfo", cmd_mailinfo, RUN_SETUP_GENTLY }, { "mailsplit", cmd_mailsplit }, { "merge", cmd_merge, RUN_SETUP | NEED_WORK_TREE }, { "merge-base", cmd_merge_base, RUN_SETUP }, @@ -558,6 +579,9 @@ static void execv_dashed_external(const char **argv) const char *tmp; int status; + if (get_super_prefix()) + die("%s doesn't support --super-prefix", argv[0]); + if (use_pager == -1) use_pager = check_pager_config(argv[0]); commit_pager_choice(); @@ -630,6 +654,11 @@ int cmd_main(int argc, 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); diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 44094f41d5..7cf68f07b7 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -1616,7 +1616,7 @@ sub esc_path { return $str; } -# Sanitize for use in XHTML + application/xml+xhtm (valid XML 1.0) +# Sanitize for use in XHTML + application/xml+xhtml (valid XML 1.0) sub sanitize { my $str = shift; @@ -2036,10 +2036,24 @@ sub format_log_line_html { my $line = shift; $line = esc_html($line, -nbsp=>1); - $line =~ s{\b([0-9a-fA-F]{8,40})\b}{ + $line =~ s{ + \b + ( + # The output of "git describe", e.g. v2.10.0-297-gf6727b0 + # or hadoop-20160921-113441-20-g094fb7d + (?a({-href => href(action=>"object", hash=>$1), -class => "text"}, $1); - }eg; + }egx; return $line; } diff --git a/gpg-interface.c b/gpg-interface.c index 8672edaf48..e44cc27da1 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -33,6 +33,10 @@ static struct { { 'B', "\n[GNUPG:] BADSIG " }, { 'U', "\n[GNUPG:] TRUST_NEVER" }, { 'U', "\n[GNUPG:] TRUST_UNDEFINED" }, + { 'E', "\n[GNUPG:] ERRSIG "}, + { 'X', "\n[GNUPG:] EXPSIG "}, + { 'Y', "\n[GNUPG:] EXPKEYSIG "}, + { 'R', "\n[GNUPG:] REVKEYSIG "}, }; void parse_gpg_output(struct signature_check *sigc) @@ -54,9 +58,12 @@ void parse_gpg_output(struct signature_check *sigc) /* The trust messages are not followed by key/signer information */ if (sigc->result != 'U') { sigc->key = xmemdupz(found, 16); - found += 17; - next = strchrnul(found, '\n'); - sigc->signer = xmemdupz(found, next - found); + /* The ERRSIG message is not followed by signer information */ + if (sigc-> result != 'E') { + found += 17; + next = strchrnul(found, '\n'); + sigc->signer = xmemdupz(found, next - found); + } } } } diff --git a/hex.c b/hex.c index ab2610e498..845b01a874 100644 --- a/hex.c +++ b/hex.c @@ -78,7 +78,8 @@ char *sha1_to_hex(const unsigned char *sha1) { static int bufno; static char hexbuffer[4][GIT_SHA1_HEXSZ + 1]; - return sha1_to_hex_r(hexbuffer[3 & ++bufno], sha1); + bufno = (bufno + 1) % ARRAY_SIZE(hexbuffer); + return sha1_to_hex_r(hexbuffer[bufno], sha1); } char *oid_to_hex(const struct object_id *oid) diff --git a/http-backend.c b/http-backend.c index adc8c8c3da..eef0a361f4 100644 --- a/http-backend.c +++ b/http-backend.c @@ -464,7 +464,7 @@ static void get_info_refs(struct strbuf *hdr, char *arg) hdr_str(hdr, content_type, buf.buf); end_headers(hdr); - packet_write(1, "# service=git-%s\n", svc->name); + packet_write_fmt(1, "# service=git-%s\n", svc->name); packet_flush(1); argv[0] = svc->name; diff --git a/http.c b/http.c index 0c65639881..4c4a812fcc 100644 --- a/http.c +++ b/http.c @@ -372,7 +372,7 @@ static int http_options(const char *var, const char *value, void *cb) static void init_curl_http_auth(CURL *result) { - if (!http_auth.username) { + if (!http_auth.username || !*http_auth.username) { if (curl_empty_auth) curl_easy_setopt(result, CURLOPT_USERPWD, ":"); return; diff --git a/imap-send.c b/imap-send.c index adb9738c30..5c7e27a894 100644 --- a/imap-send.c +++ b/imap-send.c @@ -1082,10 +1082,8 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, char *f cred.protocol = xstrdup(srvc->use_ssl ? "imaps" : "imap"); cred.host = xstrdup(srvc->host); - if (srvc->user) - cred.username = xstrdup(srvc->user); - if (srvc->pass) - cred.password = xstrdup(srvc->pass); + cred.username = xstrdup_or_null(srvc->user); + cred.password = xstrdup_or_null(srvc->pass); credential_fill(&cred); diff --git a/mailmap.c b/mailmap.c index b5c521fdea..c1a79c100c 100644 --- a/mailmap.c +++ b/mailmap.c @@ -103,10 +103,8 @@ static void add_mapping(struct string_list *map, } else { struct mailmap_info *mi = xcalloc(1, sizeof(struct mailmap_info)); debug_mm("mailmap: adding (complex) entry for '%s'\n", old_email); - if (new_name) - mi->name = xstrdup(new_name); - if (new_email) - mi->email = xstrdup(new_email); + mi->name = xstrdup_or_null(new_name); + mi->email = xstrdup_or_null(new_email); string_list_insert(&me->namemap, old_name)->util = mi; } diff --git a/merge-recursive.c b/merge-recursive.c index 5200d5ccf8..e64b48b25d 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -202,9 +202,9 @@ static void output_commit_title(struct merge_options *o, struct commit *commit) strbuf_addf(&o->obuf, "virtual %s\n", merge_remote_util(commit)->name); else { - strbuf_addf(&o->obuf, "%s ", - find_unique_abbrev(commit->object.oid.hash, - DEFAULT_ABBREV)); + strbuf_add_unique_abbrev(&o->obuf, commit->object.oid.hash, + DEFAULT_ABBREV); + strbuf_addch(&o->obuf, ' '); if (parse_commit(commit) != 0) strbuf_addstr(&o->obuf, _("(bad commit)\n")); else { @@ -664,7 +664,13 @@ static char *unique_path(struct merge_options *o, const char *path, const char * 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; @@ -684,7 +690,8 @@ static int dir_in_way(const char *path, int check_working_copy) } 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) @@ -1062,7 +1069,7 @@ static int handle_change_delete(struct merge_options *o, { 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); } @@ -1195,7 +1202,7 @@ static int handle_file(struct merge_options *o, 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); @@ -1704,7 +1711,8 @@ static int merge_content(struct merge_options *o, 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, @@ -1862,7 +1870,8 @@ static int process_entry(struct merge_options *o, 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. " diff --git a/pack-bitmap.c b/pack-bitmap.c index b949e51716..39bcc16846 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -266,7 +266,7 @@ static int open_pack_bitmap_1(struct packed_git *packfile) return -1; idx_name = pack_bitmap_filename(packfile); - fd = git_open_noatime(idx_name); + fd = git_open(idx_name); free(idx_name); if (fd < 0) diff --git a/parse-options-cb.c b/parse-options-cb.c index b5d920914e..b7d8f7dcb2 100644 --- a/parse-options-cb.c +++ b/parse-options-cb.c @@ -211,8 +211,7 @@ int parse_opt_passthru(const struct option *opt, const char *arg, int unset) if (recreate_opt(&sb, opt, arg, unset) < 0) return -1; - if (*opt_value) - free(*opt_value); + free(*opt_value); *opt_value = strbuf_detach(&sb, NULL); diff --git a/path.c b/path.c index a8e72955f6..52d889c88e 100644 --- a/path.c +++ b/path.c @@ -25,7 +25,8 @@ static struct strbuf *get_pathname(void) STRBUF_INIT, STRBUF_INIT, STRBUF_INIT, STRBUF_INIT }; static int index; - struct strbuf *sb = &pathname_array[3 & ++index]; + struct strbuf *sb = &pathname_array[index]; + index = (index + 1) % ARRAY_SIZE(pathname_array); strbuf_reset(sb); return sb; } diff --git a/pathspec.c b/pathspec.c index 86f2b449b1..22ca74a126 100644 --- a/pathspec.c +++ b/pathspec.c @@ -364,7 +364,7 @@ void parse_pathspec(struct pathspec *pathspec, { struct pathspec_item *item; const char *entry = argv ? *argv : NULL; - int i, n, prefixlen, nr_exclude = 0; + int i, n, prefixlen, warn_empty_string, nr_exclude = 0; memset(pathspec, 0, sizeof(*pathspec)); @@ -402,8 +402,15 @@ void parse_pathspec(struct pathspec *pathspec, } n = 0; - while (argv[n]) + warn_empty_string = 1; + while (argv[n]) { + if (*argv[n] == '\0' && warn_empty_string) { + warning(_("empty strings as pathspecs will be made invalid in upcoming releases. " + "please use . instead if you meant to match all paths")); + warn_empty_string = 0; + } n++; + } pathspec->nr = n; ALLOC_ARRAY(pathspec->items, n); diff --git a/perl/Git.pm b/perl/Git.pm index ce7e4e8da3..b2732822af 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -59,7 +59,7 @@ =head1 SYNOPSIS command_bidi_pipe command_close_bidi_pipe version exec_path html_path hash_object git_cmd_try remote_refs prompt - get_tz_offset + get_tz_offset get_record credential credential_read credential_write temp_acquire temp_is_locked temp_release temp_reset temp_path); @@ -538,6 +538,20 @@ sub get_tz_offset { return sprintf("%s%02d%02d", $sign, (gmtime(abs($t - $gm)))[2,1]); } +=item get_record ( FILEHANDLE, INPUT_RECORD_SEPARATOR ) + +Read one record from FILEHANDLE delimited by INPUT_RECORD_SEPARATOR, +removing any trailing INPUT_RECORD_SEPARATOR. + +=cut + +sub get_record { + my ($fh, $rs) = @_; + local $/ = $rs; + my $rec = <$fh>; + chomp $rec if defined $rs; + $rec; +} =item prompt ( PROMPT , ISPASSWORD ) @@ -871,6 +885,8 @@ sub ident_person { =cut +# Very close to Mail::Address's parser, but we still have minor +# differences in some cases (see t9000 for examples). sub parse_mailboxes { my $re_comment = qr/\((?:[^)]*)\)/; my $re_quote = qr/"(?:[^\"\\]|\\.)*"/; @@ -879,6 +895,7 @@ sub parse_mailboxes { # divide the string in tokens of the above form my $re_token = qr/(?:$re_quote|$re_word|$re_comment|\S)/; my @tokens = map { $_ =~ /\s*($re_token)\s*/g } @_; + my $end_of_addr_seen = 0; # add a delimiter to simplify treatment for the last mailbox push @tokens, ","; @@ -888,10 +905,10 @@ sub parse_mailboxes { if ($token =~ /^[,;]$/) { # if buffer still contains undeterminated strings # append it at the end of @address or @phrase - if (@address) { - push @address, @buffer; - } else { + if ($end_of_addr_seen) { push @phrase, @buffer; + } else { + push @address, @buffer; } my $str_phrase = join ' ', @phrase; @@ -915,16 +932,16 @@ sub parse_mailboxes { push @addr_list, $str_mailbox if ($str_mailbox); @phrase = @address = @comment = @buffer = (); + $end_of_addr_seen = 0; } elsif ($token =~ /^\(/) { push @comment, $token; } elsif ($token eq "<") { push @phrase, (splice @address), (splice @buffer); } elsif ($token eq ">") { + $end_of_addr_seen = 1; push @address, (splice @buffer); - } elsif ($token eq "@") { + } elsif ($token eq "@" && !$end_of_addr_seen) { push @address, (splice @buffer), "@"; - } elsif ($token eq ".") { - push @address, (splice @buffer), "."; } else { push @buffer, $token; } diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm index 018beb85a0..711d2687a3 100644 --- a/perl/Git/SVN.pm +++ b/perl/Git/SVN.pm @@ -807,10 +807,15 @@ sub get_fetch_range { (++$min, $max); } +sub svn_dir { + command_oneline(qw(rev-parse --git-path svn)); +} + sub tmp_config { my (@args) = @_; - my $old_def_config = "$ENV{GIT_DIR}/svn/config"; - my $config = "$ENV{GIT_DIR}/svn/.metadata"; + my $svn_dir = svn_dir(); + my $old_def_config = "$svn_dir/config"; + my $config = "$svn_dir/.metadata"; if (! -f $config && -f $old_def_config) { rename $old_def_config, $config or die "Failed rename $old_def_config => $config: $!\n"; @@ -1658,7 +1663,17 @@ sub tie_for_persistent_memoization { if ($memo_backend > 0) { tie %$hash => 'Git::SVN::Memoize::YAML', "$path.yaml"; } else { - tie %$hash => 'Memoize::Storable', "$path.db", 'nstore'; + # first verify that any existing file can actually be loaded + # (it may have been saved by an incompatible version) + my $db = "$path.db"; + if (-e $db) { + use Storable qw(retrieve); + + if (!eval { retrieve($db); 1 }) { + unlink $db or die "unlink $db failed: $!"; + } + } + tie %$hash => 'Memoize::Storable', $db, 'nstore'; } } @@ -1671,7 +1686,7 @@ sub tie_for_persistent_memoization { return if $memoized; $memoized = 1; - my $cache_path = "$ENV{GIT_DIR}/svn/.caches/"; + my $cache_path = svn_dir() . '/.caches/'; mkpath([$cache_path]) unless -d $cache_path; my %lookup_svn_merge_cache; @@ -1712,7 +1727,7 @@ sub tie_for_persistent_memoization { sub clear_memoized_mergeinfo_caches { die "Only call this method in non-memoized context" if ($memoized); - my $cache_path = "$ENV{GIT_DIR}/svn/.caches/"; + my $cache_path = svn_dir() . '/.caches/'; return unless -d $cache_path; for my $cache_file (("$cache_path/lookup_svn_merge", @@ -2446,12 +2461,13 @@ sub _new { "refs/remotes/$prefix$default_ref_id"; } $_[1] = $repo_id; - my $dir = "$ENV{GIT_DIR}/svn/$ref_id"; + my $svn_dir = svn_dir(); + my $dir = "$svn_dir/$ref_id"; - # Older repos imported by us used $GIT_DIR/svn/foo instead of - # $GIT_DIR/svn/refs/remotes/foo when tracking refs/remotes/foo + # Older repos imported by us used $svn_dir/foo instead of + # $svn_dir/refs/remotes/foo when tracking refs/remotes/foo if ($ref_id =~ m{^refs/remotes/(.+)}) { - my $old_dir = "$ENV{GIT_DIR}/svn/$1"; + my $old_dir = "$svn_dir/$1"; if (-d $old_dir && ! -d $dir) { $dir = $old_dir; } @@ -2461,7 +2477,7 @@ sub _new { mkpath([$dir]); my $obj = bless { ref_id => $ref_id, dir => $dir, index => "$dir/index", - config => "$ENV{GIT_DIR}/svn/config", + config => "$svn_dir/config", map_root => "$dir/.rev_map", repo_id => $repo_id }, $class; # Ensure it gets canonicalized diff --git a/perl/Git/SVN/Editor.pm b/perl/Git/SVN/Editor.pm index 4c4199afec..0df16ed726 100644 --- a/perl/Git/SVN/Editor.pm +++ b/perl/Git/SVN/Editor.pm @@ -7,7 +7,9 @@ package Git::SVN::Editor; use Carp qw/croak/; use Git qw/command command_oneline command_noisy command_output_pipe command_input_pipe command_close_pipe - command_bidi_pipe command_close_bidi_pipe/; + command_bidi_pipe command_close_bidi_pipe + get_record/; + BEGIN { @ISA = qw(SVN::Delta::Editor); } @@ -57,11 +59,9 @@ sub generate_diff { push @diff_tree, "-l$_rename_limit" if defined $_rename_limit; push @diff_tree, $tree_a, $tree_b; my ($diff_fh, $ctx) = command_output_pipe(@diff_tree); - local $/ = "\0"; my $state = 'meta'; my @mods; - while (<$diff_fh>) { - chomp $_; # this gets rid of the trailing "\0" + while (defined($_ = get_record($diff_fh, "\0"))) { if ($state eq 'meta' && /^:(\d{6})\s(\d{6})\s ($::sha1)\s($::sha1)\s ([MTCRAD])\d*$/xo) { @@ -173,9 +173,7 @@ sub rmdirs { my ($fh, $ctx) = command_output_pipe(qw/ls-tree --name-only -r -z/, $self->{tree_b}); - local $/ = "\0"; - while (<$fh>) { - chomp; + while (defined($_ = get_record($fh, "\0"))) { my @dn = split m#/#, $_; while (pop @dn) { delete $rm->{join '/', @dn}; diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm index d8c21ad915..64e900a0e9 100644 --- a/perl/Git/SVN/Fetcher.pm +++ b/perl/Git/SVN/Fetcher.pm @@ -9,7 +9,8 @@ package Git::SVN::Fetcher; use File::Basename qw/dirname/; use Git qw/command command_oneline command_noisy command_output_pipe command_input_pipe command_close_pipe - command_bidi_pipe command_close_bidi_pipe/; + command_bidi_pipe command_close_bidi_pipe + get_record/; BEGIN { @ISA = qw(SVN::Delta::Editor); } @@ -86,11 +87,9 @@ sub _mark_empty_symlinks { my $printed_warning; chomp(my $empty_blob = `git hash-object -t blob --stdin < /dev/null`); my ($ls, $ctx) = command_output_pipe(qw/ls-tree -r -z/, $cmt); - local $/ = "\0"; my $pfx = defined($switch_path) ? $switch_path : $git_svn->path; $pfx .= '/' if length($pfx); - while (<$ls>) { - chomp; + while (defined($_ = get_record($ls, "\0"))) { s/\A100644 blob $empty_blob\t//o or next; unless ($printed_warning) { print STDERR "Scanning for empty symlinks, ", @@ -179,9 +178,7 @@ sub delete_entry { my ($ls, $ctx) = command_output_pipe(qw/ls-tree -r --name-only -z/, $tree); - local $/ = "\0"; - while (<$ls>) { - chomp; + while (defined($_ = get_record($ls, "\0"))) { my $rmpath = "$gpath/$_"; $self->{gii}->remove($rmpath); print "\tD\t$rmpath\n" unless $::_q; @@ -247,9 +244,7 @@ sub add_directory { my ($ls, $ctx) = command_output_pipe(qw/ls-tree -r --name-only -z/, $self->{c}); - local $/ = "\0"; - while (<$ls>) { - chomp; + while (defined($_ = get_record($ls, "\0"))) { $self->{gii}->remove($_); print "\tD\t$_\n" unless $::_q; push @deleted_gpath, $gpath; diff --git a/perl/Git/SVN/Migration.pm b/perl/Git/SVN/Migration.pm index cf6ffa7581..dc90f6a621 100644 --- a/perl/Git/SVN/Migration.pm +++ b/perl/Git/SVN/Migration.pm @@ -44,7 +44,9 @@ package Git::SVN::Migration; command_noisy command_output_pipe command_close_pipe + command_oneline ); +use Git::SVN; sub migrate_from_v0 { my $git_dir = $ENV{GIT_DIR}; @@ -55,7 +57,9 @@ sub migrate_from_v0 { chomp; my ($id, $orig_ref) = ($_, $_); next unless $id =~ s#^refs/heads/(.+)-HEAD$#$1#; - next unless -f "$git_dir/$id/info/url"; + my $info_url = command_oneline(qw(rev-parse --git-path), + "$id/info/url"); + next unless -f $info_url; my $new_ref = "refs/remotes/$id"; if (::verify_ref("$new_ref^0")) { print STDERR "W: $orig_ref is probably an old ", @@ -82,7 +86,7 @@ sub migrate_from_v1 { my $git_dir = $ENV{GIT_DIR}; my $migrated = 0; return $migrated unless -d $git_dir; - my $svn_dir = "$git_dir/svn"; + my $svn_dir = Git::SVN::svn_dir(); # just in case somebody used 'svn' as their $id at some point... return $migrated if -d $svn_dir && ! -f "$svn_dir/info/url"; @@ -97,27 +101,28 @@ sub migrate_from_v1 { my $x = $_; next unless $x =~ s#^refs/remotes/##; chomp $x; - next unless -f "$git_dir/$x/info/url"; - my $u = eval { ::file_to_s("$git_dir/$x/info/url") }; + my $info_url = command_oneline(qw(rev-parse --git-path), + "$x/info/url"); + next unless -f $info_url; + my $u = eval { ::file_to_s($info_url) }; next unless $u; - my $dn = dirname("$git_dir/svn/$x"); + my $dn = dirname("$svn_dir/$x"); mkpath([$dn]) unless -d $dn; if ($x eq 'svn') { # they used 'svn' as GIT_SVN_ID: - mkpath(["$git_dir/svn/svn"]); + mkpath(["$svn_dir/svn"]); print STDERR " - $git_dir/$x/info => ", - "$git_dir/svn/$x/info\n"; - rename "$git_dir/$x/info", "$git_dir/svn/$x/info" or + "$svn_dir/$x/info\n"; + rename "$git_dir/$x/info", "$svn_dir/$x/info" or croak "$!: $x"; # don't worry too much about these, they probably # don't exist with repos this old (save for index, # and we can easily regenerate that) foreach my $f (qw/unhandled.log index .rev_db/) { - rename "$git_dir/$x/$f", "$git_dir/svn/$x/$f"; + rename "$git_dir/$x/$f", "$svn_dir/$x/$f"; } } else { - print STDERR " - $git_dir/$x => $git_dir/svn/$x\n"; - rename "$git_dir/$x", "$git_dir/svn/$x" or - croak "$!: $x"; + print STDERR " - $git_dir/$x => $svn_dir/$x\n"; + rename "$git_dir/$x", "$svn_dir/$x" or croak "$!: $x"; } $migrated++; } @@ -139,9 +144,10 @@ sub read_old_urls { push @dir, $_; } } + my $svn_dir = Git::SVN::svn_dir(); foreach (@dir) { my $x = $_; - $x =~ s!^\Q$ENV{GIT_DIR}\E/svn/!!o; + $x =~ s!^\Q$svn_dir\E/!!o; read_old_urls($l_map, $x, $_); } } @@ -150,7 +156,7 @@ sub migrate_from_v2 { my @cfg = command(qw/config -l/); return if grep /^svn-remote\..+\.url=/, @cfg; my %l_map; - read_old_urls(\%l_map, '', "$ENV{GIT_DIR}/svn"); + read_old_urls(\%l_map, '', Git::SVN::svn_dir()); my $migrated = 0; require Git::SVN; @@ -239,7 +245,8 @@ sub minimize_connections { } } if (@emptied) { - my $file = $ENV{GIT_CONFIG} || "$ENV{GIT_DIR}/config"; + my $file = $ENV{GIT_CONFIG} || + command_oneline(qw(rev-parse --git-path config)); print STDERR <> 12); + buf[1] = hex(size >> 8); + buf[2] = hex(size >> 4); + buf[3] = hex(size); + #undef hex +} + +static void format_packet(struct strbuf *out, const char *fmt, va_list args) +{ size_t orig_len, n; orig_len = out->len; @@ -111,23 +129,63 @@ static void format_packet(struct strbuf *out, const char *fmt, va_list args) if (n > LARGE_PACKET_MAX) die("protocol error: impossibly long line"); - out->buf[orig_len + 0] = hex(n >> 12); - out->buf[orig_len + 1] = hex(n >> 8); - out->buf[orig_len + 2] = hex(n >> 4); - out->buf[orig_len + 3] = hex(n); + set_packet_header(&out->buf[orig_len], n); packet_trace(out->buf + orig_len + 4, n - 4, 1); } -void packet_write(int fd, const char *fmt, ...) +static int packet_write_fmt_1(int fd, int gently, + const char *fmt, va_list args) +{ + struct strbuf buf = STRBUF_INIT; + ssize_t count; + + format_packet(&buf, fmt, args); + count = write_in_full(fd, buf.buf, buf.len); + if (count == buf.len) + return 0; + + if (!gently) { + check_pipe(errno); + die_errno("packet write with format failed"); + } + return error("packet write with format failed"); +} + +void packet_write_fmt(int fd, const char *fmt, ...) { - static struct strbuf buf = STRBUF_INIT; va_list args; - strbuf_reset(&buf); va_start(args, fmt); - format_packet(&buf, fmt, args); + packet_write_fmt_1(fd, 0, fmt, args); + va_end(args); +} + +int packet_write_fmt_gently(int fd, const char *fmt, ...) +{ + int status; + va_list args; + + va_start(args, fmt); + status = packet_write_fmt_1(fd, 1, fmt, args); va_end(args); - write_or_die(fd, buf.buf, buf.len); + return status; +} + +static int packet_write_gently(const int fd_out, const char *buf, size_t size) +{ + static char packet_write_buffer[LARGE_PACKET_MAX]; + size_t packet_size; + + if (size > sizeof(packet_write_buffer) - 4) + return error("packet write failed - data exceeds max packet size"); + + packet_trace(buf, size, 1); + packet_size = size + 4; + set_packet_header(packet_write_buffer, packet_size); + memcpy(packet_write_buffer + 4, buf, size); + if (write_in_full(fd_out, packet_write_buffer, packet_size) == packet_size) + return 0; + return error("packet write failed"); } void packet_buf_write(struct strbuf *buf, const char *fmt, ...) @@ -139,6 +197,46 @@ void packet_buf_write(struct strbuf *buf, const char *fmt, ...) va_end(args); } +int write_packetized_from_fd(int fd_in, int fd_out) +{ + static char buf[LARGE_PACKET_DATA_MAX]; + int err = 0; + ssize_t bytes_to_write; + + while (!err) { + bytes_to_write = xread(fd_in, buf, sizeof(buf)); + if (bytes_to_write < 0) + return COPY_READ_ERROR; + if (bytes_to_write == 0) + break; + err = packet_write_gently(fd_out, buf, bytes_to_write); + } + if (!err) + err = packet_flush_gently(fd_out); + return err; +} + +int write_packetized_from_buf(const char *src_in, size_t len, int fd_out) +{ + int err = 0; + size_t bytes_written = 0; + size_t bytes_to_write; + + while (!err) { + if ((len - bytes_written) > LARGE_PACKET_DATA_MAX) + bytes_to_write = LARGE_PACKET_DATA_MAX; + else + bytes_to_write = len - bytes_written; + if (bytes_to_write == 0) + break; + err = packet_write_gently(fd_out, src_in + bytes_written, bytes_to_write); + bytes_written += bytes_to_write; + } + if (!err) + err = packet_flush_gently(fd_out); + return err; +} + static int get_packet_data(int fd, char **src_buf, size_t *src_size, void *dst, unsigned size, int options) { @@ -229,3 +327,35 @@ char *packet_read_line_buf(char **src, size_t *src_len, int *dst_len) { return packet_read_line_generic(-1, src, src_len, dst_len); } + +ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out) +{ + int packet_len; + + size_t orig_len = sb_out->len; + size_t orig_alloc = sb_out->alloc; + + for (;;) { + strbuf_grow(sb_out, LARGE_PACKET_DATA_MAX); + packet_len = packet_read(fd_in, NULL, NULL, + /* strbuf_grow() above always allocates one extra byte to + * store a '\0' at the end of the string. packet_read() + * writes a '\0' extra byte at the end, too. Let it know + * that there is already room for the extra byte. + */ + sb_out->buf + sb_out->len, LARGE_PACKET_DATA_MAX+1, + PACKET_READ_GENTLE_ON_EOF); + if (packet_len <= 0) + break; + sb_out->len += packet_len; + } + + if (packet_len < 0) { + if (orig_alloc == 0) + strbuf_release(sb_out); + else + strbuf_setlen(sb_out, orig_len); + return packet_len; + } + return sb_out->len - orig_len; +} diff --git a/pkt-line.h b/pkt-line.h index 3cb9d91baa..18eac64830 100644 --- a/pkt-line.h +++ b/pkt-line.h @@ -20,9 +20,13 @@ * side can't, we stay with pure read/write interfaces. */ void packet_flush(int fd); -void packet_write(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3))); +void packet_write_fmt(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3))); void packet_buf_flush(struct strbuf *buf); void packet_buf_write(struct strbuf *buf, const char *fmt, ...) __attribute__((format (printf, 2, 3))); +int packet_flush_gently(int fd); +int packet_write_fmt_gently(int fd, const char *fmt, ...) __attribute__((format (printf, 2, 3))); +int write_packetized_from_fd(int fd_in, int fd_out); +int write_packetized_from_buf(const char *src_in, size_t len, int fd_out); /* * Read a packetized line into the buffer, which must be at least size bytes @@ -75,8 +79,14 @@ char *packet_read_line(int fd, int *size); */ char *packet_read_line_buf(char **src_buf, size_t *src_len, int *size); +/* + * Reads a stream of variable sized packets until a flush packet is detected. + */ +ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out); + #define DEFAULT_PACKET_MAX 1000 #define LARGE_PACKET_MAX 65520 +#define LARGE_PACKET_DATA_MAX (LARGE_PACKET_MAX - 4) extern char packet_buffer[LARGE_PACKET_MAX]; #endif diff --git a/po/ca.po b/po/ca.po index 30e00e2b58..57d0e2faa8 100644 --- a/po/ca.po +++ b/po/ca.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List \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 \n" "Language-Team: Catalan\n" "Language: ca\n" @@ -16,7 +16,7 @@ msgstr "" "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 @@ -100,3957 +100,4458 @@ msgstr "" "\n" " git checkout -b \n" -#: archive.c:12 -msgid "git archive [] [...]" -msgstr "git archive [] [...]" +#: 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 [--exec ] [] [...]" -msgstr "" -"git archive --remote [--exec ] [] " -"[...]" +#: 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 [--exec ] --list" -msgstr "git archive --remote [--exec ] --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 " -msgstr "recupera l'arxiu del dipòsit remot " +#: 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 leading slashes from traditional diff paths" msgstr "" -"valor de configuració numèric dolent '%s' per '%s' en l'entrada estàndard: %s" +"elimina 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 lines of context match" +msgstr "assegura't que almenys 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 to all filenames" +msgstr "anteposa a tots els noms de fitxer" -#. TRANSLATORS: "%s" is " 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 [] [...]" +msgstr "git archive [] [...]" -#: 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 [--exec ] [] [...]" +msgstr "" +"git archive --remote [--exec ] [] " +"[...]" -#: 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 [--exec ] --list" +msgstr "git archive --remote [--exec ] --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 " +msgstr "recupera l'arxiu del dipòsit remot " -#: 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:)" -msgstr "format esperat: %%(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:,)" -msgstr "format esperat: %%(align:,)" +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 " 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 ' or 'git rm '" -msgstr "" -"després de resoldre els conflictes, marqueu els camins\n" -"corregits amb 'git add ' o 'git rm '" +#: 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 ' or 'git rm '\n" -"and commit the result with 'git commit'" -msgstr "" -"després de resoldre els conflictes, marqueu els camins\n" -"corregits amb 'git add ' o 'git rm '\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 -- ...' to specify paths that do not exist locally." -msgstr "" -"%s: no hi ha tal camí en l'arbre de treball.\n" -"Useu 'git -- ...' 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 [...] -- [...]'" +"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 [...] -- [...]'" +"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 [...] -- [...]'" +"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 [...] -- [...]'" - -#: 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:)" +msgstr "format esperat: %%(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:,)" +msgstr "format esperat: %%(align:,)" + +#: 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 ' or 'git rm '" 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 ' o 'git rm '" -#: 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 ' or 'git rm '\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 ' o 'git rm '\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 ...\" to unstage)" -msgstr " (useu \"git reset %s ...\" 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 ...\" to unstage)" -msgstr " (useu \"git rm --cached ...\" 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 ...\" to mark resolution)" -msgstr " (useu \"git add ...\" 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 ...\" as appropriate to mark resolution)" -msgstr "" -" (useu \"git add/rm ...\" 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 ...\" to mark resolution)" -msgstr " (useu \"git rm ...\" 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 ...\" to update what will be committed)" -msgstr " (useu \"git add ...\" 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 ...\" to update what will be committed)" -msgstr " (useu \"git add/rm ...\" 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 -- ...\" to discard changes in working directory)" -msgstr "" -" (useu \"git checkout -- ...\" 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 ...\" to include in what will be committed)" -msgstr " (useu \"git %s ...\" 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 -- ...' to specify paths that do not exist locally." +msgstr "" +"%s: no hi ha tal camí en l'arbre de treball.\n" +"Useu 'git -- ...' 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 [...] -- [...]'" +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 [...] -- [...]'" -#: 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 [...] -- [...]'" 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 [...] -- [...]'" -#: 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 [] [--] ..." -msgstr "git add [] [--] ..." +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 ...\" to unstage)" +msgstr " (useu \"git reset %s ...\" 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 ...\" to unstage)" +msgstr " (useu \"git rm --cached ...\" 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 ...\" to mark resolution)" +msgstr " (useu \"git add ...\" 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 ...\" as appropriate to mark resolution)" +msgstr "" +" (useu \"git add/rm ...\" 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 ...\" to mark resolution)" +msgstr " (useu \"git rm ...\" 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 ...\" to update what will be committed)" +msgstr " (useu \"git add ...\" 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 ...\" to update what will be committed)" +msgstr " (useu \"git add/rm ...\" 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 -- ...\" to discard changes in working directory)" +msgstr "" +" (useu \"git checkout -- ...\" 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 ...\" to include in what will be committed)" +msgstr " (useu \"git %s ...\" 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 [] [(|)...]" -msgstr "git am [] [(|)...]" - -#: builtin/am.c:2226 -msgid "git am [] (--continue | --skip | --abort)" -msgstr "git am [] (--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 [] [...]" -msgstr "git apply [] [...]" +#: 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 [] [--] ..." +msgstr "git add [] [--] ..." -#: 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 [] [( | )...]" +msgstr "git am [] [( | )...]" -#: 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 [] (--continue | --skip | --abort)" +msgstr "git am [] (--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 leading slashes from traditional diff paths" -msgstr "" -"elimina 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 lines of context match" -msgstr "assegura't que almenys 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 to all filenames" -msgstr "anteposa a tots els noms de fitxer" +#: builtin/apply.c:8 +msgid "git apply [] [...]" +msgstr "git apply [] [...]" #: builtin/archive.c:17 #, c-format @@ -4111,118 +4612,172 @@ msgstr "es documenten les en git-rev-list(1)" 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 instead of calling git-rev-list" msgstr "Usa les revisions de en lloc d'invocar git-rev-list" -#: builtin/blame.c:2554 +#: builtin/blame.c:2604 msgid "Use 's contents as the final image" msgstr "Usa els continguts de 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 [] [-r | -a] [--merged | --no-merged]" msgstr "git branch [] [-r | -a] [--merged | --no-merged]" @@ -4474,6 +5029,10 @@ msgstr "font" 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" @@ -4546,8 +5105,8 @@ msgstr "clau" 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" @@ -4560,7 +5119,7 @@ msgstr "imprimeix només les branques de l'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!" @@ -4671,65 +5230,82 @@ msgstr "Cal un dipòsit per a fer un farcell." 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|" -"|--textconv) " +"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -" +"p | | --textconv | --filters) [--path=] " 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 | | --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 " can be one of: blob, tree, commit, tag" msgstr " 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" @@ -4749,7 +5325,7 @@ msgstr "informa de tots els atributs establerts en el fitxer" 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" @@ -4757,7 +5333,7 @@ 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" @@ -4847,9 +5423,9 @@ msgid "write the content to temporary files" 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" @@ -4897,7 +5473,7 @@ msgstr "camí '%s': no es pot fusionar" #: 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 @@ -4921,54 +5497,54 @@ msgstr "" 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" @@ -4991,7 +5567,7 @@ msgstr[1] "" "\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" @@ -5018,150 +5594,150 @@ msgstr[1] "" " git branch %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 '" msgstr "dubta 'git checkout '" -#: 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" @@ -5170,12 +5746,12 @@ msgstr "" "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." @@ -5327,8 +5903,8 @@ msgstr "neteja interactiva" 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ó" @@ -5368,112 +5944,129 @@ msgstr "" msgid "git clone [] [--] []" msgstr "git clone [] [--] []" -#: 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 instead of 'origin' to track upstream" msgstr "usa en lloc de 'origin' per a seguir la font" -#: builtin/clone.c:89 +#: builtin/clone.c:94 msgid "checkout instead of the remote's HEAD" msgstr "agafa 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" @@ -5481,58 +6074,42 @@ msgstr "" "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" @@ -5543,123 +6120,141 @@ msgstr "" "'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." @@ -5801,66 +6396,66 @@ msgstr "" "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" @@ -5868,38 +6463,38 @@ msgstr "" "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" @@ -5914,7 +6509,7 @@ msgstr "" "\t%s\n" "i intenteu-ho de nou.\n" -#: builtin/commit.c:820 +#: builtin/commit.c:819 #, c-format msgid "" "\n" @@ -5929,7 +6524,7 @@ msgstr "" "\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" @@ -5939,7 +6534,7 @@ msgstr "" "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" @@ -5950,150 +6545,154 @@ msgstr "" "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 ' and matches no existing author" msgstr "" "--author '%s' no és 'Nom ' 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)" @@ -6101,202 +6700,202 @@ msgstr "" "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" @@ -6466,17 +7065,26 @@ msgstr "" 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 [] [...]" -msgstr "git describe [opcions] [...]" +msgstr "git describe [] [...]" #: builtin/describe.c:18 msgid "git describe [] --dirty" @@ -6590,7 +7198,7 @@ msgstr "considera les etiquetes més recents (per defecte: 10)" msgid "only consider tags matching " msgstr "només considera les etiquetes que coincideixen amb " -#: 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" @@ -6624,21 +7232,21 @@ msgstr "'%s': no és ni fitxer regular ni enllaç simbòlic" 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'." @@ -6711,162 +7319,166 @@ msgstr "git fetch --multiple [] [( | )...]" msgid "git fetch --all []" 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 "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" @@ -6876,55 +7488,55 @@ msgstr "" " 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." @@ -6932,32 +7544,40 @@ msgstr "" "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" @@ -6967,23 +7587,23 @@ msgid "" msgstr "" "git fmt-merge-msg [-m ] [--log[=] | --no-log] [--file ]" -#: builtin/fmt-merge-msg.c:667 +#: builtin/fmt-merge-msg.c:663 msgid "populate log with at most entries from shortlog" msgstr "emplena el registre amb 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 as start of message" msgstr "usa 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" @@ -7101,7 +7721,7 @@ msgstr "mostra el progrés" 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" @@ -7195,228 +7815,223 @@ msgstr "grep: s'ha fallat en crear fil: %s" 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 levels" msgstr "descendeix com a màxim 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 context lines before and after matches" msgstr "mostra línies de context abans i després d'una coincidència" -#: builtin/grep.c:710 +#: builtin/grep.c:711 msgid "show context lines before matches" msgstr "mostra línies de context abans d'una coincidència" -#: builtin/grep.c:712 +#: builtin/grep.c:713 msgid "show context lines after matches" msgstr "mostra línies de context després d'una coincidència" -#: builtin/grep.c:714 +#: builtin/grep.c:715 msgid "use worker threads" msgstr "usa 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 " msgstr "coincideix amb " -#: 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." @@ -7432,85 +8047,89 @@ msgstr "" 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] []" msgstr "git help [--all] [--guides] [--man | --web | --info] []" -#: 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" @@ -7519,7 +8138,7 @@ msgstr "" "'%s': camí a un visualitzador de manuals no compatible.\n" "Si us plau, considereu usar 'man..cmd' en lloc d'això." -#: builtin/help.c:217 +#: builtin/help.c:219 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" @@ -7528,155 +8147,159 @@ msgstr "" "'%s': ordre per a un visualitzador de manuals compatible.\n" "Si us plau, considereu usar 'man..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 % unsupported" msgstr "la versió de paquet % no és compatible" -#: builtin/index-pack.c:353 +#: builtin/index-pack.c:356 #, c-format msgid "pack has bad object at offset %: %s" msgstr "el paquet té un objecte dolent a la posició %: %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, % byte missing" msgid_plural "premature end of pack file, % bytes missing" @@ -7684,144 +8307,144 @@ msgstr[0] "el final del fitxer de paquet és prematur, manca % octet" msgstr[1] "" "el final del fitxer de paquet és prematur, manquen % 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=%" msgstr "pack.indexversion=% 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" @@ -7861,95 +8484,95 @@ msgstr "el nom del fitxer de paquet '%s' no acaba amb '.pack'" 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=] [--" "shared[=]] []" @@ -7957,25 +8580,25 @@ msgstr "" "git init [-q | --quiet] [--bare] [--template=] [--" "shared[=]] []" -#: 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=) not allowed without specifying %s (or --git-" @@ -7984,7 +8607,7 @@ msgstr "" "no es permet %s (o --work-tree=) sense especificar %s (o --git-" "dir=)" -#: 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'" @@ -8095,37 +8718,34 @@ msgstr "No és un rang." 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 [] [ | ]" msgstr "git format-patch [] [ | ]" -#: 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" @@ -8136,211 +8756,215 @@ msgstr "" "seguir una branca remot. O podeu especificar la comissió base manualment\n" "amb --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 instead of '.patch'" msgstr "usa en lloc de '.patch'" -#: builtin/log.c:1419 +#: builtin/log.c:1423 msgid "start numbering patches at instead of 1" msgstr "comença numerant els pedaços a 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 [] instead of [PATCH]" msgstr "Usa [] en lloc de [PATCH]" -#: builtin/log.c:1426 +#: builtin/log.c:1433 msgid "store resulting files in " msgstr "emmagatzema els fitxers resultants a " -#: 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 (or committer ident if absent)" msgstr "" "estableix l'adreça From a (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 " msgstr "fes que el primer missatge sigui una resposta a " -#: 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] [ [ []]]" msgstr "git cherry [-v] [ [ []]]" -#: builtin/log.c:1872 +#: builtin/log.c:1880 #, c-format msgid "" "Could not find a tracked remote branch, please specify manually.\n" @@ -8348,101 +8972,105 @@ msgstr "" "No s'ha pogut trobar una branca remota seguida. Si us plau, especifiqueu " " manualment.\n" -#: builtin/ls-files.c:379 +#: builtin/ls-files.c:458 msgid "git ls-files [] [...]" msgstr "git ls-files [] [...]" -#: 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 " msgstr "els patrons d'exclusió es llegeixen de " -#: builtin/ls-files.c:464 +#: builtin/ls-files.c:543 msgid "read additional per-directory exclude patterns in " msgstr "llegeix els patrons addicionals d'exclusió per directori en " -#: 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 is not in the index, treat this as an error" msgstr "si qualsevol 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 are still present" msgstr "" "pretén que els camins eliminats després de encara siguin presents" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:557 msgid "show debugging data" msgstr "mostra les dades de depuració" @@ -8561,33 +9189,33 @@ msgstr "Les estratègies disponibles són:" 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 ) entries from shortlog to merge commit message" msgstr "" "afegeix (com a màxim ) 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" @@ -8595,28 +9223,28 @@ 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" @@ -8628,7 +9256,7 @@ msgstr "missatge de comissió de fusió (per a una fusió no d'avanç ràpid)" 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" @@ -8851,55 +9479,55 @@ msgstr "s'està refusant 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 "" @@ -8926,23 +9554,23 @@ msgstr "git merge-base --is-ancestor " msgid "git merge-base --fork-point []" msgstr "git merge-base --fork-point []" -#: 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 forked from reflog of " msgstr "" "troba on s'ha bifurcat del registre de referències de " @@ -8987,6 +9615,37 @@ msgstr "no avisis de conflictes" 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]" @@ -9097,43 +9756,43 @@ msgstr "S'està canviant el nom de %s a %s\n" 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 [] ..." msgstr "git name-rev [] ..." -#: builtin/name-rev.c:259 +#: builtin/name-rev.c:258 msgid "git name-rev [] --all" msgstr "git name-rev [] --all" -#: builtin/name-rev.c:260 +#: builtin/name-rev.c:259 msgid "git name-rev [] --stdin" msgstr "git name-rev [] --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 " msgstr "només usa les referències que coincideixin amb " -#: 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)" @@ -9269,9 +9928,9 @@ msgid "failed to finish 'show' for object '%s'" 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 @@ -9280,8 +9939,8 @@ msgstr "no s'ha pogut escriure l'objecte de nota" #: 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 @@ -9293,52 +9952,76 @@ msgstr "no es pot llegir '%s'" 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 " @@ -9347,30 +10030,30 @@ msgstr "" "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 (implies --stdin)" msgstr "" "carrega la configuració de reescriptura per a (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 " @@ -9379,12 +10062,12 @@ msgstr "" "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" @@ -9393,20 +10076,52 @@ msgstr "" "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)" @@ -9414,47 +10129,47 @@ msgstr "" "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 " @@ -9465,239 +10180,235 @@ msgstr "" "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 " msgstr "usa les notes de " -#: 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 [...] [< | < ]" msgstr "" "git pack-objects --stdout [...] [< | < " "]" -#: builtin/pack-objects.c:29 +#: builtin/pack-objects.c:30 msgid "" "git pack-objects [...] [< | < ]" 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 "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