Merge branch 'dt/mailinfo' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 11 Oct 2016 21:17:52 +0000 (14:17 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Oct 2016 21:17:52 +0000 (14:17 -0700)
* dt/mailinfo:
add David Turner's Two Sigma address

48 files changed:
.travis.yml
Documentation/RelNotes/2.10.1.txt
Documentation/config.txt
Documentation/git-add.txt
Documentation/git-check-ref-format.txt
Documentation/git-checkout.txt
Documentation/git-cvsimport.txt
Documentation/git.txt
Documentation/gitcvs-migration.txt
GIT-VERSION-GEN
Makefile
builtin/add.c
builtin/checkout.c
builtin/commit.c
builtin/gc.c
builtin/log.c
builtin/pack-objects.c
builtin/update-index.c
cache.h
diff.c
diffcore-pickaxe.c
git-compat-util.h
git-gui/lib/commit.tcl
git-gui/po/ja.po
git-rebase--interactive.sh
grep.c
http.c
ident.c
patch-ids.c
pathspec.h
read-cache.c
strbuf.c
t/perf/run
t/t2010-checkout-ambiguous.sh
t/t2024-checkout-dwim.sh
t/t2107-update-index-basic.sh
t/t3404-rebase-interactive.sh
t/t3700-add.sh
t/t4014-format-patch.sh
t/t4051-diff-function-context.sh
t/t4062-diff-pickaxe.sh [new file with mode: 0755]
t/t5305-include-tag.sh
t/t5550-http-fetch-dumb.sh
t/t7517-per-repo-email.sh
unpack-trees.c
vcs-svn/fast_export.c
xdiff-interface.c
xdiff/xemit.c
index 477c3d2efb7b94bb34fcda517b1b855e98e1f43a..37a1e1fb6d48935aa22a384797ce82a39340b2ed 100644 (file)
@@ -78,7 +78,7 @@ before_install:
         FORMULA=$1
         SHA=$(brew fetch --force $FORMULA 2>&1 | grep ^SHA256: | cut -d ' ' -f 2)
         sed -E -i.bak "s/sha256 \"[0-9a-f]{64}\"/sha256 \"$SHA\"/g" \
-          /usr/local/Library/Taps/homebrew/homebrew-binary/$FORMULA.rb
+          "$(brew --repository homebrew/homebrew-binary)/$FORMULA.rb"
       }
       brew update --quiet
       brew tap homebrew/binary --quiet
index 75c07e199ef04e8f162e41c5dbdb998e5a62f301..70462f7f7e9bedd9a96359e5a88c08803e213da7 100644 (file)
@@ -30,4 +30,102 @@ Fixes since v2.10
  * Update a few tests that used to use GIT_CURL_VERBOSE to use the
    newer GIT_TRACE_CURL.
 
+ * Update Japanese translation for "git-gui".
+
+ * "git fetch http::/site/path" did not die correctly and segfaulted
+   instead.
+
+ * "git commit-tree" stopped reading commit.gpgsign configuration
+   variable that was meant for Porcelain "git commit" in Git 2.9; we
+   forgot to update "git gui" to look at the configuration to match
+   this change.
+
+ * "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
+   avoid the wastage.
+
+ * The http transport (with curl-multi option, which is the default
+   these days) failed to remove curl-easy handle from a curlm session,
+   which led to unnecessary API failures.
+
+ * "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
+   hunks, but the code forgot to do so in some cases.
+
+ * Performance tests done via "t/perf" did not use the same set of
+   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
+   line, which turned out to be inconvenient.  The base information
+   has been moved above the signature line.
+
+ * 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
+   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
+   when the bogus ident matters, this extra check was removed.
+
+ * "git gc --aggressive" used to limit the delta-chain length to 250,
+   which is way too deep for gaining additional space savings and is
+   detrimental for runtime performance.  The limit has been reduced to
+   50.
+
+ * Documentation for individual configuration variables to control use
+   of color (like `color.grep`) said that their default value is
+   'false', instead of saying their default is taken from `color.ui`.
+   When we updated the default value for color.ui from 'false' to
+   'auto' quite a while ago, all of them broke.  This has been
+   corrected.
+
+ * A shell script example in check-ref-format documentation has been
+   fixed.
+
+ * "git checkout <word>" does not follow the usual disambiguation
+   rules when the <word> can be both a rev and a path, to allow
+   checking out a branch 'foo' in a project that happens to have a
+   file 'foo' in the working tree without having to disambiguate.
+   This was poorly documented and the check was incorrect when the
+   command was run from a subdirectory.
+
+ * Some codepaths in "git diff" used regexec(3) on a buffer that was
+   mmap(2)ed, which may not have a terminating NUL, leading to a read
+   beyond the end of the mapped region.  This was fixed by introducing
+   a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
+   extension.
+
+ * The procedure to build Git on Mac OS X for Travis CI hardcoded the
+   internal directory structure we assumed HomeBrew uses, which was a
+   no-no.  The procedure has been updated to ask HomeBrew things we
+   need to know to fix this.
+
+ * When "git rebase -i" is given a broken instruction, it told the
+   user to fix it with "--edit-todo", but didn't say what the step
+   after that was (i.e. "--continue").
+
+ * "git add --chmod=+x" added recently lacked documentation, which has
+   been corrected.
+
+ * "git add --chmod=+x <pathspec>" added recently only toggled 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
+   the given pathspec.
+
+ * "git pack-objects --include-tag" was taught that when we know that
+   we are sending an object C, we want a tag B that directly points at
+   C but also a tag A that points at the tag B.  We used to miss the
+   intermediate tag B in some cases.
+
+ * Documentation around tools to import from CVS was fairly outdated.
+
+ * 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
+   field in struct addrinfo without making sure it is not NULL first.
+
 Also contains minor documentation updates and code clean-ups.
index 0bcb6790d6efbb2a812bc90b6f64e323cb3ec393..a077c64ef0a142c8fc61755e0e1274283fcb9425 100644 (file)
@@ -953,7 +953,8 @@ color.branch::
        A boolean to enable/disable color in the output of
        linkgit:git-branch[1]. May be set to `always`,
        `false` (or `never`) or `auto` (or `true`), in which case colors are used
-       only when the output is to a terminal. Defaults to false.
+       only when the output is to a terminal. If unset, then the
+       value of `color.ui` is used (`auto` by default).
 
 color.branch.<slot>::
        Use customized color for branch coloration. `<slot>` is one of
@@ -968,7 +969,8 @@ color.diff::
        linkgit:git-log[1], and linkgit:git-show[1] will use color
        for all patches.  If it is set to `true` or `auto`, those
        commands will only use color when output is to the terminal.
-       Defaults to false.
+       If unset, then the value of `color.ui` is used (`auto` by
+       default).
 +
 This does not affect linkgit:git-format-patch[1] or the
 'git-diff-{asterisk}' plumbing commands.  Can be overridden on the
@@ -991,7 +993,8 @@ color.decorate.<slot>::
 color.grep::
        When set to `always`, always highlight matches.  When `false` (or
        `never`), never.  When set to `true` or `auto`, use color only
-       when the output is written to the terminal.  Defaults to `false`.
+       when the output is written to the terminal.  If unset, then the
+       value of `color.ui` is used (`auto` by default).
 
 color.grep.<slot>::
        Use customized color for grep colorization.  `<slot>` specifies which
@@ -1024,7 +1027,8 @@ color.interactive::
        and displays (such as those used by "git-add --interactive" and
        "git-clean --interactive"). When false (or `never`), never.
        When set to `true` or `auto`, use colors only when the output is
-       to the terminal. Defaults to false.
+       to the terminal. If unset, then the value of `color.ui` is
+       used (`auto` by default).
 
 color.interactive.<slot>::
        Use customized color for 'git add --interactive' and 'git clean
@@ -1040,13 +1044,15 @@ color.showBranch::
        A boolean to enable/disable color in the output of
        linkgit:git-show-branch[1]. May be set to `always`,
        `false` (or `never`) or `auto` (or `true`), in which case colors are used
-       only when the output is to a terminal. Defaults to false.
+       only when the output is to a terminal. If unset, then the
+       value of `color.ui` is used (`auto` by default).
 
 color.status::
        A boolean to enable/disable color in the output of
        linkgit:git-status[1]. May be set to `always`,
        `false` (or `never`) or `auto` (or `true`), in which case colors are used
-       only when the output is to a terminal. Defaults to false.
+       only when the output is to a terminal. If unset, then the
+       value of `color.ui` is used (`auto` by default).
 
 color.status.<slot>::
        Use customized color for status colorization. `<slot>` is
@@ -1366,7 +1372,7 @@ fsck.skipList::
 gc.aggressiveDepth::
        The depth parameter used in the delta compression
        algorithm used by 'git gc --aggressive'.  This defaults
-       to 250.
+       to 50.
 
 gc.aggressiveWindow::
        The window size parameter used in the delta compression
index 6a96a669c299ebd0408d3a1e34d8e42541f3a9e8..7ed63dce0b1f55325497b4fd6879422fe119eaf5 100644 (file)
@@ -11,7 +11,7 @@ SYNOPSIS
 'git add' [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
          [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
          [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing]
-         [--] [<pathspec>...]
+         [--chmod=(+|-)x] [--] [<pathspec>...]
 
 DESCRIPTION
 -----------
@@ -165,6 +165,11 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files.
        be ignored, no matter if they are already present in the work
        tree or not.
 
+--chmod=(+|-)x::
+       Override the executable bit of the added files.  The executable
+       bit is only changed in the index, the files on disk are left
+       unchanged.
+
 \--::
        This option can be used to separate command-line options from
        the list of files, (useful when filenames might be mistaken
index 91a3622ee4e270a11c699e310fb4d544e37845c9..8611a99120eb1c7070b64f80b39b1526225a8019 100644 (file)
@@ -118,8 +118,8 @@ $ git check-ref-format --branch @{-1}
 * Determine the reference name to use for a new branch:
 +
 ------------
-$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch") ||
-die "we do not like '$newbranch' as a branch name."
+$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")||
+{ echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; }
 ------------
 
 GIT
index 7a2201b0518b2752bcce880e12dd732ed32990d2..8e2c0662ddd72c1bc0765aadbbafd22b62b5adf6 100644 (file)
@@ -419,6 +419,18 @@ $ git reflog -2 HEAD # or
 $ git log -g -2 HEAD
 ------------
 
+ARGUMENT DISAMBIGUATION
+-----------------------
+
+When there is only one argument given and it is not `--` (e.g. "git
+checkout abc"), and when the argument is both a valid `<tree-ish>`
+(e.g. a branch "abc" exists) and a valid `<pathspec>` (e.g. a file
+or a directory whose name is "abc" exists), Git would usually ask
+you to disambiguate.  Because checking out a branch is so common an
+operation, however, "git checkout abc" takes "abc" as a `<tree-ish>`
+in such a situation.  Use `git checkout -- <pathspec>` if you want
+to checkout these paths out of the index.
+
 EXAMPLES
 --------
 
index 41207a24b09cd111a239f4959ab8f121a7459421..de1ebed67d7cbc5ba3859551300b76f20a580ef1 100644 (file)
@@ -22,7 +22,7 @@ DESCRIPTION
 deprecated; it does not work with cvsps version 3 and later.  If you are
 performing a one-shot import of a CVS repository consider using
 http://cvs2svn.tigris.org/cvs2git.html[cvs2git] or
-https://github.com/BartMassey/parsecvs[parsecvs].
+http://www.catb.org/esr/cvs-fast-export/[cvs-fast-export].
 
 Imports a CVS repository into Git. It will either create a new
 repository, or incrementally import into an existing one.
index 7913fc2513234ddf6f3f2f7e9e9543a2b698aa00..b8bec711f47918ad3dc7e05d318525819f3a51ab 100644 (file)
@@ -43,9 +43,10 @@ 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.0/git.html[documentation for release 2.10]
+* link:v2.10.1/git.html[documentation for release 2.10.1]
 
 * release notes for
+  link:RelNotes/2.10.1.txt[2.10.1],
   link:RelNotes/2.10.0.txt[2.10].
 
 * link:v2.9.3/git.html[documentation for release 2.9.3]
index b06e852a85587ffd46820c9dfb832784cbf1dfd9..4c6143c511c06a1fd5f3854445a14533653fd752 100644 (file)
@@ -116,8 +116,12 @@ they create are writable and searchable by other group members.
 Importing a CVS archive
 -----------------------
 
+NOTE: These instructions use the `git-cvsimport` script which ships with
+git, but other importers may provide better results. See the note in
+linkgit:git-cvsimport[1] for other options.
+
 First, install version 2.1 or higher of cvsps from
-http://www.cobite.com/cvsps/[http://www.cobite.com/cvsps/] and make
+https://github.com/andreyvit/cvsps[https://github.com/andreyvit/cvsps] and make
 sure it is in your path.  Then cd to a checked out CVS working directory
 of the project you are interested in and run linkgit:git-cvsimport[1]:
 
index 6754ab076e649f0d728230869afcc45bcf6a4b3d..7d5c4771b4b3ef1af6cbde504c149a06ce173378 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.10.0
+DEF_VER=v2.10.1
 
 LF='
 '
index 7f184923ddc6fa5089b64ced3cdca405758468e1..7a36af86659b549fb32a18c9d364936437fccc9e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -301,7 +301,8 @@ all::
 # crashes due to allocation and free working on different 'heaps'.
 # It's defined automatically if USE_NED_ALLOCATOR is set.
 #
-# Define NO_REGEX if you have no or inferior regex support in your C library.
+# Define NO_REGEX if your C library lacks regex support with REG_STARTEND
+# feature.
 #
 # Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
 # user.
index b1dddb4ac635ab7e2cc55be546002f8e68efa331..e8fb80b36e7386fa9a9da91a61893c14ec696be4 100644 (file)
@@ -26,10 +26,25 @@ static int patch_interactive, add_interactive, edit_interactive;
 static int take_worktree_changes;
 
 struct update_callback_data {
-       int flags, force_mode;
+       int flags;
        int add_errors;
 };
 
+static void chmod_pathspec(struct pathspec *pathspec, int force_mode)
+{
+       int i;
+
+       for (i = 0; i < active_nr; i++) {
+               struct cache_entry *ce = active_cache[i];
+
+               if (pathspec && !ce_path_match(ce, pathspec, NULL))
+                       continue;
+
+               if (chmod_cache_entry(ce, force_mode) < 0)
+                       fprintf(stderr, "cannot chmod '%s'", ce->name);
+       }
+}
+
 static int fix_unmerged_status(struct diff_filepair *p,
                               struct update_callback_data *data)
 {
@@ -65,8 +80,7 @@ static void update_callback(struct diff_queue_struct *q,
                        die(_("unexpected diff status %c"), p->status);
                case DIFF_STATUS_MODIFIED:
                case DIFF_STATUS_TYPE_CHANGED:
-                       if (add_file_to_index(&the_index, path,
-                                       data->flags, data->force_mode)) {
+                       if (add_file_to_index(&the_index, path, data->flags)) {
                                if (!(data->flags & ADD_CACHE_IGNORE_ERRORS))
                                        die(_("updating files failed"));
                                data->add_errors++;
@@ -84,15 +98,14 @@ static void update_callback(struct diff_queue_struct *q,
        }
 }
 
-int add_files_to_cache(const char *prefix, const struct pathspec *pathspec,
-       int flags, int force_mode)
+int add_files_to_cache(const char *prefix,
+                      const struct pathspec *pathspec, int flags)
 {
        struct update_callback_data data;
        struct rev_info rev;
 
        memset(&data, 0, sizeof(data));
        data.flags = flags;
-       data.force_mode = force_mode;
 
        init_revisions(&rev, prefix);
        setup_revisions(0, NULL, &rev, NULL);
@@ -281,7 +294,7 @@ static int add_config(const char *var, const char *value, void *cb)
        return git_default_config(var, value, cb);
 }
 
-static int add_files(struct dir_struct *dir, int flags, int force_mode)
+static int add_files(struct dir_struct *dir, int flags)
 {
        int i, exit_status = 0;
 
@@ -294,8 +307,7 @@ static int add_files(struct dir_struct *dir, int flags, int force_mode)
        }
 
        for (i = 0; i < dir->nr; i++)
-               if (add_file_to_index(&the_index, dir->entries[i]->name,
-                               flags, force_mode)) {
+               if (add_file_to_index(&the_index, dir->entries[i]->name, flags)) {
                        if (!ignore_add_errors)
                                die(_("adding files failed"));
                        exit_status = 1;
@@ -308,7 +320,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
        int exit_status = 0;
        struct pathspec pathspec;
        struct dir_struct dir;
-       int flags, force_mode;
+       int flags;
        int add_new_files;
        int require_pathspec;
        char *seen = NULL;
@@ -342,13 +354,8 @@ int cmd_add(int argc, const char **argv, const char *prefix)
        if (!show_only && ignore_missing)
                die(_("Option --ignore-missing can only be used together with --dry-run"));
 
-       if (!chmod_arg)
-               force_mode = 0;
-       else if (!strcmp(chmod_arg, "-x"))
-               force_mode = 0666;
-       else if (!strcmp(chmod_arg, "+x"))
-               force_mode = 0777;
-       else
+       if (chmod_arg && ((chmod_arg[0] != '-' && chmod_arg[0] != '+') ||
+                         chmod_arg[1] != 'x' || chmod_arg[2]))
                die(_("--chmod param '%s' must be either -x or +x"), chmod_arg);
 
        add_new_files = !take_worktree_changes && !refresh_only;
@@ -441,11 +448,13 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 
        plug_bulk_checkin();
 
-       exit_status |= add_files_to_cache(prefix, &pathspec, flags, force_mode);
+       exit_status |= add_files_to_cache(prefix, &pathspec, flags);
 
        if (add_new_files)
-               exit_status |= add_files(&dir, flags, force_mode);
+               exit_status |= add_files(&dir, flags);
 
+       if (chmod_arg && pathspec.nr)
+               chmod_pathspec(&pathspec, chmod_arg[0]);
        unplug_bulk_checkin();
 
 finish:
index 8672d0724ffec4bc0a74ba2c60d3a4dd0f504a21..32cf317ec244f0f08d2a2174e3e5b6279cde5b85 100644 (file)
@@ -154,8 +154,8 @@ static int check_stages(unsigned stages, const struct cache_entry *ce, int pos)
        return 0;
 }
 
-static int checkout_stage(int stage, struct cache_entry *ce, int pos,
-                         struct checkout *state)
+static int checkout_stage(int stage, const struct cache_entry *ce, int pos,
+                         const struct checkout *state)
 {
        while (pos < active_nr &&
               !strcmp(active_cache[pos]->name, ce->name)) {
@@ -169,7 +169,7 @@ static int checkout_stage(int stage, struct cache_entry *ce, int pos,
                return error(_("path '%s' does not have their version"), ce->name);
 }
 
-static int checkout_merged(int pos, struct checkout *state)
+static int checkout_merged(int pos, const struct checkout *state)
 {
        struct cache_entry *ce = active_cache[pos];
        const char *path = ce->name;
@@ -548,7 +548,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
                         * entries in the index.
                         */
 
-                       add_files_to_cache(NULL, NULL, 0, 0);
+                       add_files_to_cache(NULL, NULL, 0);
                        /*
                         * NEEDSWORK: carrying over local changes
                         * when branches have different end-of-line
@@ -985,7 +985,7 @@ static int parse_branchname_arg(int argc, const char **argv,
                int recover_with_dwim = dwim_new_local_branch_ok;
 
                if (!has_dash_dash &&
-                   (check_filename(NULL, arg) || !no_wildcard(arg)))
+                   (check_filename(opts->prefix, arg) || !no_wildcard(arg)))
                        recover_with_dwim = 0;
                /*
                 * Accept "git checkout foo" and "git checkout foo --"
@@ -1038,7 +1038,7 @@ static int parse_branchname_arg(int argc, const char **argv,
 
        if (!*source_tree)                   /* case (1): want a tree */
                die(_("reference is not a tree: %s"), arg);
-       if (!has_dash_dash) {/* case (3).(d) -> (1) */
+       if (!has_dash_dash) {   /* case (3).(d) -> (1) */
                /*
                 * Do not complain the most common case
                 *      git checkout branch
@@ -1046,7 +1046,7 @@ static int parse_branchname_arg(int argc, const char **argv,
                 * it would be extremely annoying.
                 */
                if (argc)
-                       verify_non_filename(NULL, arg);
+                       verify_non_filename(opts->prefix, arg);
        } else {
                argcount++;
                argv++;
index 77e3dc849419e697abe8f2f4c7d753cce17634a8..7a1ade0d2771cdbd21524381fae0c43a9d0c20cd 100644 (file)
@@ -387,7 +387,7 @@ static const char *prepare_index(int argc, const char **argv, const char *prefix
         */
        if (all || (also && pathspec.nr)) {
                hold_locked_index(&index_lock, 1);
-               add_files_to_cache(also ? prefix : NULL, &pathspec, 0, 0);
+               add_files_to_cache(also ? prefix : NULL, &pathspec, 0);
                refresh_cache_or_die(refresh_flags);
                update_main_cache_tree(WRITE_TREE_SILENT);
                if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK))
index 332bcf7e7a0ae1900199349870103c388c9ffb35..069950d0b417f5eb97cd756ae32df7a2fb13abce 100644 (file)
@@ -28,7 +28,7 @@ static const char * const builtin_gc_usage[] = {
 
 static int pack_refs = 1;
 static int prune_reflogs = 1;
-static int aggressive_depth = 250;
+static int aggressive_depth = 50;
 static int aggressive_window = 250;
 static int gc_auto_threshold = 6700;
 static int gc_auto_pack_limit = 50;
index 92dc34dcb0cc54df27b99c91d08786b6c0d5b62a..cd9c4a46d10c0898ea84f9b5f5f4f833a1428dbd 100644 (file)
@@ -1042,7 +1042,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
        diff_flush(&opts);
 
        fprintf(rev->diffopt.file, "\n");
-       print_signature(rev->diffopt.file);
 }
 
 static const char *clean_message_id(const char *msg_id)
@@ -1361,7 +1360,7 @@ static void print_bases(struct base_tree_info *bases, FILE *file)
                return;
 
        /* Show the base commit */
-       fprintf(file, "base-commit: %s\n", oid_to_hex(&bases->base_commit));
+       fprintf(file, "\nbase-commit: %s\n", oid_to_hex(&bases->base_commit));
 
        /* Show the prerequisite patches */
        for (i = bases->nr_patch_id - 1; i >= 0; i--)
@@ -1720,6 +1719,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                make_cover_letter(&rev, use_stdout,
                                  origin, nr, list, branch_name, quiet);
                print_bases(&bases, rev.diffopt.file);
+               print_signature(rev.diffopt.file);
                total++;
                start_number--;
        }
@@ -1779,13 +1779,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                if (!use_stdout)
                        rev.shown_one = 0;
                if (shown) {
+                       print_bases(&bases, rev.diffopt.file);
                        if (rev.mime_boundary)
                                fprintf(rev.diffopt.file, "\n--%s%s--\n\n\n",
                                       mime_boundary_leader,
                                       rev.mime_boundary);
                        else
                                print_signature(rev.diffopt.file);
-                       print_bases(&bases, rev.diffopt.file);
                }
                if (!use_stdout)
                        fclose(rev.diffopt.file);
index 4a63398960c42d91821c4278a4cfbd11c1f1a7a4..0954375be9ea5fe2b416d4142b6987ff2b5ec94f 100644 (file)
@@ -2123,6 +2123,35 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
 #define ll_find_deltas(l, s, w, d, p)  find_deltas(l, &s, w, d, p)
 #endif
 
+static void add_tag_chain(const struct object_id *oid)
+{
+       struct tag *tag;
+
+       /*
+        * We catch duplicates already in add_object_entry(), but we'd
+        * prefer to do this extra check to avoid having to parse the
+        * tag at all if we already know that it's being packed (e.g., if
+        * it was included via bitmaps, we would not have parsed it
+        * previously).
+        */
+       if (packlist_find(&to_pack, oid->hash, NULL))
+               return;
+
+       tag = lookup_tag(oid->hash);
+       while (1) {
+               if (!tag || parse_tag(tag) || !tag->tagged)
+                       die("unable to pack objects reachable from tag %s",
+                           oid_to_hex(oid));
+
+               add_object_entry(tag->object.oid.hash, OBJ_TAG, NULL, 0);
+
+               if (tag->tagged->type != OBJ_TAG)
+                       return;
+
+               tag = (struct tag *)tag->tagged;
+       }
+}
+
 static int add_ref_tag(const char *path, const struct object_id *oid, int flag, void *cb_data)
 {
        struct object_id peeled;
@@ -2130,7 +2159,7 @@ static int add_ref_tag(const char *path, const struct object_id *oid, int flag,
        if (starts_with(path, "refs/tags/") && /* is a tag? */
            !peel_ref(path, peeled.hash)    && /* peelable? */
            packlist_find(&to_pack, peeled.hash, NULL))      /* object packed? */
-               add_object_entry(oid->hash, OBJ_TAG, NULL, 0);
+               add_tag_chain(oid);
        return 0;
 }
 
index ba04b197d8cc0b121475b1590952fe34ad1455d1..9e9e04059c989339bb1956b736e8379d2cff0462 100644 (file)
@@ -419,30 +419,18 @@ static int add_cacheinfo(unsigned int mode, const unsigned char *sha1,
        return 0;
 }
 
-static void chmod_path(int flip, const char *path)
+static void chmod_path(char flip, const char *path)
 {
        int pos;
        struct cache_entry *ce;
-       unsigned int mode;
 
        pos = cache_name_pos(path, strlen(path));
        if (pos < 0)
                goto fail;
        ce = active_cache[pos];
-       mode = ce->ce_mode;
-       if (!S_ISREG(mode))
-               goto fail;
-       switch (flip) {
-       case '+':
-               ce->ce_mode |= 0111; break;
-       case '-':
-               ce->ce_mode &= ~0111; break;
-       default:
+       if (chmod_cache_entry(ce, flip) < 0)
                goto fail;
-       }
-       cache_tree_invalidate_path(&the_index, path);
-       ce->ce_flags |= CE_UPDATE_IN_BASE;
-       active_cache_changed |= CE_ENTRY_CHANGED;
+
        report("chmod %cx '%s'", flip, path);
        return;
  fail:
diff --git a/cache.h b/cache.h
index b0dae4bac1a1c22035b175a43c9fe436e789f5d7..4cba08ecb1096dfdbcaae0eb82adad4a7825d35d 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -367,8 +367,9 @@ extern void free_name_hash(struct index_state *istate);
 #define rename_cache_entry_at(pos, new_name) rename_index_entry_at(&the_index, (pos), (new_name))
 #define remove_cache_entry_at(pos) remove_index_entry_at(&the_index, (pos))
 #define remove_file_from_cache(path) remove_file_from_index(&the_index, (path))
-#define add_to_cache(path, st, flags) add_to_index(&the_index, (path), (st), (flags), 0)
-#define add_file_to_cache(path, flags) add_file_to_index(&the_index, (path), (flags), 0)
+#define add_to_cache(path, st, flags) add_to_index(&the_index, (path), (st), (flags))
+#define add_file_to_cache(path, flags) add_file_to_index(&the_index, (path), (flags))
+#define chmod_cache_entry(ce, flip) chmod_index_entry(&the_index, (ce), (flip))
 #define refresh_cache(flags) refresh_index(&the_index, (flags), NULL, NULL, NULL)
 #define ce_match_stat(ce, st, options) ie_match_stat(&the_index, (ce), (st), (options))
 #define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options))
@@ -581,9 +582,10 @@ extern int remove_file_from_index(struct index_state *, const char *path);
 #define ADD_CACHE_IGNORE_ERRORS        4
 #define ADD_CACHE_IGNORE_REMOVAL 8
 #define ADD_CACHE_INTENT 16
-extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags, int force_mode);
-extern int add_file_to_index(struct index_state *, const char *path, int flags, int force_mode);
+extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags);
+extern int add_file_to_index(struct index_state *, const char *path, int flags);
 extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, unsigned int refresh_options);
+extern int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip);
 extern int ce_same_name(const struct cache_entry *a, const struct cache_entry *b);
 extern void set_object_name_for_intent_to_add_entry(struct cache_entry *ce);
 extern int index_name_is_other(const struct index_state *, const char *, int);
@@ -1828,7 +1830,7 @@ void packet_trace_identity(const char *prog);
  * return 0 if success, 1 - if addition of a file failed and
  * ADD_FILES_IGNORE_ERRORS was specified in flags
  */
-int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int flags, int force_mode);
+int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int flags);
 
 /* diff.c */
 extern int diff_auto_refresh_index;
diff --git a/diff.c b/diff.c
index cc8e81290ab67d14b1c0f63ccd6c6b2e6a0e8b0c..7a4309397cb7fd6819d6f643b259c2bc3abe202f 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -949,7 +949,8 @@ static int find_word_boundaries(mmfile_t *buffer, regex_t *word_regex,
 {
        if (word_regex && *begin < buffer->size) {
                regmatch_t match[1];
-               if (!regexec(word_regex, buffer->ptr + *begin, 1, match, 0)) {
+               if (!regexec_buf(word_regex, buffer->ptr + *begin,
+                                buffer->size - *begin, 1, match, 0)) {
                        char *p = memchr(buffer->ptr + *begin + match[0].rm_so,
                                        '\n', match[0].rm_eo - match[0].rm_so);
                        *end = p ? p - buffer->ptr : match[0].rm_eo + *begin;
index 55067cab6c2dbfb6abbfffa0aa9d7259502041cb..9795ca1c159a5177b1b7031a87c8f8bd5e5be3d5 100644 (file)
@@ -23,7 +23,6 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len)
 {
        struct diffgrep_cb *data = priv;
        regmatch_t regmatch;
-       int hold;
 
        if (line[0] != '+' && line[0] != '-')
                return;
@@ -33,11 +32,8 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len)
                 * caller early.
                 */
                return;
-       /* Yuck -- line ought to be "const char *"! */
-       hold = line[len];
-       line[len] = '\0';
-       data->hit = !regexec(data->regexp, line + 1, 1, &regmatch, 0);
-       line[len] = hold;
+       data->hit = !regexec_buf(data->regexp, line + 1, len - 1, 1,
+                                &regmatch, 0);
 }
 
 static int diff_grep(mmfile_t *one, mmfile_t *two,
@@ -50,9 +46,11 @@ static int diff_grep(mmfile_t *one, mmfile_t *two,
        xdemitconf_t xecfg;
 
        if (!one)
-               return !regexec(regexp, two->ptr, 1, &regmatch, 0);
+               return !regexec_buf(regexp, two->ptr, two->size,
+                                   1, &regmatch, 0);
        if (!two)
-               return !regexec(regexp, one->ptr, 1, &regmatch, 0);
+               return !regexec_buf(regexp, one->ptr, one->size,
+                                   1, &regmatch, 0);
 
        /*
         * We have both sides; need to run textual diff and see if
@@ -83,8 +81,8 @@ static unsigned int contains(mmfile_t *mf, regex_t *regexp, kwset_t kws)
                regmatch_t regmatch;
                int flags = 0;
 
-               assert(data[sz] == '\0');
-               while (*data && !regexec(regexp, data, 1, &regmatch, flags)) {
+               while (*data &&
+                      !regexec_buf(regexp, data, sz, 1, &regmatch, flags)) {
                        flags |= REG_NOTBOL;
                        data += regmatch.rm_eo;
                        if (*data && regmatch.rm_so == regmatch.rm_eo)
index 68615b1a6a4db0f4ba7b4ce543e00e31e3b1705e..2c949983dc8313d78b6b45e635f7efb5d61e9dec 100644 (file)
@@ -974,6 +974,19 @@ void git_qsort(void *base, size_t nmemb, size_t size,
 #define qsort git_qsort
 #endif
 
+#ifndef REG_STARTEND
+#error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd"
+#endif
+
+static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size,
+                             size_t nmatch, regmatch_t pmatch[], int eflags)
+{
+       assert(nmatch > 0 && pmatch);
+       pmatch[0].rm_so = 0;
+       pmatch[0].rm_eo = size;
+       return regexec(preg, buf, nmatch, pmatch, eflags | REG_STARTEND);
+}
+
 #ifndef DIR_HAS_BSD_GROUP_SEMANTICS
 # define FORCE_DIR_SET_GID S_ISGID
 #else
index 864b687057c9759f2b06a9a83e3ca18c51113d92..01d2cc280ba7832840cb8ef64844daa88ebd9670 100644 (file)
@@ -369,6 +369,9 @@ A rescan will be automatically started now.
        # -- Create the commit.
        #
        set cmd [list commit-tree $tree_id]
+       if {[is_config_true commit.gpgsign]} {
+               lappend cmd -S
+       }
        foreach p [concat $PARENT $MERGE_HEAD] {
                lappend cmd -p $p
        }
index 9aff249d5f533638170e7e14e03930a560978f46..208651c1afc1bdb6d8f7ee9ec8f2b9f08e7439b3 100644 (file)
@@ -1,47 +1,50 @@
 # Translation of git-gui to Japanese
 # Copyright (C) 2007 Shawn Pearce
 # This file is distributed under the same license as the git-gui package.
+#
 # しらいし ななこ <nanako3@bluebottle.com>, 2007.
+# Satoshi Yasushima <s.yasushima@gmail.com>, 2016.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-01-26 15:47-0800\n"
-"PO-Revision-Date: 2010-02-02 19:03+0900\n"
-"Last-Translator: しらいし ななこ <nanako3@lavabit.com>\n"
+"POT-Creation-Date: 2016-05-27 17:52+0900\n"
+"PO-Revision-Date: 2016-06-22 12:50+0900\n"
+"Last-Translator: Satoshi Yasushima <s.yasushima@gmail.com>\n"
 "Language-Team: Japanese\n"
+"Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\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
-msgid "git-gui: fatal error"
-msgstr "git-gui: 致命的なエラー"
-
-#: git-gui.sh:743
+#: git-gui.sh:861
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "%s に無効なフォントが指定されています:"
 
-#: git-gui.sh:779
+#: git-gui.sh:915
 msgid "Main Font"
 msgstr "主フォント"
 
-#: git-gui.sh:780
+#: git-gui.sh:916
 msgid "Diff/Console Font"
 msgstr "diff/コンソール・フォント"
 
-#: git-gui.sh:794
+#: git-gui.sh:931 git-gui.sh:945 git-gui.sh:958 git-gui.sh:1048 git-gui.sh:1067
+#: git-gui.sh:3125
+msgid "git-gui: fatal error"
+msgstr "git-gui: 致命的なエラー"
+
+#: git-gui.sh:932
 msgid "Cannot find git in PATH."
 msgstr "PATH 中に git が見つかりません"
 
-#: git-gui.sh:821
+#: git-gui.sh:959
 msgid "Cannot parse Git version string:"
 msgstr "Git バージョン名が理解できません:"
 
-#: git-gui.sh:839
+#: git-gui.sh:984
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -60,475 +63,502 @@ msgstr ""
 "\n"
 "'%s' はバージョン 1.5.0 と思って良いですか?\n"
 
-#: git-gui.sh:1128
+#: git-gui.sh:1281
 msgid "Git directory not found:"
 msgstr "Git ディレクトリが見つかりません:"
 
-#: git-gui.sh:1146
+#: git-gui.sh:1315
 msgid "Cannot move to top of working directory:"
 msgstr "作業ディレクトリの最上位に移動できません"
 
-#: git-gui.sh:1154
+#: git-gui.sh:1323
 msgid "Cannot use bare repository:"
 msgstr "裸のリポジトリは使えません:"
 
-#: git-gui.sh:1162
+#: git-gui.sh:1331
 msgid "No working directory"
 msgstr "作業ディレクトリがありません"
 
-#: git-gui.sh:1334 lib/checkout_op.tcl:306
+#: git-gui.sh:1503 lib/checkout_op.tcl:306
 msgid "Refreshing file status..."
 msgstr "ファイル状態を更新しています…"
 
-#: git-gui.sh:1390
+#: git-gui.sh:1563
 msgid "Scanning for modified files ..."
 msgstr "変更されたファイルをスキャンしています…"
 
-#: git-gui.sh:1454
+#: git-gui.sh:1639
 msgid "Calling prepare-commit-msg hook..."
 msgstr "prepare-commit-msg フックを実行中・・・"
 
-#: git-gui.sh:1471
+#: git-gui.sh:1656
 msgid "Commit declined by prepare-commit-msg hook."
 msgstr "prepare-commit-msg フックがコミットを拒否しました"
 
-#: git-gui.sh:1629 lib/browser.tcl:246
+#: git-gui.sh:1814 lib/browser.tcl:252
 msgid "Ready."
 msgstr "準備完了"
 
-#: git-gui.sh:1787
+#: git-gui.sh:1978
 #, tcl-format
-msgid "Displaying only %s of %s files."
-msgstr "全体で%s個の内の%sファイルだけ表示しています"
+msgid ""
+"Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files."
+msgstr ""
+"表示可能な限界 (gui.maxfilesdisplayed = %s) に達しため、全体で%s個のファイル"
+"を表示できません"
 
-#: git-gui.sh:1913
+#: git-gui.sh:2101
 msgid "Unmodified"
 msgstr "変更無し"
 
-#: git-gui.sh:1915
+#: git-gui.sh:2103
 msgid "Modified, not staged"
 msgstr "変更あり、コミット未予定"
 
-#: git-gui.sh:1916 git-gui.sh:1924
+#: git-gui.sh:2104 git-gui.sh:2116
 msgid "Staged for commit"
 msgstr "コミット予定済"
 
-#: git-gui.sh:1917 git-gui.sh:1925
+#: git-gui.sh:2105 git-gui.sh:2117
 msgid "Portions staged for commit"
 msgstr "部分的にコミット予定済"
 
-#: git-gui.sh:1918 git-gui.sh:1926
+#: git-gui.sh:2106 git-gui.sh:2118
 msgid "Staged for commit, missing"
 msgstr "コミット予定済、ファイル無し"
 
-#: git-gui.sh:1920
+#: git-gui.sh:2108
 msgid "File type changed, not staged"
 msgstr "ファイル型変更、コミット未予定"
 
-#: git-gui.sh:1921
+#: git-gui.sh:2109 git-gui.sh:2110
+msgid "File type changed, old type staged for commit"
+msgstr "ファイル型変更、旧型コミット予定済"
+
+#: git-gui.sh:2111
 msgid "File type changed, staged"
 msgstr "ファイル型変更、コミット予定済"
 
-#: git-gui.sh:1923
+#: git-gui.sh:2112
+msgid "File type change staged, modification not staged"
+msgstr "ファイル型変更コミット予定済、変更コミット未予定"
+
+#: git-gui.sh:2113
+msgid "File type change staged, file missing"
+msgstr "ファイル型変更コミット予定済、ファイル無し"
+
+#: git-gui.sh:2115
 msgid "Untracked, not staged"
 msgstr "管理外、コミット未予定"
 
-#: git-gui.sh:1928
+#: git-gui.sh:2120
 msgid "Missing"
 msgstr "ファイル無し"
 
-#: git-gui.sh:1929
+#: git-gui.sh:2121
 msgid "Staged for removal"
 msgstr "削除予定済"
 
-#: git-gui.sh:1930
+#: git-gui.sh:2122
 msgid "Staged for removal, still present"
 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
+#: git-gui.sh:2124 git-gui.sh:2125 git-gui.sh:2126 git-gui.sh:2127
+#: git-gui.sh:2128 git-gui.sh:2129
 msgid "Requires merge resolution"
 msgstr "要マージ解決"
 
-#: git-gui.sh:1972
+#: git-gui.sh:2164
 msgid "Starting gitk... please wait..."
 msgstr "gitk を起動中…お待ち下さい…"
 
-#: git-gui.sh:1984
+#: git-gui.sh:2176
 msgid "Couldn't find gitk in PATH"
 msgstr "PATH 中に gitk が見つかりません"
 
-#: git-gui.sh:2043
+#: git-gui.sh:2235
 msgid "Couldn't find git gui in PATH"
 msgstr "PATH 中に git gui が見つかりません"
 
-#: git-gui.sh:2455 lib/choose_repository.tcl:36
+#: git-gui.sh:2654 lib/choose_repository.tcl:41
 msgid "Repository"
 msgstr "リポジトリ"
 
-#: git-gui.sh:2456
+#: git-gui.sh:2655
 msgid "Edit"
 msgstr "編集"
 
-#: git-gui.sh:2458 lib/choose_rev.tcl:561
+#: git-gui.sh:2657 lib/choose_rev.tcl:567
 msgid "Branch"
 msgstr "ブランチ"
 
-#: git-gui.sh:2461 lib/choose_rev.tcl:548
+#: git-gui.sh:2660 lib/choose_rev.tcl:554
 msgid "Commit@@noun"
 msgstr "コミット"
 
-#: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:2663 lib/merge.tcl:123 lib/merge.tcl:152 lib/merge.tcl:170
 msgid "Merge"
 msgstr "マージ"
 
-#: git-gui.sh:2465 lib/choose_rev.tcl:557
+#: git-gui.sh:2664 lib/choose_rev.tcl:563
 msgid "Remote"
 msgstr "リモート"
 
-#: git-gui.sh:2468
+#: git-gui.sh:2667
 msgid "Tools"
 msgstr "ツール"
 
-#: git-gui.sh:2477
+#: git-gui.sh:2676
 msgid "Explore Working Copy"
 msgstr "ワーキングコピーをブラウズ"
 
-#: git-gui.sh:2483
+#: git-gui.sh:2682
+msgid "Git Bash"
+msgstr ""
+
+#: git-gui.sh:2692
 msgid "Browse Current Branch's Files"
 msgstr "現在のブランチのファイルを見る"
 
-#: git-gui.sh:2487
+#: git-gui.sh:2696
 msgid "Browse Branch Files..."
 msgstr "ブランチのファイルを見る…"
 
-#: git-gui.sh:2492
+#: git-gui.sh:2701
 msgid "Visualize Current Branch's History"
 msgstr "現在のブランチの履歴を見る"
 
-#: git-gui.sh:2496
+#: git-gui.sh:2705
 msgid "Visualize All Branch History"
 msgstr "全てのブランチの履歴を見る"
 
-#: git-gui.sh:2503
+#: git-gui.sh:2712
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "ブランチ %s のファイルを見る"
 
-#: git-gui.sh:2505
+#: git-gui.sh:2714
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "ブランチ %s の履歴を見る"
 
-#: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:2719 lib/database.tcl:40 lib/database.tcl:66
 msgid "Database Statistics"
 msgstr "データベース統計"
 
-#: git-gui.sh:2513 lib/database.tcl:34
+#: git-gui.sh:2722 lib/database.tcl:33
 msgid "Compress Database"
 msgstr "データベース圧縮"
 
-#: git-gui.sh:2516
+#: git-gui.sh:2725
 msgid "Verify Database"
 msgstr "データベース検証"
 
-#: git-gui.sh:2523 git-gui.sh:2527 git-gui.sh:2531 lib/shortcut.tcl:8
+#: git-gui.sh:2732 git-gui.sh:2736 git-gui.sh:2740 lib/shortcut.tcl:8
 #: lib/shortcut.tcl:40 lib/shortcut.tcl:72
 msgid "Create Desktop Icon"
 msgstr "デスクトップ・アイコンを作る"
 
-#: git-gui.sh:2539 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191
+#: git-gui.sh:2748 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201
 msgid "Quit"
 msgstr "終了"
 
-#: git-gui.sh:2547
+#: git-gui.sh:2756
 msgid "Undo"
 msgstr "元に戻す"
 
-#: git-gui.sh:2550
+#: git-gui.sh:2759
 msgid "Redo"
 msgstr "やり直し"
 
-#: git-gui.sh:2554 git-gui.sh:3109
+#: git-gui.sh:2763 git-gui.sh:3368
 msgid "Cut"
 msgstr "切り取り"
 
-#: git-gui.sh:2557 git-gui.sh:3112 git-gui.sh:3186 git-gui.sh:3259
+#: git-gui.sh:2766 git-gui.sh:3371 git-gui.sh:3445 git-gui.sh:3530
 #: lib/console.tcl:69
 msgid "Copy"
 msgstr "コピー"
 
-#: git-gui.sh:2560 git-gui.sh:3115
+#: git-gui.sh:2769 git-gui.sh:3374
 msgid "Paste"
 msgstr "貼り付け"
 
-#: git-gui.sh:2563 git-gui.sh:3118 lib/branch_delete.tcl:26
-#: lib/remote_branch_delete.tcl:38
+#: git-gui.sh:2772 git-gui.sh:3377 lib/remote_branch_delete.tcl:39
+#: lib/branch_delete.tcl:28
 msgid "Delete"
 msgstr "削除"
 
-#: git-gui.sh:2567 git-gui.sh:3122 git-gui.sh:3263 lib/console.tcl:71
+#: git-gui.sh:2776 git-gui.sh:3381 git-gui.sh:3534 lib/console.tcl:71
 msgid "Select All"
 msgstr "全て選択"
 
-#: git-gui.sh:2576
+#: git-gui.sh:2785
 msgid "Create..."
 msgstr "作成…"
 
-#: git-gui.sh:2582
+#: git-gui.sh:2791
 msgid "Checkout..."
 msgstr "チェックアウト"
 
-#: git-gui.sh:2588
+#: git-gui.sh:2797
 msgid "Rename..."
 msgstr "名前変更…"
 
-#: git-gui.sh:2593
+#: git-gui.sh:2802
 msgid "Delete..."
 msgstr "削除…"
 
-#: git-gui.sh:2598
+#: git-gui.sh:2807
 msgid "Reset..."
 msgstr "リセット…"
 
-#: git-gui.sh:2608
+#: git-gui.sh:2817
 msgid "Done"
 msgstr "完了"
 
-#: git-gui.sh:2610
+#: git-gui.sh:2819
 msgid "Commit@@verb"
 msgstr "コミット"
 
-#: git-gui.sh:2619 git-gui.sh:3050
+#: git-gui.sh:2828 git-gui.sh:3309
 msgid "New Commit"
 msgstr "新規コミット"
 
-#: git-gui.sh:2627 git-gui.sh:3057
+#: git-gui.sh:2836 git-gui.sh:3316
 msgid "Amend Last Commit"
 msgstr "最新コミットを訂正"
 
-#: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2846 git-gui.sh:3270 lib/remote_branch_delete.tcl:101
 msgid "Rescan"
 msgstr "再スキャン"
 
-#: git-gui.sh:2643
+#: git-gui.sh:2852
 msgid "Stage To Commit"
 msgstr "コミット予定する"
 
-#: git-gui.sh:2649
+#: git-gui.sh:2858
 msgid "Stage Changed Files To Commit"
 msgstr "変更されたファイルをコミット予定"
 
-#: git-gui.sh:2655
+#: git-gui.sh:2864
 msgid "Unstage From Commit"
 msgstr "コミットから降ろす"
 
-#: git-gui.sh:2661 lib/index.tcl:412
+#: git-gui.sh:2870 lib/index.tcl:442
 msgid "Revert Changes"
 msgstr "変更を元に戻す"
 
-#: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341
+#: git-gui.sh:2878 git-gui.sh:3581 git-gui.sh:3612
 msgid "Show Less Context"
 msgstr "文脈を少なく"
 
-#: git-gui.sh:2673 git-gui.sh:3314 git-gui.sh:3345
+#: git-gui.sh:2882 git-gui.sh:3585 git-gui.sh:3616
 msgid "Show More Context"
 msgstr "文脈を多く"
 
-#: git-gui.sh:2680 git-gui.sh:3024 git-gui.sh:3133
+#: git-gui.sh:2889 git-gui.sh:3283 git-gui.sh:3392
 msgid "Sign Off"
 msgstr "署名"
 
-#: git-gui.sh:2696
+#: git-gui.sh:2905
 msgid "Local Merge..."
 msgstr "ローカル・マージ…"
 
-#: git-gui.sh:2701
+#: git-gui.sh:2910
 msgid "Abort Merge..."
 msgstr "マージ中止…"
 
-#: git-gui.sh:2713 git-gui.sh:2741
+#: git-gui.sh:2922 git-gui.sh:2950
 msgid "Add..."
 msgstr "追加"
 
-#: git-gui.sh:2717
+#: git-gui.sh:2926
 msgid "Push..."
 msgstr "プッシュ…"
 
-#: git-gui.sh:2721
+#: git-gui.sh:2930
 msgid "Delete Branch..."
 msgstr "ブランチ削除..."
 
-#: git-gui.sh:2731 git-gui.sh:3292
+#: git-gui.sh:2940 git-gui.sh:3563
 msgid "Options..."
 msgstr "オプション…"
 
-#: git-gui.sh:2742
+#: git-gui.sh:2951
 msgid "Remove..."
 msgstr "削除..."
 
-#: git-gui.sh:2751 lib/choose_repository.tcl:50
+#: git-gui.sh:2960 lib/choose_repository.tcl:55
 msgid "Help"
 msgstr "ヘルプ"
 
-#: git-gui.sh:2755 git-gui.sh:2759 lib/about.tcl:14
-#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53
+#: git-gui.sh:2964 git-gui.sh:2968 lib/about.tcl:14
+#: lib/choose_repository.tcl:49 lib/choose_repository.tcl:58
 #, tcl-format
 msgid "About %s"
 msgstr "%s について"
 
-#: git-gui.sh:2783
+#: git-gui.sh:2992
 msgid "Online Documentation"
 msgstr "オンライン・ドキュメント"
 
-#: git-gui.sh:2786 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56
+#: git-gui.sh:2995 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61
 msgid "Show SSH Key"
 msgstr "SSH キーを表示"
 
-#: git-gui.sh:2893
+#: git-gui.sh:3014 git-gui.sh:3146
+msgid "Usage"
+msgstr "使い方"
+
+#: git-gui.sh:3095 lib/blame.tcl:573
+msgid "Error"
+msgstr "エラー"
+
+#: git-gui.sh:3126
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr ""
 "致命的: パス %s が stat できません。そのようなファイルやディレクトリはありま"
 "せん"
 
-#: git-gui.sh:2926
+#: git-gui.sh:3159
 msgid "Current Branch:"
 msgstr "現在のブランチ"
 
-#: git-gui.sh:2947
+#: git-gui.sh:3185
 msgid "Staged Changes (Will Commit)"
 msgstr "ステージングされた(コミット予定済の)変更"
 
-#: git-gui.sh:2967
+#: git-gui.sh:3205
 msgid "Unstaged Changes"
 msgstr "コミット予定に入っていない変更"
 
-#: git-gui.sh:3017
+#: git-gui.sh:3276
 msgid "Stage Changed"
 msgstr "変更をコミット予定に入れる"
 
-#: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193
+#: git-gui.sh:3295 lib/transport.tcl:137 lib/transport.tcl:229
 msgid "Push"
 msgstr "プッシュ"
 
-#: git-gui.sh:3071
+#: git-gui.sh:3330
 msgid "Initial Commit Message:"
 msgstr "最初のコミットメッセージ:"
 
-#: git-gui.sh:3072
+#: git-gui.sh:3331
 msgid "Amended Commit Message:"
 msgstr "訂正したコミットメッセージ:"
 
-#: git-gui.sh:3073
+#: git-gui.sh:3332
 msgid "Amended Initial Commit Message:"
 msgstr "訂正した最初のコミットメッセージ:"
 
-#: git-gui.sh:3074
+#: git-gui.sh:3333
 msgid "Amended Merge Commit Message:"
 msgstr "訂正したマージコミットメッセージ:"
 
-#: git-gui.sh:3075
+#: git-gui.sh:3334
 msgid "Merge Commit Message:"
 msgstr "マージコミットメッセージ:"
 
-#: git-gui.sh:3076
+#: git-gui.sh:3335
 msgid "Commit Message:"
 msgstr "コミットメッセージ:"
 
-#: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73
+#: git-gui.sh:3384 git-gui.sh:3538 lib/console.tcl:73
 msgid "Copy All"
 msgstr "全てコピー"
 
-#: git-gui.sh:3149 lib/blame.tcl:104
+#: git-gui.sh:3408 lib/blame.tcl:105
 msgid "File:"
 msgstr "ファイル:"
 
-#: git-gui.sh:3255
+#: git-gui.sh:3526
 msgid "Refresh"
 msgstr "再読み込み"
 
-#: git-gui.sh:3276
+#: git-gui.sh:3547
 msgid "Decrease Font Size"
 msgstr "フォントを小さく"
 
-#: git-gui.sh:3280
+#: git-gui.sh:3551
 msgid "Increase Font Size"
 msgstr "フォントを大きく"
 
-#: git-gui.sh:3288 lib/blame.tcl:281
+#: git-gui.sh:3559 lib/blame.tcl:294
 msgid "Encoding"
 msgstr "エンコーディング"
 
-#: git-gui.sh:3299
+#: git-gui.sh:3570
 msgid "Apply/Reverse Hunk"
 msgstr "パッチを適用/取り消す"
 
-#: git-gui.sh:3304
+#: git-gui.sh:3575
 msgid "Apply/Reverse Line"
 msgstr "パッチ行を適用/取り消す"
 
-#: git-gui.sh:3323
+#: git-gui.sh:3594
 msgid "Run Merge Tool"
 msgstr "マージツールを起動"
 
-#: git-gui.sh:3328
+#: git-gui.sh:3599
 msgid "Use Remote Version"
 msgstr "リモートの方を採用"
 
-#: git-gui.sh:3332
+#: git-gui.sh:3603
 msgid "Use Local Version"
 msgstr "ローカルの方を採用"
 
-#: git-gui.sh:3336
+#: git-gui.sh:3607
 msgid "Revert To Base"
 msgstr "ベース版を採用"
 
-#: git-gui.sh:3354
+#: git-gui.sh:3625
 msgid "Visualize These Changes In The Submodule"
 msgstr "サブモジュール内のこれらの変更を見る"
 
-#: git-gui.sh:3358
+#: git-gui.sh:3629
 msgid "Visualize Current Branch History In The Submodule"
 msgstr "サブモジュール内で現在のブランチの履歴を見る"
 
-#: git-gui.sh:3362
+#: git-gui.sh:3633
 msgid "Visualize All Branch History In The Submodule"
 msgstr "サブモジュール内で全てのブランチの履歴を見る"
 
-#: git-gui.sh:3367
+#: git-gui.sh:3638
 msgid "Start git gui In The Submodule"
 msgstr "サブモジュール内でgit guiを起動する"
 
-#: git-gui.sh:3389
+#: git-gui.sh:3673
 msgid "Unstage Hunk From Commit"
 msgstr "パッチをコミット予定から外す"
 
-#: git-gui.sh:3391
+#: git-gui.sh:3675
 msgid "Unstage Lines From Commit"
 msgstr "コミット予定から行を外す"
 
-#: git-gui.sh:3393
+#: git-gui.sh:3677
 msgid "Unstage Line From Commit"
 msgstr "コミット予定から行を外す"
 
-#: git-gui.sh:3396
+#: git-gui.sh:3680
 msgid "Stage Hunk For Commit"
 msgstr "パッチをコミット予定に加える"
 
-#: git-gui.sh:3398
+#: git-gui.sh:3682
 msgid "Stage Lines For Commit"
 msgstr "パッチ行をコミット予定に加える"
 
-#: git-gui.sh:3400
+#: git-gui.sh:3684
 msgid "Stage Line For Commit"
 msgstr "パッチ行をコミット予定に加える"
 
-#: git-gui.sh:3424
+#: git-gui.sh:3709
 msgid "Initializing..."
 msgstr "初期化しています…"
 
-#: git-gui.sh:3541
+#: git-gui.sh:3852
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -543,7 +573,7 @@ msgstr ""
 "以下の環境変数は %s が起動する Git サブプロセスによって無視されるでしょう:\n"
 "\n"
 
-#: git-gui.sh:3570
+#: git-gui.sh:3881
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -553,7 +583,7 @@ msgstr ""
 "これは Cygwin で配布されている Tcl バイナリに\n"
 "関しての既知の問題によります"
 
-#: git-gui.sh:3575
+#: git-gui.sh:3886
 #, tcl-format
 msgid ""
 "\n"
@@ -568,249 +598,294 @@ msgstr ""
 "個人的な ~/.gitconfig ファイル内で user.name と user.email の値を設定\n"
 "するのが、%s の良い代用となります\n"
 
-#: lib/about.tcl:26
-msgid "git-gui - a graphical user interface for Git."
-msgstr "Git のグラフィカルUI git-gui"
+#: 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/blame.tcl:72
-msgid "File Viewer"
-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"
 
-#: lib/blame.tcl:78
-msgid "Commit:"
-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"
+msgstr ""
+"衝突のあったマージの途中です。\n"
+"\n"
+"ファイル %s にはマージ中の衝突が残っています。\n"
+"\n"
+"このファイルの衝突を解決し、コミット予定に加えて、コミットすることでマージを"
+"完了します。そうやって始めて、新たなマージを開始できるようになります。\n"
 
-#: lib/blame.tcl:271
-msgid "Copy Commit"
-msgstr "コミットをコピー"
+#: 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 ""
+"変更の途中です。\n"
+"\n"
+"ファイル %s は変更中です。\n"
+"\n"
+"現在のコミットを完了してからマージを開始して下さい。そうする方がマージに失敗"
+"したときの回復が楽です。\n"
 
-#: lib/blame.tcl:275
-msgid "Find Text..."
-msgstr "テキストを検索"
+#: lib/merge.tcl:108
+#, tcl-format
+msgid "%s of %s"
+msgstr "%s の %s ブランチ"
 
-#: lib/blame.tcl:284
-msgid "Do Full Copy Detection"
-msgstr "コピー検知"
+#: lib/merge.tcl:122
+#, tcl-format
+msgid "Merging %s and %s..."
+msgstr "%s と %s をマージ中・・・"
 
-#: lib/blame.tcl:288
-msgid "Show History Context"
-msgstr "文脈を見せる"
+#: lib/merge.tcl:133
+msgid "Merge completed successfully."
+msgstr "マージが完了しました"
 
-#: lib/blame.tcl:291
-msgid "Blame Parent Commit"
-msgstr "親コミットを註釈"
+#: lib/merge.tcl:135
+msgid "Merge failed.  Conflict resolution is required."
+msgstr "マージが失敗しました。衝突の解決が必要です。"
 
-#: lib/blame.tcl:450
+#: lib/merge.tcl:160
 #, tcl-format
-msgid "Reading %s..."
-msgstr "%s ã\82\92読ã\82\93ã\81§ã\81\84ã\81¾ã\81\99â\80¦"
+msgid "Merge Into %s"
+msgstr "%s ã\81«ã\83\9eã\83¼ã\82¸"
 
-#: lib/blame.tcl:557
-msgid "Loading copy/move tracking annotations..."
-msgstr "コピー・移動追跡データを読んでいます…"
+#: lib/merge.tcl:166 lib/checkout_op.tcl:567 lib/tools_dlg.tcl:336
+msgid "Visualize"
+msgstr "可視化"
 
-#: lib/blame.tcl:577
-msgid "lines annotated"
-msgstr "行を注釈しました"
+#: lib/merge.tcl:174 lib/remote_branch_delete.tcl:43 lib/branch_delete.tcl:34
+#: lib/checkout_op.tcl:579 lib/branch_rename.tcl:32 lib/tools_dlg.tcl:41
+#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/option.tcl:127
+#: lib/transport.tcl:141 lib/choose_font.tcl:45 lib/branch_checkout.tcl:30
+#: lib/browser.tcl:292 lib/remote_add.tcl:34 lib/branch_create.tcl:37
+msgid "Cancel"
+msgstr "中止"
 
-#: lib/blame.tcl:769
-msgid "Loading original location annotations..."
-msgstr "元位置行の注釈データを読んでいます…"
+#: lib/merge.tcl:179
+msgid "Revision To Merge"
+msgstr "マージするリビジョン"
 
-#: lib/blame.tcl:772
-msgid "Annotation complete."
-msgstr "注釈完了しました"
+#: lib/merge.tcl:214
+msgid ""
+"Cannot abort while amending.\n"
+"\n"
+"You must finish amending this commit.\n"
+msgstr ""
+"訂正中には中止できません。\n"
+"\n"
+"まず今のコミット訂正を完了させて下さい。\n"
 
-#: lib/blame.tcl:802
-msgid "Busy"
-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/blame.tcl:803
-msgid "Annotation process is already running."
-msgstr "すでに blame プロセスを実行中です。"
+#: 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?"
+msgstr ""
+"変更点をリセットしますか?\n"
+"\n"
+"変更点をリセットすると、コミットしていない全ての変更が失われます。\n"
+"\n"
+"リセットしてよろしいですか?"
 
-#: lib/blame.tcl:842
-msgid "Running thorough copy detection..."
-msgstr "コピー検知を実行中…"
+#: lib/merge.tcl:241
+msgid "Aborting"
+msgstr "中断しています"
 
-#: lib/blame.tcl:910
-msgid "Loading annotation..."
-msgstr "注釈を読み込んでいます…"
+#: lib/merge.tcl:241
+msgid "files reset"
+msgstr "リセットしたファイル"
 
-#: lib/blame.tcl:963
-msgid "Author:"
-msgstr "ä½\9cè\80\85:"
+#: lib/merge.tcl:269
+msgid "Abort failed."
+msgstr "中æ\96­ã\81«å¤±æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82"
 
-#: lib/blame.tcl:967
-msgid "Committer:"
-msgstr "コミット者:"
+#: lib/merge.tcl:271
+msgid "Abort completed.  Ready."
+msgstr "中断完了。"
 
-#: lib/blame.tcl:972
-msgid "Original File:"
-msgstr "元ファイル"
+#: lib/error.tcl:20 lib/error.tcl:116
+msgid "error"
+msgstr "エラー"
 
-#: lib/blame.tcl:1020
-msgid "Cannot find HEAD commit:"
-msgstr "HEAD コミットが見つかりません"
+#: lib/error.tcl:36
+msgid "warning"
+msgstr "警告"
 
-#: lib/blame.tcl:1075
-msgid "Cannot find parent commit:"
-msgstr "親コミットが見つかりません:"
+#: lib/error.tcl:96
+msgid "You must correct the above errors before committing."
+msgstr "コミットする前に、以上のエラーを修正して下さい"
 
-#: lib/blame.tcl:1090
-msgid "Unable to display parent"
-msgstr "親を表示できません"
+#: lib/date.tcl:25
+#, tcl-format
+msgid "Invalid date from Git: %s"
+msgstr "Git から出た無効な日付: %s"
 
-#: lib/blame.tcl:1091 lib/diff.tcl:320
-msgid "Error loading diff:"
-msgstr "diff を読む際のエラーです:"
+#: lib/encoding.tcl:443
+msgid "Default"
+msgstr "デフォールト"
 
-#: lib/blame.tcl:1231
-msgid "Originally By:"
-msgstr "原作者:"
+#: lib/encoding.tcl:448
+#, tcl-format
+msgid "System (%s)"
+msgstr "システム (%s)"
 
-#: lib/blame.tcl:1237
-msgid "In File:"
-msgstr "ã\83\95ã\82¡ã\82¤ã\83«:"
+#: lib/encoding.tcl:459 lib/encoding.tcl:465
+msgid "Other"
+msgstr "ã\81\9dã\81®ä»\96"
 
-#: lib/blame.tcl:1242
-msgid "Copied Or Moved Here By:"
-msgstr "複写・移動者:"
+#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
+msgid "Delete Branch Remotely"
+msgstr "リモートブランチ削除"
 
-#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19
-msgid "Checkout Branch"
-msgstr "ブランチをチェックアウト"
+#: lib/remote_branch_delete.tcl:48
+msgid "From Repository"
+msgstr "元のリポジトリ"
 
-#: lib/branch_checkout.tcl:23
-msgid "Checkout"
-msgstr "ã\83\81ã\82§ã\83\83ã\82¯ã\82¢ã\82¦ã\83\88"
+#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:165
+msgid "Remote:"
+msgstr "ã\83ªã\83¢ã\83¼ã\83\88:"
 
-#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
-#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282
-#: lib/checkout_op.tcl:579 lib/choose_font.tcl:43 lib/merge.tcl:172
-#: lib/option.tcl:125 lib/remote_add.tcl:32 lib/remote_branch_delete.tcl:42
-#: lib/tools_dlg.tcl:40 lib/tools_dlg.tcl:204 lib/tools_dlg.tcl:352
-#: lib/transport.tcl:108
-msgid "Cancel"
-msgstr "中止"
+#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:187
+msgid "Arbitrary Location:"
+msgstr "任意の位置:"
 
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328
-msgid "Revision"
-msgstr "ã\83ªã\83\93ã\82¸ã\83§ã\83³"
+#: lib/remote_branch_delete.tcl:88
+msgid "Branches"
+msgstr "ã\83\96ã\83©ã\83³ã\83\81"
 
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280
-msgid "Options"
-msgstr "オプション"
+#: lib/remote_branch_delete.tcl:110
+msgid "Delete Only If"
+msgstr "条件付で削除"
 
-#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92
-msgid "Fetch Tracking Branch"
-msgstr "ã\83\88ã\83©ã\83\83ã\82­ã\83³ã\82°ã\83»ã\83\96ã\83©ã\83³ã\83\81ã\82\92ã\83\95ã\82§ã\83\83ã\83\81"
+#: lib/remote_branch_delete.tcl:112
+msgid "Merged Into:"
+msgstr "ã\83\9eã\83¼ã\82¸å\85\88:"
 
-#: lib/branch_checkout.tcl:44
-msgid "Detach From Local Branch"
-msgstr "ローカル・ブランチから削除"
+#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53
+msgid "Always (Do not perform merge checks)"
+msgstr "無条件(マージ検査をしない)"
 
-#: lib/branch_create.tcl:22
-msgid "Create Branch"
-msgstr "ブランチを作成"
-
-#: lib/branch_create.tcl:27
-msgid "Create New Branch"
-msgstr "ブランチを新規作成"
-
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:381
-msgid "Create"
-msgstr "作成"
-
-#: lib/branch_create.tcl:40
-msgid "Branch Name"
-msgstr "ブランチ名"
-
-#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50
-msgid "Name:"
-msgstr "名前:"
-
-#: lib/branch_create.tcl:58
-msgid "Match Tracking Branch Name"
-msgstr "トラッキング・ブランチ名を合わせる"
-
-#: lib/branch_create.tcl:66
-msgid "Starting Revision"
-msgstr "初期リビジョン"
-
-#: lib/branch_create.tcl:72
-msgid "Update Existing Branch:"
-msgstr "既存のブランチを更新:"
-
-#: lib/branch_create.tcl:75
-msgid "No"
-msgstr "いいえ"
+#: lib/remote_branch_delete.tcl:153
+msgid "A branch is required for 'Merged Into'."
+msgstr "'マージ先' にはブランチが必要です。"
 
-#: lib/branch_create.tcl:80
-msgid "Fast Forward Only"
-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/branch_create.tcl:85 lib/checkout_op.tcl:571
-msgid "Reset"
-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/branch_create.tcl:97
-msgid "Checkout After Creation"
-msgstr "作成してすぐチェックアウト"
+#: lib/remote_branch_delete.tcl:208
+msgid "Please select one or more branches to delete."
+msgstr "削除するブランチを選択して下さい。"
 
-#: lib/branch_create.tcl:131
-msgid "Please select a tracking branch."
-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/branch_create.tcl:140
+#: lib/remote_branch_delete.tcl:227
 #, tcl-format
-msgid "Tracking branch %s is not a branch in the remote repository."
-msgstr "トラッキング・ブランチ %s は遠隔リポジトリのブランチではありません。"
+msgid "Deleting branches from %s"
+msgstr "%s からブランチを削除しています。"
 
-#: lib/branch_create.tcl:153 lib/branch_rename.tcl:86
-msgid "Please supply a branch name."
-msgstr "ã\83\96ã\83©ã\83³ã\83\81å\90\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ä¸\8bã\81\95ã\81\84。"
+#: lib/remote_branch_delete.tcl:300
+msgid "No repository selected."
+msgstr "ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81\8cé\81¸æ\8a\9eã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\9bã\82\93。"
 
-#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106
+#: lib/remote_branch_delete.tcl:305
 #, tcl-format
-msgid "'%s' is not an acceptable branch name."
-msgstr "'%s' はブランチ名に使えません。"
+msgid "Scanning %s..."
+msgstr "%s をスキャンしています…"
 
-#: lib/branch_delete.tcl:15
+#: lib/branch_delete.tcl:16
 msgid "Delete Branch"
 msgstr "ブランチ削除"
 
-#: lib/branch_delete.tcl:20
+#: lib/branch_delete.tcl:21
 msgid "Delete Local Branch"
 msgstr "ローカル・ブランチを削除"
 
-#: lib/branch_delete.tcl:37
+#: lib/branch_delete.tcl:39
 msgid "Local Branches"
 msgstr "ローカル・ブランチ"
 
-#: lib/branch_delete.tcl:52
+#: lib/branch_delete.tcl:51
 msgid "Delete Only If Merged Into"
 msgstr "マージ済みの時のみ削除"
 
-#: lib/branch_delete.tcl:54 lib/remote_branch_delete.tcl:119
-msgid "Always (Do not perform merge checks)"
-msgstr "無条件(マージ検査をしない)"
-
 #: lib/branch_delete.tcl:103
 #, tcl-format
 msgid "The following branches are not completely merged into %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"
-"選択したブランチを削除して良いですか?"
-
 #: lib/branch_delete.tcl:141
 #, tcl-format
 msgid ""
@@ -820,62 +895,63 @@ msgstr ""
 "以下のブランチを削除できません:\n"
 "%s"
 
-#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22
-msgid "Rename Branch"
-msgstr "ブランチの名前変更"
+#: lib/choose_rev.tcl:52
+msgid "This Detached Checkout"
+msgstr "分離されたチェックアウト"
 
-#: lib/branch_rename.tcl:26
-msgid "Rename"
-msgstr "名前変更"
+#: lib/choose_rev.tcl:60
+msgid "Revision Expression:"
+msgstr "リビジョン式:"
 
-#: lib/branch_rename.tcl:36
-msgid "Branch:"
-msgstr "ã\83\96ã\83©ã\83³ã\83\81:"
+#: lib/choose_rev.tcl:72
+msgid "Local Branch"
+msgstr "ã\83­ã\83¼ã\82«ã\83«ã\83»ã\83\96ã\83©ã\83³ã\83\81"
 
-#: lib/branch_rename.tcl:39
-msgid "New Name:"
-msgstr "新しい名前:"
+#: lib/choose_rev.tcl:77
+msgid "Tracking Branch"
+msgstr "トラッキング・ブランチ"
 
-#: lib/branch_rename.tcl:75
-msgid "Please select a branch to rename."
-msgstr "名前を変更するブランチを選んで下さい。"
+#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544
+msgid "Tag"
+msgstr "タグ"
 
-#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:202
+#: lib/choose_rev.tcl:321
 #, tcl-format
-msgid "Branch '%s' already exists."
-msgstr "'%s'というブランチは既に存在します。"
+msgid "Invalid revision: %s"
+msgstr "無効なリビジョン: %s"
 
-#: lib/branch_rename.tcl:117
-#, tcl-format
-msgid "Failed to rename '%s'."
-msgstr "'%s'の名前変更に失敗しました。"
+#: lib/choose_rev.tcl:342
+msgid "No revision selected."
+msgstr "リビジョンが未選択です。"
 
-#: lib/browser.tcl:17
-msgid "Starting..."
-msgstr "起動中…"
+#: lib/choose_rev.tcl:350
+msgid "Revision expression is empty."
+msgstr "リビジョン式が空です。"
 
-#: lib/browser.tcl:26
-msgid "File Browser"
-msgstr "ファイル・ブラウザ"
+#: lib/choose_rev.tcl:537
+msgid "Updated"
+msgstr "更新しました"
 
-#: lib/browser.tcl:126 lib/browser.tcl:143
-#, tcl-format
-msgid "Loading %s..."
-msgstr "%s をロード中…"
+#: lib/choose_rev.tcl:565
+msgid "URL"
+msgstr "URL"
 
-#: lib/browser.tcl:187
-msgid "[Up To Parent]"
-msgstr "[上位フォルダへ]"
+#: lib/console.tcl:59
+msgid "Working... please wait..."
+msgstr "実行中…お待ち下さい…"
 
-#: lib/browser.tcl:267 lib/browser.tcl:273
-msgid "Browse Branch Files"
-msgstr "現在のブランチのファイルを見る"
+#: lib/console.tcl:81 lib/checkout_op.tcl:146 lib/database.tcl:30
+#: lib/sshkey.tcl:55
+msgid "Close"
+msgstr "閉じる"
 
-#: lib/browser.tcl:278 lib/choose_repository.tcl:398
-#: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497
-#: lib/choose_repository.tcl:1028
-msgid "Browse"
-msgstr "ブラウズ"
+#: lib/console.tcl:186
+msgid "Success"
+msgstr "成功"
+
+#: lib/console.tcl:200
+msgid "Error: Command Failed"
+msgstr "エラー: コマンドが失敗しました"
 
 #: lib/checkout_op.tcl:85
 #, tcl-format
@@ -887,11 +963,6 @@ msgstr "%s から %s をフェッチしています"
 msgid "fatal: Cannot resolve %s"
 msgstr "致命的エラー: %s を解決できません"
 
-#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:31
-#: lib/sshkey.tcl:53
-msgid "Close"
-msgstr "閉じる"
-
 #: lib/checkout_op.tcl:175
 #, tcl-format
 msgid "Branch '%s' does not exist."
@@ -902,6 +973,11 @@ msgstr "ブランチ'%s'は存在しません。"
 msgid "Failed to configure simplified git-pull for '%s'."
 msgstr "'%s' に簡易 git-pull を設定できませんでした"
 
+#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102
+#, tcl-format
+msgid "Branch '%s' already exists."
+msgstr "'%s'というブランチは既に存在します。"
+
 #: lib/checkout_op.tcl:229
 #, tcl-format
 msgid ""
@@ -999,9 +1075,9 @@ msgstr "失なわれたコミットを回復するのは簡単ではありませ
 msgid "Reset '%s'?"
 msgstr "'%s' をリセットしますか?"
 
-#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343
-msgid "Visualize"
-msgstr "可視化"
+#: lib/checkout_op.tcl:571 lib/branch_create.tcl:85
+msgid "Reset"
+msgstr "リセット"
 
 #: lib/checkout_op.tcl:635
 #, tcl-format
@@ -1019,1537 +1095,1590 @@ msgstr ""
 "ましたが、 Git の内部データを更新できませんでした。\n"
 "起こるはずのないエラーです。あきらめて %s を終了します。"
 
-#: lib/choose_font.tcl:39
-msgid "Select"
-msgstr "選択"
+#: lib/blame.tcl:73
+msgid "File Viewer"
+msgstr "ファイルピューワ"
 
-#: lib/choose_font.tcl:53
-msgid "Font Family"
-msgstr "ã\83\95ã\82©ã\83³ã\83\88ã\83»ã\83\95ã\82¡ã\83\9fã\83ªã\83¼"
+#: lib/blame.tcl:79
+msgid "Commit:"
+msgstr "ã\82³ã\83\9fã\83\83ã\83\88:"
 
-#: lib/choose_font.tcl:74
-msgid "Font Size"
-msgstr "ã\83\95ã\82©ã\83³ã\83\88ã\81®å¤§ã\81\8dã\81\95"
+#: lib/blame.tcl:280
+msgid "Copy Commit"
+msgstr "ã\82³ã\83\9fã\83\83ã\83\88ã\82\92ã\82³ã\83\94ã\83¼"
 
-#: lib/choose_font.tcl:91
-msgid "Font Example"
-msgstr "ã\83\95ã\82©ã\83³ã\83\88ã\83»ã\82µã\83³ã\83\97ã\83«"
+#: lib/blame.tcl:284
+msgid "Find Text..."
+msgstr "ã\83\86ã\82­ã\82¹ã\83\88ã\82\92æ¤\9cç´¢"
 
-#: lib/choose_font.tcl:103
-msgid ""
-"This is example text.\n"
-"If you like this text, it can be your font."
-msgstr ""
-"これはサンプル文です。\n"
-"このフォントが気に入ればお使いになれます。"
+#: lib/blame.tcl:288
+msgid "Goto Line..."
+msgstr "指定行に移動…"
 
-#: lib/choose_repository.tcl:28
-msgid "Git Gui"
-msgstr "Git GUI"
+#: lib/blame.tcl:297
+msgid "Do Full Copy Detection"
+msgstr "コピー検知"
 
-#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:386
-msgid "Create New Repository"
-msgstr "æ\96°ã\81\97ã\81\84ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\82\92ä½\9cる"
+#: lib/blame.tcl:301
+msgid "Show History Context"
+msgstr "æ\96\87è\84\88ã\82\92è¦\8bã\81\9bる"
 
-#: lib/choose_repository.tcl:93
-msgid "New..."
-msgstr "新規…"
+#: lib/blame.tcl:304
+msgid "Blame Parent Commit"
+msgstr "親コミットを注釈"
 
-#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471
-msgid "Clone Existing Repository"
-msgstr "既存リポジトリを複製する"
+#: lib/blame.tcl:466
+#, tcl-format
+msgid "Reading %s..."
+msgstr "%s を読んでいます…"
 
-#: lib/choose_repository.tcl:106
-msgid "Clone..."
-msgstr "複製…"
+#: lib/blame.tcl:594
+msgid "Loading copy/move tracking annotations..."
+msgstr "コピー・移動追跡データを読んでいます…"
 
-#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016
-msgid "Open Existing Repository"
-msgstr "既存リポジトリを開く"
+#: lib/blame.tcl:614
+msgid "lines annotated"
+msgstr "行を注釈しました"
 
-#: lib/choose_repository.tcl:119
-msgid "Open..."
-msgstr "開く…"
+#: lib/blame.tcl:806
+msgid "Loading original location annotations..."
+msgstr "元位置行の注釈データを読んでいます…"
 
-#: lib/choose_repository.tcl:132
-msgid "Recent Repositories"
-msgstr "æ\9c\80è¿\91使ã\81£ã\81\9fã\83ªã\83\9dã\82¸ã\83\88ã\83ª"
+#: lib/blame.tcl:809
+msgid "Annotation complete."
+msgstr "注é\87\88å®\8cäº\86ã\81\97ã\81¾ã\81\97ã\81\9f"
 
-#: lib/choose_repository.tcl:138
-msgid "Open Recent Repository:"
-msgstr "最近使ったリポジトリを開く"
+#: lib/blame.tcl:839
+msgid "Busy"
+msgstr "実行中"
 
-#: lib/choose_repository.tcl:306 lib/choose_repository.tcl:313
-#: lib/choose_repository.tcl:320
-#, tcl-format
-msgid "Failed to create repository %s:"
-msgstr "リポジトリ %s を作製できません:"
+#: lib/blame.tcl:840
+msgid "Annotation process is already running."
+msgstr "すでに blame プロセスを実行中です。"
 
-#: lib/choose_repository.tcl:391
-msgid "Directory:"
-msgstr "ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ª:"
+#: lib/blame.tcl:879
+msgid "Running thorough copy detection..."
+msgstr "ã\82³ã\83\94ã\83¼æ¤\9cç\9f¥ã\82\92å®\9fè¡\8c中â\80¦"
 
-#: lib/choose_repository.tcl:423 lib/choose_repository.tcl:550
-#: lib/choose_repository.tcl:1052
-msgid "Git Repository"
-msgstr "GIT リポジトリ"
+#: lib/blame.tcl:947
+msgid "Loading annotation..."
+msgstr "注釈を読み込んでいます…"
 
-#: lib/choose_repository.tcl:448
-#, tcl-format
-msgid "Directory %s already exists."
-msgstr "ディレクトリ '%s' は既に存在します。"
+#: lib/blame.tcl:1000
+msgid "Author:"
+msgstr "作者:"
 
-#: lib/choose_repository.tcl:452
-#, tcl-format
-msgid "File %s already exists."
-msgstr "ファイル '%s' は既に存在します。"
+#: lib/blame.tcl:1004
+msgid "Committer:"
+msgstr "コミット者:"
 
-#: lib/choose_repository.tcl:466
-msgid "Clone"
-msgstr "複製"
+#: lib/blame.tcl:1009
+msgid "Original File:"
+msgstr "元ファイル"
 
-#: lib/choose_repository.tcl:479
-msgid "Source Location:"
-msgstr "ソースの位置"
+#: lib/blame.tcl:1057
+msgid "Cannot find HEAD commit:"
+msgstr "HEAD コミットが見つかりません"
 
-#: lib/choose_repository.tcl:490
-msgid "Target Directory:"
-msgstr "先ディレクトリ:"
+#: lib/blame.tcl:1112
+msgid "Cannot find parent commit:"
+msgstr "親コミットが見つかりません:"
+
+#: lib/blame.tcl:1127
+msgid "Unable to display parent"
+msgstr "親を表示できません"
+
+#: lib/blame.tcl:1128 lib/diff.tcl:356
+msgid "Error loading diff:"
+msgstr "diff を読む際のエラーです:"
+
+#: lib/blame.tcl:1269
+msgid "Originally By:"
+msgstr "原作者:"
+
+#: lib/blame.tcl:1275
+msgid "In File:"
+msgstr "ファイル:"
+
+#: lib/blame.tcl:1280
+msgid "Copied Or Moved Here By:"
+msgstr "複写・移動者:"
+
+#: lib/about.tcl:26
+msgid "git-gui - a graphical user interface for Git."
+msgstr "Git のグラフィカルUI git-gui"
+
+#: lib/choose_repository.tcl:33
+msgid "Git Gui"
+msgstr "Git GUI"
+
+#: 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:407 lib/branch_create.tcl:33
+msgid "Create"
+msgstr "作成"
+
+#: lib/choose_repository.tcl:417
+msgid "Directory:"
+msgstr "ディレクトリ:"
+
+#: lib/choose_repository.tcl:422 lib/choose_repository.tcl:509
+#: lib/choose_repository.tcl:518 lib/choose_repository.tcl:1074
+#: lib/browser.tcl:288
+msgid "Browse"
+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:502
+#: 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:508
+#: lib/choose_repository.tcl:528
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "標準(高速・中冗長度・ハードリンク)"
 
-#: lib/choose_repository.tcl:514
+#: lib/choose_repository.tcl:533
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "全複写(低速・冗長バックアップ)"
 
-#: lib/choose_repository.tcl:520
+#: lib/choose_repository.tcl:538
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "共有(最高速・非推奨・バックアップ無し)"
 
-#: lib/choose_repository.tcl:556 lib/choose_repository.tcl:603
-#: lib/choose_repository.tcl:749 lib/choose_repository.tcl:819
-#: lib/choose_repository.tcl:1058 lib/choose_repository.tcl:1066
+#: 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:592
+#: lib/choose_repository.tcl:615
 msgid "Standard only available for local repository."
 msgstr "標準方式は同一計算機上のリポジトリにのみ使えます。"
 
-#: lib/choose_repository.tcl:596
+#: lib/choose_repository.tcl:619
 msgid "Shared only available for local repository."
 msgstr "共有方式は同一計算機上のリポジトリにのみ使えます。"
 
-#: lib/choose_repository.tcl:617
+#: lib/choose_repository.tcl:640
 #, tcl-format
 msgid "Location %s already exists."
 msgstr "'%s' は既に存在します。"
 
-#: lib/choose_repository.tcl:628
+#: lib/choose_repository.tcl:651
 msgid "Failed to configure origin"
 msgstr "origin を設定できませんでした"
 
-#: lib/choose_repository.tcl:640
+#: lib/choose_repository.tcl:663
 msgid "Counting objects"
 msgstr "オブジェクトを数えています"
 
-#: lib/choose_repository.tcl:641
+#: lib/choose_repository.tcl:664
 msgid "buckets"
 msgstr "バケツ"
 
-#: lib/choose_repository.tcl:665
+#: lib/choose_repository.tcl:688
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "objects/info/alternates を複写できません: %s"
 
-#: lib/choose_repository.tcl:701
+#: lib/choose_repository.tcl:724
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "%s から複製する内容はありません"
 
-#: lib/choose_repository.tcl:703 lib/choose_repository.tcl:917
-#: lib/choose_repository.tcl:929
+#: 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:716
+#: lib/choose_repository.tcl:739
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "ハードリンクが作れないので、コピーします"
 
-#: lib/choose_repository.tcl:728
+#: lib/choose_repository.tcl:751
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "%s から複製しています"
 
-#: lib/choose_repository.tcl:759
+#: lib/choose_repository.tcl:782
 msgid "Copying objects"
 msgstr "オブジェクトを複写しています"
 
-#: lib/choose_repository.tcl:760
+#: lib/choose_repository.tcl:783
 msgid "KiB"
 msgstr "KiB"
 
-#: lib/choose_repository.tcl:784
+#: lib/choose_repository.tcl:807
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "オブジェクトを複写できません: %s"
 
-#: lib/choose_repository.tcl:794
+#: lib/choose_repository.tcl:817
 msgid "Linking objects"
 msgstr "オブジェクトを連結しています"
 
-#: lib/choose_repository.tcl:795
+#: lib/choose_repository.tcl:818
 msgid "objects"
 msgstr "オブジェクト"
 
-#: lib/choose_repository.tcl:803
+#: lib/choose_repository.tcl:826
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "オブジェクトをハードリンクできません: %s"
 
-#: lib/choose_repository.tcl:858
+#: lib/choose_repository.tcl:881
 msgid "Cannot fetch branches and objects.  See console output for details."
 msgstr "ブランチやオブジェクトを取得できません。コンソール出力を見て下さい"
 
-#: lib/choose_repository.tcl:869
+#: lib/choose_repository.tcl:892
 msgid "Cannot fetch tags.  See console output for details."
 msgstr "タグを取得できません。コンソール出力を見て下さい"
 
-#: lib/choose_repository.tcl:893
+#: lib/choose_repository.tcl:916
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr "HEAD を確定できません。コンソール出力を見て下さい"
 
-#: lib/choose_repository.tcl:902
+#: lib/choose_repository.tcl:925
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "%s を掃除できません"
 
-#: lib/choose_repository.tcl:908
+#: lib/choose_repository.tcl:931
 msgid "Clone failed."
 msgstr "複写に失敗しました。"
 
-#: lib/choose_repository.tcl:915
+#: lib/choose_repository.tcl:938
 msgid "No default branch obtained."
 msgstr "デフォールト・ブランチが取得されませんでした"
 
-#: lib/choose_repository.tcl:926
+#: lib/choose_repository.tcl:949
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "%s をコミットとして解釈できません"
 
-#: lib/choose_repository.tcl:938
+#: lib/choose_repository.tcl:961
 msgid "Creating working directory"
 msgstr "作業ディレクトリを作成しています"
 
-#: lib/choose_repository.tcl:939 lib/index.tcl:67 lib/index.tcl:130
-#: lib/index.tcl:198
+#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136
+#: lib/index.tcl:207
 msgid "files"
 msgstr "ファイル"
 
-#: lib/choose_repository.tcl:968
+#: 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:1011
+#: lib/choose_repository.tcl:1059
 msgid "Open"
 msgstr "開く"
 
-#: lib/choose_repository.tcl:1021
+#: lib/choose_repository.tcl:1069
 msgid "Repository:"
 msgstr "リポジトリ:"
 
-#: lib/choose_repository.tcl:1072
+#: lib/choose_repository.tcl:1118
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "リポジトリ %s を開けません:"
 
-#: lib/choose_rev.tcl:53
-msgid "This Detached Checkout"
-msgstr "分離されたチェックアウト"
+#: lib/branch_rename.tcl:15 lib/branch_rename.tcl:23
+msgid "Rename Branch"
+msgstr "ブランチの名前変更"
 
-#: lib/choose_rev.tcl:60
-msgid "Revision Expression:"
-msgstr "リビジョン式:"
+#: lib/branch_rename.tcl:28
+msgid "Rename"
+msgstr "名前変更"
 
-#: lib/choose_rev.tcl:74
-msgid "Local Branch"
-msgstr "ã\83­ã\83¼ã\82«ã\83«ã\83»ã\83\96ã\83©ã\83³ã\83\81"
+#: lib/branch_rename.tcl:38
+msgid "Branch:"
+msgstr "ã\83\96ã\83©ã\83³ã\83\81:"
 
-#: lib/choose_rev.tcl:79
-msgid "Tracking Branch"
-msgstr "トラッキング・ブランチ"
+#: lib/branch_rename.tcl:46
+msgid "New Name:"
+msgstr "新しい名前:"
 
-#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
-msgid "Tag"
-msgstr "タグ"
+#: lib/branch_rename.tcl:81
+msgid "Please select a branch to rename."
+msgstr "名前を変更するブランチを選んで下さい。"
 
-#: lib/choose_rev.tcl:317
-#, tcl-format
-msgid "Invalid revision: %s"
-msgstr "無効なリビジョン: %s"
+#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154
+msgid "Please supply a branch name."
+msgstr "ブランチ名を指定して下さい。"
 
-#: lib/choose_rev.tcl:338
-msgid "No revision selected."
-msgstr "リビジョンが未選択です。"
+#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165
+#, tcl-format
+msgid "'%s' is not an acceptable branch name."
+msgstr "'%s' はブランチ名に使えません。"
 
-#: lib/choose_rev.tcl:346
-msgid "Revision expression is empty."
-msgstr "リビジョン式が空です。"
+#: lib/branch_rename.tcl:123
+#, tcl-format
+msgid "Failed to rename '%s'."
+msgstr "'%s'の名前変更に失敗しました。"
 
-#: lib/choose_rev.tcl:531
-msgid "Updated"
-msgstr "更新しました"
+#: lib/shortcut.tcl:21 lib/shortcut.tcl:62
+msgid "Cannot write shortcut:"
+msgstr "ショートカットが書けません:"
 
-#: lib/choose_rev.tcl:559
-msgid "URL"
-msgstr "URL"
+#: lib/shortcut.tcl:137
+msgid "Cannot write icon:"
+msgstr "アイコンが書けません:"
 
-#: 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/search.tcl:48
+msgid "Find:"
+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/search.tcl:50
+msgid "Next"
+msgstr "次"
 
-#: lib/commit.tcl:48
-msgid "Error loading commit data for amend:"
-msgstr "訂正するコミットのデータを読めません:"
+#: lib/search.tcl:51
+msgid "Prev"
+msgstr ""
 
-#: lib/commit.tcl:75
-msgid "Unable to obtain your identity:"
-msgstr "ユーザの正体を確認できません:"
+#: lib/search.tcl:52
+msgid "RegExp"
+msgstr "正規表現"
 
-#: lib/commit.tcl:80
-msgid "Invalid GIT_COMMITTER_IDENT:"
-msgstr "GIT_COMMITTER_IDENT が無効です:"
+#: lib/search.tcl:54
+msgid "Case"
+msgstr "大文字小文字を区別"
 
-#: lib/commit.tcl:129
+#: lib/status_bar.tcl:87
 #, tcl-format
-msgid "warning: Tcl does not support encoding '%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"
-"\n"
-"The rescan will be automatically started now.\n"
-msgstr ""
-"最後にスキャンした状態はリポジトリの状態と合致しません。\n"
-"\n"
-"最後にスキャンして以後、別の Git プログラムがリポジトリを変更しています。新し"
-"くコミットする前に、再スキャンが必要です。\n"
-"\n"
-"自動的に再スキャンを開始します。\n"
+msgid "%s ... %*i of %*i %s (%3i%%)"
+msgstr "%1$s ... %4$*i %6$s 中の %2$*i (%7$3i%%)"
 
-#: 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"
+#: lib/tools_dlg.tcl:22
+msgid "Add Tool"
+msgstr "ツールの追加"
 
-#: lib/commit.tcl:180
-#, 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/tools_dlg.tcl:28
+msgid "Add New Tool Command"
+msgstr "新規ツールコマンドの追加"
 
-#: 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"
+#: lib/tools_dlg.tcl:34
+msgid "Add globally"
+msgstr "全体に追加"
 
-#: lib/commit.tcl:203
-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"
-"- 第1行: 何をしたか、を1行で要約。\n"
-"- 第2行: 空白\n"
-"- 残りの行: なぜ、この変更が良い変更か、の説明。\n"
+#: lib/tools_dlg.tcl:37 lib/remote_add.tcl:30
+msgid "Add"
+msgstr "追加"
 
-#: lib/commit.tcl:234
-msgid "Calling pre-commit hook..."
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88å\89\8dã\83\95ã\83\83ã\82¯ã\82\92å®\9fè¡\8c中ã\83»ã\83»ã\83»"
+#: lib/tools_dlg.tcl:46
+msgid "Tool Details"
+msgstr "ã\83\84ã\83¼ã\83«ã\81®è©³ç´°"
 
-#: lib/commit.tcl:249
-msgid "Commit declined by pre-commit hook."
-msgstr "コミット前フックがコミットを拒否しました"
+#: lib/tools_dlg.tcl:49
+msgid "Use '/' separators to create a submenu tree:"
+msgstr "'/' でサブメニューを区切ります:"
 
-#: lib/commit.tcl:272
-msgid "Calling commit-msg hook..."
-msgstr "コミット・メッセージ・フックを実行中・・・"
+#: lib/tools_dlg.tcl:51 lib/remote_add.tcl:41 lib/branch_create.tcl:44
+msgid "Name:"
+msgstr "名前:"
 
-#: lib/commit.tcl:287
-msgid "Commit declined by commit-msg hook."
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88ã\83»ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\83\95ã\83\83ã\82¯ã\81\8cã\82³ã\83\9fã\83\83ã\83\88ã\82\92æ\8b\92å\90¦ã\81\97ã\81¾ã\81\97ã\81\9f"
+#: lib/tools_dlg.tcl:60
+msgid "Command:"
+msgstr "ã\82³ã\83\9eã\83³ã\83\89:"
 
-#: lib/commit.tcl:300
-msgid "Committing changes..."
-msgstr "変更点をコミット中・・・"
+#: lib/tools_dlg.tcl:71
+msgid "Show a dialog before running"
+msgstr "起動する前にダイアログを表示"
 
-#: lib/commit.tcl:316
-msgid "write-tree failed:"
-msgstr "write-tree が失敗しました:"
+#: lib/tools_dlg.tcl:77
+msgid "Ask the user to select a revision (sets $REVISION)"
+msgstr "ユーザにコミットを一つ選ばせる ($REVISION にセットします)"
 
-#: lib/commit.tcl:317 lib/commit.tcl:361 lib/commit.tcl:382
-msgid "Commit failed."
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88ã\81«å¤±æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82"
+#: lib/tools_dlg.tcl:82
+msgid "Ask the user for additional arguments (sets $ARGS)"
+msgstr "ã\83¦ã\83¼ã\82¶ã\81«ä»\96ã\81®å¼\95æ\95°ã\82\92追å\8a ã\81\95ã\81\9bã\82\8b ($ARGS ã\81«ã\82»ã\83\83ã\83\88ã\81\97ã\81¾ã\81\99)"
 
-#: lib/commit.tcl:334
+#: lib/tools_dlg.tcl:89
+msgid "Don't show the command output window"
+msgstr "コマンドからの出力ウィンドウを見せない"
+
+#: lib/tools_dlg.tcl:94
+msgid "Run only if a diff is selected ($FILENAME not empty)"
+msgstr "パッチが選ばれているときだけ動かす($FILENAME が空でない)"
+
+#: lib/tools_dlg.tcl:118
+msgid "Please supply a name for the tool."
+msgstr "ツール名を指定して下さい。"
+
+#: lib/tools_dlg.tcl:126
 #, tcl-format
-msgid "Commit %s appears to be corrupt"
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88 %s ã\81¯å£\8aã\82\8cã\81¦ã\81\84ã\81¾ã\81\99"
+msgid "Tool '%s' already exists."
+msgstr "ã\83\84ã\83¼ã\83« '%s' ã\81¯æ\97¢ã\81«å­\98å\9c¨ã\81\97ã\81¾ã\81\99ã\80\82"
 
-#: lib/commit.tcl:339
+#: lib/tools_dlg.tcl:148
+#, tcl-format
 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"
+"Could not add tool:\n"
+"%s"
 msgstr ""
-"コミットする変更がありません。\n"
-"\n"
-"マージでなく、また、一つも変更点がありません。\n"
-"\n"
-"自動的に再スキャンを開始します。\n"
+"ツールを追加できません:\n"
+"%s"
 
-#: lib/commit.tcl:346
-msgid "No changes to commit."
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88ã\81\99ã\82\8bå¤\89æ\9b´ã\81\8cã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\80\82"
+#: lib/tools_dlg.tcl:187
+msgid "Remove Tool"
+msgstr "ã\83\84ã\83¼ã\83«ã\81®å\89\8aé\99¤"
 
-#: lib/commit.tcl:360
-msgid "commit-tree failed:"
-msgstr "commit-tree が失敗しました:"
+#: lib/tools_dlg.tcl:193
+msgid "Remove Tool Commands"
+msgstr "ツールコマンドの削除"
 
-#: lib/commit.tcl:381
-msgid "update-ref failed:"
-msgstr "update-ref が失敗しました:"
+#: lib/tools_dlg.tcl:198
+msgid "Remove"
+msgstr "削除"
 
-#: lib/commit.tcl:469
-#, tcl-format
-msgid "Created commit %s: %s"
-msgstr "コミット %s を作成しました: %s"
+#: lib/tools_dlg.tcl:231
+msgid "(Blue denotes repository-local tools)"
+msgstr "(青色はローカルレポジトリのツールです)"
 
-#: lib/console.tcl:59
-msgid "Working... please wait..."
-msgstr "実行中…お待ち下さい…"
+#: lib/tools_dlg.tcl:292
+#, tcl-format
+msgid "Run Command: %s"
+msgstr "コマンドを起動: %s"
 
-#: lib/console.tcl:186
-msgid "Success"
-msgstr "成功"
+#: lib/tools_dlg.tcl:306
+msgid "Arguments"
+msgstr "引数"
 
-#: lib/console.tcl:200
-msgid "Error: Command Failed"
-msgstr "ã\82¨ã\83©ã\83¼: ã\82³ã\83\9eã\83³ã\83\89ã\81\8c失æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9f"
+#: lib/tools_dlg.tcl:321 lib/branch_checkout.tcl:35 lib/browser.tcl:297
+msgid "Revision"
+msgstr "ã\83ªã\83\93ã\82¸ã\83§ã\83³"
 
-#: lib/database.tcl:43
-msgid "Number of loose objects"
-msgstr "ばらばらなオブジェクトの数"
+#: lib/tools_dlg.tcl:341
+msgid "OK"
+msgstr "OK"
 
-#: lib/database.tcl:44
-msgid "Disk space used by loose objects"
-msgstr "ばらばらなオブジェクトの使用するディスク量"
+#: lib/tools.tcl:75
+#, tcl-format
+msgid "Running %s requires a selected file."
+msgstr "ファイルを選択してから %s を起動してください。"
 
-#: lib/database.tcl:45
-msgid "Number of packed objects"
-msgstr "パックされたオブジェクトの数"
+#: lib/tools.tcl:91
+#, tcl-format
+msgid "Are you sure you want to run %1$s on file \"%2$s\"?"
+msgstr "本当にファイル \"%2$s\"で %1$s を起動しますか?"
 
-#: lib/database.tcl:46
-msgid "Number of packs"
-msgstr "パックの数"
+#: lib/tools.tcl:95
+#, tcl-format
+msgid "Are you sure you want to run %s?"
+msgstr "本当に %s を起動しますか?"
 
-#: lib/database.tcl:47
-msgid "Disk space used by packed objects"
-msgstr "パックされたオブジェクトの使用するディスク量"
+#: lib/tools.tcl:116
+#, tcl-format
+msgid "Tool: %s"
+msgstr "ツール: %s"
 
-#: lib/database.tcl:48
-msgid "Packed objects waiting for pruning"
-msgstr "パックに存在するので捨てて良いオブジェクトの数"
+#: lib/tools.tcl:117
+#, tcl-format
+msgid "Running: %s"
+msgstr "実行中: %s"
 
-#: lib/database.tcl:49
-msgid "Garbage files"
-msgstr "ゴミファイル"
+#: lib/tools.tcl:155
+#, tcl-format
+msgid "Tool completed successfully: %s"
+msgstr "ツールが完了しました: %s"
 
-#: lib/database.tcl:72
-msgid "Compressing the object database"
-msgstr "データベース圧縮"
+#: lib/tools.tcl:157
+#, tcl-format
+msgid "Tool failed: %s"
+msgstr "ツールが失敗しました: %s"
 
-#: lib/database.tcl:83
-msgid "Verifying the object database with fsck-objects"
-msgstr "fsck-objects でオブジェクト・データベースを検証しています"
+#: lib/mergetool.tcl:8
+msgid "Force resolution to the base version?"
+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/mergetool.tcl:9
+msgid "Force resolution to this branch?"
+msgstr "自分の側の版を使いますか?"
 
-#: lib/date.tcl:25
-#, tcl-format
-msgid "Invalid date from Git: %s"
-msgstr "Git から出た無効な日付: %s"
+#: lib/mergetool.tcl:10
+msgid "Force resolution to the other branch?"
+msgstr "相手制の版を使いますか?"
 
-#: lib/diff.tcl:64
+#: lib/mergetool.tcl:14
 #, tcl-format
 msgid ""
-"No differences detected.\n"
-"\n"
-"%s has no changes.\n"
+"Note that the diff shows only conflicting changes.\n"
 "\n"
-"The modification date of this file was updated by another application, but "
-"the content within the file was not changed.\n"
+"%s will be overwritten.\n"
 "\n"
-"A rescan will be automatically started to find other files which may have "
-"the same state."
+"This operation can be undone only by restarting the merge."
 msgstr ""
-"変更がありません。\n"
-"\n"
-"%s には変更がありません。\n"
+"競合する変更点だけが表示されていることに注意してください。\n"
 "\n"
-"このファイルの変更時刻は他のアプリケーションによって更新されていますがファイ"
-"ル内容には変更がありません。\n"
+"%s は上書きされます。\n"
 "\n"
-"同様な状態のファイルを探すために、自動的に再スキャンを開始します。"
+"やり直すにはマージ全体をやり直してください。"
 
-#: lib/diff.tcl:104
+#: lib/mergetool.tcl:45
 #, tcl-format
-msgid "Loading diff of %s..."
-msgstr "%s の変更点をロード中…"
-
-#: lib/diff.tcl:125
-msgid ""
-"LOCAL: deleted\n"
-"REMOTE:\n"
+msgid "File %s seems to have unresolved conflicts, still stage?"
 msgstr ""
-"LOCAL: 削除\n"
-"Remote:\n"
+"ファイル %s には解決していない競合部分がまだあるようですが、いいですか?"
 
-#: lib/diff.tcl:130
-msgid ""
-"REMOTE: deleted\n"
-"LOCAL:\n"
-msgstr ""
-"REMOTE: 削除\n"
-"LOCAL:\n"
+#: lib/mergetool.tcl:60
+#, tcl-format
+msgid "Adding resolution for %s"
+msgstr "%s への解決をステージします"
 
-#: lib/diff.tcl:137
-msgid "LOCAL:\n"
-msgstr "LOCAL:\n"
+#: lib/mergetool.tcl:141
+msgid "Cannot resolve deletion or link conflicts using a tool"
+msgstr "ツールでは削除やリンク競合は扱えません"
 
-#: lib/diff.tcl:140
-msgid "REMOTE:\n"
-msgstr "REMOTE\n"
+#: lib/mergetool.tcl:146
+msgid "Conflict file does not exist"
+msgstr "競合ファイルは存在しません。"
 
-#: lib/diff.tcl:202 lib/diff.tcl:319
+#: lib/mergetool.tcl:246
 #, tcl-format
-msgid "Unable to display %s"
-msgstr "%s を表示できません"
-
-#: lib/diff.tcl:203
-msgid "Error loading file:"
-msgstr "ファイルを読む際のエラーです:"
+msgid "Not a GUI merge tool: '%s'"
+msgstr "GUI マージツールではありません: %s"
 
-#: lib/diff.tcl:210
-msgid "Git Repository (subproject)"
-msgstr "Git リポジトリ(サブプロジェクト)"
+#: lib/mergetool.tcl:275
+#, tcl-format
+msgid "Unsupported merge tool '%s'"
+msgstr "マージツール '%s' はサポートしていません"
 
-#: lib/diff.tcl:222
-msgid "* Binary file (not showing content)."
-msgstr "* バイナリファイル(内容は表示しません)"
+#: lib/mergetool.tcl:310
+msgid "Merge tool is already running, terminate it?"
+msgstr "マージツールはすでに起動しています。終了しますか?"
 
-#: lib/diff.tcl:227
+#: lib/mergetool.tcl:330
 #, tcl-format
 msgid ""
-"* Untracked file is %d bytes.\n"
-"* Showing only first %d bytes.\n"
+"Error retrieving versions:\n"
+"%s"
 msgstr ""
-"* 管理外のファイルの大きさは %d バイトです。\n"
-"* 最初の %d バイトだけ表示しています。\n"
+"版の取り出し時にエラーが出ました:\n"
+"%s"
 
-#: lib/diff.tcl:233
+#: lib/mergetool.tcl:350
 #, tcl-format
 msgid ""
+"Could not start the merge tool:\n"
 "\n"
-"* Untracked file clipped here by %s.\n"
-"* To see the entire file, use an external editor.\n"
+"%s"
 msgstr ""
+"マージツールが起動できません:\n"
 "\n"
-"\n"
-"* %s は管理外のファイルをここで切りおとしました。\n"
-"* 全体を見るには外部エディタを使ってください。\n"
-
-#: lib/diff.tcl:482
-msgid "Failed to unstage selected hunk."
-msgstr "選択されたパッチをコミット予定から外せません。"
+"%s"
 
-#: lib/diff.tcl:489
-msgid "Failed to stage selected hunk."
-msgstr "選択されたパッチをコミット予定に加えられません。"
+#: lib/mergetool.tcl:354
+msgid "Running merge tool..."
+msgstr "マージツールを実行しています..."
 
-#: lib/diff.tcl:568
-msgid "Failed to unstage selected line."
-msgstr "選択されたパッチ行をコミット予定から外せません。"
+#: lib/mergetool.tcl:382 lib/mergetool.tcl:390
+msgid "Merge tool failed."
+msgstr "マージツールが失敗しました。"
 
-#: lib/diff.tcl:576
-msgid "Failed to stage selected line."
-msgstr "選択されたパッチ行をコミット予定に加えられません。"
+#: lib/option.tcl:11
+#, tcl-format
+msgid "Invalid global encoding '%s'"
+msgstr "全体エンコーディングに 無効な %s が指定されています"
 
-#: lib/encoding.tcl:443
-msgid "Default"
-msgstr "デフォールト"
+#: lib/option.tcl:19
+#, tcl-format
+msgid "Invalid repo encoding '%s'"
+msgstr "リポジトリエンコーディングに 無効な %s が指定されています"
 
-#: lib/encoding.tcl:448
+#: lib/option.tcl:119
+msgid "Restore Defaults"
+msgstr "既定値に戻す"
+
+#: lib/option.tcl:123
+msgid "Save"
+msgstr "保存"
+
+#: lib/option.tcl:133
 #, tcl-format
-msgid "System (%s)"
-msgstr "システム (%s)"
+msgid "%s Repository"
+msgstr "%s リポジトリ"
 
-#: lib/encoding.tcl:459 lib/encoding.tcl:465
-msgid "Other"
-msgstr "その他"
+#: lib/option.tcl:134
+msgid "Global (All Repositories)"
+msgstr "大域(全てのリポジトリ)"
 
-#: lib/error.tcl:20 lib/error.tcl:114
-msgid "error"
-msgstr "ã\82¨ã\83©ã\83¼"
+#: lib/option.tcl:140
+msgid "User Name"
+msgstr "ã\83¦ã\83¼ã\82¶å\90\8d"
 
-#: lib/error.tcl:36
-msgid "warning"
-msgstr "警告"
+#: lib/option.tcl:141
+msgid "Email Address"
+msgstr "電子メールアドレス"
 
-#: lib/error.tcl:94
-msgid "You must correct the above errors before committing."
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88ã\81\99ã\82\8bå\89\8dã\81«ã\80\81以ä¸\8aã\81®ã\82¨ã\83©ã\83¼ã\82\92修正ã\81\97ã\81¦ä¸\8bã\81\95ã\81\84"
+#: lib/option.tcl:143
+msgid "Summarize Merge Commits"
+msgstr "ã\83\9eã\83¼ã\82¸ã\82³ã\83\9fã\83\83ã\83\88ã\81®è¦\81ç´\84"
 
-#: lib/index.tcl:6
-msgid "Unable to unlock the index."
-msgstr "ã\82¤ã\83³ã\83\87ã\83\83ã\82¯ã\82¹ã\82\92ã\83­ã\83\83ã\82¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93"
+#: lib/option.tcl:144
+msgid "Merge Verbosity"
+msgstr "ã\83\9eã\83¼ã\82¸ã\81®å\86\97é\95·åº¦"
 
-#: lib/index.tcl:15
-msgid "Index Error"
-msgstr "索引エラー"
+#: lib/option.tcl:145
+msgid "Show Diffstat After Merge"
+msgstr "マージ後に diffstat を表示"
 
-#: lib/index.tcl:17
-msgid ""
-"Updating the Git index failed.  A rescan will be automatically started to "
-"resynchronize git-gui."
-msgstr ""
-"GIT インデックスの更新が失敗しました。git-gui と同期をとるために再スキャンし"
-"ます。"
+#: lib/option.tcl:146
+msgid "Use Merge Tool"
+msgstr "マージツールを使用"
 
-#: lib/index.tcl:28
-msgid "Continue"
-msgstr "続行"
+#: lib/option.tcl:148
+msgid "Trust File Modification Timestamps"
+msgstr "ファイル変更時刻を信頼する"
 
-#: lib/index.tcl:31
-msgid "Unlock Index"
-msgstr "ã\82¤ã\83³ã\83\87ã\83\83ã\82¯ã\82¹ã\81®ã\83­ã\83\83ã\82¯è§£é\99¤"
+#: lib/option.tcl:149
+msgid "Prune Tracking Branches During Fetch"
+msgstr "ã\83\95ã\82§ã\83\83ã\83\81中ã\81«ã\83\88ã\83©ã\83\83ã\82­ã\83³ã\82°ã\83\96ã\83©ã\83³ã\83\81ã\82\92å\88\88ã\82\8b"
 
-#: lib/index.tcl:289
-#, tcl-format
-msgid "Unstaging %s from commit"
-msgstr "コミットから '%s' を降ろす"
+#: lib/option.tcl:150
+msgid "Match Tracking Branches"
+msgstr "トラッキングブランチを合わせる"
 
-#: lib/index.tcl:328
-msgid "Ready to commit."
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88æº\96å\82\99å®\8cäº\86"
+#: lib/option.tcl:151
+msgid "Use Textconv For Diffs and Blames"
+msgstr "diff ã\81¨æ³¨é\87\88ã\81« textconv ã\82\92使ã\81\86"
 
-#: lib/index.tcl:341
-#, tcl-format
-msgid "Adding %s"
-msgstr "コミットに %s を加えています"
+#: lib/option.tcl:152
+msgid "Blame Copy Only On Changed Files"
+msgstr "変更されたファイルのみコピー検知を行なう"
 
-#: lib/index.tcl:398
-#, tcl-format
-msgid "Revert changes in file %s?"
-msgstr "ファイル %s にした変更を元に戻しますか?"
+#: lib/option.tcl:153
+msgid "Maximum Length of Recent Repositories List"
+msgstr "最近使ったリポジトリ一覧の上限"
 
-#: lib/index.tcl:400
-#, tcl-format
-msgid "Revert changes in these %i files?"
-msgstr "これら %i 個のファイルにした変更を元に戻しますか?"
+#: lib/option.tcl:154
+msgid "Minimum Letters To Blame Copy On"
+msgstr "コピーを検知する最少文字数"
 
-#: lib/index.tcl:408
-msgid "Any unstaged changes will be permanently lost by the revert."
-msgstr "変更を元に戻すとコミット予定していない変更は全て失われます。"
+#: lib/option.tcl:155
+msgid "Blame History Context Radius (days)"
+msgstr "注釈する履歴半径(日数)"
 
-#: lib/index.tcl:411
-msgid "Do Nothing"
-msgstr "何もしない"
+#: lib/option.tcl:156
+msgid "Number of Diff Context Lines"
+msgstr "diff の文脈行数"
 
-#: lib/index.tcl:429
-msgid "Reverting selected files"
-msgstr "選択されたファイルにした変更を元に戻します"
+#: lib/option.tcl:157
+msgid "Additional Diff Parameters"
+msgstr "diff の追加引数"
 
-#: lib/index.tcl:433
-#, tcl-format
-msgid "Reverting %s"
-msgstr "%s にした変更を元に戻します"
+#: lib/option.tcl:158
+msgid "Commit Message Text Width"
+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/option.tcl:159
+msgid "New Branch Name Template"
+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"
+#: lib/option.tcl:160
+msgid "Default File Contents Encoding"
+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"
-msgstr ""
-"衝突のあったマージの途中です。\n"
-"\n"
-"ファイル %s にはマージ中の衝突が残っています。\n"
-"\n"
-"このファイルの衝突を解決し、コミット予定に加えて、コミットすることでマージを"
-"完了します。そうやって始めて、新たなマージを開始できるようになります。\n"
+#: lib/option.tcl:161
+msgid "Warn before committing to a detached head"
+msgstr "分離 HEAD のコミット前に警告する"
 
-#: 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 ""
-"変更の途中です。\n"
-"\n"
-"ファイル %s は変更中です。\n"
-"\n"
-"現在のコミットを完了してからマージを開始して下さい。そうする方がマージに失敗"
-"したときの回復が楽です。\n"
+#: lib/option.tcl:162
+msgid "Staging of untracked files"
+msgstr "管理外のファイルをコミット予定する"
 
-#: lib/merge.tcl:107
-#, tcl-format
-msgid "%s of %s"
-msgstr "%s の %s ブランチ"
+#: lib/option.tcl:163
+msgid "Show untracked files"
+msgstr "管理外のファイルを表示する"
 
-#: lib/merge.tcl:120
-#, tcl-format
-msgid "Merging %s and %s..."
-msgstr "%s と %s をマージ中・・・"
+#: lib/option.tcl:164
+msgid "Tab spacing"
+msgstr "タブ幅"
 
-#: lib/merge.tcl:131
-msgid "Merge completed successfully."
-msgstr "マージが完了しました"
+#: lib/option.tcl:210
+msgid "Change"
+msgstr "変更"
 
-#: lib/merge.tcl:133
-msgid "Merge failed.  Conflict resolution is required."
-msgstr "マージが失敗しました。衝突の解決が必要です。"
+#: lib/option.tcl:254
+msgid "Spelling Dictionary:"
+msgstr "スペルチェック辞書"
+
+#: lib/option.tcl:284
+msgid "Change Font"
+msgstr "フォントを変更"
 
-#: lib/merge.tcl:158
+#: lib/option.tcl:288
 #, tcl-format
-msgid "Merge Into %s"
-msgstr "%s ã\81«ã\83\9eã\83¼ã\82¸"
+msgid "Choose %s"
+msgstr "%s ã\82\92é\81¸æ\8a\9e"
 
-#: lib/merge.tcl:177
-msgid "Revision To Merge"
-msgstr "ã\83\9eã\83¼ã\82¸ã\81\99ã\82\8bã\83ªã\83\93ã\82¸ã\83§ã\83³"
+#: lib/option.tcl:294
+msgid "pt."
+msgstr "ã\83\9dã\82¤ã\83³ã\83\88"
 
-#: lib/merge.tcl:212
-msgid ""
-"Cannot abort while amending.\n"
-"\n"
-"You must finish amending this commit.\n"
-msgstr ""
-"訂正中には中止できません。\n"
-"\n"
-"まず今のコミット訂正を完了させて下さい。\n"
+#: lib/option.tcl:308
+msgid "Preferences"
+msgstr "設定"
 
-#: lib/merge.tcl:222
-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/option.tcl:310 lib/branch_checkout.tcl:39 lib/branch_create.tcl:69
+msgid "Options"
+msgstr "オプション"
 
-#: lib/merge.tcl:228
-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/option.tcl:345
+msgid "Failed to completely save options:"
+msgstr "完全にオプションを保存できません:"
 
-#: lib/merge.tcl:239
-msgid "Aborting"
-msgstr "中断しています"
+#: lib/database.tcl:42
+msgid "Number of loose objects"
+msgstr "ばらばらなオブジェクトの数"
 
-#: lib/merge.tcl:239
-msgid "files reset"
-msgstr "ã\83ªã\82»ã\83\83ã\83\88ã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«"
+#: lib/database.tcl:43
+msgid "Disk space used by loose objects"
+msgstr "ã\81°ã\82\89ã\81°ã\82\89ã\81ªã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®ä½¿ç\94¨ã\81\99ã\82\8bã\83\87ã\82£ã\82¹ã\82¯é\87\8f"
 
-#: lib/merge.tcl:267
-msgid "Abort failed."
-msgstr "中断に失敗しました。"
+#: lib/database.tcl:44
+msgid "Number of packed objects"
+msgstr "パックされたオブジェクトの数"
 
-#: lib/merge.tcl:269
-msgid "Abort completed.  Ready."
-msgstr "中断完了。"
+#: lib/database.tcl:45
+msgid "Number of packs"
+msgstr "パックの数"
 
-#: lib/mergetool.tcl:8
-msgid "Force resolution to the base version?"
-msgstr "共通の版を使いますか?"
+#: lib/database.tcl:46
+msgid "Disk space used by packed objects"
+msgstr "パックされたオブジェクトの使用するディスク量"
 
-#: lib/mergetool.tcl:9
-msgid "Force resolution to this branch?"
-msgstr "自分の側の版を使いますか?"
+#: lib/database.tcl:47
+msgid "Packed objects waiting for pruning"
+msgstr "パックに存在するので捨てて良いオブジェクトの数"
 
-#: lib/mergetool.tcl:10
-msgid "Force resolution to the other branch?"
-msgstr "相手制の版を使いますか?"
+#: lib/database.tcl:48
+msgid "Garbage files"
+msgstr "ゴミファイル"
 
-#: lib/mergetool.tcl:14
+#: lib/database.tcl:72
+msgid "Compressing the object database"
+msgstr "データベース圧縮"
+
+#: lib/database.tcl:83
+msgid "Verifying the object database with fsck-objects"
+msgstr "fsck-objects でオブジェクト・データベースを検証しています"
+
+#: lib/database.tcl:107
 #, tcl-format
 msgid ""
-"Note that the diff shows only conflicting changes.\n"
+"This repository currently has approximately %i loose objects.\n"
 "\n"
-"%s will be overwritten.\n"
+"To maintain optimal performance it is strongly recommended that you compress "
+"the database.\n"
 "\n"
-"This operation can be undone only by restarting the merge."
+"Compress the database now?"
 msgstr ""
-"競合する変更点だけが表示されていることに注意してください。\n"
+"このリポジトリにはおおよそ %i 個の個別オブジェクトがあります\n"
 "\n"
-"%s は上書きされます。\n"
+"最適な性能を保つために、データベースを圧縮することを推奨します\n"
 "\n"
-"やり直すにはマージ全体をやり直してください。"
-
-#: lib/mergetool.tcl:45
-#, tcl-format
-msgid "File %s seems to have unresolved conflicts, still stage?"
-msgstr ""
-"ファイル %s には解決していない競合部分がまだあるようですが、いいですか?"
+"データベースを圧縮しますか?"
 
-#: lib/mergetool.tcl:60
+#: lib/transport.tcl:6 lib/remote_add.tcl:132
 #, tcl-format
-msgid "Adding resolution for %s"
-msgstr "%s への解決をステージします"
-
-#: lib/mergetool.tcl:141
-msgid "Cannot resolve deletion or link conflicts using a tool"
-msgstr "ツールでは削除やリンク競合は扱えません"
-
-#: lib/mergetool.tcl:146
-msgid "Conflict file does not exist"
-msgstr "競合ファイルは存在しません。"
+msgid "fetch %s"
+msgstr "%s を取得"
 
-#: lib/mergetool.tcl:264
+#: lib/transport.tcl:7
 #, tcl-format
-msgid "Not a GUI merge tool: '%s'"
-msgstr "GUI マージツールではありません: %s"
+msgid "Fetching new changes from %s"
+msgstr "%s から新しい変更をフェッチしています"
 
-#: lib/mergetool.tcl:268
+#: lib/transport.tcl:18
 #, tcl-format
-msgid "Unsupported merge tool '%s'"
-msgstr "マージツール '%s' はサポートしていません"
-
-#: lib/mergetool.tcl:303
-msgid "Merge tool is already running, terminate it?"
-msgstr "マージツールはすでに起動しています。終了しますか?"
+msgid "remote prune %s"
+msgstr "リモート刈込 %s"
 
-#: lib/mergetool.tcl:323
+#: lib/transport.tcl:19
 #, tcl-format
-msgid ""
-"Error retrieving versions:\n"
-"%s"
-msgstr ""
-"版の取り出し時にエラーが出ました:\n"
-"%s"
+msgid "Pruning tracking branches deleted from %s"
+msgstr "%s から削除されたトラッキング・ブランチを刈っています"
 
-#: lib/mergetool.tcl:343
-#, tcl-format
-msgid ""
-"Could not start the merge tool:\n"
-"\n"
-"%s"
-msgstr ""
-"マージツールが起動できません:\n"
-"\n"
-"%s"
+#: lib/transport.tcl:25
+msgid "fetch all remotes"
+msgstr "すべてのリモートを取得"
 
-#: lib/mergetool.tcl:347
-msgid "Running merge tool..."
-msgstr "ã\83\9eã\83¼ã\82¸ã\83\84ã\83¼ã\83«ã\82\92å®\9fè¡\8cã\81\97ã\81¦ã\81\84ã\81¾ã\81\99..."
+#: lib/transport.tcl:26
+msgid "Fetching new changes from all remotes"
+msgstr "ã\81\99ã\81¹ã\81¦ã\81®ã\83ªã\83¢ã\83¼ã\83\88ã\81\8bã\82\89æ\96°ã\81\97ã\81\84å¤\89æ\9b´ã\82\92ã\83\95ã\82§ã\83\83ã\83\81ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99"
 
-#: lib/mergetool.tcl:375 lib/mergetool.tcl:383
-msgid "Merge tool failed."
-msgstr "ã\83\9eã\83¼ã\82¸ã\83\84ã\83¼ã\83«ã\81\8c失æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82"
+#: lib/transport.tcl:40
+msgid "remote prune all remotes"
+msgstr "ã\83ªã\83¢ã\83¼ã\83\88å\88\88è¾¼ ã\81\99ã\81¹ã\81¦ã\81®ã\83ªã\83¢ã\83¼ã\83\88"
 
-#: lib/option.tcl:11
-#, tcl-format
-msgid "Invalid global encoding '%s'"
-msgstr "全体エンコーディングに 無効な %s が指定されています"
+#: lib/transport.tcl:41
+msgid "Pruning tracking branches deleted from all remotes"
+msgstr "すべてのリモートから削除されたトラッキング・ブランチを刈っています"
 
-#: lib/option.tcl:19
+#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110
+#: lib/remote_add.tcl:162
 #, tcl-format
-msgid "Invalid repo encoding '%s'"
-msgstr "リポジトリエンコーディングに 無効な %s が指定されています"
+msgid "push %s"
+msgstr "%s をプッシュ"
 
-#: lib/option.tcl:117
-msgid "Restore Defaults"
-msgstr "既定値に戻す"
+#: lib/transport.tcl:55
+#, tcl-format
+msgid "Pushing changes to %s"
+msgstr "%s へ変更をプッシュしています"
 
-#: lib/option.tcl:121
-msgid "Save"
-msgstr "保存"
+#: lib/transport.tcl:93
+#, tcl-format
+msgid "Mirroring to %s"
+msgstr "%s へミラーしています"
 
-#: lib/option.tcl:131
+#: lib/transport.tcl:111
 #, tcl-format
-msgid "%s Repository"
-msgstr "%s リポジトリ"
+msgid "Pushing %s %s to %s"
+msgstr "%3$s へ %1$s %2$s をプッシュしています"
 
-#: lib/option.tcl:132
-msgid "Global (All Repositories)"
-msgstr "大域(全てのリポジトリ)"
+#: lib/transport.tcl:132
+msgid "Push Branches"
+msgstr "ブランチをプッシュ"
 
-#: lib/option.tcl:138
-msgid "User Name"
-msgstr "ユーザ名"
+#: lib/transport.tcl:147
+msgid "Source Branches"
+msgstr "元のブランチ"
 
-#: lib/option.tcl:139
-msgid "Email Address"
-msgstr "é\9b»å­\90ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹"
+#: lib/transport.tcl:162
+msgid "Destination Repository"
+msgstr "é\80\81ã\82\8aå\85\88ã\83ªã\83\9dã\82¸ã\83\88ã\83ª"
 
-#: lib/option.tcl:141
-msgid "Summarize Merge Commits"
-msgstr "マージコミットの要約"
+#: lib/transport.tcl:205
+msgid "Transfer Options"
+msgstr "通信オプション"
 
-#: lib/option.tcl:142
-msgid "Merge Verbosity"
-msgstr "マージの冗長度"
+#: lib/transport.tcl:207
+msgid "Force overwrite existing branch (may discard changes)"
+msgstr "既存ブランチを上書き(変更を破棄する可能性があります)"
 
-#: lib/option.tcl:143
-msgid "Show Diffstat After Merge"
-msgstr "マージ後に diffstat を表示"
+#: lib/transport.tcl:211
+msgid "Use thin pack (for slow network connections)"
+msgstr "Thin Pack を使う(遅いネットワーク接続)"
 
-#: lib/option.tcl:144
-msgid "Use Merge Tool"
-msgstr "ã\83\9eã\83¼ã\82¸ã\83\84ã\83¼ã\83«ã\82\92使ç\94¨"
+#: lib/transport.tcl:215
+msgid "Include tags"
+msgstr "ã\82¿ã\82°ã\82\92å\90«ã\82\81ã\82\8b"
 
-#: lib/option.tcl:146
-msgid "Trust File Modification Timestamps"
-msgstr "ファイル変更時刻を信頼する"
+#: lib/choose_font.tcl:41
+msgid "Select"
+msgstr "選択"
 
-#: lib/option.tcl:147
-msgid "Prune Tracking Branches During Fetch"
-msgstr "ã\83\95ã\82§ã\83\83ã\83\81中ã\81«ã\83\88ã\83©ã\83\83ã\82­ã\83³ã\82°ã\83\96ã\83©ã\83³ã\83\81ã\82\92å\88\88ã\82\8b"
+#: lib/choose_font.tcl:55
+msgid "Font Family"
+msgstr "ã\83\95ã\82©ã\83³ã\83\88ã\83»ã\83\95ã\82¡ã\83\9fã\83ªã\83¼"
 
-#: lib/option.tcl:148
-msgid "Match Tracking Branches"
-msgstr "ã\83\88ã\83©ã\83\83ã\82­ã\83³ã\82°ã\83\96ã\83©ã\83³ã\83\81ã\82\92å\90\88ã\82\8fã\81\9bã\82\8b"
+#: lib/choose_font.tcl:76
+msgid "Font Size"
+msgstr "ã\83\95ã\82©ã\83³ã\83\88ã\81®å¤§ã\81\8dã\81\95"
 
-#: lib/option.tcl:149
-msgid "Blame Copy Only On Changed Files"
-msgstr "変更されたファイルのみコピー検知を行なう"
+#: lib/choose_font.tcl:93
+msgid "Font Example"
+msgstr "フォント・サンプル"
 
-#: lib/option.tcl:150
-msgid "Minimum Letters To Blame Copy On"
-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/option.tcl:151
-msgid "Blame History Context Radius (days)"
-msgstr "註釈する履歴半径(日数)"
+#: lib/remote.tcl:200
+msgid "Push to"
+msgstr "プッシュ先"
 
-#: lib/option.tcl:152
-msgid "Number of Diff Context Lines"
-msgstr "diff の文脈行数"
+#: lib/remote.tcl:218
+msgid "Remove Remote"
+msgstr "リモートを削除"
 
-#: lib/option.tcl:153
-msgid "Commit Message Text Width"
-msgstr "ã\82³ã\83\9fã\83\83ã\83\88ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81®ã\83\86ã\82­ã\82¹ã\83\88å¹\85"
+#: lib/remote.tcl:223
+msgid "Prune from"
+msgstr "ã\81\8bã\82\89å\88\88è¾¼ã\82\80â\80¦"
 
-#: lib/option.tcl:154
-msgid "New Branch Name Template"
-msgstr "新しいブランチ名のテンプレート"
+#: lib/remote.tcl:228
+msgid "Fetch from"
+msgstr "取得元"
 
-#: lib/option.tcl:155
-msgid "Default File Contents Encoding"
-msgstr "ファイル内容のデフォールトエンコーディング"
+#: lib/diff.tcl:77
+#, tcl-format
+msgid ""
+"No differences detected.\n"
+"\n"
+"%s has no changes.\n"
+"\n"
+"The modification date of this file was updated by another application, but "
+"the content within the file was not changed.\n"
+"\n"
+"A rescan will be automatically started to find other files which may have "
+"the same state."
+msgstr ""
+"変更がありません。\n"
+"\n"
+"%s には変更がありません。\n"
+"\n"
+"このファイルの変更時刻は他のアプリケーションによって更新されていますがファイ"
+"ル内容には変更がありません。\n"
+"\n"
+"同様な状態のファイルを探すために、自動的に再スキャンを開始します。"
 
-#: lib/option.tcl:203
-msgid "Change"
-msgstr "変更"
+#: lib/diff.tcl:117
+#, tcl-format
+msgid "Loading diff of %s..."
+msgstr "%s の変更点をロード中…"
 
-#: lib/option.tcl:230
-msgid "Spelling Dictionary:"
-msgstr "スペルチェック辞書"
+#: lib/diff.tcl:140
+msgid ""
+"LOCAL: deleted\n"
+"REMOTE:\n"
+msgstr ""
+"LOCAL: 削除\n"
+"Remote:\n"
 
-#: lib/option.tcl:254
-msgid "Change Font"
-msgstr "フォントを変更"
+#: lib/diff.tcl:145
+msgid ""
+"REMOTE: deleted\n"
+"LOCAL:\n"
+msgstr ""
+"REMOTE: 削除\n"
+"LOCAL:\n"
+
+#: lib/diff.tcl:152
+msgid "LOCAL:\n"
+msgstr "LOCAL:\n"
 
-#: lib/option.tcl:258
+#: lib/diff.tcl:155
+msgid "REMOTE:\n"
+msgstr "REMOTE\n"
+
+#: lib/diff.tcl:217 lib/diff.tcl:355
 #, tcl-format
-msgid "Choose %s"
-msgstr "%s を選択"
+msgid "Unable to display %s"
+msgstr "%s を表示できません"
 
-#: lib/option.tcl:264
-msgid "pt."
-msgstr "ã\83\9dã\82¤ã\83³ã\83\88"
+#: lib/diff.tcl:218
+msgid "Error loading file:"
+msgstr "ã\83\95ã\82¡ã\82¤ã\83«ã\82\92読ã\82\80é\9a\9bã\81®ã\82¨ã\83©ã\83¼ã\81§ã\81\99:"
 
-#: lib/option.tcl:278
-msgid "Preferences"
-msgstr "設定"
+#: lib/diff.tcl:225
+msgid "Git Repository (subproject)"
+msgstr "Git リポジトリ(サブプロジェクト)"
 
-#: lib/option.tcl:314
-msgid "Failed to completely save options:"
-msgstr "完全にオプションを保存できません:"
+#: lib/diff.tcl:237
+msgid "* Binary file (not showing content)."
+msgstr "* バイナリファイル(内容は表示しません)"
 
-#: lib/remote.tcl:163
-msgid "Remove Remote"
-msgstr "リモートを削除"
+#: lib/diff.tcl:242
+#, tcl-format
+msgid ""
+"* Untracked file is %d bytes.\n"
+"* Showing only first %d bytes.\n"
+msgstr ""
+"* 管理外のファイルの大きさは %d バイトです。\n"
+"* 最初の %d バイトだけ表示しています。\n"
 
-#: lib/remote.tcl:168
-msgid "Prune from"
-msgstr "から刈込む…"
+#: 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"
+"\n"
+"* %s は管理外のファイルをここで切りおとしました。\n"
+"* 全体を見るには外部エディタを使ってください。\n"
 
-#: lib/remote.tcl:173
-msgid "Fetch from"
-msgstr "取得元"
+#: lib/diff.tcl:578
+msgid "Failed to unstage selected hunk."
+msgstr "選択されたパッチをコミット予定から外せません。"
 
-#: lib/remote.tcl:215
-msgid "Push to"
-msgstr "プッシュ先"
+#: lib/diff.tcl:585
+msgid "Failed to stage selected hunk."
+msgstr "選択されたパッチをコミット予定に加えられません。"
 
-#: lib/remote_add.tcl:19
-msgid "Add Remote"
-msgstr "リモートを追加"
+#: lib/diff.tcl:664
+msgid "Failed to unstage selected line."
+msgstr "選択されたパッチ行をコミット予定から外せません。"
 
-#: lib/remote_add.tcl:24
-msgid "Add New Remote"
-msgstr "リモートを新規に追加"
+#: lib/diff.tcl:672
+msgid "Failed to stage selected line."
+msgstr "選択されたパッチ行をコミット予定に加えられません。"
 
-#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36
-msgid "Add"
-msgstr "追加"
+#: lib/branch_checkout.tcl:16 lib/branch_checkout.tcl:21
+msgid "Checkout Branch"
+msgstr "ブランチをチェックアウト"
 
-#: lib/remote_add.tcl:37
-msgid "Remote Details"
-msgstr "ã\83ªã\83¢ã\83¼ã\83\88ã\81®è©³ç´°"
+#: lib/branch_checkout.tcl:26
+msgid "Checkout"
+msgstr "ã\83\81ã\82§ã\83\83ã\82¯ã\82¢ã\82¦ã\83\88"
 
-#: lib/remote_add.tcl:50
-msgid "Location:"
-msgstr "場所:"
+#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92
+msgid "Fetch Tracking Branch"
+msgstr "トラッキング・ブランチをフェッチ"
 
-#: lib/remote_add.tcl:62
-msgid "Further Action"
-msgstr "ã\81\9dã\81®ä»\96ã\81®å\8b\95ä½\9c"
+#: lib/branch_checkout.tcl:47
+msgid "Detach From Local Branch"
+msgstr "ã\83­ã\83¼ã\82«ã\83«ã\83»ã\83\96ã\83©ã\83³ã\83\81ã\81\8bã\82\89å\89\8aé\99¤"
 
-#: lib/remote_add.tcl:65
-msgid "Fetch Immediately"
-msgstr "即座に取得"
+#: lib/index.tcl:6
+msgid "Unable to unlock the index."
+msgstr "インデックスをロックできません"
 
-#: lib/remote_add.tcl:71
-msgid "Initialize Remote Repository and Push"
-msgstr "リモートレポジトリを初期化してプッシュ"
+#: lib/index.tcl:17
+msgid "Index Error"
+msgstr "索引エラー"
 
-#: lib/remote_add.tcl:77
-msgid "Do Nothing Else Now"
-msgstr "何もしない"
+#: lib/index.tcl:19
+msgid ""
+"Updating the Git index failed.  A rescan will be automatically started to "
+"resynchronize git-gui."
+msgstr ""
+"GIT インデックスの更新が失敗しました。git-gui と同期をとるために再スキャンし"
+"ます。"
+
+#: lib/index.tcl:30
+msgid "Continue"
+msgstr "続行"
 
-#: lib/remote_add.tcl:101
-msgid "Please supply a remote name."
-msgstr "ã\83ªã\83¢ã\83¼ã\83\88å\90\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ä¸\8bã\81\95ã\81\84ã\80\82"
+#: lib/index.tcl:33
+msgid "Unlock Index"
+msgstr "ã\82¤ã\83³ã\83\87ã\83\83ã\82¯ã\82¹ã\81®ã\83­ã\83\83ã\82¯è§£é\99¤"
 
-#: lib/remote_add.tcl:114
+#: lib/index.tcl:298
 #, tcl-format
-msgid "'%s' is not an acceptable remote name."
-msgstr "'%s' はリモート名に使えません。"
+msgid "Unstaging %s from commit"
+msgstr "コミットから '%s' を降ろす"
 
-#: lib/remote_add.tcl:125
-#, tcl-format
-msgid "Failed to add remote '%s' of location '%s'."
-msgstr "場所 '%2$s' のリモート '%1$s'の名前変更に失敗しました。"
+#: lib/index.tcl:337
+msgid "Ready to commit."
+msgstr "コミット準備完了"
 
-#: lib/remote_add.tcl:133 lib/transport.tcl:6
+#: lib/index.tcl:350
 #, tcl-format
-msgid "fetch %s"
-msgstr "%s を取得"
+msgid "Adding %s"
+msgstr "コミットに %s を加えています"
 
-#: lib/remote_add.tcl:134
+#: lib/index.tcl:380
 #, tcl-format
-msgid "Fetching the %s"
-msgstr "%s からフェッチしています"
+msgid "Stage %d untracked files?"
+msgstr "管理外の %d ファイルをコミット予定としますか?"
 
-#: lib/remote_add.tcl:157
+#: lib/index.tcl:428
 #, tcl-format
-msgid "Do not know how to initialize repository at location '%s'."
-msgstr "ã\83ªã\83\9dã\82¸ã\83\88ã\83ª '%s' ã\82\92å\88\9dæ\9c\9få\8c\96ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82"
+msgid "Revert changes in file %s?"
+msgstr "ã\83\95ã\82¡ã\82¤ã\83« %s ã\81«ã\81\97ã\81\9få¤\89æ\9b´ã\82\92å\85\83ã\81«æ\88»ã\81\97ã\81¾ã\81\99ã\81\8bï¼\9f"
 
-#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63
-#: lib/transport.tcl:81
+#: lib/index.tcl:430
 #, tcl-format
-msgid "push %s"
-msgstr "%s をプッシュ"
+msgid "Revert changes in these %i files?"
+msgstr "これら %i 個のファイルにした変更を元に戻しますか?"
 
-#: lib/remote_add.tcl:164
-#, tcl-format
-msgid "Setting up the %s (at %s)"
-msgstr "%2$s にある %1$s をセットアップします"
+#: lib/index.tcl:438
+msgid "Any unstaged changes will be permanently lost by the revert."
+msgstr "変更を元に戻すとコミット予定していない変更は全て失われます。"
 
-#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
-msgid "Delete Branch Remotely"
-msgstr "遠隔でブランチ削除"
+#: lib/index.tcl:441
+msgid "Do Nothing"
+msgstr "何もしない"
 
-#: lib/remote_branch_delete.tcl:47
-msgid "From Repository"
-msgstr "元のリポジトリ"
+#: lib/index.tcl:459
+msgid "Reverting selected files"
+msgstr "選択されたファイルにした変更を元に戻します"
 
-#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134
-msgid "Remote:"
-msgstr "リモート:"
+#: lib/index.tcl:463
+#, tcl-format
+msgid "Reverting %s"
+msgstr "%s にした変更を元に戻します"
 
-#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149
-msgid "Arbitrary Location:"
-msgstr "任意の位置:"
+#: lib/sshkey.tcl:31
+msgid "No keys found."
+msgstr "キーがありません。"
 
-#: lib/remote_branch_delete.tcl:84
-msgid "Branches"
-msgstr "ブランチ"
+#: lib/sshkey.tcl:34
+#, tcl-format
+msgid "Found a public key in: %s"
+msgstr "公開鍵がありました: %s"
 
-#: lib/remote_branch_delete.tcl:109
-msgid "Delete Only If"
-msgstr "条件付で削除"
+#: lib/sshkey.tcl:40
+msgid "Generate Key"
+msgstr "鍵を生成"
 
-#: lib/remote_branch_delete.tcl:111
-msgid "Merged Into:"
-msgstr "ã\83\9eã\83¼ã\82¸å\85\88:"
+#: lib/sshkey.tcl:58
+msgid "Copy To Clipboard"
+msgstr "ã\82¯ã\83ªã\83\83ã\83\97ã\83\9cã\83¼ã\83\89ã\81«ã\82³ã\83\94ã\83¼"
 
-#: lib/remote_branch_delete.tcl:152
-msgid "A branch is required for 'Merged Into'."
-msgstr "'マージ先' にはブランチが必要です。"
+#: lib/sshkey.tcl:72
+msgid "Your OpenSSH Public Key"
+msgstr "あなたの OpenSSH 公開鍵"
+
+#: lib/sshkey.tcl:80
+msgid "Generating..."
+msgstr "生成中..."
 
-#: lib/remote_branch_delete.tcl:184
+#: lib/sshkey.tcl:86
 #, tcl-format
 msgid ""
-"The following branches are not completely merged into %s:\n"
+"Could not start ssh-keygen:\n"
 "\n"
-" - %s"
+"%s"
 msgstr ""
-"以下のブランチは %s に完全にマージされていません:\n"
+"ssh-keygen を起動できません:\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 から"
-"フェッチして下さい。"
-
-#: lib/remote_branch_delete.tcl:207
-msgid "Please select one or more branches to delete."
-msgstr "削除するブランチを選択して下さい。"
+"%s"
 
-#: lib/remote_branch_delete.tcl:226
-#, tcl-format
-msgid "Deleting branches from %s"
-msgstr "%s からブランチを削除しています。"
+#: lib/sshkey.tcl:113
+msgid "Generation failed."
+msgstr "生成に失敗しました。"
 
-#: lib/remote_branch_delete.tcl:292
-msgid "No repository selected."
-msgstr "リポジトリが選択されていません。"
+#: lib/sshkey.tcl:120
+msgid "Generation succeeded, but no keys found."
+msgstr "生成には成功しましたが、鍵が見つかりません。"
 
-#: lib/remote_branch_delete.tcl:297
+#: lib/sshkey.tcl:123
 #, tcl-format
-msgid "Scanning %s..."
-msgstr "%s をスキャンしています…"
-
-#: lib/search.tcl:21
-msgid "Find:"
-msgstr "検索:"
-
-#: lib/search.tcl:23
-msgid "Next"
-msgstr "次"
+msgid "Your key is in: %s"
+msgstr "あなたの鍵は %s にあります"
 
-#: lib/search.tcl:24
-msgid "Prev"
-msgstr "前"
+#: 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/search.tcl:25
-msgid "Case-Sensitive"
-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/shortcut.tcl:21 lib/shortcut.tcl:62
-msgid "Cannot write shortcut:"
-msgstr "ショートカットが書けません:"
+#: lib/commit.tcl:48
+msgid "Error loading commit data for amend:"
+msgstr "訂正するコミットのデータを読めません:"
 
-#: lib/shortcut.tcl:137
-msgid "Cannot write icon:"
-msgstr "ã\82¢ã\82¤ã\82³ã\83³ã\81\8cæ\9b¸ã\81\91ません:"
+#: lib/commit.tcl:75
+msgid "Unable to obtain your identity:"
+msgstr "ã\83¦ã\83¼ã\82¶ã\81®æ­£ä½\93ã\82\92確èª\8dã\81§ã\81\8dません:"
 
-#: lib/spellcheck.tcl:57
-msgid "Unsupported spell checker"
-msgstr "サポートされていないスペルチェッカーです"
+#: lib/commit.tcl:80
+msgid "Invalid GIT_COMMITTER_IDENT:"
+msgstr "GIT_COMMITTER_IDENT が無効です:"
 
-#: lib/spellcheck.tcl:65
-msgid "Spell checking is unavailable"
-msgstr "スペルチェック機能は使えません"
+#: lib/commit.tcl:129
+#, tcl-format
+msgid "warning: Tcl does not support encoding '%s'."
+msgstr "警告: Tcl はエンコーディング '%s' をサポートしていません"
 
-#: lib/spellcheck.tcl:68
-msgid "Invalid spell checking configuration"
-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/spellcheck.tcl:70
+#: lib/commit.tcl:173
 #, tcl-format
-msgid "Reverting dictionary to %s."
-msgstr "辞書を %s に巻き戻します"
-
-#: lib/spellcheck.tcl:73
-msgid "Spell checker silently failed on startup"
-msgstr "スペルチェッカーの起動に失敗しました"
+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"
 
-#: lib/spellcheck.tcl:80
-msgid "Unrecognized spell checker"
-msgstr "スペルチェッカーが判別できません"
+#: 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/spellcheck.tcl:186
-msgid "No Suggestions"
-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/spellcheck.tcl:388
-msgid "Unexpected EOF from spell checker"
-msgstr "スペルチェッカーが予想外の EOF を返しました"
+#: 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"
+"- 第1行: 何をしたか、を1行で要約。\n"
+"- 第2行: 空白\n"
+"- 残りの行: なぜ、この変更が良い変更か、の説明。\n"
 
-#: lib/spellcheck.tcl:392
-msgid "Spell Checker Failed"
-msgstr "ã\82¹ã\83\9aã\83«ã\83\81ã\82§ã\83\83ã\82¯å¤±æ\95\97"
+#: lib/commit.tcl:235
+msgid "Calling pre-commit hook..."
+msgstr "ã\82³ã\83\9fã\83\83ã\83\88å\89\8dã\83\95ã\83\83ã\82¯ã\82\92å®\9fè¡\8c中ã\83»ã\83»ã\83»"
 
-#: lib/sshkey.tcl:31
-msgid "No keys found."
-msgstr "ã\82­ã\83¼ã\81\8cã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\80\82"
+#: lib/commit.tcl:250
+msgid "Commit declined by pre-commit hook."
+msgstr "ã\82³ã\83\9fã\83\83ã\83\88å\89\8dã\83\95ã\83\83ã\82¯ã\81\8cã\82³ã\83\9fã\83\83ã\83\88ã\82\92æ\8b\92å\90¦ã\81\97ã\81¾ã\81\97ã\81\9f"
 
-#: lib/sshkey.tcl:34
-#, tcl-format
-msgid "Found a public key in: %s"
-msgstr "公開鍵がありました: %s"
+#: 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/sshkey.tcl:40
-msgid "Generate Key"
-msgstr "鍵を生成"
+#: lib/commit.tcl:290
+msgid "Calling commit-msg hook..."
+msgstr "コミット・メッセージ・フックを実行中・・・"
 
-#: lib/sshkey.tcl:56
-msgid "Copy To Clipboard"
-msgstr "ã\82¯ã\83ªã\83\83ã\83\97ã\83\9cã\83¼ã\83\89ã\81«ã\82³ã\83\94ã\83¼"
+#: lib/commit.tcl:305
+msgid "Commit declined by commit-msg hook."
+msgstr "ã\82³ã\83\9fã\83\83ã\83\88ã\83»ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\83\95ã\83\83ã\82¯ã\81\8cã\82³ã\83\9fã\83\83ã\83\88ã\82\92æ\8b\92å\90¦ã\81\97ã\81¾ã\81\97ã\81\9f"
 
-#: lib/sshkey.tcl:70
-msgid "Your OpenSSH Public Key"
-msgstr "あなたの OpenSSH 公開鍵"
+#: lib/commit.tcl:318
+msgid "Committing changes..."
+msgstr "変更点をコミット中・・・"
 
-#: lib/sshkey.tcl:78
-msgid "Generating..."
-msgstr "生成中..."
+#: lib/commit.tcl:334
+msgid "write-tree failed:"
+msgstr "write-tree が失敗しました:"
+
+#: lib/commit.tcl:335 lib/commit.tcl:379 lib/commit.tcl:400
+msgid "Commit failed."
+msgstr "コミットに失敗しました。"
 
-#: lib/sshkey.tcl:84
+#: lib/commit.tcl:352
 #, tcl-format
+msgid "Commit %s appears to be corrupt"
+msgstr "コミット %s は壊れています"
+
+#: lib/commit.tcl:357
 msgid ""
-"Could not start ssh-keygen:\n"
+"No changes to commit.\n"
 "\n"
-"%s"
+"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 ""
-"ssh-keygen を起動できません:\n"
+"コミットする変更がありません。\n"
 "\n"
-"%s"
-
-#: lib/sshkey.tcl:111
-msgid "Generation failed."
-msgstr "生成に失敗しました。"
+"マージでなく、また、一つも変更点がありません。\n"
+"\n"
+"自動的に再スキャンを開始します。\n"
 
-#: lib/sshkey.tcl:118
-msgid "Generation succeeded, but no keys found."
-msgstr "生成には成功しましたが、鍵が見つかりません。"
+#: lib/commit.tcl:364
+msgid "No changes to commit."
+msgstr "コミットする変更がありません。"
 
-#: lib/sshkey.tcl:121
-#, tcl-format
-msgid "Your key is in: %s"
-msgstr "あなたの鍵は %s にあります"
+#: lib/commit.tcl:378
+msgid "commit-tree failed:"
+msgstr "commit-tree が失敗しました:"
 
-#: lib/status_bar.tcl:83
-#, tcl-format
-msgid "%s ... %*i of %*i %s (%3i%%)"
-msgstr "%1$s ... %4$*i %6$s 中の %2$*i (%7$3i%%)"
+#: lib/commit.tcl:399
+msgid "update-ref failed:"
+msgstr "update-ref が失敗しました:"
 
-#: lib/tools.tcl:75
+#: lib/commit.tcl:492
 #, tcl-format
-msgid "Running %s requires a selected file."
-msgstr "ã\83\95ã\82¡ã\82¤ã\83«ã\82\92é\81¸æ\8a\9eã\81\97ã\81¦ã\81\8bã\82\89 %s ã\82\92èµ·å\8b\95ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82"
+msgid "Created commit %s: %s"
+msgstr "ã\82³ã\83\9fã\83\83ã\83\88 %s ã\82\92ä½\9cæ\88\90ã\81\97ã\81¾ã\81\97ã\81\9f: %s"
 
-#: lib/tools.tcl:90
-#, tcl-format
-msgid "Are you sure you want to run %s?"
-msgstr "本当に %s を起動しますか?"
+#: lib/browser.tcl:17
+msgid "Starting..."
+msgstr "起動中…"
 
-#: lib/tools.tcl:110
-#, tcl-format
-msgid "Tool: %s"
-msgstr "ツール: %s"
+#: lib/browser.tcl:27
+msgid "File Browser"
+msgstr "ファイル・ブラウザ"
 
-#: lib/tools.tcl:111
+#: lib/browser.tcl:132 lib/browser.tcl:149
 #, tcl-format
-msgid "Running: %s"
-msgstr "実行中: %s"
+msgid "Loading %s..."
+msgstr "%s をロード中…"
 
-#: lib/tools.tcl:149
-#, tcl-format
-msgid "Tool completed successfully: %s"
-msgstr "ツールが完了しました: %s"
+#: lib/browser.tcl:193
+msgid "[Up To Parent]"
+msgstr "[上位フォルダへ]"
 
-#: lib/tools.tcl:151
-#, tcl-format
-msgid "Tool failed: %s"
-msgstr "ツールが失敗しました: %s"
+#: lib/browser.tcl:275 lib/browser.tcl:282
+msgid "Browse Branch Files"
+msgstr "現在のブランチのファイルを見る"
 
-#: lib/tools_dlg.tcl:22
-msgid "Add Tool"
-msgstr "ã\83\84ã\83¼ã\83«ã\81®追加"
+#: lib/remote_add.tcl:20
+msgid "Add Remote"
+msgstr "ã\83ªã\83¢ã\83¼ã\83\88ã\82\92追加"
 
-#: lib/tools_dlg.tcl:28
-msgid "Add New Tool Command"
-msgstr "新規ツールコマンドの追加"
+#: lib/remote_add.tcl:25
+msgid "Add New Remote"
+msgstr "リモートを新規に追加"
 
-#: lib/tools_dlg.tcl:33
-msgid "Add globally"
-msgstr "全体に追加"
+#: lib/remote_add.tcl:39
+msgid "Remote Details"
+msgstr "リモートの詳細"
 
-#: lib/tools_dlg.tcl:45
-msgid "Tool Details"
-msgstr "ツールの詳細"
+#: lib/remote_add.tcl:50
+msgid "Location:"
+msgstr "場所:"
 
-#: lib/tools_dlg.tcl:48
-msgid "Use '/' separators to create a submenu tree:"
-msgstr "'/' でサブメニューを区切ります:"
+#: lib/remote_add.tcl:60
+msgid "Further Action"
+msgstr "その他の動作"
 
-#: lib/tools_dlg.tcl:61
-msgid "Command:"
-msgstr "コマンド:"
+#: lib/remote_add.tcl:63
+msgid "Fetch Immediately"
+msgstr "即座に取得"
 
-#: lib/tools_dlg.tcl:74
-msgid "Show a dialog before running"
-msgstr "起動する前にダイアログを表示"
+#: lib/remote_add.tcl:69
+msgid "Initialize Remote Repository and Push"
+msgstr "リモートレポジトリを初期化してプッシュ"
 
-#: lib/tools_dlg.tcl:80
-msgid "Ask the user to select a revision (sets $REVISION)"
-msgstr "ユーザにコミットを一つ選ばせる ($REVISION にセットします)"
+#: lib/remote_add.tcl:75
+msgid "Do Nothing Else Now"
+msgstr "何もしない"
 
-#: lib/tools_dlg.tcl:85
-msgid "Ask the user for additional arguments (sets $ARGS)"
-msgstr "ã\83¦ã\83¼ã\82¶ã\81«ä»\96ã\81®å¼\95æ\95°ã\82\92追å\8a ã\81\95ã\81\9bã\82\8b ($ARGS ã\81«ã\82»ã\83\83ã\83\88ã\81\97ã\81¾ã\81\99)"
+#: lib/remote_add.tcl:100
+msgid "Please supply a remote name."
+msgstr "ã\83ªã\83¢ã\83¼ã\83\88å\90\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ä¸\8bã\81\95ã\81\84ã\80\82"
 
-#: lib/tools_dlg.tcl:92
-msgid "Don't show the command output window"
-msgstr "コマンドからの出力ウィンドウを見せない"
+#: lib/remote_add.tcl:113
+#, tcl-format
+msgid "'%s' is not an acceptable remote name."
+msgstr "'%s' はリモート名に使えません。"
 
-#: lib/tools_dlg.tcl:97
-msgid "Run only if a diff is selected ($FILENAME not empty)"
-msgstr "パッチが選ばれているときだけ動かす($FILENAME が空でない)"
+#: lib/remote_add.tcl:124
+#, tcl-format
+msgid "Failed to add remote '%s' of location '%s'."
+msgstr "場所 '%2$s' のリモート '%1$s'の名前変更に失敗しました。"
 
-#: lib/tools_dlg.tcl:121
-msgid "Please supply a name for the tool."
-msgstr "ツール名を指定して下さい。"
+#: lib/remote_add.tcl:133
+#, tcl-format
+msgid "Fetching the %s"
+msgstr "%s からフェッチしています"
 
-#: lib/tools_dlg.tcl:129
+#: lib/remote_add.tcl:156
 #, tcl-format
-msgid "Tool '%s' already exists."
-msgstr "ã\83\84ã\83¼ã\83« '%s' ã\81¯æ\97¢ã\81«å­\98å\9c¨ã\81\97ã\81¾ã\81\99。"
+msgid "Do not know how to initialize repository at location '%s'."
+msgstr "ã\83ªã\83\9dã\82¸ã\83\88ã\83ª '%s' ã\82\92å\88\9dæ\9c\9få\8c\96ã\81§ã\81\8dã\81¾ã\81\9bã\82\93。"
 
-#: lib/tools_dlg.tcl:151
+#: lib/remote_add.tcl:163
 #, tcl-format
-msgid ""
-"Could not add tool:\n"
-"%s"
-msgstr ""
-"ツールを追加できません:\n"
-"%s"
+msgid "Setting up the %s (at %s)"
+msgstr "%2$s にある %1$s をセットアップします"
 
-#: lib/tools_dlg.tcl:190
-msgid "Remove Tool"
-msgstr "ツールの削除"
+#: lib/line.tcl:17
+msgid "Goto Line:"
+msgstr "行番号"
 
-#: lib/tools_dlg.tcl:196
-msgid "Remove Tool Commands"
-msgstr "ツールコマンドの削除"
+#: lib/line.tcl:23
+msgid "Go"
+msgstr "移動"
 
-#: lib/tools_dlg.tcl:200
-msgid "Remove"
-msgstr "削除"
+#: lib/branch_create.tcl:23
+msgid "Create Branch"
+msgstr "ブランチを作成"
 
-#: lib/tools_dlg.tcl:236
-msgid "(Blue denotes repository-local tools)"
-msgstr "(青色はローカルレポジトリのツールです)"
+#: lib/branch_create.tcl:28
+msgid "Create New Branch"
+msgstr "ブランチを新規作成"
 
-#: lib/tools_dlg.tcl:297
-#, tcl-format
-msgid "Run Command: %s"
-msgstr "コマンドを起動: %s"
+#: lib/branch_create.tcl:42
+msgid "Branch Name"
+msgstr "ブランチ名"
 
-#: lib/tools_dlg.tcl:311
-msgid "Arguments"
-msgstr "引数"
+#: lib/branch_create.tcl:57
+msgid "Match Tracking Branch Name"
+msgstr "トラッキング・ブランチ名を合わせる"
 
-#: lib/tools_dlg.tcl:348
-msgid "OK"
-msgstr "OK"
+#: lib/branch_create.tcl:66
+msgid "Starting Revision"
+msgstr "初期リビジョン"
 
-#: lib/transport.tcl:7
-#, tcl-format
-msgid "Fetching new changes from %s"
-msgstr "%s から新しい変更をフェッチしています"
+#: lib/branch_create.tcl:72
+msgid "Update Existing Branch:"
+msgstr "既存のブランチを更新:"
 
-#: lib/transport.tcl:18
-#, tcl-format
-msgid "remote prune %s"
-msgstr "遠隔刈込 %s"
+#: lib/branch_create.tcl:75
+msgid "No"
+msgstr "いいえ"
 
-#: lib/transport.tcl:19
-#, tcl-format
-msgid "Pruning tracking branches deleted from %s"
-msgstr "%s から削除されたトラッキング・ブランチを刈っています"
+#: lib/branch_create.tcl:80
+msgid "Fast Forward Only"
+msgstr "早送りのみ"
 
-#: lib/transport.tcl:26
-#, tcl-format
-msgid "Pushing changes to %s"
-msgstr "%s へ変更をプッシュしています"
+#: lib/branch_create.tcl:97
+msgid "Checkout After Creation"
+msgstr "作成してすぐチェックアウト"
 
-#: lib/transport.tcl:64
-#, tcl-format
-msgid "Mirroring to %s"
-msgstr "%s へミラーしています"
+#: lib/branch_create.tcl:132
+msgid "Please select a tracking branch."
+msgstr "トラッキング・ブランチを選択して下さい。"
 
-#: lib/transport.tcl:82
+#: lib/branch_create.tcl:141
 #, tcl-format
-msgid "Pushing %s %s to %s"
-msgstr "%3$s へ %1$s %2$s をプッシュしています"
+msgid "Tracking branch %s is not a branch in the remote repository."
+msgstr ""
+"トラッキング・ブランチ %s はリモートリポジトリのブランチではありません。"
 
-#: lib/transport.tcl:100
-msgid "Push Branches"
-msgstr "ã\83\96ã\83©ã\83³ã\83\81ã\82\92ã\83\97ã\83\83ã\82·ã\83¥"
+#: lib/spellcheck.tcl:57
+msgid "Unsupported spell checker"
+msgstr "ã\82µã\83\9dã\83¼ã\83\88ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\82¹ã\83\9aã\83«ã\83\81ã\82§ã\83\83ã\82«ã\83¼ã\81§ã\81\99"
 
-#: lib/transport.tcl:114
-msgid "Source Branches"
-msgstr "元のブランチ"
+#: lib/spellcheck.tcl:65
+msgid "Spell checking is unavailable"
+msgstr "スペルチェック機能は使えません"
 
-#: lib/transport.tcl:131
-msgid "Destination Repository"
-msgstr "送り先リポジトリ"
+#: lib/spellcheck.tcl:68
+msgid "Invalid spell checking configuration"
+msgstr "スペルチェックの設定が不正です"
 
-#: lib/transport.tcl:169
-msgid "Transfer Options"
-msgstr "通信オプション"
+#: lib/spellcheck.tcl:70
+#, tcl-format
+msgid "Reverting dictionary to %s."
+msgstr "辞書を %s に巻き戻します"
 
-#: lib/transport.tcl:171
-msgid "Force overwrite existing branch (may discard changes)"
-msgstr "既存ブランチを上書き(変更を破棄する可能性があります)"
+#: lib/spellcheck.tcl:73
+msgid "Spell checker silently failed on startup"
+msgstr "スペルチェッカーの起動に失敗しました"
 
-#: lib/transport.tcl:175
-msgid "Use thin pack (for slow network connections)"
-msgstr "Thin Pack を使う(遅いネットワーク接続)"
+#: lib/spellcheck.tcl:80
+msgid "Unrecognized spell checker"
+msgstr "スペルチェッカーが判別できません"
 
-#: lib/transport.tcl:179
-msgid "Include tags"
-msgstr "タグを含める"
+#: lib/spellcheck.tcl:186
+msgid "No Suggestions"
+msgstr "提案なし"
+
+#: lib/spellcheck.tcl:388
+msgid "Unexpected EOF from spell checker"
+msgstr "スペルチェッカーが予想外の EOF を返しました"
+
+#: lib/spellcheck.tcl:392
+msgid "Spell Checker Failed"
+msgstr "スペルチェック失敗"
index 6fd6d4e5f64bcab81fa64bf363db1b530a00a544..ca994c5c545cb0394fc5d355ecb6ea2fe5f1f193 100644 (file)
@@ -1041,7 +1041,7 @@ The possible behaviours are: ignore, warn, error.")"
                # placed before the commit of the next action
                checkout_onto
 
-               warn "$(gettext "You can fix this with 'git rebase --edit-todo'.")"
+               warn "$(gettext "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.")"
                die "$(gettext "Or you can abort the rebase with 'git rebase --abort'.")"
        fi
 }
@@ -1141,9 +1141,6 @@ To continue rebase after editing, run:
        ;;
 esac
 
-git var GIT_COMMITTER_IDENT >/dev/null ||
-       die "$(gettext "You need to set your committer info first")"
-
 comment_for_reflog start
 
 if test ! -z "$switch_to"
diff --git a/grep.c b/grep.c
index d7d00b87cb2a28332ccad4ea4ff676e3f2bc2611..1194d35b5d06d7960d4464884952e755914e2519 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -898,17 +898,6 @@ static int fixmatch(struct grep_pat *p, char *line, char *eol,
        }
 }
 
-static int regmatch(const regex_t *preg, char *line, char *eol,
-                   regmatch_t *match, int eflags)
-{
-#ifdef REG_STARTEND
-       match->rm_so = 0;
-       match->rm_eo = eol - line;
-       eflags |= REG_STARTEND;
-#endif
-       return regexec(preg, line, 1, match, eflags);
-}
-
 static int patmatch(struct grep_pat *p, char *line, char *eol,
                    regmatch_t *match, int eflags)
 {
@@ -919,7 +908,8 @@ static int patmatch(struct grep_pat *p, char *line, char *eol,
        else if (p->pcre_regexp)
                hit = !pcrematch(p, line, eol, match, eflags);
        else
-               hit = !regmatch(&p->regexp, line, eol, match, eflags);
+               hit = !regexec_buf(&p->regexp, line, eol - line, 1, match,
+                                  eflags);
 
        return hit;
 }
diff --git a/http.c b/http.c
index cd40b012f89397db67e851101ab38c2c57fd18c9..82ed54269059c38e1698b7ffc1af0d1000e5bfec 100644 (file)
--- a/http.c
+++ b/http.c
@@ -201,6 +201,13 @@ static void finish_active_slot(struct active_request_slot *slot)
                slot->callback_func(slot->callback_data);
 }
 
+static void xmulti_remove_handle(struct active_request_slot *slot)
+{
+#ifdef USE_CURL_MULTI
+       curl_multi_remove_handle(curlm, slot->curl);
+#endif
+}
+
 #ifdef USE_CURL_MULTI
 static void process_curl_messages(void)
 {
@@ -216,7 +223,7 @@ static void process_curl_messages(void)
                               slot->curl != curl_message->easy_handle)
                                slot = slot->next;
                        if (slot != NULL) {
-                               curl_multi_remove_handle(curlm, slot->curl);
+                               xmulti_remove_handle(slot);
                                slot->curl_result = curl_result;
                                finish_active_slot(slot);
                        } else {
@@ -723,7 +730,7 @@ static CURL *get_curl_handle(void)
         * precedence here, as in CURL.
         */
        if (!curl_http_proxy) {
-               if (!strcmp(http_auth.protocol, "https")) {
+               if (http_auth.protocol && !strcmp(http_auth.protocol, "https")) {
                        var_override(&curl_http_proxy, getenv("HTTPS_PROXY"));
                        var_override(&curl_http_proxy, getenv("https_proxy"));
                } else {
@@ -881,9 +888,7 @@ void http_cleanup(void)
        while (slot != NULL) {
                struct active_request_slot *next = slot->next;
                if (slot->curl != NULL) {
-#ifdef USE_CURL_MULTI
-                       curl_multi_remove_handle(curlm, slot->curl);
-#endif
+                       xmulti_remove_handle(slot);
                        curl_easy_cleanup(slot->curl);
                }
                free(slot);
@@ -1022,6 +1027,8 @@ int start_active_slot(struct active_request_slot *slot)
 
        if (curlm_result != CURLM_OK &&
            curlm_result != CURLM_CALL_MULTI_PERFORM) {
+               warning("curl_multi_add_handle failed: %s",
+                       curl_multi_strerror(curlm_result));
                active_requests--;
                slot->in_use = 0;
                return 0;
@@ -1161,13 +1168,13 @@ void run_active_slot(struct active_request_slot *slot)
 static void release_active_slot(struct active_request_slot *slot)
 {
        closedown_active_slot(slot);
-       if (slot->curl && curl_session_count > min_curl_sessions) {
-#ifdef USE_CURL_MULTI
-               curl_multi_remove_handle(curlm, slot->curl);
-#endif
-               curl_easy_cleanup(slot->curl);
-               slot->curl = NULL;
-               curl_session_count--;
+       if (slot->curl) {
+               xmulti_remove_handle(slot);
+               if (curl_session_count > min_curl_sessions) {
+                       curl_easy_cleanup(slot->curl);
+                       slot->curl = NULL;
+                       curl_session_count--;
+               }
        }
 #ifdef USE_CURL_MULTI
        fill_active_slots();
diff --git a/ident.c b/ident.c
index e20a772dde4230b0871ffe85a5204919402aaf94..d17b5bd341eccd604c849201fb1f13153be9736e 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -101,7 +101,7 @@ static int canonical_name(const char *host, struct strbuf *out)
        memset (&hints, '\0', sizeof (hints));
        hints.ai_flags = AI_CANONNAME;
        if (!getaddrinfo(host, NULL, &hints, &ai)) {
-               if (ai && strchr(ai->ai_canonname, '.')) {
+               if (ai && ai->ai_canonname && strchr(ai->ai_canonname, '.')) {
                        strbuf_addstr(out, ai->ai_canonname);
                        status = 0;
                }
index 082412aca66be6ce826034c5177e2f7f4b3bda58..ce285c2e0c552ecf725c87052846d755507bd9db 100644 (file)
@@ -4,9 +4,18 @@
 #include "sha1-lookup.h"
 #include "patch-ids.h"
 
+static int patch_id_defined(struct commit *commit)
+{
+       /* must be 0 or 1 parents */
+       return !commit->parents || !commit->parents->next;
+}
+
 int commit_patch_id(struct commit *commit, struct diff_options *options,
                    unsigned char *sha1, int diff_header_only)
 {
+       if (!patch_id_defined(commit))
+               return -1;
+
        if (commit->parents)
                diff_tree_sha1(commit->parents->item->object.oid.hash,
                               commit->object.oid.hash, "", options);
@@ -45,6 +54,7 @@ int init_patch_ids(struct patch_ids *ids)
 {
        memset(ids, 0, sizeof(*ids));
        diff_setup(&ids->diffopts);
+       ids->diffopts.detect_rename = 0;
        DIFF_OPT_SET(&ids->diffopts, RECURSIVE);
        diff_setup_done(&ids->diffopts);
        hashmap_init(&ids->patches, (hashmap_cmp_fn)patch_id_cmp, 256);
@@ -76,6 +86,9 @@ struct patch_id *has_commit_patch_id(struct commit *commit,
 {
        struct patch_id patch;
 
+       if (!patch_id_defined(commit))
+               return NULL;
+
        memset(&patch, 0, sizeof(patch));
        if (init_patch_id_entry(&patch, commit, ids))
                return NULL;
@@ -88,6 +101,9 @@ struct patch_id *add_commit_patch_id(struct commit *commit,
 {
        struct patch_id *key = xcalloc(1, sizeof(*key));
 
+       if (!patch_id_defined(commit))
+               return NULL;
+
        if (init_patch_id_entry(key, commit, ids)) {
                free(key);
                return NULL;
index 4a80f6fc96a572681acd8aa8349b2c0b1237f9f1..59809e4793a20e3030462ec23bff2b5358283282 100644 (file)
@@ -96,7 +96,5 @@ static inline int ps_strcmp(const struct pathspec_item *item,
 
 extern char *find_pathspecs_matching_against_index(const struct pathspec *pathspec);
 extern void add_pathspec_matches_against_index(const struct pathspec *pathspec, char *seen);
-extern const char *check_path_for_gitlink(const char *path);
-extern void die_if_path_beyond_symlink(const char *path, const char *prefix);
 
 #endif /* PATHSPEC_H */
index 491e52d120a6c02e6a4e7de1e2f5934db4de9f22..248432af430d7e5b147898b2ac61f2ebbb468070 100644 (file)
@@ -627,7 +627,7 @@ void set_object_name_for_intent_to_add_entry(struct cache_entry *ce)
        hashcpy(ce->sha1, sha1);
 }
 
-int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags, int force_mode)
+int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags)
 {
        int size, namelen, was_same;
        mode_t st_mode = st->st_mode;
@@ -656,11 +656,10 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
        else
                ce->ce_flags |= CE_INTENT_TO_ADD;
 
-       if (S_ISREG(st_mode) && force_mode)
-               ce->ce_mode = create_ce_mode(force_mode);
-       else if (trust_executable_bit && has_symlinks)
+
+       if (trust_executable_bit && has_symlinks) {
                ce->ce_mode = create_ce_mode(st_mode);
-       else {
+       else {
                /* If there is an existing entry, pick the mode bits and type
                 * from it, otherwise assume unexecutable regular file.
                 */
@@ -719,13 +718,12 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
        return 0;
 }
 
-int add_file_to_index(struct index_state *istate, const char *path,
-       int flags, int force_mode)
+int add_file_to_index(struct index_state *istate, const char *path, int flags)
 {
        struct stat st;
        if (lstat(path, &st))
                die_errno("unable to stat '%s'", path);
-       return add_to_index(istate, path, &st, flags, force_mode);
+       return add_to_index(istate, path, &st, flags);
 }
 
 struct cache_entry *make_cache_entry(unsigned int mode,
@@ -756,6 +754,35 @@ struct cache_entry *make_cache_entry(unsigned int mode,
        return ret;
 }
 
+/*
+ * Chmod an index entry with either +x or -x.
+ *
+ * Returns -1 if the chmod for the particular cache entry failed (if it's
+ * not a regular file), -2 if an invalid flip argument is passed in, 0
+ * otherwise.
+ */
+int chmod_index_entry(struct index_state *istate, struct cache_entry *ce,
+                     char flip)
+{
+       if (!S_ISREG(ce->ce_mode))
+               return -1;
+       switch (flip) {
+       case '+':
+               ce->ce_mode |= 0111;
+               break;
+       case '-':
+               ce->ce_mode &= ~0111;
+               break;
+       default:
+               return -2;
+       }
+       cache_tree_invalidate_path(istate, ce->name);
+       ce->ce_flags |= CE_UPDATE_IN_BASE;
+       istate->cache_changed |= CE_ENTRY_CHANGED;
+
+       return 0;
+}
+
 int ce_same_name(const struct cache_entry *a, const struct cache_entry *b)
 {
        int len = ce_namelen(a);
index f3bd5719c636d10780e466e39f1145375c4cab68..b839be491b74a034cf848d2dd043aba7d75b7b92 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -187,7 +187,7 @@ void strbuf_insert(struct strbuf *sb, size_t pos, const void *data, size_t len)
 
 void strbuf_remove(struct strbuf *sb, size_t pos, size_t len)
 {
-       strbuf_splice(sb, pos, len, NULL, 0);
+       strbuf_splice(sb, pos, len, "", 0);
 }
 
 void strbuf_add(struct strbuf *sb, const void *data, size_t len)
index cfd70129bb70f7ed88d999421f3bc432119233c1..e8adedadfdca8549b3c4f8f8a19d383a7611f4ad 100755 (executable)
@@ -30,7 +30,13 @@ unpack_git_rev () {
 }
 build_git_rev () {
        rev=$1
-       cp ../../config.mak build/$rev/config.mak
+       for config in config.mak config.mak.autogen config.status
+       do
+               if test -e "../../$config"
+               then
+                       cp "../../$config" "build/$rev/"
+               fi
+       done
        (cd build/$rev && make $GIT_PERF_MAKE_OPTS) ||
        die "failed to build revision '$mydir'"
 }
index e76e84afbba58f94c600586388f8793b6b6eae84..2e47fe01cfaf565777c9359e7c2675ef051c33e3 100755 (executable)
@@ -41,6 +41,15 @@ test_expect_success 'check ambiguity' '
        test_must_fail git checkout world all
 '
 
+test_expect_success 'check ambiguity in subdir' '
+       mkdir sub &&
+       # not ambiguous because sub/world does not exist
+       git -C sub checkout world ../all &&
+       echo hello >sub/world &&
+       # ambiguous because sub/world does exist
+       test_must_fail git -C sub checkout world ../all
+'
+
 test_expect_success 'disambiguate checking out from a tree-ish' '
        echo bye > world &&
        git checkout world -- world &&
index 468a000e4bbb113d004ee8df8ef0db9b8260fdb5..3e5ac81bd29bf6aded0d0fa643dca448a281d481 100755 (executable)
@@ -174,6 +174,18 @@ test_expect_success 'checkout of branch with a file having the same name fails'
        test_branch master
 '
 
+test_expect_success 'checkout of branch with a file in subdir having the same name fails' '
+       git checkout -B master &&
+       test_might_fail git branch -D spam &&
+
+       >spam &&
+       mkdir sub &&
+       mv spam sub/spam &&
+       test_must_fail git -C sub checkout spam &&
+       test_must_fail git rev-parse --verify refs/heads/spam &&
+       test_branch master
+'
+
 test_expect_success 'checkout <branch> -- succeeds, even if a file with the same name exists' '
        git checkout -B master &&
        test_might_fail git branch -D spam &&
index dfe02f48183ad77a93d72c0f5e952380b63a9229..32ac6e09bdc81acfb8de5cf887302794d20c8ece 100755 (executable)
@@ -80,4 +80,17 @@ test_expect_success '.lock files cleaned up' '
        )
 '
 
+test_expect_success '--chmod=+x and chmod=-x in the same argument list' '
+       >A &&
+       >B &&
+       git add A B &&
+       git update-index --chmod=+x A --chmod=-x B &&
+       cat >expect <<-\EOF &&
+       100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       A
+       100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       B
+       EOF
+       git ls-files --stage A B >actual &&
+       test_cmp expect actual
+'
+
 test_done
index 597e94e294d9dc949695867be295af333bf8f0fe..e38e2963880d42dc335870292f7a2aa4d583497c 100755 (executable)
@@ -1195,7 +1195,7 @@ To avoid this message, use "drop" to explicitly remove a commit.
 Use 'git config rebase.missingCommitsCheck' to change the level of warnings.
 The possible behaviours are: ignore, warn, error.
 
-You can fix this with 'git rebase --edit-todo'.
+You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
 Or you can abort the rebase with 'git rebase --abort'.
 EOF
 
@@ -1219,7 +1219,7 @@ cat >expect <<EOF
 Warning: the command isn't recognized in the following line:
  - badcmd $(git rev-list --oneline -1 master~1)
 
-You can fix this with 'git rebase --edit-todo'.
+You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
 Or you can abort the rebase with 'git rebase --abort'.
 EOF
 
@@ -1254,7 +1254,7 @@ cat >expect <<EOF
 Warning: the SHA-1 is missing or isn't a commit in the following line:
  - edit XXXXXXX False commit
 
-You can fix this with 'git rebase --edit-todo'.
+You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
 Or you can abort the rebase with 'git rebase --abort'.
 EOF
 
index 2978cb9d640d1e826e8fb9b96e99bc69ee86f09d..924a26612681817156e54f4c1bc4a89e7cb5e8de 100755 (executable)
@@ -349,4 +349,52 @@ test_expect_success POSIXPERM,SYMLINKS 'git add --chmod=+x with symlinks' '
        test_mode_in_index 100755 foo2
 '
 
+test_expect_success 'git add --chmod=[+-]x changes index with already added file' '
+       echo foo >foo3 &&
+       git add foo3 &&
+       git add --chmod=+x foo3 &&
+       test_mode_in_index 100755 foo3 &&
+       echo foo >xfoo3 &&
+       chmod 755 xfoo3 &&
+       git add xfoo3 &&
+       git add --chmod=-x xfoo3 &&
+       test_mode_in_index 100644 xfoo3
+'
+
+test_expect_success POSIXPERM 'git add --chmod=[+-]x does not change the working tree' '
+       echo foo >foo4 &&
+       git add foo4 &&
+       git add --chmod=+x foo4 &&
+       ! test -x foo4
+'
+
+test_expect_success 'no file status change if no pathspec is given' '
+       >foo5 &&
+       >foo6 &&
+       git add foo5 foo6 &&
+       git add --chmod=+x &&
+       test_mode_in_index 100644 foo5 &&
+       test_mode_in_index 100644 foo6
+'
+
+test_expect_success 'no file status change if no pathspec is given in subdir' '
+       mkdir -p sub &&
+       (
+               cd sub &&
+               >sub-foo1 &&
+               >sub-foo2 &&
+               git add . &&
+               git add --chmod=+x &&
+               test_mode_in_index 100644 sub-foo1 &&
+               test_mode_in_index 100644 sub-foo2
+       )
+'
+
+test_expect_success 'all statuses changed in folder if . is given' '
+       git add --chmod=+x . &&
+       test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 &&
+       git add --chmod=-x . &&
+       test $(git ls-files --stage | grep ^100755 | wc -l) -eq 0
+'
+
 test_done
index b0579dd45242f64d129d3c10e8ae1c3de6cc5458..8d90a6e500362afe75fb724e07848e904753e7fb 100755 (executable)
@@ -754,9 +754,22 @@ test_expect_success 'format-patch --ignore-if-in-upstream HEAD' '
        git format-patch --ignore-if-in-upstream HEAD
 '
 
+git_version="$(git --version | sed "s/.* //")"
+
+signature() {
+       printf "%s\n%s\n\n" "-- " "${1:-$git_version}"
+}
+
+test_expect_success 'format-patch default signature' '
+       git format-patch --stdout -1 | tail -n 3 >output &&
+       signature >expect &&
+       test_cmp expect output
+'
+
 test_expect_success 'format-patch --signature' '
-       git format-patch --stdout --signature="my sig" -1 >output &&
-       grep "my sig" output
+       git format-patch --stdout --signature="my sig" -1 | tail -n 3 >output &&
+       signature "my sig" >expect &&
+       test_cmp expect output
 '
 
 test_expect_success 'format-patch with format.signature config' '
@@ -1502,12 +1515,12 @@ test_expect_success 'format-patch -o overrides format.outputDirectory' '
 
 test_expect_success 'format-patch --base' '
        git checkout side &&
-       git format-patch --stdout --base=HEAD~3 -1 >patch &&
-       grep "^base-commit:" patch >actual &&
-       grep "^prerequisite-patch-id:" patch >>actual &&
-       echo "base-commit: $(git rev-parse HEAD~3)" >expected &&
+       git format-patch --stdout --base=HEAD~3 -1 | tail -n 7 >actual &&
+       echo >expected &&
+       echo "base-commit: $(git rev-parse HEAD~3)" >>expected &&
        echo "prerequisite-patch-id: $(git show --patch HEAD~2 | git patch-id --stable | awk "{print \$1}")" >>expected &&
        echo "prerequisite-patch-id: $(git show --patch HEAD~1 | git patch-id --stable | awk "{print \$1}")" >>expected &&
+       signature >> expected &&
        test_cmp expected actual
 '
 
@@ -1605,6 +1618,14 @@ test_expect_success 'format-patch --base overrides format.useAutoBase' '
        test_cmp expected actual
 '
 
+test_expect_success 'format-patch --base with --attach' '
+       git format-patch --attach=mimemime --stdout --base=HEAD~ -1 >patch &&
+       sed -n -e "/^base-commit:/s/.*/1/p" -e "/^---*mimemime--$/s/.*/2/p" \
+               patch >actual &&
+       test_write_lines 1 2 >expect &&
+       test_cmp expect actual
+'
+
 test_expect_success 'format-patch --pretty=mboxrd' '
        sp=" " &&
        cat >msg <<-INPUT_END &&
index b79b87790b29f6f1193578fd725d22da7058c819..6154acb4569eb452f4e19a40ba40e19703ecca88 100755 (executable)
@@ -66,6 +66,15 @@ test_expect_success 'setup' '
        mv file.c.new file.c &&
        commit_and_tag long_common_tail file.c &&
 
+       git checkout initial &&
+       cat "$dir/hello.c" "$dir/dummy.c" >file.c &&
+       commit_and_tag hello_dummy file.c &&
+
+       # overlap function context of 1st change and -u context of 2nd change
+       grep -v "delete me from hello" <"$dir/hello.c" >file.c &&
+       sed 2p <"$dir/dummy.c" >>file.c &&
+       commit_and_tag changed_hello_dummy file.c &&
+
        git checkout initial &&
        grep -v "delete me from hello" <file.c >file.c.new &&
        mv file.c.new file.c &&
@@ -179,4 +188,20 @@ test_expect_success ' context does not include other functions' '
        test $(grep -c "^[ +-].*Begin" changed_hello_appended.diff) -le 2
 '
 
+check_diff changed_hello_dummy 'changed two consecutive functions'
+
+test_expect_success ' context includes begin' '
+       grep "^ .*Begin of hello" changed_hello_dummy.diff &&
+       grep "^ .*Begin of dummy" changed_hello_dummy.diff
+'
+
+test_expect_success ' context includes end' '
+       grep "^ .*End of hello" changed_hello_dummy.diff &&
+       grep "^ .*End of dummy" changed_hello_dummy.diff
+'
+
+test_expect_success ' overlapping hunks are merged' '
+       test $(grep -c "^@@" changed_hello_dummy.diff) -eq 1
+'
+
 test_done
diff --git a/t/t4062-diff-pickaxe.sh b/t/t4062-diff-pickaxe.sh
new file mode 100755 (executable)
index 0000000..f0bf50b
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Copyright (c) 2016 Johannes Schindelin
+#
+
+test_description='Pickaxe options'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+       test_commit initial &&
+       printf "%04096d" 0 >4096-zeroes.txt &&
+       git add 4096-zeroes.txt &&
+       test_tick &&
+       git commit -m "A 4k file"
+'
+test_expect_success '-G matches' '
+       git diff --name-only -G "^0{4096}$" HEAD^ >out &&
+       test 4096-zeroes.txt = "$(cat out)"
+'
+
+test_done
index f314ad50791142b42c5f2807b5f086bbe9e1caad..a5eca210b8963c4881fd8be858d13b88401b9888 100755 (executable)
@@ -25,58 +25,94 @@ test_expect_success setup '
        } >obj-list
 '
 
-rm -rf clone.git
 test_expect_success 'pack without --include-tag' '
-       packname_1=$(git pack-objects \
+       packname=$(git pack-objects \
                --window=0 \
-               test-1 <obj-list)
+               test-no-include <obj-list)
 '
 
 test_expect_success 'unpack objects' '
-       (
-               GIT_DIR=clone.git &&
-               export GIT_DIR &&
-               git init &&
-               git unpack-objects -n <test-1-${packname_1}.pack &&
-               git unpack-objects <test-1-${packname_1}.pack
-       )
+       rm -rf clone.git &&
+       git init clone.git &&
+       git -C clone.git unpack-objects <test-no-include-${packname}.pack
 '
 
 test_expect_success 'check unpacked result (have commit, no tag)' '
        git rev-list --objects $commit >list.expect &&
-       (
-               test_must_fail env GIT_DIR=clone.git git cat-file -e $tag &&
-               git rev-list --objects $commit
-       ) >list.actual &&
+       test_must_fail git -C clone.git cat-file -e $tag &&
+       git -C clone.git rev-list --objects $commit >list.actual &&
        test_cmp list.expect list.actual
 '
 
-rm -rf clone.git
 test_expect_success 'pack with --include-tag' '
-       packname_1=$(git pack-objects \
+       packname=$(git pack-objects \
                --window=0 \
                --include-tag \
-               test-2 <obj-list)
+               test-include <obj-list)
 '
 
 test_expect_success 'unpack objects' '
-       (
-               GIT_DIR=clone.git &&
-               export GIT_DIR &&
-               git init &&
-               git unpack-objects -n <test-2-${packname_1}.pack &&
-               git unpack-objects <test-2-${packname_1}.pack
-       )
+       rm -rf clone.git &&
+       git init clone.git &&
+       git -C clone.git unpack-objects <test-include-${packname}.pack
 '
 
 test_expect_success 'check unpacked result (have commit, have tag)' '
        git rev-list --objects mytag >list.expect &&
-       (
-               GIT_DIR=clone.git &&
-               export GIT_DIR &&
-               git rev-list --objects $tag
-       ) >list.actual &&
+       git -C clone.git rev-list --objects $tag >list.actual &&
        test_cmp list.expect list.actual
 '
 
+# A tag of a tag, where the "inner" tag is not otherwise
+# reachable, and a full peel points to a commit reachable from HEAD.
+test_expect_success 'create hidden inner tag' '
+       test_commit commit &&
+       git tag -m inner inner HEAD &&
+       git tag -m outer outer inner &&
+       git tag -d inner
+'
+
+test_expect_success 'pack explicit outer tag' '
+       packname=$(
+               {
+                       echo HEAD &&
+                       echo outer
+               } |
+               git pack-objects --revs test-hidden-explicit
+       )
+'
+
+test_expect_success 'unpack objects' '
+       rm -rf clone.git &&
+       git init clone.git &&
+       git -C clone.git unpack-objects <test-hidden-explicit-${packname}.pack
+'
+
+test_expect_success 'check unpacked result (have all objects)' '
+       git -C clone.git rev-list --objects $(git rev-parse outer HEAD)
+'
+
+test_expect_success 'pack implied outer tag' '
+       packname=$(
+               echo HEAD |
+               git pack-objects --revs --include-tag test-hidden-implied
+       )
+'
+
+test_expect_success 'unpack objects' '
+       rm -rf clone.git &&
+       git init clone.git &&
+       git -C clone.git unpack-objects <test-hidden-implied-${packname}.pack
+'
+
+test_expect_success 'check unpacked result (have all objects)' '
+       git -C clone.git rev-list --objects $(git rev-parse outer HEAD)
+'
+
+test_expect_success 'single-branch clone can transfer tag' '
+       rm -rf clone.git &&
+       git clone --no-local --single-branch -b master . clone.git &&
+       git -C clone.git fsck
+'
+
 test_done
index dc9b87d6b41efc472eac1a2b768bf56c01caf4d1..7641417b4a3848fa9d065572e5a8248fea5c7574 100755 (executable)
@@ -299,5 +299,13 @@ test_expect_success 'git client does not send an empty Accept-Language' '
        ! grep "^=> Send header: Accept-Language:" stderr
 '
 
+test_expect_success 'remote-http complains cleanly about malformed urls' '
+       # do not actually issue "list" or other commands, as we do not
+       # want to rely on what curl would actually do with such a broken
+       # URL. This is just about making sure we do not segfault during
+       # initialization.
+       test_must_fail git remote-http http::/example.com/repo.git
+'
+
 stop_httpd
 test_done
index 337e6e30c35fd6881eb20e9ec27ac81662c3a8e7..2a22fa7588d365c11b35cfdcee82dbef3f97ecaf 100755 (executable)
@@ -36,4 +36,51 @@ test_expect_success 'succeeds cloning if global email is not set' '
        git clone . clone
 '
 
+test_expect_success 'set up rebase scenarios' '
+       # temporarily enable an actual ident for this setup
+       test_config user.email foo@example.com &&
+       test_commit new &&
+       git branch side-without-commit HEAD^ &&
+       git checkout -b side-with-commit HEAD^ &&
+       test_commit side
+'
+
+test_expect_success 'fast-forward rebase does not care about ident' '
+       git checkout -B tmp side-without-commit &&
+       git rebase master
+'
+
+test_expect_success 'non-fast-forward rebase refuses to write commits' '
+       test_when_finished "git rebase --abort || true" &&
+       git checkout -B tmp side-with-commit &&
+       test_must_fail git rebase master
+'
+
+test_expect_success 'fast-forward rebase does not care about ident (interactive)' '
+       git checkout -B tmp side-without-commit &&
+       git rebase -i master
+'
+
+test_expect_success 'non-fast-forward rebase refuses to write commits (interactive)' '
+       test_when_finished "git rebase --abort || true" &&
+       git checkout -B tmp side-with-commit &&
+       test_must_fail git rebase -i master
+'
+
+test_expect_success 'noop interactive rebase does not care about ident' '
+       git checkout -B tmp side-with-commit &&
+       git rebase -i HEAD^
+'
+
+test_expect_success 'fast-forward rebase does not care about ident (preserve)' '
+       git checkout -B tmp side-without-commit &&
+       git rebase -p master
+'
+
+test_expect_success 'non-fast-forward rebase refuses to write commits (preserve)' '
+       test_when_finished "git rebase --abort || true" &&
+       git checkout -B tmp side-with-commit &&
+       test_must_fail git rebase -p master
+'
+
 test_done
index c87a90a08d7d56db2a64a7a42cdd365373557624..2a963f9a7f6e1487fb717c4422c835590ba5de14 100644 (file)
@@ -218,8 +218,8 @@ static void unlink_entry(const struct cache_entry *ce)
        schedule_dir_for_removal(ce->name, ce_namelen(ce));
 }
 
-static struct checkout state;
-static int check_updates(struct unpack_trees_options *o)
+static int check_updates(struct unpack_trees_options *o,
+                        const struct checkout *state)
 {
        unsigned cnt = 0, total = 0;
        struct progress *progress = NULL;
@@ -264,7 +264,7 @@ static int check_updates(struct unpack_trees_options *o)
                        display_progress(progress, ++cnt);
                        ce->ce_flags &= ~CE_UPDATE;
                        if (o->update && !o->dry_run) {
-                               errs |= checkout_entry(ce, &state, NULL);
+                               errs |= checkout_entry(ce, state, NULL);
                        }
                }
        }
@@ -1094,6 +1094,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
        int i, ret;
        static struct cache_entry *dfc;
        struct exclude_list el;
+       struct checkout state;
 
        if (len > MAX_UNPACK_TREES)
                die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
@@ -1239,7 +1240,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
        }
 
        o->src_index = NULL;
-       ret = check_updates(o) ? (-2) : 0;
+       ret = check_updates(o, &state) ? (-2) : 0;
        if (o->dst_index) {
                if (!ret) {
                        if (!o->result.cache_tree)
index bd0f2c2b86847708e5ebe668773f0fd08b9efc5d..97cba39cdf5b6de75e3df0cd0240cae6adcf3859 100644 (file)
@@ -73,7 +73,7 @@ void fast_export_begin_note(uint32_t revision, const char *author,
        static int firstnote = 1;
        size_t loglen = strlen(log);
        printf("commit %s\n", note_ref);
-       printf("committer %s <%s@%s> %ld +0000\n", author, author, "local", timestamp);
+       printf("committer %s <%s@%s> %lu +0000\n", author, author, "local", timestamp);
        printf("data %"PRIuMAX"\n", (uintmax_t)loglen);
        fwrite(log, loglen, 1, stdout);
        if (firstnote) {
@@ -107,7 +107,7 @@ void fast_export_begin_commit(uint32_t revision, const char *author,
        }
        printf("commit %s\n", local_ref);
        printf("mark :%"PRIu32"\n", revision);
-       printf("committer %s <%s@%s> %ld +0000\n",
+       printf("committer %s <%s@%s> %lu +0000\n",
                   *author ? author : "nobody",
                   *author ? author : "nobody",
                   *uuid ? uuid : "local", timestamp);
index f34ea762e477d9874ef8d75e24f54230520a6e4b..50702a215d10729dca6a59b69a7e9bd27b29316e 100644 (file)
@@ -214,11 +214,10 @@ struct ff_regs {
 static long ff_regexp(const char *line, long len,
                char *buffer, long buffer_size, void *priv)
 {
-       char *line_buffer;
        struct ff_regs *regs = priv;
        regmatch_t pmatch[2];
        int i;
-       int result = -1;
+       int result;
 
        /* Exclude terminating newline (and cr) from matching */
        if (len > 0 && line[len-1] == '\n') {
@@ -228,18 +227,16 @@ static long ff_regexp(const char *line, long len,
                        len--;
        }
 
-       line_buffer = xstrndup(line, len); /* make NUL terminated */
-
        for (i = 0; i < regs->nr; i++) {
                struct ff_reg *reg = regs->array + i;
-               if (!regexec(&reg->re, line_buffer, 2, pmatch, 0)) {
+               if (!regexec_buf(&reg->re, line, len, 2, pmatch, 0)) {
                        if (reg->negate)
-                               goto fail;
+                               return -1;
                        break;
                }
        }
        if (regs->nr <= i)
-               goto fail;
+               return -1;
        i = pmatch[1].rm_so >= 0 ? 1 : 0;
        line += pmatch[i].rm_so;
        result = pmatch[i].rm_eo - pmatch[i].rm_so;
@@ -248,8 +245,6 @@ static long ff_regexp(const char *line, long len,
        while (result > 0 && (isspace(line[result - 1])))
                result--;
        memcpy(buffer, line, result);
- fail:
-       free(line_buffer);
        return result;
 }
 
index b52b4b9c1ee3ba3c6b94594af68a275e458bebaf..7389ce41022dbee5776d44a937e8bcf780656f42 100644 (file)
@@ -239,7 +239,7 @@ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
                        if (xche->next) {
                                long l = XDL_MIN(xche->next->i1,
                                                 xe->xdf1.nrec - 1);
-                               if (l <= e1 ||
+                               if (l - xecfg->ctxlen <= e1 ||
                                    get_func_line(xe, xecfg, NULL, l, e1) < 0) {
                                        xche = xche->next;
                                        goto post_context_calculation;