Merge branch 'bc/gnome-keyring'
authorJunio C Hamano <gitster@pobox.com>
Wed, 23 Oct 2013 20:21:50 +0000 (13:21 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 Oct 2013 20:21:50 +0000 (13:21 -0700)
Cleanups and tweaks for credential handling to work with ancient versions
of the gnome-keyring library that are still in use.

* bc/gnome-keyring:
contrib/git-credential-gnome-keyring.c: support really ancient gnome-keyring
contrib/git-credential-gnome-keyring.c: support ancient gnome-keyring
contrib/git-credential-gnome-keyring.c: report failure to store password
contrib/git-credential-gnome-keyring.c: use glib messaging functions
contrib/git-credential-gnome-keyring.c: use glib memory allocation functions
contrib/git-credential-gnome-keyring.c: use secure memory for reading passwords
contrib/git-credential-gnome-keyring.c: use secure memory functions for passwds
contrib/git-credential-gnome-keyring.c: use gnome helpers in keyring_object()
contrib/git-credential-gnome-keyring.c: set Gnome application name
contrib/git-credential-gnome-keyring.c: ensure buffer is non-empty before accessing
contrib/git-credential-gnome-keyring.c: strlen() returns size_t, not ssize_t
contrib/git-credential-gnome-keyring.c: exit non-zero when called incorrectly
contrib/git-credential-gnome-keyring.c: add static where applicable
contrib/git-credential-gnome-keyring.c: *style* use "if ()" not "if()" etc.
contrib/git-credential-gnome-keyring.c: remove unused die() function
contrib/git-credential-gnome-keyring.c: remove unnecessary pre-declarations

113 files changed:
.mailmap
Documentation/CodingGuidelines
Documentation/Makefile
Documentation/RelNotes/1.8.4.1.txt
Documentation/RelNotes/1.8.4.2.txt [new file with mode: 0644]
Documentation/RelNotes/1.8.5.txt
Documentation/config.txt
Documentation/diff-config.txt
Documentation/git-checkout.txt
Documentation/git-cherry.txt
Documentation/git-format-patch.txt
Documentation/git-grep.txt
Documentation/git-merge.txt
Documentation/git-prune-packed.txt
Documentation/git-remote.txt
Documentation/git-replace.txt
Documentation/git-sh-setup.txt
Documentation/git-status.txt
Documentation/git-svn.txt
Documentation/git.txt
Documentation/gitcli.txt
Documentation/gitmodules.txt
Documentation/howto/revert-a-faulty-merge.txt
Documentation/howto/setup-git-server-over-http.txt
Documentation/technical/api-diff.txt
Makefile
builtin.h
builtin/cat-file.c
builtin/clone.c
builtin/grep.c
builtin/log.c
builtin/pack-objects.c
builtin/remote.c
builtin/repack.c [new file with mode: 0644]
builtin/replace.c
builtin/reset.c
builtin/revert.c
builtin/rm.c
builtin/shortlog.c
cache.h
compat/mingw.c
compat/mingw.h
compat/msvc.h
compat/nedmalloc/malloc.c.h
compat/poll/poll.c
config.c
config.mak.uname
connect.c
contrib/ciabot/INSTALL [deleted file]
contrib/ciabot/README [deleted file]
contrib/ciabot/ciabot.py [deleted file]
contrib/ciabot/ciabot.sh [deleted file]
contrib/completion/git-completion.bash
contrib/completion/git-prompt.sh
contrib/contacts/git-contacts
contrib/credential/netrc/git-credential-netrc
contrib/examples/git-repack.sh [new file with mode: 0755]
contrib/mw-to-git/git-remote-mediawiki.perl
contrib/mw-to-git/t/t9365-continuing-queries.sh [new file with mode: 0755]
diff.c
diff.h
dir.c
fetch-pack.c
git-compat-util.h
git-filter-branch.sh
git-mergetool--lib.sh
git-rebase--interactive.sh
git-repack.sh [deleted file]
git-sh-setup.sh
git-submodule.sh
git-svn.perl
git.c
grep.c
grep.h
ident.c
mailmap.c
merge-recursive.c
mergetools/diffmerge [new file with mode: 0644]
name-hash.c
object.c
object.h
po/fr.po
pretty.c
read-cache.c
refs.c
sha1_file.c
t/lib-httpd.sh
t/t0060-path-utils.sh
t/t2008-checkout-subdir.sh
t/t3501-revert-cherry-pick.sh
t/t4014-format-patch.sh
t/t4030-diff-textconv.sh
t/t4201-shortlog.sh
t/t4254-am-corrupt.sh
t/t5601-clone.sh
t/t5701-clone-local.sh
t/t5702-clone-options.sh
t/t5706-clone-branch.sh
t/t6050-replace.sh
t/t7008-grep-binary.sh
t/t7400-submodule-basic.sh
t/t7401-submodule-summary.sh
t/t7508-status.sh
t/t7512-status-help.sh
t/t8007-cat-file-textconv.sh
t/t9117-git-svn-init-clone.sh
t/t9500-gitweb-standalone-no-errors.sh
templates/hooks--pre-commit.sample
test-path-utils.c
unpack-trees.c
wrapper.c
wt-status.c
wt-status.h
index 1c1f5ec6bf83ca9dd27f7dacaa05b722202e115b..11057cbcdf4c9f814189bdbf0a17980825da194c 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -218,7 +218,9 @@ Tay Ray Chuan <rctay89@gmail.com>
 Ted Percival <ted@midg3t.net> <ted.percival@quest.com>
 Theodore Ts'o <tytso@mit.edu>
 Thomas Ackermann <th.acker@arcor.de> <th.acker66@arcor.de>
-Thomas Rast <trast@inf.ethz.ch> <trast@student.ethz.ch>
+Thomas Rast <tr@thomasrast.ch> <trast@student.ethz.ch>
+Thomas Rast <tr@thomasrast.ch> <trast@inf.ethz.ch>
+Thomas Rast <tr@thomasrast.ch> <trast@google.com>
 Timo Hirvonen <tihirvon@gmail.com> <tihirvon@ee.oulu.fi>
 Toby Allsopp <Toby.Allsopp@navman.co.nz> <toby.allsopp@navman.co.nz>
 Tom Grennan <tmgrennan@gmail.com> <tgrennan@redback.com>
index e5ca3b75d3778308ee1b7b20e3a86475244f7b96..a600e35c810b74848062dee8d74e573192c09e2c 100644 (file)
@@ -145,6 +145,14 @@ For C programs:
    they were describing changes.  Often splitting a function
    into two makes the intention of the code much clearer.
 
+ - Multi-line comments include their delimiters on separate lines from
+   the text.  E.g.
+
+       /*
+        * A very long
+        * multi-line comment.
+        */
+
  - Double negation is often harder to understand than no negation
    at all.
 
index 0cfdc36b44ee51d827136c2bdd75c3d977f03742..4f13a23893047a022be23d245d2df920b1845eac 100644 (file)
@@ -103,6 +103,7 @@ MAKEINFO = makeinfo
 INSTALL_INFO = install-info
 DOCBOOK2X_TEXI = docbook2x-texi
 DBLATEX = dblatex
+ASCIIDOC_DBLATEX_DIR = /etc/asciidoc/dblatex
 ifndef PERL_PATH
        PERL_PATH = /usr/bin/perl
 endif
@@ -354,7 +355,7 @@ user-manual.texi: user-manual.xml
 
 user-manual.pdf: user-manual.xml
        $(QUIET_DBLATEX)$(RM) $@+ $@ && \
-       $(DBLATEX) -o $@+ -p /etc/asciidoc/dblatex/asciidoc-dblatex.xsl -s /etc/asciidoc/dblatex/asciidoc-dblatex.sty $< && \
+       $(DBLATEX) -o $@+ -p $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.xsl -s $(ASCIIDOC_DBLATEX_DIR)/asciidoc-dblatex.sty $< && \
        mv $@+ $@
 
 gitman.texi: $(MAN_XML) cat-texi.perl
index 806545aafdefa7b860399af53d097388c970ffaf..3aa25a274379dca115034bfd7201e97f72dcc651 100644 (file)
@@ -4,21 +4,24 @@ Git v1.8.4.1 Release Notes
 Fixes since v1.8.4
 ------------------
 
- * Some people still use rather old versions of bash, which cannot
-   grok some constructs like 'printf -v varname' the prompt and
-   completion code started to use recently.  The completion and
-   prompt scripts have been adjusted to work better with these old
-   versions of bash.
-
- * "git rebase -i" had a minor bug (the same could be in other
-   programs, as the root cause is pretty generic) where the code
-   feeds a random, data dependeant string to 'echo' and expects it
+ * Some old versions of bash do not grok some constructs like
+   'printf -v varname' which the prompt and completion code started
+   to use recently.  The completion and prompt scripts have been
+   adjusted to work better with these old versions of bash.
+
+ * In FreeBSD's and NetBSD's "sh", a return in a dot script in a
+   function returns from the function, not only in the dot script,
+   breaking "git rebase" on these platforms (regression introduced
+   in 1.8.4-rc1).
+
+ * "git rebase -i" and other scripted commands were feeding a
+   random, data dependant error message to 'echo' and expecting it
    to come out literally.
 
- * "submodule.<name>.path" variable mistakenly set to the empty
+ * Setting the "submodule.<name>.path" variable to the empty
    "true" caused the configuration parser to segfault.
 
- * Output from "git log --full-diff -- <pathspec>" looked strange,
+ * Output from "git log --full-diff -- <pathspec>" looked strange
    because comparison was done with the previous ancestor that
    touched the specified <pathspec>, causing the patches for paths
    outside the pathspec to show more than the single commit has
@@ -43,8 +46,26 @@ Fixes since v1.8.4
    shallow repository when a fetch operation tries to auto-follow
    tags.
 
- * On platforms with fgetc() and friends defined as macros,
-   the configuration parser did not compile.
+ * When send-email comes up with an error message to die with upon
+   failure to start an SSL session, it tried to read the error
+   string from a wrong place.
+
+ * A call to xread() was used without a loop to cope with short
+   read in the codepath to stream large blobs to a pack.
+
+ * On platforms with fgetc() and friends defined as macros, the
+   configuration parser did not compile.
+
+ * New versions of MediaWiki introduced a new API for returning
+   more than 500 results in response to a query, which would cause
+   the MediaWiki remote helper to go into an infinite loop.
+
+ * Subversion's serf access method (the only one available in
+   Subversion 1.8) for http and https URLs in skelta mode tells its
+   caller to open multiple files at a time, which made "git svn
+   fetch" complain that "Temp file with moniker 'svn_delta' already
+   in use" instead of fetching.
+
 
 Also contains a handful of trivial code clean-ups, documentation
 updates, updates to the test suite, etc.
diff --git a/Documentation/RelNotes/1.8.4.2.txt b/Documentation/RelNotes/1.8.4.2.txt
new file mode 100644 (file)
index 0000000..ebe5e68
--- /dev/null
@@ -0,0 +1,50 @@
+Git v1.8.4.2 Release Notes
+========================
+
+Fixes since v1.8.4.1
+--------------------
+
+ * When running "fetch -q", a long silence while the sender side
+   computes the set of objects to send can be mistaken by proxies as
+   dropped connection.  The server side has been taught to send a
+   small empty messages to keep the connection alive.
+
+ * When the webserver responds with "405 Method Not Allowed", "git
+   http-backend" should tell the client what methods are allowed with
+   the "Allow" header.
+
+ * "git cvsserver" computed the permission mode bits incorrectly for
+   executable files.
+
+ * The implementation of "add -i" has a crippling code to work around
+   ActiveState Perl limitation but it by mistake also triggered on Git
+   for Windows where MSYS perl is used.
+
+ * We made sure that we notice the user-supplied GIT_DIR is actually a
+   gitfile, but did not do the same when the default ".git" is a
+   gitfile.
+
+ * When an object is not found after checking the packfiles and then
+   loose object directory, read_sha1_file() re-checks the packfiles to
+   prevent racing with a concurrent repacker; teach the same logic to
+   has_sha1_file().
+
+ * "git commit --author=$name", when $name is not in the canonical
+   "A. U. Thor <au.thor@example.xz>" format, looks for a matching name
+   from existing history, but did not consult mailmap to grab the
+   preferred author name.
+
+ * The commit object names in the insn sheet that was prepared at the
+   beginning of "rebase -i" session can become ambiguous as the
+   rebasing progresses and the repository gains more commits. Make
+   sure the internal record is kept with full 40-hex object names.
+
+ * "git rebase --preserve-merges" internally used the merge machinery
+   and as a side effect, left merge summary message in the log, but
+   when rebasing, there should not be a need for merge summary.
+
+ * "git rebase -i" forgot that the comment character can be
+   configurable while reading its insn sheet.
+
+Also contains a handful of trivial code clean-ups, documentation
+updates, updates to the test suite, etc.
index ac5c3fafe59be32e5f276ad4276a5f9d6305fe85..aa50f0543a40f051b73cb8b9753949720cfe5f91 100644 (file)
@@ -42,6 +42,11 @@ release, will keep ignoring removals, but the users who rely on this
 behaviour are encouraged to start using "git add --ignore-removal <path>"
 now before 2.0 is released.
 
+The default prefix for "git svn" will change in Git 2.0.  For a long
+time, "git svn" created its remote-tracking branches directly under
+refs/remotes, but it will place them under refs/remotes/origin/ unless
+it is told otherwise with its --prefix option.
+
 
 Updates since v1.8.4
 --------------------
@@ -71,6 +76,20 @@ Foreign interfaces, subsystems and ports.
 
 UI, Workflows & Features
 
+ * "git replace" helper no longer allows an object to be replaced with
+   another object of a different type to avoid confusion (you can
+   still manually craft such replacement using "git update-ref", as an
+   escape hatch).
+
+ * "git status" no longer prints dirty status information for
+   submodules for which submodule.$name.ignore is set to "all".
+
+ * "git rebase -i" honours core.abbrev when preparing the insn sheet
+   for editing.
+
+ * "git status" during a cherry-pick shows what original commit is
+   being picked.
+
  * Instead of typing four capital letters "HEAD", you can say "@" now,
    e.g. "git log @".
 
@@ -96,6 +115,9 @@ UI, Workflows & Features
 
  * "git status" now omits the prefix to make its output a comment in a
    commit log editor, which is not necessary for human consumption.
+   Scripts that parse the output of "git status" are advised to use
+   "git status --porcelain" instead, as its format is stable and easier
+   to parse.
 
  * Make "foo^{tag}" to peel a tag to itself, i.e. no-op., and fail if
    "foo" is not a tag.  "git rev-parse --verify v1.0^{tag}" would be
@@ -179,6 +201,10 @@ UI, Workflows & Features
 
 Performance, Internal Implementation, etc.
 
+ * "git repack" is now written in C.
+
+ * Build procedure for MSVC has been updated.
+
  * If a build-time fallback is set to "cat" instead of "less", we
    should apply the same "no subprocess or pipe" optimization as we
    apply to user-supplied GIT_PAGER=cat.
@@ -212,6 +238,24 @@ Unless otherwise noted, all the fixes since v1.8.4 in the maintenance
 track are contained in this release (see release notes to them for
 details).
 
+ * "git clone" gave some progress messages to the standard output, not
+   to the standard error, and did not allow suppressing them with the
+   --no-progress option.
+   (merge 643f918 jk/clone-progress-to-stderr later to maint).
+
+ * "format-patch --from=<whom>" forgot to omit unnecessary in-body
+   from line, i.e. when <whom> is the same as the real author.
+   (merge 662cc30 jk/format-patch-from later to maint).
+
+ * "git shortlog" used to choke and die when there is a malformed
+   commit (e.g. missing authors); it now simply ignore such a commit
+   and keeps going.
+   (merge cd4f09e jk/shortlog-tolerate-broken-commit later to maint).
+
+ * "git merge-recursive" did not parse its "--diff-algorithm=" command
+   line option correctly.
+   (merge 6562928 jk/diff-algo later to maint).
+
  * When running "fetch -q", a long silence while the sender side
    computes the set of objects to send can be mistaken by proxies as
    dropped connection.  The server side has been taught to send a
index c3f70023ec36ba523d95293fef7b20da64e7be3a..ab26963d61877a2f8e03a3532ace5b31bc68738e 100644 (file)
@@ -724,6 +724,8 @@ branch.<name>.remote::
        overridden by `branch.<name>.pushremote`.  If no remote is
        configured, or if you are not on any branch, it defaults to
        `origin` for fetching and `remote.pushdefault` for pushing.
+       Additionally, `.` (a period) is the current local repository
+       (a dot-repository), see `branch.<name>.merge`'s final note below.
 
 branch.<name>.pushremote::
        When on branch <name>, it overrides `branch.<name>.remote` for
@@ -749,8 +751,8 @@ branch.<name>.merge::
        Specify multiple values to get an octopus merge.
        If you wish to setup 'git pull' so that it merges into <name> from
        another branch in the local repository, you can point
-       branch.<name>.merge to the desired branch, and use the special setting
-       `.` (a period) for branch.<name>.remote.
+       branch.<name>.merge to the desired branch, and use the relative path
+       setting `.` (a period) for branch.<name>.remote.
 
 branch.<name>.mergeoptions::
        Sets default options for merging into branch <name>. The syntax and
@@ -2214,7 +2216,14 @@ status.submodulesummary::
        If this is set to a non zero number or true (identical to -1 or an
        unlimited number), the submodule summary will be enabled and a
        summary of commits for modified submodules will be shown (see
-       --summary-limit option of linkgit:git-submodule[1]).
+       --summary-limit option of linkgit:git-submodule[1]). Please note
+       that the summary output command will be suppressed for all
+       submodules when `diff.ignoreSubmodules` is set to 'all' or only
+       for those submodules where `submodule.<name>.ignore=all`. To
+       also view the summary for ignored submodules you can either use
+       the --ignore-submodules=dirty command line option or the 'git
+       submodule summary' command, which shows a similar output but does
+       not honor these settings.
 
 submodule.<name>.path::
 submodule.<name>.url::
@@ -2249,7 +2258,8 @@ submodule.<name>.ignore::
        submodules that have untracked files in their work tree as changed.
        This setting overrides any setting made in .gitmodules for this submodule,
        both settings can be overridden on the command line by using the
-       "--ignore-submodules" option.
+       "--ignore-submodules" option. The 'git submodule' commands are not
+       affected by this setting.
 
 tar.umask::
        This variable can be used to restrict the permission bits of
@@ -2334,11 +2344,11 @@ user.name::
        environment variables.  See linkgit:git-commit-tree[1].
 
 user.signingkey::
-       If linkgit:git-tag[1] is not selecting the key you want it to
-       automatically when creating a signed tag, you can override the
-       default selection with this variable.  This option is passed
-       unchanged to gpg's --local-user parameter, so you may specify a key
-       using any method that gpg supports.
+       If linkgit:git-tag[1] or linkgit:git-commit[1] is not selecting the
+       key you want it to automatically when creating a signed tag or
+       commit, you can override the default selection with this variable.
+       This option is passed unchanged to gpg's --local-user parameter,
+       so you may specify a key using any method that gpg supports.
 
 web.browser::
        Specify a web browser that may be used by some commands.
index ac770502553d9b4d3d1176f63ad01791736602a8..223b9310df0990accdb0d43b096bd52856f56bef 100644 (file)
@@ -73,7 +73,11 @@ diff.ignoreSubmodules::
        Sets the default value of --ignore-submodules. Note that this
        affects only 'git diff' Porcelain, and not lower level 'diff'
        commands such as 'git diff-files'. 'git checkout' also honors
-       this setting when reporting uncommitted changes.
+       this setting when reporting uncommitted changes. Setting it to
+       'all' disables the submodule summary normally shown by 'git commit'
+       and 'git status' when 'status.submodulesummary' is set unless it is
+       overridden by using the --ignore-submodules command line option.
+       The 'git submodule' commands are not affected by this setting.
 
 diff.mnemonicprefix::
        If set, 'git diff' uses a prefix pair that is different from the
index ca118ac6bfff9f837d06de37f99f457f6d38916b..91294f89c89dbbfef93bbb7f38074827938f48f6 100644 (file)
@@ -9,7 +9,8 @@ SYNOPSIS
 --------
 [verse]
 'git checkout' [-q] [-f] [-m] [<branch>]
-'git checkout' [-q] [-f] [-m] [--detach] [<commit>]
+'git checkout' [-q] [-f] [-m] --detach [<branch>]
+'git checkout' [-q] [-f] [-m] [--detach] <commit>
 'git checkout' [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
 'git checkout' [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
 'git checkout' [-p|--patch] [<tree-ish>] [--] [<paths>...]
@@ -62,7 +63,7 @@ that is to say, the branch is not reset/created unless "git checkout" is
 successful.
 
 'git checkout' --detach [<branch>]::
-'git checkout' <commit>::
+'git checkout' [--detach] <commit>::
 
        Prepare to work on top of <commit>, by detaching HEAD at it
        (see "DETACHED HEAD" section), and updating the index and the
@@ -71,10 +72,11 @@ successful.
        tree will be the state recorded in the commit plus the local
        modifications.
 +
-Passing `--detach` forces this behavior in the case of a <branch> (without
-the option, giving a branch name to the command would check out the branch,
-instead of detaching HEAD at it), or the current commit,
-if no <branch> is specified.
+When the <commit> argument is a branch name, the `--detach` option can
+be used to detach HEAD at the tip of the branch (`git checkout
+<branch>` would check out that branch without detaching HEAD).
++
+Omitting <branch> detaches HEAD at the tip of the current branch.
 
 'git checkout' [-p|--patch] [<tree-ish>] [--] <pathspec>...::
 
index f6c19c734d0fad09e7f7203a69959546f4b6a052..2d0daae626dd8e58c5a5c72ef999e36f56bcdce7 100644 (file)
@@ -14,8 +14,7 @@ DESCRIPTION
 -----------
 The changeset (or "diff") of each commit between the fork-point and <head>
 is compared against each commit between the fork-point and <upstream>.
-The commits are compared with their 'patch id', obtained from
-the 'git patch-id' program.
+The diffs are compared after removing any whitespace and line numbers.
 
 Every commit that doesn't exist in the <upstream> branch
 has its id (sha1) reported, prefixed by a symbol.  The ones that have
index 9e0ef0eaf32f8861ba7090ae2feb6188c2c2f0b7..5c0a4ab2d6d4c123899fa32e8f147a8c077f2130 100644 (file)
@@ -438,7 +438,8 @@ Edit..Preferences..Composition, wrap plain text messages at 0
 In Thunderbird 3:
 Edit..Preferences..Advanced..Config Editor.  Search for
 "mail.wrap_long_lines".
-Toggle it to make sure it is set to `false`.
+Toggle it to make sure it is set to `false`. Also, search for
+"mailnews.wraplength" and set the value to 0.
 
 3. Disable the use of format=flowed:
 Edit..Preferences..Advanced..Config Editor.  Search for
index 8497aa4494778134cad5ca2c2b11fb1c824e2a24..f83733490f5a881f6f197b3b62000337c500ef9d 100644 (file)
@@ -9,7 +9,7 @@ git-grep - Print lines matching a pattern
 SYNOPSIS
 --------
 [verse]
-'git grep' [-a | --text] [-I] [-i | --ignore-case] [-w | --word-regexp]
+'git grep' [-a | --text] [-I] [--textconv] [-i | --ignore-case] [-w | --word-regexp]
           [-v | --invert-match] [-h|-H] [--full-name]
           [-E | --extended-regexp] [-G | --basic-regexp]
           [-P | --perl-regexp]
@@ -80,6 +80,13 @@ OPTIONS
 --text::
        Process binary files as if they were text.
 
+--textconv::
+       Honor textconv filter settings.
+
+--no-textconv::
+       Do not honor textconv filter settings.
+       This is the default.
+
 -i::
 --ignore-case::
        Ignore case differences between the patterns and the
index a74c3713c6e60db404cbca5afeeebfe687012f58..439545926ecdcf609c299ca0e5ea44032969c1be 100644 (file)
@@ -10,7 +10,7 @@ SYNOPSIS
 --------
 [verse]
 'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
-       [-s <strategy>] [-X <strategy-option>]
+       [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
        [--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]
 'git merge' <msg> HEAD <commit>...
 'git merge' --abort
@@ -65,6 +65,10 @@ OPTIONS
 -------
 include::merge-options.txt[]
 
+-S[<keyid>]::
+--gpg-sign[=<keyid>]::
+       GPG-sign the resulting merge commit.
+
 -m <msg>::
        Set the commit message to be used for the merge commit (in
        case one is created).
index 80dc022edea58b76aeea2f7df0876fd98bc6dc05..6738055bd3083825c06c82d1b7678ef453854253 100644 (file)
@@ -14,7 +14,7 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-This program searches the `$GIT_OBJECT_DIR` for all objects that currently
+This program searches the `$GIT_OBJECT_DIRECTORY` for all objects that currently
 exist in a pack file as well as the independent object directories.
 
 All such extra objects are removed.
index 9c3e3bf83a2721678a2c7a430ec88bee0d39dd0a..2507c8bd913224b21118fe38d648f2538a06c387 100644 (file)
@@ -13,7 +13,7 @@ SYNOPSIS
 'git remote add' [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url>
 'git remote rename' <old> <new>
 'git remote remove' <name>
-'git remote set-head' <name> (-a | -d | <branch>)
+'git remote set-head' <name> (-a | --auto | -d | --delete | <branch>)
 'git remote set-branches' [--add] <name> <branch>...
 'git remote set-url' [--push] <name> <newurl> [<oldurl>]
 'git remote set-url --add' [--push] <name> <newurl>
@@ -101,9 +101,9 @@ branch. For example, if the default branch for `origin` is set to
 `master`, then `origin` may be specified wherever you would normally
 specify `origin/master`.
 +
-With `-d`, the symbolic ref `refs/remotes/<name>/HEAD` is deleted.
+With `-d` or `--delete`, the symbolic ref `refs/remotes/<name>/HEAD` is deleted.
 +
-With `-a`, the remote is queried to determine its `HEAD`, then the
+With `-a` or `--auto`, the remote is queried to determine its `HEAD`, then the
 symbolic-ref `refs/remotes/<name>/HEAD` is set to the same branch. e.g., if the remote
 `HEAD` is pointed at `next`, "`git remote set-head origin -a`" will set
 the symbolic-ref `refs/remotes/origin/HEAD` to `refs/remotes/origin/next`. This will
index e0b405797630c066f57082abc98fb1c03a1b219d..f373ab48d4d575d847408e333b5bfb747d1a75a2 100644 (file)
@@ -20,8 +20,14 @@ The name of the 'replace' reference is the SHA-1 of the object that is
 replaced. The content of the 'replace' reference is the SHA-1 of the
 replacement object.
 
+The replaced object and the replacement object must be of the same type.
+This restriction can be bypassed using `-f`.
+
 Unless `-f` is given, the 'replace' reference must not yet exist.
 
+There is no other restriction on the replaced and replacement objects.
+Merge commits can be replaced by non-merge commits and vice versa.
+
 Replacement references will be used by default by all Git commands
 except those doing reachability traversal (prune, pack transfer and
 fsck).
@@ -49,18 +55,34 @@ achieve the same effect as the `--no-replace-objects` option.
 OPTIONS
 -------
 -f::
+--force::
        If an existing replace ref for the same object exists, it will
        be overwritten (instead of failing).
 
 -d::
+--delete::
        Delete existing replace refs for the given objects.
 
 -l <pattern>::
+--list <pattern>::
        List replace refs for objects that match the given pattern (or
        all if no pattern is given).
        Typing "git replace" without arguments, also lists all replace
        refs.
 
+CREATING REPLACEMENT OBJECTS
+----------------------------
+
+linkgit:git-filter-branch[1], linkgit:git-hash-object[1] and
+linkgit:git-rebase[1], among other git commands, can be used to create
+replacement objects from existing objects.
+
+If you want to replace many blobs, trees or commits that are part of a
+string of commits, you may just want to create a replacement string of
+commits and then only replace the commit at the tip of the target
+string of commits with the commit at the tip of the replacement string
+of commits.
+
 BUGS
 ----
 Comparing blobs or trees that have been replaced with those that
@@ -69,12 +91,13 @@ go back to a replaced commit will move the branch to the replacement
 commit instead of the replaced commit.
 
 There may be other problems when using 'git rev-list' related to
-pending objects. And of course things may break if an object of one
-type is replaced by an object of another type (for example a blob
-replaced by a commit).
+pending objects.
 
 SEE ALSO
 --------
+linkgit:git-hash-object[1]
+linkgit:git-filter-branch[1]
+linkgit:git-rebase[1]
 linkgit:git-tag[1]
 linkgit:git-branch[1]
 linkgit:git[1]
index 5d709d02c39e10ac946c3870a10d959a4c12a5d4..4f67c4cde679cf03e8cc43ac0630a45b5e68aa2d 100644 (file)
@@ -41,9 +41,11 @@ usage::
        die with the usage message.
 
 set_reflog_action::
-       set the message that will be recorded to describe the
-       end-user action in the reflog, when the script updates a
-       ref.
+       Set GIT_REFLOG_ACTION environment to a given string (typically
+       the name of the program) unless it is already set.  Whenever
+       the script runs a `git` command that updates refs, a reflog
+       entry is created using the value of this string to leave the
+       record of what command updated the ref.
 
 git_editor::
        runs an editor of user's choice (GIT_EDITOR, core.editor, VISUAL or
index 9046df98a03fe11a203f06d79be0128309a201c5..a4acaa038cd4255c91df1a03c16c6a396f0c1219 100644 (file)
@@ -210,7 +210,13 @@ directory.
 If `status.submodulesummary` is set to a non zero number or true (identical
 to -1 or an unlimited number), the submodule summary will be enabled for
 the long format and a summary of commits for modified submodules will be
-shown (see --summary-limit option of linkgit:git-submodule[1]).
+shown (see --summary-limit option of linkgit:git-submodule[1]). Please note
+that the summary output from the status command will be suppressed for all
+submodules when `diff.ignoreSubmodules` is set to 'all' or only for those
+submodules where `submodule.<name>.ignore=all`. To also view the summary for
+ignored submodules you can either use the --ignore-submodules=dirty command
+line option or the 'git submodule summary' command, which shows a similar
+output but does not honor these settings.
 
 SEE ALSO
 --------
index 4dd3bcb5117f31a76281ef09847b0171cdbf9b80..2a3847649df540242828ac1fbae4b962ff75ce94 100644 (file)
@@ -79,8 +79,21 @@ COMMANDS
        trailing slash, so be sure you include one in the
        argument if that is what you want.  If --branches/-b is
        specified, the prefix must include a trailing slash.
-       Setting a prefix is useful if you wish to track multiple
-       projects that share a common repository.
+       Setting a prefix (with a trailing slash) is strongly
+       encouraged in any case, as your SVN-tracking refs will
+       then be located at "refs/remotes/$prefix/*", which is
+       compatible with Git's own remote-tracking ref layout
+       (refs/remotes/$remote/*). Setting a prefix is also useful
+       if you wish to track multiple projects that share a common
+       repository.
++
+NOTE: In Git v2.0, the default prefix will CHANGE from "" (no prefix)
+to "origin/". This is done to put SVN-tracking refs at
+"refs/remotes/origin/*" instead of "refs/remotes/*", and make them
+more compatible with how Git's own remote-tracking refs are organized
+(i.e. refs/remotes/$remote/*). You can enjoy the same benefits today,
+by using the --prefix option.
+
 --ignore-paths=<regex>;;
        When passed to 'init' or 'clone' this regular expression will
        be preserved as a config key.  See 'fetch' for a description
@@ -104,8 +117,11 @@ COMMANDS
 'fetch'::
        Fetch unfetched revisions from the Subversion remote we are
        tracking.  The name of the [svn-remote "..."] section in the
-       .git/config file may be specified as an optional command-line
-       argument.
+       $GIT_DIR/config file may be specified as an optional
+       command-line argument.
++
+This automatically updates the rev_map if needed (see
+'$GIT_DIR/svn/\*\*/.rev_map.*' in the FILES section below for details).
 
 --localtime;;
        Store Git commit times in the local timezone instead of UTC.  This
@@ -201,6 +217,9 @@ accept.  However, '--fetch-all' only fetches from the current
 +
 Like 'git rebase'; this requires that the working tree be clean
 and have no uncommitted changes.
++
+This automatically updates the rev_map if needed (see
+'$GIT_DIR/svn/\*\*/.rev_map.*' in the FILES section below for details).
 
 -l;;
 --local;;
@@ -435,8 +454,8 @@ Any other arguments are passed directly to 'git log'
        specific revision.
 
 'gc'::
-       Compress $GIT_DIR/svn/<refname>/unhandled.log files in .git/svn
-       and remove $GIT_DIR/svn/<refname>index files in .git/svn.
+       Compress $GIT_DIR/svn/<refname>/unhandled.log files and remove
+       $GIT_DIR/svn/<refname>/index files.
 
 'reset'::
        Undoes the effects of 'fetch' back to the specified revision.
@@ -449,9 +468,10 @@ Any other arguments are passed directly to 'git log'
        file cannot be ignored forever (with --ignore-paths) the only
        way to repair the repo is to use 'reset'.
 +
-Only the rev_map and refs/remotes/git-svn are changed.  Follow 'reset'
-with a 'fetch' and then 'git reset' or 'git rebase' to move local
-branches onto the new tree.
+Only the rev_map and refs/remotes/git-svn are changed (see
+'$GIT_DIR/svn/\*\*/.rev_map.*' in the FILES section below for details).
+Follow 'reset' with a 'fetch' and then 'git reset' or 'git rebase' to
+move local branches onto the new tree.
 
 -r <n>;;
 --revision=<n>;;
@@ -684,7 +704,7 @@ svn-remote.<name>.noMetadata::
 +
 This option can only be used for one-shot imports as 'git svn'
 will not be able to fetch again without metadata. Additionally,
-if you lose your .git/svn/**/.rev_map.* files, 'git svn' will not
+if you lose your '$GIT_DIR/svn/\*\*/.rev_map.*' files, 'git svn' will not
 be able to rebuild them.
 +
 The 'git svn log' command will not work on repositories using
@@ -804,16 +824,16 @@ Tracking and contributing to an entire Subversion-managed project
 
 ------------------------------------------------------------------------
 # Clone a repo with standard SVN directory layout (like git clone):
-       git svn clone http://svn.example.com/project --stdlayout
+       git svn clone http://svn.example.com/project --stdlayout --prefix svn/
 # Or, if the repo uses a non-standard directory layout:
-       git svn clone http://svn.example.com/project -T tr -b branch -t tag
+       git svn clone http://svn.example.com/project -T tr -b branch -t tag --prefix svn/
 # View all branches and tags you have cloned:
        git branch -r
 # Create a new branch in SVN
     git svn branch waldo
 # Reset your master to trunk (or any other branch, replacing 'trunk'
 # with the appropriate name):
-       git reset --hard remotes/trunk
+       git reset --hard svn/trunk
 # You may only dcommit to one branch/tag/trunk at a time.  The usage
 # of dcommit/rebase/show-ignore should be the same as above.
 ------------------------------------------------------------------------
@@ -827,7 +847,7 @@ have each person clone that repository with 'git clone':
 
 ------------------------------------------------------------------------
 # Do the initial import on a server
-       ssh server "cd /pub && git svn clone http://svn.example.com/project
+       ssh server "cd /pub && git svn clone http://svn.example.com/project [options...]"
 # Clone locally - make sure the refs/remotes/ space matches the server
        mkdir project
        cd project
@@ -840,8 +860,9 @@ have each person clone that repository with 'git clone':
        git config --remove-section remote.origin
 # Create a local branch from one of the branches just fetched
        git checkout -b master FETCH_HEAD
-# Initialize 'git svn' locally (be sure to use the same URL and -T/-b/-t options as were used on server)
-       git svn init http://svn.example.com/project
+# Initialize 'git svn' locally (be sure to use the same URL and
+# --stdlayout/-T/-b/-t/--prefix options as were used on server)
+       git svn init http://svn.example.com/project [options...]
 # Pull the latest changes from Subversion
        git svn rebase
 ------------------------------------------------------------------------
@@ -973,12 +994,22 @@ without giving any repository layout options.  If the full history with
 branches and tags is required, the options '--trunk' / '--branches' /
 '--tags' must be used.
 
+When using the options for describing the repository layout (--trunk,
+--tags, --branches, --stdlayout), please also specify the --prefix
+option (e.g. '--prefix=origin/') to cause your SVN-tracking refs to be
+placed at refs/remotes/origin/* rather than the default refs/remotes/*.
+The former is more compatible with the layout of Git's "regular"
+remote-tracking refs (refs/remotes/$remote/*), and may potentially
+prevent similarly named SVN branches and Git remotes from clobbering
+each other. In Git v2.0 the default prefix used (i.e. when no --prefix
+is given) will change from "" (no prefix) to "origin/".
+
 When using multiple --branches or --tags, 'git svn' does not automatically
 handle name collisions (for example, if two branches from different paths have
 the same name, or if a branch and a tag have the same name).  In these cases,
 use 'init' to set up your Git repository then, before your first 'fetch', edit
-the .git/config file so that the branches and tags are associated with
-different name spaces.  For example:
+the $GIT_DIR/config file so that the branches and tags are associated
+with different name spaces.  For example:
 
        branches = stable/*:refs/remotes/svn/stable/*
        branches = debug/*:refs/remotes/svn/debug/*
@@ -1006,7 +1037,7 @@ CONFIGURATION
 -------------
 
 'git svn' stores [svn-remote] configuration information in the
-repository .git/config file.  It is similar the core Git
+repository $GIT_DIR/config file.  It is similar the core Git
 [remote] sections except 'fetch' keys do not accept glob
 arguments; but they are instead handled by the 'branches'
 and 'tags' keys.  Since some SVN repositories are oddly
@@ -1035,8 +1066,8 @@ comma-separated list of names within braces. For example:
 [svn-remote "huge-project"]
        url = http://server.org/svn
        fetch = trunk/src:refs/remotes/trunk
-       branches = branches/{red,green}/src:refs/remotes/branches/*
-       tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
+       branches = branches/{red,green}/src:refs/remotes/project-a/branches/*
+       tags = tags/{1.0,2.0}/src:refs/remotes/project-a/tags/*
 ------------------------------------------------------------------------
 
 Multiple fetch, branches, and tags keys are supported:
@@ -1060,8 +1091,21 @@ $ git svn branch -d branches/server release-2-3-0
 
 Note that git-svn keeps track of the highest revision in which a branch
 or tag has appeared. If the subset of branches or tags is changed after
-fetching, then .git/svn/.metadata must be manually edited to remove (or
-reset) branches-maxRev and/or tags-maxRev as appropriate.
+fetching, then $GIT_DIR/svn/.metadata must be manually edited to remove
+(or reset) branches-maxRev and/or tags-maxRev as appropriate.
+
+FILES
+-----
+$GIT_DIR/svn/\*\*/.rev_map.*::
+       Mapping between Subversion revision numbers and Git commit
+       names.  In a repository where the noMetadata option is not set,
+       this can be rebuilt from the git-svn-id: lines that are at the
+       end of every commit (see the 'svn.noMetadata' section above for
+       details).
++
+'git svn fetch' and 'git svn rebase' automatically update the rev_map
+if it is missing or not up to date.  'git svn reset' automatically
+rewinds it.
 
 SEE ALSO
 --------
index 5d68d33e46587deb785317a213857f0de5371022..4f7e07f2e0f4f6317c81467f7f880b4113b12de1 100644 (file)
@@ -43,9 +43,10 @@ unreleased) version of Git, that is available from 'master'
 branch of the `git.git` repository.
 Documentation for older releases are available here:
 
-* link:v1.8.4/git.html[documentation for release 1.8.4]
+* link:v1.8.4.1/git.html[documentation for release 1.8.4.1]
 
 * release notes for
+  link:RelNotes/1.8.4.1.txt[1.8.4.1],
   link:RelNotes/1.8.4.txt[1.8.4].
 
 * link:v1.8.3.4/git.html[documentation for release 1.8.3.4]
@@ -475,19 +476,19 @@ example the following invocations are equivalent:
        This is equivalent to setting the `GIT_LITERAL_PATHSPECS` environment
        variable to `1`.
 
---glob-pathspecs:
+--glob-pathspecs::
        Add "glob" magic to all pathspec. This is equivalent to setting
        the `GIT_GLOB_PATHSPECS` environment variable to `1`. Disabling
        globbing on individual pathspecs can be done using pathspec
        magic ":(literal)"
 
---noglob-pathspecs:
+--noglob-pathspecs::
        Add "literal" magic to all pathspec. This is equivalent to setting
        the `GIT_NOGLOB_PATHSPECS` environment variable to `1`. Enabling
        globbing on individual pathspecs can be done using pathspec
        magic ":(glob)"
 
---icase-pathspecs:
+--icase-pathspecs::
        Add "icase" magic to all pathspec. This is equivalent to setting
        the `GIT_ICASE_PATHSPECS` environment variable to `1`.
 
@@ -908,6 +909,16 @@ GIT_ICASE_PATHSPECS::
        Setting this variable to `1` will cause Git to treat all
        pathspecs as case-insensitive.
 
+'GIT_REFLOG_ACTION'::
+       When a ref is updated, reflog entries are created to keep
+       track of the reason why the ref was updated (which is
+       typically the name of the high-level command that updated
+       the ref), in addition to the old and new values of the ref.
+       A scripted Porcelain command can use set_reflog_action
+       helper function in `git-sh-setup` to set its name to this
+       variable when it is invoked as the top level command by the
+       end user, to be recorded in the body of the reflog.
+
 
 Discussion[[Discussion]]
 ------------------------
index 7d54b77f3c6c17466175632758e2936e64fe2a14..3146413cce0d732e89d5f4e9b3fd519a347ee17d 100644 (file)
@@ -59,6 +59,10 @@ working tree.  After running `git add hello.c; rm hello.c`, you will _not_
 see `hello.c` in your working tree with the former, but with the latter
 you will.
 
+ * Just as the filesystem '.' (period) refers to the current directory,
+   using a '.' as a repository name in Git (a dot-repository) is a relative
+   path and means your current repository.
+
 Here are the rules regarding the "flags" that you should follow when you are
 scripting Git:
 
index 6a1ca4abad73631c13a4d074deb11102289a0d43..f7be93f6317c7170af642c43d107a6617eb33a18 100644 (file)
@@ -75,7 +75,8 @@ submodule.<name>.ignore::
        the superproject, the setting there will override the one found in
        .gitmodules.
        Both settings can be overridden on the command line by using the
-       "--ignore-submodule" option.
+       "--ignore-submodule" option. The 'git submodule' commands are not
+       affected by this setting.
 
 
 EXAMPLES
index 075418eeeb9f7e5ba3308e724313054d004214a1..acf3e477e59f1bab9addde756274afe15d39a8ed 100644 (file)
@@ -37,7 +37,7 @@ where A and B are on the side development that was not so good, M is the
 merge that brings these premature changes into the mainline, x are changes
 unrelated to what the side branch did and already made on the mainline,
 and W is the "revert of the merge M" (doesn't W look M upside down?).
-IOW, "diff W^..W" is similar to "diff -R M^..M".
+IOW, `"diff W^..W"` is similar to `"diff -R M^..M"`.
 
 Such a "revert" of a merge can be made with:
 
@@ -121,9 +121,9 @@ If you reverted the revert in such a case as in the previous example:
        ---A---B                   A'--B'--C'
 
 where Y is the revert of W, A' and B' are rerolled A and B, and there may
-also be a further fix-up C' on the side branch.  "diff Y^..Y" is similar
-to "diff -R W^..W" (which in turn means it is similar to "diff M^..M"),
-and "diff A'^..C'" by definition would be similar but different from that,
+also be a further fix-up C' on the side branch.  `"diff Y^..Y"` is similar
+to `"diff -R W^..W"` (which in turn means it is similar to `"diff M^..M"`),
+and `"diff A'^..C'"` by definition would be similar but different from that,
 because it is a rerolled series of the earlier change.  There will be a
 lot of overlapping changes that result in conflicts.  So do not do "revert
 of revert" blindly without thinking..
index 7f4943e1025de7013715241145d2122ef16057e3..981cbddc8627fcc2322d626148e2735d6222075c 100644 (file)
@@ -81,8 +81,8 @@ Initialize a bare repository
     $ git --bare init
 
 
-Change the ownership to your web-server's credentials. Use "grep ^User
-httpd.conf" and "grep ^Group httpd.conf" to find out:
+Change the ownership to your web-server's credentials. Use `"grep ^User
+httpd.conf"` and `"grep ^Group httpd.conf"` to find out:
 
     $ chown -R www.www .
 
index 2d2ebc04b74ef2b1bf39df892d303d37076325d1..8b001de0db3628d4f02c2890d5614e067e701ed4 100644 (file)
@@ -28,7 +28,8 @@ Calling sequence
 
 * Call `diff_setup_done()`; this inspects the options set up so far for
   internal consistency and make necessary tweaking to it (e.g. if
-  textual patch output was asked, recursive behaviour is turned on).
+  textual patch output was asked, recursive behaviour is turned on);
+  the callback set_default in diff_options can be used to tweak this more.
 
 * As you find different pairs of files, call `diff_change()` to feed
   modified files, `diff_addremove()` to feed created or deleted files,
@@ -115,6 +116,13 @@ Notable members are:
        operation, but some do not have anything to do with the diffcore
        library.
 
+`touched_flags`::
+       Records whether a flag has been changed due to user request
+       (rather than just set/unset by default).
+
+`set_default`::
+       Callback which allows tweaking the options in diff_setup_done().
+
 BINARY, TEXT;;
        Affects the way how a file that is seemingly binary is treated.
 
index de3d72c58ad8da3f06539837e602db3a010a4b59..af847f84685af41a7da02c3c12fbdc1daa780f1c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -461,7 +461,6 @@ SCRIPT_SH += git-pull.sh
 SCRIPT_SH += git-quiltimport.sh
 SCRIPT_SH += git-rebase.sh
 SCRIPT_SH += git-remote-testgit.sh
-SCRIPT_SH += git-repack.sh
 SCRIPT_SH += git-request-pull.sh
 SCRIPT_SH += git-stash.sh
 SCRIPT_SH += git-submodule.sh
@@ -969,6 +968,7 @@ BUILTIN_OBJS += builtin/reflog.o
 BUILTIN_OBJS += builtin/remote.o
 BUILTIN_OBJS += builtin/remote-ext.o
 BUILTIN_OBJS += builtin/remote-fd.o
+BUILTIN_OBJS += builtin/repack.o
 BUILTIN_OBJS += builtin/replace.o
 BUILTIN_OBJS += builtin/rerere.o
 BUILTIN_OBJS += builtin/reset.o
@@ -2018,6 +2018,9 @@ gettext.sp gettext.s gettext.o: GIT-PREFIX
 gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
        -DGIT_LOCALE_PATH='"$(localedir_SQ)"'
 
+http-push.sp http.sp http-walker.sp remote-curl.sp: SPARSE_FLAGS += \
+       -DCURL_DISABLE_TYPECHECK
+
 ifdef NO_EXPAT
 http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
 endif
index 8afa2def491ac08d6c0a2962bee152631fb956ca..b56cf07abc488909a2a38c0b0a7db988902aba96 100644 (file)
--- a/builtin.h
+++ b/builtin.h
@@ -102,6 +102,7 @@ extern int cmd_reflog(int argc, const char **argv, const char *prefix);
 extern int cmd_remote(int argc, const char **argv, const char *prefix);
 extern int cmd_remote_ext(int argc, const char **argv, const char *prefix);
 extern int cmd_remote_fd(int argc, const char **argv, const char *prefix);
+extern int cmd_repack(int argc, const char **argv, const char *prefix);
 extern int cmd_repo_config(int argc, const char **argv, const char *prefix);
 extern int cmd_rerere(int argc, const char **argv, const char *prefix);
 extern int cmd_reset(int argc, const char **argv, const char *prefix);
index 41afaa534b02d8f8089973f3949ba507bd3cf94b..b2ca775a80f54fcceba344d5545fe3cb34ba0184 100644 (file)
@@ -45,6 +45,14 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name)
        case 'e':
                return !has_sha1_file(sha1);
 
+       case 'c':
+               if (!obj_context.path[0])
+                       die("git cat-file --textconv %s: <object> must be <sha1:path>",
+                           obj_name);
+
+               if (textconv_object(obj_context.path, obj_context.mode, sha1, 1, &buf, &size))
+                       break;
+
        case 'p':
                type = sha1_object_info(sha1, NULL);
                if (type < 0)
@@ -67,16 +75,6 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name)
                /* otherwise just spit out the data */
                break;
 
-       case 'c':
-               if (!obj_context.path[0])
-                       die("git cat-file --textconv %s: <object> must be <sha1:path>",
-                           obj_name);
-
-               if (!textconv_object(obj_context.path, obj_context.mode, sha1, 1, &buf, &size))
-                       die("git cat-file --textconv: unable to run textconv on %s",
-                           obj_name);
-               break;
-
        case 0:
                if (type_from_string(exp_type) == OBJ_BLOB) {
                        unsigned char blob_sha1[20];
index ca3eb68d72b0ab9ee683eff3206d28012f27c4fc..874e0fd0b6e3ea4882783c0b2377016d93bd989d 100644 (file)
@@ -379,7 +379,7 @@ static void clone_local(const char *src_repo, const char *dest_repo)
        }
 
        if (0 <= option_verbosity)
-               printf(_("done.\n"));
+               fprintf(stderr, _("done.\n"));
 }
 
 static const char *junk_work_tree;
@@ -550,13 +550,13 @@ static void update_remote_refs(const struct ref *refs,
        const struct ref *rm = mapped_refs;
 
        if (check_connectivity) {
-               if (0 <= option_verbosity)
-                       printf(_("Checking connectivity... "));
+               if (transport->progress)
+                       fprintf(stderr, _("Checking connectivity... "));
                if (check_everything_connected_with_transport(iterate_ref_map,
                                                              0, &rm, transport))
                        die(_("remote did not send all necessary objects"));
-               if (0 <= option_verbosity)
-                       printf(_("done\n"));
+               if (transport->progress)
+                       fprintf(stderr, _("done.\n"));
        }
 
        if (refs) {
@@ -849,9 +849,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 
        if (0 <= option_verbosity) {
                if (option_bare)
-                       printf(_("Cloning into bare repository '%s'...\n"), dir);
+                       fprintf(stderr, _("Cloning into bare repository '%s'...\n"), dir);
                else
-                       printf(_("Cloning into '%s'...\n"), dir);
+                       fprintf(stderr, _("Cloning into '%s'...\n"), dir);
        }
        init_db(option_template, INIT_DB_QUIET);
        write_config(&option_config);
@@ -884,27 +884,25 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        remote = remote_get(option_origin);
        transport = transport_get(remote, remote->url[0]);
 
-       if (!is_local) {
-               if (!transport->get_refs_list || !transport->fetch)
-                       die(_("Don't know how to clone %s"), transport->url);
+       if (!transport->get_refs_list || (!is_local && !transport->fetch))
+               die(_("Don't know how to clone %s"), transport->url);
 
-               transport_set_option(transport, TRANS_OPT_KEEP, "yes");
+       transport_set_option(transport, TRANS_OPT_KEEP, "yes");
 
-               if (option_depth)
-                       transport_set_option(transport, TRANS_OPT_DEPTH,
-                                            option_depth);
-               if (option_single_branch)
-                       transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
+       if (option_depth)
+               transport_set_option(transport, TRANS_OPT_DEPTH,
+                                    option_depth);
+       if (option_single_branch)
+               transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
 
-               transport_set_verbosity(transport, option_verbosity, option_progress);
+       transport_set_verbosity(transport, option_verbosity, option_progress);
 
-               if (option_upload_pack)
-                       transport_set_option(transport, TRANS_OPT_UPLOADPACK,
-                                            option_upload_pack);
+       if (option_upload_pack)
+               transport_set_option(transport, TRANS_OPT_UPLOADPACK,
+                                    option_upload_pack);
 
-               if (transport->smart_options && !option_depth)
-                       transport->smart_options->check_self_contained_and_connected = 1;
-       }
+       if (transport->smart_options && !option_depth)
+               transport->smart_options->check_self_contained_and_connected = 1;
 
        refs = transport_get_remote_refs(transport);
 
@@ -945,6 +943,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                        our_head_points_at = remote_head_points_at;
        }
        else {
+               if (option_branch)
+                       die(_("Remote branch %s not found in upstream %s"),
+                                       option_branch, option_origin);
+
                warning(_("You appear to have cloned an empty repository."));
                mapped_refs = NULL;
                our_head_points_at = NULL;
index 03bc442e3f96ba12ec389f0fc40349a57e073dc7..63f86032d91f00fc607f7d3b26ec941bb7a4c76c 100644 (file)
@@ -458,10 +458,10 @@ static int grep_tree(struct grep_opt *opt, const struct pathspec *pathspec,
 }
 
 static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
-                      struct object *obj, const char *name)
+                      struct object *obj, const char *name, struct object_context *oc)
 {
        if (obj->type == OBJ_BLOB)
-               return grep_sha1(opt, obj->sha1, name, 0, NULL);
+               return grep_sha1(opt, obj->sha1, name, 0, oc ? oc->path : NULL);
        if (obj->type == OBJ_COMMIT || obj->type == OBJ_TREE) {
                struct tree_desc tree;
                void *data;
@@ -503,7 +503,7 @@ static int grep_objects(struct grep_opt *opt, const struct pathspec *pathspec,
        for (i = 0; i < nr; i++) {
                struct object *real_obj;
                real_obj = deref_tag(list->objects[i].item, NULL, 0);
-               if (grep_object(opt, pathspec, real_obj, list->objects[i].name)) {
+               if (grep_object(opt, pathspec, real_obj, list->objects[i].name, list->objects[i].context)) {
                        hit = 1;
                        if (opt->status_only)
                                break;
@@ -658,6 +658,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
                OPT_SET_INT('I', NULL, &opt.binary,
                        N_("don't match patterns in binary files"),
                        GREP_BINARY_NOMATCH),
+               OPT_BOOL(0, "textconv", &opt.allow_textconv,
+                        N_("process binary files with textconv filters")),
                { OPTION_INTEGER, 0, "max-depth", &opt.max_depth, N_("depth"),
                        N_("descend at most <depth> levels"), PARSE_OPT_NONEG,
                        NULL, 1 },
@@ -817,12 +819,13 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
        for (i = 0; i < argc; i++) {
                const char *arg = argv[i];
                unsigned char sha1[20];
+               struct object_context oc;
                /* Is it a rev? */
-               if (!get_sha1(arg, sha1)) {
+               if (!get_sha1_with_context(arg, 0, sha1, &oc)) {
                        struct object *object = parse_object_or_die(sha1, arg);
                        if (!seen_dashdash)
                                verify_non_filename(prefix, arg);
-                       add_object_array(object, arg, &list);
+                       add_object_array_with_context(object, arg, &list, xmemdupz(&oc, sizeof(struct object_context)));
                        continue;
                }
                if (!strcmp(arg, "--")) {
index 77d0f5f3fdbcb48d75aee35a67ed57dd134c907e..b708517a3506517a25d4c05f3c9c92a660688f8d 100644 (file)
@@ -111,6 +111,7 @@ static void cmd_log_init_defaults(struct rev_info *rev)
 
        if (default_date_mode)
                rev->date_mode = parse_date_format(default_date_mode);
+       rev->diffopt.touched_flags = 0;
 }
 
 static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
@@ -436,10 +437,29 @@ static void show_tagger(char *buf, int len, struct rev_info *rev)
        strbuf_release(&out);
 }
 
-static int show_blob_object(const unsigned char *sha1, struct rev_info *rev)
+static int show_blob_object(const unsigned char *sha1, struct rev_info *rev, const char *obj_name)
 {
+       unsigned char sha1c[20];
+       struct object_context obj_context;
+       char *buf;
+       unsigned long size;
+
        fflush(stdout);
-       return stream_blob_to_fd(1, sha1, NULL, 0);
+       if (!DIFF_OPT_TOUCHED(&rev->diffopt, ALLOW_TEXTCONV) ||
+           !DIFF_OPT_TST(&rev->diffopt, ALLOW_TEXTCONV))
+               return stream_blob_to_fd(1, sha1, NULL, 0);
+
+       if (get_sha1_with_context(obj_name, 0, sha1c, &obj_context))
+               die("Not a valid object name %s", obj_name);
+       if (!obj_context.path[0] ||
+           !textconv_object(obj_context.path, obj_context.mode, sha1c, 1, &buf, &size))
+               return stream_blob_to_fd(1, sha1, NULL, 0);
+
+       if (!buf)
+               die("git show %s: bad file", obj_name);
+
+       write_or_die(1, buf, size);
+       return 0;
 }
 
 static int show_tag_object(const unsigned char *sha1, struct rev_info *rev)
@@ -525,7 +545,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
                const char *name = objects[i].name;
                switch (o->type) {
                case OBJ_BLOB:
-                       ret = show_blob_object(o->sha1, NULL);
+                       ret = show_blob_object(o->sha1, &rev, name);
                        break;
                case OBJ_TAG: {
                        struct tag *t = (struct tag *)o;
index e86cd5729f38316bf6e304e4e97ce671e4ea135b..36273dd6f0ebf3eab1062a0e24b9aa0c1834ce02 100644 (file)
@@ -38,17 +38,18 @@ struct object_entry {
        void *delta_data;       /* cached delta (uncompressed) */
        unsigned long delta_size;       /* delta data size (uncompressed) */
        unsigned long z_delta_size;     /* delta data size (compressed) */
-       unsigned int hash;      /* name hint hash */
        enum object_type type;
        enum object_type in_pack_type;  /* could be delta */
+       uint32_t hash;                  /* name hint hash */
        unsigned char in_pack_header_size;
-       unsigned char preferred_base; /* we do not pack this, but is available
-                                      * to be used as the base object to delta
-                                      * objects against.
-                                      */
-       unsigned char no_try_delta;
-       unsigned char tagged; /* near the very tip of refs */
-       unsigned char filled; /* assigned write-order */
+       unsigned preferred_base:1; /*
+                                   * we do not pack this, but is available
+                                   * to be used as the base object to delta
+                                   * objects against.
+                                   */
+       unsigned no_try_delta:1;
+       unsigned tagged:1; /* near the very tip of refs */
+       unsigned filled:1; /* assigned write-order */
 };
 
 /*
@@ -859,9 +860,9 @@ static void rehash_objects(void)
        }
 }
 
-static unsigned name_hash(const char *name)
+static uint32_t name_hash(const char *name)
 {
-       unsigned c, hash = 0;
+       uint32_t c, hash = 0;
 
        if (!name)
                return 0;
@@ -908,7 +909,7 @@ static int add_object_entry(const unsigned char *sha1, enum object_type type,
        struct packed_git *p, *found_pack = NULL;
        off_t found_offset = 0;
        int ix;
-       unsigned hash = name_hash(name);
+       uint32_t hash = name_hash(name);
 
        ix = nr_objects ? locate_object_entry_hash(sha1) : -1;
        if (ix >= 0) {
index eaac3e20124c48456faab48a6529ed281075ee25..4e14891095e6ea016b9f44262ae300c42a75e1b2 100644 (file)
@@ -12,7 +12,7 @@ static const char * const builtin_remote_usage[] = {
        N_("git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <name> <url>"),
        N_("git remote rename <old> <new>"),
        N_("git remote remove <name>"),
-       N_("git remote set-head <name> (-a | -d | <branch>)"),
+       N_("git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"),
        N_("git remote [-v | --verbose] show [-n] <name>"),
        N_("git remote prune [-n | --dry-run] <name>"),
        N_("git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"),
@@ -39,7 +39,7 @@ static const char * const builtin_remote_rm_usage[] = {
 };
 
 static const char * const builtin_remote_sethead_usage[] = {
-       N_("git remote set-head <name> (-a | -d | <branch>)"),
+       N_("git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"),
        NULL
 };
 
diff --git a/builtin/repack.c b/builtin/repack.c
new file mode 100644 (file)
index 0000000..a0ff5c7
--- /dev/null
@@ -0,0 +1,388 @@
+#include "builtin.h"
+#include "cache.h"
+#include "dir.h"
+#include "parse-options.h"
+#include "run-command.h"
+#include "sigchain.h"
+#include "strbuf.h"
+#include "string-list.h"
+#include "argv-array.h"
+
+static int delta_base_offset = 1;
+static char *packdir, *packtmp;
+
+static const char *const git_repack_usage[] = {
+       N_("git repack [options]"),
+       NULL
+};
+
+static int repack_config(const char *var, const char *value, void *cb)
+{
+       if (!strcmp(var, "repack.usedeltabaseoffset")) {
+               delta_base_offset = git_config_bool(var, value);
+               return 0;
+       }
+       return git_default_config(var, value, cb);
+}
+
+/*
+ * Remove temporary $GIT_OBJECT_DIRECTORY/pack/.tmp-$$-pack-* files.
+ */
+static void remove_temporary_files(void)
+{
+       struct strbuf buf = STRBUF_INIT;
+       size_t dirlen, prefixlen;
+       DIR *dir;
+       struct dirent *e;
+
+       dir = opendir(packdir);
+       if (!dir)
+               return;
+
+       /* Point at the slash at the end of ".../objects/pack/" */
+       dirlen = strlen(packdir) + 1;
+       strbuf_addstr(&buf, packtmp);
+       /* Hold the length of  ".tmp-%d-pack-" */
+       prefixlen = buf.len - dirlen;
+
+       while ((e = readdir(dir))) {
+               if (strncmp(e->d_name, buf.buf + dirlen, prefixlen))
+                       continue;
+               strbuf_setlen(&buf, dirlen);
+               strbuf_addstr(&buf, e->d_name);
+               unlink(buf.buf);
+       }
+       closedir(dir);
+       strbuf_release(&buf);
+}
+
+static void remove_pack_on_signal(int signo)
+{
+       remove_temporary_files();
+       sigchain_pop(signo);
+       raise(signo);
+}
+
+/*
+ * Adds all packs hex strings to the fname list, which do not
+ * have a corresponding .keep file.
+ */
+static void get_non_kept_pack_filenames(struct string_list *fname_list)
+{
+       DIR *dir;
+       struct dirent *e;
+       char *fname;
+       size_t len;
+
+       if (!(dir = opendir(packdir)))
+               return;
+
+       while ((e = readdir(dir)) != NULL) {
+               if (suffixcmp(e->d_name, ".pack"))
+                       continue;
+
+               len = strlen(e->d_name) - strlen(".pack");
+               fname = xmemdupz(e->d_name, len);
+
+               if (!file_exists(mkpath("%s/%s.keep", packdir, fname)))
+                       string_list_append_nodup(fname_list, fname);
+               else
+                       free(fname);
+       }
+       closedir(dir);
+}
+
+static void remove_redundant_pack(const char *dir_name, const char *base_name)
+{
+       const char *exts[] = {".pack", ".idx", ".keep"};
+       int i;
+       struct strbuf buf = STRBUF_INIT;
+       size_t plen;
+
+       strbuf_addf(&buf, "%s/%s", dir_name, base_name);
+       plen = buf.len;
+
+       for (i = 0; i < ARRAY_SIZE(exts); i++) {
+               strbuf_setlen(&buf, plen);
+               strbuf_addstr(&buf, exts[i]);
+               unlink(buf.buf);
+       }
+       strbuf_release(&buf);
+}
+
+#define ALL_INTO_ONE 1
+#define LOOSEN_UNREACHABLE 2
+
+int cmd_repack(int argc, const char **argv, const char *prefix)
+{
+       const char *exts[2] = {".pack", ".idx"};
+       struct child_process cmd;
+       struct string_list_item *item;
+       struct argv_array cmd_args = ARGV_ARRAY_INIT;
+       struct string_list names = STRING_LIST_INIT_DUP;
+       struct string_list rollback = STRING_LIST_INIT_NODUP;
+       struct string_list existing_packs = STRING_LIST_INIT_DUP;
+       struct strbuf line = STRBUF_INIT;
+       int nr_packs, ext, ret, failed;
+       FILE *out;
+
+       /* variables to be filled by option parsing */
+       int pack_everything = 0;
+       int delete_redundant = 0;
+       char *unpack_unreachable = NULL;
+       int window = 0, window_memory = 0;
+       int depth = 0;
+       int max_pack_size = 0;
+       int no_reuse_delta = 0, no_reuse_object = 0;
+       int no_update_server_info = 0;
+       int quiet = 0;
+       int local = 0;
+
+       struct option builtin_repack_options[] = {
+               OPT_BIT('a', NULL, &pack_everything,
+                               N_("pack everything in a single pack"), ALL_INTO_ONE),
+               OPT_BIT('A', NULL, &pack_everything,
+                               N_("same as -a, and turn unreachable objects loose"),
+                                  LOOSEN_UNREACHABLE | ALL_INTO_ONE),
+               OPT_BOOL('d', NULL, &delete_redundant,
+                               N_("remove redundant packs, and run git-prune-packed")),
+               OPT_BOOL('f', NULL, &no_reuse_delta,
+                               N_("pass --no-reuse-delta to git-pack-objects")),
+               OPT_BOOL('F', NULL, &no_reuse_object,
+                               N_("pass --no-reuse-object to git-pack-objects")),
+               OPT_BOOL('n', NULL, &no_update_server_info,
+                               N_("do not run git-update-server-info")),
+               OPT__QUIET(&quiet, N_("be quiet")),
+               OPT_BOOL('l', "local", &local,
+                               N_("pass --local to git-pack-objects")),
+               OPT_STRING(0, "unpack-unreachable", &unpack_unreachable, N_("approxidate"),
+                               N_("with -A, do not loosen objects older than this")),
+               OPT_INTEGER(0, "window", &window,
+                               N_("size of the window used for delta compression")),
+               OPT_INTEGER(0, "window-memory", &window_memory,
+                               N_("same as the above, but limit memory size instead of entries count")),
+               OPT_INTEGER(0, "depth", &depth,
+                               N_("limits the maximum delta depth")),
+               OPT_INTEGER(0, "max-pack-size", &max_pack_size,
+                               N_("maximum size of each packfile")),
+               OPT_END()
+       };
+
+       git_config(repack_config, NULL);
+
+       argc = parse_options(argc, argv, prefix, builtin_repack_options,
+                               git_repack_usage, 0);
+
+       packdir = mkpathdup("%s/pack", get_object_directory());
+       packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid());
+
+       sigchain_push_common(remove_pack_on_signal);
+
+       argv_array_push(&cmd_args, "pack-objects");
+       argv_array_push(&cmd_args, "--keep-true-parents");
+       argv_array_push(&cmd_args, "--honor-pack-keep");
+       argv_array_push(&cmd_args, "--non-empty");
+       argv_array_push(&cmd_args, "--all");
+       argv_array_push(&cmd_args, "--reflog");
+       if (window)
+               argv_array_pushf(&cmd_args, "--window=%u", window);
+       if (window_memory)
+               argv_array_pushf(&cmd_args, "--window-memory=%u", window_memory);
+       if (depth)
+               argv_array_pushf(&cmd_args, "--depth=%u", depth);
+       if (max_pack_size)
+               argv_array_pushf(&cmd_args, "--max_pack_size=%u", max_pack_size);
+       if (no_reuse_delta)
+               argv_array_pushf(&cmd_args, "--no-reuse-delta");
+       if (no_reuse_object)
+               argv_array_pushf(&cmd_args, "--no-reuse-object");
+
+       if (pack_everything & ALL_INTO_ONE) {
+               get_non_kept_pack_filenames(&existing_packs);
+
+               if (existing_packs.nr && delete_redundant) {
+                       if (unpack_unreachable)
+                               argv_array_pushf(&cmd_args,
+                                               "--unpack-unreachable=%s",
+                                               unpack_unreachable);
+                       else if (pack_everything & LOOSEN_UNREACHABLE)
+                               argv_array_push(&cmd_args,
+                                               "--unpack-unreachable");
+               }
+       } else {
+               argv_array_push(&cmd_args, "--unpacked");
+               argv_array_push(&cmd_args, "--incremental");
+       }
+
+       if (local)
+               argv_array_push(&cmd_args,  "--local");
+       if (quiet)
+               argv_array_push(&cmd_args,  "--quiet");
+       if (delta_base_offset)
+               argv_array_push(&cmd_args,  "--delta-base-offset");
+
+       argv_array_push(&cmd_args, packtmp);
+
+       memset(&cmd, 0, sizeof(cmd));
+       cmd.argv = cmd_args.argv;
+       cmd.git_cmd = 1;
+       cmd.out = -1;
+       cmd.no_stdin = 1;
+
+       ret = start_command(&cmd);
+       if (ret)
+               return ret;
+
+       nr_packs = 0;
+       out = xfdopen(cmd.out, "r");
+       while (strbuf_getline(&line, out, '\n') != EOF) {
+               if (line.len != 40)
+                       die("repack: Expecting 40 character sha1 lines only from pack-objects.");
+               string_list_append(&names, line.buf);
+               nr_packs++;
+       }
+       fclose(out);
+       ret = finish_command(&cmd);
+       if (ret)
+               return ret;
+       argv_array_clear(&cmd_args);
+
+       if (!nr_packs && !quiet)
+               printf("Nothing new to pack.\n");
+
+       /*
+        * Ok we have prepared all new packfiles.
+        * First see if there are packs of the same name and if so
+        * if we can move them out of the way (this can happen if we
+        * repacked immediately after packing fully.
+        */
+       failed = 0;
+       for_each_string_list_item(item, &names) {
+               for (ext = 0; ext < 2; ext++) {
+                       char *fname, *fname_old;
+                       fname = mkpathdup("%s/%s%s", packdir,
+                                               item->string, exts[ext]);
+                       if (!file_exists(fname)) {
+                               free(fname);
+                               continue;
+                       }
+
+                       fname_old = mkpath("%s/old-%s%s", packdir,
+                                               item->string, exts[ext]);
+                       if (file_exists(fname_old))
+                               if (unlink(fname_old))
+                                       failed = 1;
+
+                       if (!failed && rename(fname, fname_old)) {
+                               free(fname);
+                               failed = 1;
+                               break;
+                       } else {
+                               string_list_append(&rollback, fname);
+                       }
+               }
+               if (failed)
+                       break;
+       }
+       if (failed) {
+               struct string_list rollback_failure = STRING_LIST_INIT_DUP;
+               for_each_string_list_item(item, &rollback) {
+                       char *fname, *fname_old;
+                       fname = mkpathdup("%s/%s", packdir, item->string);
+                       fname_old = mkpath("%s/old-%s", packdir, item->string);
+                       if (rename(fname_old, fname))
+                               string_list_append(&rollback_failure, fname);
+                       free(fname);
+               }
+
+               if (rollback_failure.nr) {
+                       int i;
+                       fprintf(stderr,
+                               "WARNING: Some packs in use have been renamed by\n"
+                               "WARNING: prefixing old- to their name, in order to\n"
+                               "WARNING: replace them with the new version of the\n"
+                               "WARNING: file.  But the operation failed, and the\n"
+                               "WARNING: attempt to rename them back to their\n"
+                               "WARNING: original names also failed.\n"
+                               "WARNING: Please rename them in %s manually:\n", packdir);
+                       for (i = 0; i < rollback_failure.nr; i++)
+                               fprintf(stderr, "WARNING:   old-%s -> %s\n",
+                                       rollback_failure.items[i].string,
+                                       rollback_failure.items[i].string);
+               }
+               exit(1);
+       }
+
+       /* Now the ones with the same name are out of the way... */
+       for_each_string_list_item(item, &names) {
+               for (ext = 0; ext < 2; ext++) {
+                       char *fname, *fname_old;
+                       struct stat statbuffer;
+                       fname = mkpathdup("%s/pack-%s%s",
+                                       packdir, item->string, exts[ext]);
+                       fname_old = mkpathdup("%s-%s%s",
+                                       packtmp, item->string, exts[ext]);
+                       if (!stat(fname_old, &statbuffer)) {
+                               statbuffer.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
+                               chmod(fname_old, statbuffer.st_mode);
+                       }
+                       if (rename(fname_old, fname))
+                               die_errno(_("renaming '%s' failed"), fname_old);
+                       free(fname);
+                       free(fname_old);
+               }
+       }
+
+       /* Remove the "old-" files */
+       for_each_string_list_item(item, &names) {
+               for (ext = 0; ext < 2; ext++) {
+                       char *fname;
+                       fname = mkpath("%s/old-pack-%s%s",
+                                       packdir,
+                                       item->string,
+                                       exts[ext]);
+                       if (remove_path(fname))
+                               warning(_("removing '%s' failed"), fname);
+               }
+       }
+
+       /* End of pack replacement. */
+
+       if (delete_redundant) {
+               sort_string_list(&names);
+               for_each_string_list_item(item, &existing_packs) {
+                       char *sha1;
+                       size_t len = strlen(item->string);
+                       if (len < 40)
+                               continue;
+                       sha1 = item->string + len - 40;
+                       if (!string_list_has_string(&names, sha1))
+                               remove_redundant_pack(packdir, item->string);
+               }
+               argv_array_push(&cmd_args, "prune-packed");
+               if (quiet)
+                       argv_array_push(&cmd_args, "--quiet");
+
+               memset(&cmd, 0, sizeof(cmd));
+               cmd.argv = cmd_args.argv;
+               cmd.git_cmd = 1;
+               run_command(&cmd);
+               argv_array_clear(&cmd_args);
+       }
+
+       if (!no_update_server_info) {
+               argv_array_push(&cmd_args, "update-server-info");
+               memset(&cmd, 0, sizeof(cmd));
+               cmd.argv = cmd_args.argv;
+               cmd.git_cmd = 1;
+               run_command(&cmd);
+               argv_array_clear(&cmd_args);
+       }
+       remove_temporary_files();
+       string_list_clear(&names, 0);
+       string_list_clear(&rollback, 0);
+       string_list_clear(&existing_packs, 0);
+       strbuf_release(&line);
+
+       return 0;
+}
index 301b45ce6a453c472566278521bb51fcbd91ee10..b1bd3ef9946761b146a38d5977a7378175cda047 100644 (file)
@@ -85,6 +85,7 @@ static int replace_object(const char *object_ref, const char *replace_ref,
                          int force)
 {
        unsigned char object[20], prev[20], repl[20];
+       enum object_type obj_type, repl_type;
        char ref[PATH_MAX];
        struct ref_lock *lock;
 
@@ -100,6 +101,15 @@ static int replace_object(const char *object_ref, const char *replace_ref,
        if (check_refname_format(ref, 0))
                die("'%s' is not a valid ref name.", ref);
 
+       obj_type = sha1_object_info(object, NULL);
+       repl_type = sha1_object_info(repl, NULL);
+       if (!force && obj_type != repl_type)
+               die("Objects must be of the same type.\n"
+                   "'%s' points to a replaced object of type '%s'\n"
+                   "while '%s' points to a replacement object of type '%s'.",
+                   object_ref, typename(obj_type),
+                   replace_ref, typename(repl_type));
+
        if (read_ref(ref, prev))
                hashclr(prev);
        else if (!force)
@@ -118,9 +128,9 @@ int cmd_replace(int argc, const char **argv, const char *prefix)
 {
        int list = 0, delete = 0, force = 0;
        struct option options[] = {
-               OPT_BOOL('l', NULL, &list, N_("list replace refs")),
-               OPT_BOOL('d', NULL, &delete, N_("delete replace refs")),
-               OPT_BOOL('f', NULL, &force, N_("replace the ref if it exists")),
+               OPT_BOOL('l', "list", &list, N_("list replace refs")),
+               OPT_BOOL('d', "delete", &delete, N_("delete replace refs")),
+               OPT_BOOL('f', "force", &force, N_("replace the ref if it exists")),
                OPT_END()
        };
 
index 1a5344877212e675d685055a631aba2ac0a4c661..f2f9d55392d2193432d5a572a70cd27afcf6b136 100644 (file)
@@ -143,7 +143,6 @@ static int read_from_tree(const struct pathspec *pathspec,
        opt.output_format = DIFF_FORMAT_CALLBACK;
        opt.format_callback = update_index_from_diff;
 
-       read_cache();
        if (do_diff_cache(tree_sha1, &opt))
                return 1;
        diffcore_std(&opt);
@@ -169,7 +168,7 @@ static void set_reflog_message(struct strbuf *sb, const char *action,
 
 static void die_if_unmerged_cache(int reset_type)
 {
-       if (is_merge() || read_cache() < 0 || unmerged_cache())
+       if (is_merge() || unmerged_cache())
                die(_("Cannot do a %s reset in the middle of a merge."),
                    _(reset_type_names[reset_type]));
 
@@ -220,8 +219,13 @@ static void parse_args(struct pathspec *pathspec,
                }
        }
        *rev_ret = rev;
+
+       if (read_cache() < 0)
+               die(_("index file corrupt"));
+
        parse_pathspec(pathspec, 0,
                       PATHSPEC_PREFER_FULL |
+                      PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP |
                       (patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0),
                       prefix, argv);
 }
index 52c35e75d90dc07f6a80362f200212e314a14ec8..87659c9fdb749bf8cbf33ce71391fdfe284edd6d 100644 (file)
@@ -168,6 +168,8 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
                opts->revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
                if (argc < 2)
                        usage_with_options(usage_str, options);
+               if (!strcmp(argv[1], "-"))
+                       argv[1] = "@{-1}";
                memset(&s_r_opt, 0, sizeof(s_r_opt));
                s_r_opt.assume_dashdash = 1;
                argc = setup_revisions(argc, argv, opts->revs, &s_r_opt);
@@ -202,8 +204,6 @@ int cmd_cherry_pick(int argc, const char **argv, const char *prefix)
        memset(&opts, 0, sizeof(opts));
        opts.action = REPLAY_PICK;
        git_config(git_default_config, NULL);
-       if (!strcmp(argv[1], "-"))
-               argv[1] = "@{-1}";
        parse_args(argc, argv, &opts);
        res = sequencer_pick_revisions(&opts);
        if (res < 0)
index 9b59ab3a64e00cfe3a6a73d6493001085c31d683..3a0e0eaab7d1fd8a298bb2519776abede5c685e2 100644 (file)
@@ -298,22 +298,10 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
        if (read_cache() < 0)
                die(_("index file corrupt"));
 
-       /*
-        * Drop trailing directory separators from directories so we'll find
-        * submodules in the index.
-        */
-       for (i = 0; i < argc; i++) {
-               size_t pathlen = strlen(argv[i]);
-               if (pathlen && is_dir_sep(argv[i][pathlen - 1]) &&
-                   is_directory(argv[i])) {
-                       do {
-                               pathlen--;
-                       } while (pathlen && is_dir_sep(argv[i][pathlen - 1]));
-                       argv[i] = xmemdupz(argv[i], pathlen);
-               }
-       }
-
-       parse_pathspec(&pathspec, 0, PATHSPEC_PREFER_CWD, prefix, argv);
+       parse_pathspec(&pathspec, 0,
+                      PATHSPEC_PREFER_CWD |
+                      PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP,
+                      prefix, argv);
        refresh_index(&the_index, REFRESH_QUIET, &pathspec, NULL, NULL);
 
        seen = xcalloc(pathspec.nr, 1);
index ae73d17b6cbc22f3a7eb30aff5a14cda27c5876c..c226f767aa9b0e5633a3d5dde7b0b969fec39c7f 100644 (file)
@@ -127,9 +127,11 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
                        author = buffer + 7;
                buffer = eol;
        }
-       if (!author)
-               die(_("Missing author: %s"),
+       if (!author) {
+               warning(_("Missing author: %s"),
                    sha1_to_hex(commit->object.sha1));
+               return;
+       }
        if (log->user_format) {
                struct pretty_print_context ctx = {0};
                ctx.fmt = CMIT_FMT_USERFORMAT;
diff --git a/cache.h b/cache.h
index 51d6602cd9da8f8da6b5176ea352574bcc7036f5..5e3fc72fd40f49638c24c632121810468fb3acea 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -314,6 +314,8 @@ extern void free_name_hash(struct index_state *istate);
 #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))
+#define cache_dir_exists(name, namelen) index_dir_exists(&the_index, (name), (namelen))
+#define cache_file_exists(name, namelen, igncase) index_file_exists(&the_index, (name), (namelen), (igncase))
 #define cache_name_exists(name, namelen, igncase) index_name_exists(&the_index, (name), (namelen), (igncase))
 #define cache_name_is_other(name, namelen) index_name_is_other(&the_index, (name), (namelen))
 #define resolve_undo_clear() resolve_undo_clear_index(&the_index)
@@ -463,6 +465,8 @@ extern int write_index(struct index_state *, int newfd);
 extern int discard_index(struct index_state *);
 extern int unmerged_index(const struct index_state *);
 extern int verify_path(const char *path);
+extern struct cache_entry *index_dir_exists(struct index_state *istate, const char *name, int namelen);
+extern struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
 extern struct cache_entry *index_name_exists(struct index_state *istate, const char *name, int namelen, int igncase);
 extern int index_name_pos(const struct index_state *, const char *name, int namelen);
 #define ADD_CACHE_OK_TO_ADD 1          /* Ok to add */
@@ -953,6 +957,15 @@ struct ident_split {
  */
 extern int split_ident_line(struct ident_split *, const char *, int);
 
+/*
+ * Compare split idents for equality or strict ordering. Note that we
+ * compare only the ident part of the line, ignoring any timestamp.
+ *
+ * Because there are two fields, we must choose one as the primary key; we
+ * currently arbitrarily pick the email.
+ */
+extern int ident_cmp(const struct ident_split *, const struct ident_split *);
+
 struct checkout {
        const char *base_dir;
        int base_dir_len;
index 22ee9ef1cfb388fdcb7a2686653a6b10359bca59..fecb98bcff74d2cbcb56e8f9f56d1f3b06339469 100644 (file)
@@ -491,7 +491,6 @@ int mingw_stat(const char *file_name, struct stat *buf)
        return do_stat_internal(1, file_name, buf);
 }
 
-#undef fstat
 int mingw_fstat(int fd, struct stat *buf)
 {
        HANDLE fh = (HANDLE)_get_osfhandle(fd);
index 9eb3b17ff071a724c269978bb6f4e3272238216c..92cd728d3db2e3a21650d28f044ea4f59c2673e4 100644 (file)
@@ -32,7 +32,9 @@ typedef int socklen_t;
 #define WEXITSTATUS(x) ((x) & 0xff)
 #define WTERMSIG(x) SIGTERM
 
+#ifndef EWOULDBLOCK
 #define EWOULDBLOCK EAGAIN
+#endif
 #define SHUT_WR SD_SEND
 
 #define SIGHUP 1
@@ -46,8 +48,12 @@ typedef int socklen_t;
 #define F_SETFD 2
 #define FD_CLOEXEC 0x1
 
+#ifndef EAFNOSUPPORT
 #define EAFNOSUPPORT WSAEAFNOSUPPORT
+#endif
+#ifndef ECONNABORTED
 #define ECONNABORTED WSAECONNABORTED
+#endif
 
 struct passwd {
        char *pw_name;
@@ -258,19 +264,35 @@ static inline int getrlimit(int resource, struct rlimit *rlp)
        return 0;
 }
 
-/* Use mingw_lstat() instead of lstat()/stat() and
- * mingw_fstat() instead of fstat() on Windows.
+/*
+ * Use mingw specific stat()/lstat()/fstat() implementations on Windows.
  */
 #define off_t off64_t
 #define lseek _lseeki64
-#ifndef ALREADY_DECLARED_STAT_FUNCS
+
+/* use struct stat with 64 bit st_size */
+#ifdef stat
+#undef stat
+#endif
 #define stat _stati64
 int mingw_lstat(const char *file_name, struct stat *buf);
 int mingw_stat(const char *file_name, struct stat *buf);
 int mingw_fstat(int fd, struct stat *buf);
+#ifdef fstat
+#undef fstat
+#endif
 #define fstat mingw_fstat
+#ifdef lstat
+#undef lstat
+#endif
 #define lstat mingw_lstat
-#define _stati64(x,y) mingw_stat(x,y)
+
+#ifndef _stati64
+# define _stati64(x,y) mingw_stat(x,y)
+#elif defined (_USE_32BIT_TIME_T)
+# define _stat32i64(x,y) mingw_stat(x,y)
+#else
+# define _stat64(x,y) mingw_stat(x,y)
 #endif
 
 int mingw_utime(const char *file_name, const struct utimbuf *times);
index 96b6d605dad3872f02933581e501ee4380cb8f68..580bb55bf4a71d9a968a0875e2af827c94785313 100644 (file)
@@ -24,21 +24,6 @@ static __inline int strcasecmp (const char *s1, const char *s2)
 
 #undef ERROR
 
-/* Use mingw_lstat() instead of lstat()/stat() and mingw_fstat() instead
- * of fstat(). We add the declaration of these functions here, suppressing
- * the corresponding declarations in mingw.h, so that we can use the
- * appropriate structure type (and function) names from the msvc headers.
- */
-#define stat _stat64
-int mingw_lstat(const char *file_name, struct stat *buf);
-int mingw_fstat(int fd, struct stat *buf);
-#define fstat mingw_fstat
-#define lstat mingw_lstat
-#define _stat64(x,y) mingw_lstat(x,y)
-#define ALREADY_DECLARED_STAT_FUNCS
-
 #include "compat/mingw.h"
 
-#undef ALREADY_DECLARED_STAT_FUNCS
-
 #endif
index ed4f1fa5af8d911382101116c8ee522ef1e9b629..f216a2a7d3d57b5ca7e791494b01f9604ba51e3e 100644 (file)
@@ -499,7 +499,9 @@ MAX_RELEASE_CHECK_RATE   default: 4095 unless not HAVE_MMAP
 #endif  /* WIN32 */
 #ifdef WIN32
 #define WIN32_LEAN_AND_MEAN
+#ifndef _WIN32_WINNT
 #define _WIN32_WINNT 0x403
+#endif
 #include <windows.h>
 #define HAVE_MMAP 1
 #define HAVE_MORECORE 0
index 44103103a4a71ff25e5e8e1d106221a9dd2e9908..31163f2ae7b71857889f561dea0b3ffecff61989 100644 (file)
@@ -39,7 +39,7 @@
 
 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
 # define WIN32_NATIVE
-# if defined (_MSC_VER)
+# if defined (_MSC_VER) && !defined(_WIN32_WINNT)
 #  define _WIN32_WINNT 0x0502
 # endif
 # include <winsock2.h>
index 6588cf579f2e44533192027c739b4823562b2275..e1d66a145b756c49c4e4902200c354499532a428 100644 (file)
--- a/config.c
+++ b/config.c
@@ -498,7 +498,7 @@ static int git_parse_signed(const char *value, intmax_t *ret, intmax_t max)
        return 0;
 }
 
-int git_parse_unsigned(const char *value, uintmax_t *ret, uintmax_t max)
+static int git_parse_unsigned(const char *value, uintmax_t *ret, uintmax_t max)
 {
        if (value && *value) {
                char *end;
index 7d615314f41f33df245efcecbe49f2aee3c90ad7..82d549e48ba796469a27ef41ad0c9ad2a8d96cbc 100644 (file)
@@ -339,6 +339,7 @@ ifeq ($(uname_S),Windows)
        OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
        NO_REGEX = YesPlease
        NO_CURL = YesPlease
+       NO_GETTEXT = YesPlease
        NO_PYTHON = YesPlease
        BLK_SHA1 = YesPlease
        ETAGS_TARGET = ETAGS
@@ -499,7 +500,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
        NO_INET_NTOP = YesPlease
        NO_POSIX_GOODIES = UnfortunatelyYes
        DEFAULT_HELP_FORMAT = html
-       COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat -Icompat/win32
+       COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -D_USE_32BIT_TIME_T -DNOGDI -Icompat -Icompat/win32
        COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
        COMPAT_OBJS += compat/mingw.o compat/winansi.o \
                compat/win32/pthread.o compat/win32/syslog.o \
index a80ebd316c34bb0f0cf3d5a04c33123bb2847421..40868610ab1c02d10cc7cdc927fdf97a5e010414 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -552,7 +552,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
        path = strchr(end, c);
        if (path && !has_dos_drive_prefix(end)) {
                if (c == ':') {
-                       if (path < strchrnul(host, '/')) {
+                       if (host != url || path < strchrnul(host, '/')) {
                                protocol = PROTO_SSH;
                                *path++ = '\0';
                        } else /* '/' in the host part, assume local path */
diff --git a/contrib/ciabot/INSTALL b/contrib/ciabot/INSTALL
deleted file mode 100644 (file)
index 7222961..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-= Installation instructions =
-
-Two scripts are included.  The Python one (ciabot.py) is faster and
-more capable; the shell one (ciabot.sh) is a fallback in case Python
-gives your git hosting site indigestion. (I know of no such sites.)
-
-It is no longer necessary to modify the script in order to put it
-in place; in fact, this is now discouraged. It is entirely
-configurable with the following git config variables:
-
-ciabot.project = name of the project
-ciabot.repo = name of the project repo for gitweb/cgit purposes
-ciabot.xmlrpc  = if true, ship notifications via XML-RPC
-ciabot.revformat = format in which the revision is shown
-
-The revformat variable may have the following values
-raw -> full hex ID of commit
-short -> first 12 chars of hex ID
-describe -> describe relative to last tag, falling back to short
-
-ciabot.project defaults to the directory name of the repository toplevel.
-ciabot.repo defaults to ciabot.project lowercased.
-ciabot.xmlrpc defaults to True
-ciabot.revformat defaults to 'describe'.
-
-This means that in the normal case you need not do any configuration at all,
-however setting ciabot.project will allow the hook to run slightly faster.
-
-Once you've set these variables, try your script with -n to see the
-notification message dumped to stdout and verify that it looks sane.
-
-To live-test these scripts, your project needs to have been registered with
-the CIA site.  Here are the steps:
-
-1. Open an IRC window on irc://freenode/commits or your registered
-   project IRC channel.
-
-2. Run ciabot.py and/or ciabot.sh from any directory under git
-   control.
-
-You should see a notification on the channel for your most recent commit.
-
-After verifying correct function, install one of these scripts either
-in a post-commit hook or in an update hook.
-
-In post-commit, run it without arguments. It will query for
-current HEAD and the latest commit ID to get the information it
-needs.
-
-In update, call it with a refname followed by a list of commits:
-You want to reverse the order git rev-list emits because it lists
-from most recent to oldest.
-
-/path/to/ciabot.py ${refname} $(git rev-list ${oldhead}..${newhead} | tac)
diff --git a/contrib/ciabot/README b/contrib/ciabot/README
deleted file mode 100644 (file)
index 2dfe1f9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-These are hook scripts for the CIA notification service at <http://cia.vc/>
-
-They are maintained by Eric S. Raymond <esr@thyrsus.com>.  There is an
-upstream resource page for them at <http://www.catb.org/esr/ciabot/>,
-but they are unlikely to change rapidly.
-
-You probably want the Python version; it's faster, more capable, and
-better documented.  The shell version is maintained only as a fallback
-for use on hosting sites that don't permit Python hook scripts.
-
-See the file INSTALL for installation instructions.
diff --git a/contrib/ciabot/ciabot.py b/contrib/ciabot/ciabot.py
deleted file mode 100755 (executable)
index befa0c3..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2010 Eric S. Raymond <esr@thyrsus.com>
-# Distributed under BSD terms.
-#
-# This script contains porcelain and porcelain byproducts.
-# It's Python because the Python standard libraries avoid portability/security
-# issues raised by callouts in the ancestral Perl and sh scripts.  It should
-# be compatible back to Python 2.1.5
-#
-# usage: ciabot.py [-V] [-n] [-p projectname]  [refname [commits...]]
-#
-# This script is meant to be run either in a post-commit hook or in an
-# update hook. Try it with -n to see the notification mail dumped to
-# stdout and verify that it looks sane. With -V it dumps its version
-# and exits.
-#
-# In post-commit, run it without arguments. It will query for
-# current HEAD and the latest commit ID to get the information it
-# needs.
-#
-# In update, call it with a refname followed by a list of commits:
-# You want to reverse the order git rev-list emits because it lists
-# from most recent to oldest.
-#
-# /path/to/ciabot.py ${refname} $(git rev-list ${oldhead}..${newhead} | tac)
-#
-# Configuration variables affecting this script:
-#
-# ciabot.project = name of the project
-# ciabot.repo = name of the project repo for gitweb/cgit purposes
-# ciabot.xmlrpc  = if true (default), ship notifications via XML-RPC
-# ciabot.revformat = format in which the revision is shown
-#
-# ciabot.project defaults to the directory name of the repository toplevel.
-# ciabot.repo defaults to ciabot.project lowercased.
-#
-# This means that in the normal case you need not do any configuration at all,
-# but setting the project name will speed it up slightly.
-#
-# The revformat variable may have the following values
-# raw -> full hex ID of commit
-# short -> first 12 chars of hex ID
-# describe = -> describe relative to last tag, falling back to short
-# The default is 'describe'.
-#
-# Note: the CIA project now says only XML-RPC is reliable, so
-# we default to that.
-#
-
-import sys
-if sys.hexversion < 0x02000000:
-        # The limiter is the xml.sax module
-        sys.stderr.write("ciabot.py: requires Python 2.0.0 or later.\n")
-        sys.exit(1)
-
-import os, commands, socket, urllib
-from xml.sax.saxutils import escape
-
-# Changeset URL prefix for your repo: when the commit ID is appended
-# to this, it should point at a CGI that will display the commit
-# through gitweb or something similar. The defaults will probably
-# work if you have a typical gitweb/cgit setup.
-#
-#urlprefix="http://%(host)s/cgi-bin/gitweb.cgi?p=%(repo)s;a=commit;h="
-urlprefix="http://%(host)s/cgi-bin/cgit.cgi/%(repo)s/commit/?id="
-
-# The service used to turn your gitwebbish URL into a tinyurl so it
-# will take up less space on the IRC notification line.
-tinyifier = "http://tinyurl.com/api-create.php?url="
-
-# The template used to generate the XML messages to CIA.  You can make
-# visible changes to the IRC-bot notification lines by hacking this.
-# The default will produce a notification line that looks like this:
-#
-# ${project}: ${author} ${repo}:${branch} * ${rev} ${files}: ${logmsg} ${url}
-#
-# By omitting $files you can collapse the files part to a single slash.
-xml = '''\
-<message>
-  <generator>
-    <name>CIA Python client for Git</name>
-    <version>%(version)s</version>
-    <url>%(generator)s</url>
-  </generator>
-  <source>
-    <project>%(project)s</project>
-    <branch>%(repo)s:%(branch)s</branch>
-  </source>
-  <timestamp>%(ts)s</timestamp>
-  <body>
-    <commit>
-      <author>%(author)s</author>
-      <revision>%(rev)s</revision>
-      <files>
-        %(files)s
-      </files>
-      <log>%(logmsg)s %(url)s</log>
-      <url>%(url)s</url>
-    </commit>
-  </body>
-</message>
-'''
-
-#
-# No user-serviceable parts below this line:
-#
-
-# Where to ship e-mail notifications.
-toaddr = "cia@cia.vc"
-
-# Identify the generator script.
-# Should only change when the script itself gets a new home and maintainer.
-generator = "http://www.catb.org/~esr/ciabot.py"
-version = "3.6"
-
-def do(command):
-    return commands.getstatusoutput(command)[1]
-
-def report(refname, merged, xmlrpc=True):
-    "Generate a commit notification to be reported to CIA"
-
-    # Try to tinyfy a reference to a web view for this commit.
-    try:
-        url = open(urllib.urlretrieve(tinyifier + urlprefix + merged)[0]).read()
-    except:
-        url = urlprefix + merged
-
-    branch = os.path.basename(refname)
-
-    # Compute a description for the revision
-    if revformat == 'raw':
-        rev = merged
-    elif revformat == 'short':
-        rev = ''
-    else: # revformat == 'describe'
-        rev = do("git describe %s 2>/dev/null" % merged)
-    if not rev:
-        rev = merged[:12]
-
-    # Extract the meta-information for the commit
-    files=do("git diff-tree -r --name-only '"+ merged +"' | sed -e '1d' -e 's-.*-<file>&</file>-'")
-    metainfo = do("git log -1 '--pretty=format:%an <%ae>%n%at%n%s' " + merged)
-    (author, ts, logmsg) = metainfo.split("\n")
-    logmsg = escape(logmsg)
-
-    # This discards the part of the author's address after @.
-    # Might be be nice to ship the full email address, if not
-    # for spammers' address harvesters - getting this wrong
-    # would make the freenode #commits channel into harvester heaven.
-    author = escape(author.replace("<", "").split("@")[0].split()[-1])
-
-    # This ignores the timezone.  Not clear what to do with it...
-    ts = ts.strip().split()[0]
-
-    context = locals()
-    context.update(globals())
-
-    out = xml % context
-    mail = '''\
-Message-ID: <%(merged)s.%(author)s@%(project)s>
-From: %(fromaddr)s
-To: %(toaddr)s
-Content-type: text/xml
-Subject: DeliverXML
-
-%(out)s''' % locals()
-
-    if xmlrpc:
-        return out
-    else:
-        return mail
-
-if __name__ == "__main__":
-    import getopt
-
-    # Get all config variables
-    revformat = do("git config --get ciabot.revformat")
-    project = do("git config --get ciabot.project")
-    repo = do("git config --get ciabot.repo")
-    xmlrpc = do("git config --get ciabot.xmlrpc")
-    xmlrpc = not (xmlrpc and xmlrpc == "false")
-
-    host = socket.getfqdn()
-    fromaddr = "CIABOT-NOREPLY@" + host
-
-    try:
-        (options, arguments) = getopt.getopt(sys.argv[1:], "np:xV")
-    except getopt.GetoptError, msg:
-        print "ciabot.py: " + str(msg)
-        raise SystemExit, 1
-
-    notify = True
-    for (switch, val) in options:
-        if switch == '-p':
-            project = val
-        elif switch == '-n':
-            notify = False
-        elif switch == '-x':
-            xmlrpc = True
-        elif switch == '-V':
-            print "ciabot.py: version", version
-            sys.exit(0)
-
-    # The project variable defaults to the name of the repository toplevel.
-    if not project:
-        here = os.getcwd()
-        while True:
-            if os.path.exists(os.path.join(here, ".git")):
-                project = os.path.basename(here)
-                break
-            elif here == '/':
-                sys.stderr.write("ciabot.py: no .git below root!\n")
-                sys.exit(1)
-            here = os.path.dirname(here)
-
-    if not repo:
-        repo = project.lower()
-
-    urlprefix = urlprefix % globals()
-
-    # The script wants a reference to head followed by the list of
-    # commit ID to report about.
-    if len(arguments) == 0:
-        refname = do("git symbolic-ref HEAD 2>/dev/null")
-        merges = [do("git rev-parse HEAD")]
-    else:
-        refname = arguments[0]
-        merges = arguments[1:]
-
-    if notify:
-        if xmlrpc:
-            import xmlrpclib
-            server = xmlrpclib.Server('http://cia.vc/RPC2');
-        else:
-            import smtplib
-            server = smtplib.SMTP('localhost')
-
-    for merged in merges:
-        message = report(refname, merged, xmlrpc)
-        if not notify:
-            print message
-        elif xmlrpc:
-            try:
-                # RPC server is flaky, this can fail due to timeout.
-                server.hub.deliver(message)
-            except socket.error, e:
-                sys.stderr.write("%s\n" % e)
-        else:
-            server.sendmail(fromaddr, [toaddr], message)
-
-    if notify:
-        if not xmlrpc:
-            server.quit()
-
-#End
diff --git a/contrib/ciabot/ciabot.sh b/contrib/ciabot/ciabot.sh
deleted file mode 100755 (executable)
index dfb71a1..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-#!/bin/sh
-# Distributed under the terms of the GNU General Public License v2
-# Copyright (c) 2006 Fernando J. Pereda <ferdy@gentoo.org>
-# Copyright (c) 2008 Natanael Copa <natanael.copa@gmail.com>
-# Copyright (c) 2010 Eric S. Raymond <esr@thyrsus.com>
-# Assistance and review by Petr Baudis, author of ciabot.pl,
-# is gratefully acknowledged.
-#
-# This is a version 3.x of ciabot.sh; use -V to find the exact
-# version.  Versions 1 and 2 were shipped in 2006 and 2008 and are not
-# version-stamped.  The version 2 maintainer has passed the baton.
-#
-# Note: This script should be considered obsolete.
-# There is a faster, better-documented rewrite in Python: find it as ciabot.py
-# Use this only if your hosting site forbids Python hooks.
-# It requires: git(1), hostname(1), cut(1), sendmail(1), and wget(1).
-#
-# Originally based on Git ciabot.pl by Petr Baudis.
-# This script contains porcelain and porcelain byproducts.
-#
-# usage: ciabot.sh [-V] [-n] [-p projectname] [refname commit]
-#
-# This script is meant to be run either in a post-commit hook or in an
-# update hook. Try it with -n to see the notification mail dumped to
-# stdout and verify that it looks sane. With -V it dumps its version
-# and exits.
-#
-# In post-commit, run it without arguments. It will query for
-# current HEAD and the latest commit ID to get the information it
-# needs.
-#
-# In update, you have to call it once per merged commit:
-#
-#       refname=$1
-#       oldhead=$2
-#       newhead=$3
-#       for merged in $(git rev-list ${oldhead}..${newhead} | tac) ; do
-#               /path/to/ciabot.sh ${refname} ${merged}
-#       done
-#
-# The reason for the tac call is that git rev-list emits commits from
-# most recent to least - better to ship notifications from oldest to newest.
-#
-# Configuration variables affecting this script:
-#
-# ciabot.project = name of the project
-# ciabot.repo = name of the project repo for gitweb/cgit purposes
-# ciabot.revformat = format in which the revision is shown
-#
-# ciabot.project defaults to the directory name of the repository toplevel.
-# ciabot.repo defaults to ciabot.project lowercased.
-#
-# This means that in the normal case you need not do any configuration at all,
-# but setting the project name will speed it up slightly.
-#
-# The revformat variable may have the following values
-# raw -> full hex ID of commit
-# short -> first 12 chars of hex ID
-# describe = -> describe relative to last tag, falling back to short
-# The default is 'describe'.
-#
-# Note: the shell ancestors of this script used mail, not XML-RPC, in
-# order to avoid stalling until timeout when the CIA XML-RPC server is
-# down. It is unknown whether this is still an issue in 2010, but
-# XML-RPC would be annoying to do from sh in any case. (XML-RPC does
-# have the advantage that it guarantees notification of multiple commits
-# shipped from an update in their actual order.)
-#
-
-# The project as known to CIA. You can set this with a -p option,
-# or let it default to the directory name of the repo toplevel.
-project=$(git config --get ciabot.project)
-
-if [ -z $project ]
-then
-    here=`pwd`;
-    while :; do
-       if [ -d $here/.git ]
-       then
-           project=`basename $here`
-           break
-       elif [ $here = '/' ]
-       then
-           echo "ciabot.sh: no .git below root!"
-           exit 1
-       fi
-       here=`dirname $here`
-    done
-fi
-
-# Name of the repo for gitweb/cgit purposes
-repo=$(git config --get ciabot.repo)
-[ -z $repo] && repo=$(echo "${project}" | tr '[A-Z]' '[a-z]')
-
-# What revision format do we want in the summary?
-revformat=$(git config --get ciabot.revformat)
-
-# Fully qualified domain name of the repo host.  You can hardwire this
-# to make the script faster. The -f option works under Linux and FreeBSD,
-# but not OpenBSD and NetBSD. But under OpenBSD and NetBSD,
-# hostname without options gives the FQDN.
-if hostname -f >/dev/null 2>&1
-then
-    hostname=`hostname -f`
-else
-    hostname=`hostname`
-fi
-
-# Changeset URL prefix for your repo: when the commit ID is appended
-# to this, it should point at a CGI that will display the commit
-# through gitweb or something similar. The defaults will probably
-# work if you have a typical gitweb/cgit setup.
-#urlprefix="http://${host}/cgi-bin/gitweb.cgi?p=${repo};a=commit;h="
-urlprefix="http://${host}/cgi-bin/cgit.cgi/${repo}/commit/?id="
-
-#
-# You probably will not need to change the following:
-#
-
-# Identify the script. The 'generator' variable should change only
-# when the script itself gets a new home and maintainer.
-generator="http://www.catb.org/~esr/ciabot/ciabot.sh"
-version=3.5
-
-# Addresses for the e-mail
-from="CIABOT-NOREPLY@${hostname}"
-to="cia@cia.vc"
-
-# SMTP client to use - may need to edit the absolute pathname for your system
-sendmail="sendmail -t -f ${from}"
-
-#
-# No user-serviceable parts below this line:
-#
-
-# Should include all places sendmail is likely to lurk.
-PATH="$PATH:/usr/sbin/"
-
-mode=mailit
-while getopts pnV opt
-do
-    case $opt in
-       p) project=$2; shift ; shift ;;
-       n) mode=dumpit; shift ;;
-       V) echo "ciabot.sh: version $version"; exit 0; shift ;;
-    esac
-done
-
-# Cough and die if user has not specified a project
-if [ -z "$project" ]
-then
-    echo "ciabot.sh: no project specified, bailing out." >&2
-    exit 1
-fi
-
-if [ $# -eq 0 ] ; then
-       refname=$(git symbolic-ref HEAD 2>/dev/null)
-       merged=$(git rev-parse HEAD)
-else
-       refname=$1
-       merged=$2
-fi
-
-# This tries to turn your gitwebbish URL into a tinyurl so it will take up
-# less space on the IRC notification line. Some repo sites (I'm looking at
-# you, berlios.de!) forbid wget calls for security reasons.  On these,
-# the code will fall back to the full un-tinyfied URL.
-longurl=${urlprefix}${merged}
-url=$(wget -O - -q http://tinyurl.com/api-create.php?url=${longurl} 2>/dev/null)
-if [ -z "$url" ]; then
-       url="${longurl}"
-fi
-
-refname=${refname##refs/heads/}
-
-case $revformat in
-raw) rev=$merged ;;
-short) rev='' ;;
-*) rev=$(git describe ${merged} 2>/dev/null) ;;
-esac
-[ -z ${rev} ] && rev=$(echo "$merged" | cut -c 1-12)
-
-# We discard the part of the author's address after @.
-# Might be nice to ship the full email address, if not
-# for spammers' address harvesters - getting this wrong
-# would make the freenode #commits channel into harvester heaven.
-author=$(git log -1 '--pretty=format:%an <%ae>' $merged)
-author=$(echo "$author" | sed -n -e '/^.*<\([^@]*\).*$/s--\1-p')
-
-logmessage=$(git log -1 '--pretty=format:%s' $merged)
-ts=$(git log -1 '--pretty=format:%at' $merged)
-files=$(git diff-tree -r --name-only ${merged} | sed -e '1d' -e 's-.*-<file>&</file>-')
-
-out="
-<message>
-  <generator>
-    <name>CIA Shell client for Git</name>
-    <version>${version}</version>
-    <url>${generator}</url>
-  </generator>
-  <source>
-    <project>${project}</project>
-    <branch>$repo:${refname}</branch>
-  </source>
-  <timestamp>${ts}</timestamp>
-  <body>
-    <commit>
-      <author>${author}</author>
-      <revision>${rev}</revision>
-      <files>
-       ${files}
-      </files>
-      <log>${logmessage} ${url}</log>
-      <url>${url}</url>
-    </commit>
-  </body>
-</message>"
-
-if [ "$mode" = "dumpit" ]
-then
-    sendmail=cat
-fi
-
-${sendmail} << EOM
-Message-ID: <${merged}.${author}@${project}>
-From: ${from}
-To: ${to}
-Content-type: text/xml
-Subject: DeliverXML
-${out}
-EOM
-
-# vim: set tw=70 :
index e1b73130723a57e7f641236331699e67bb0d4d82..dba3c15700fae1ae8a7a43fd7a6ad7a5b9cbd5dd 100644 (file)
@@ -901,7 +901,7 @@ _git_add ()
        esac
 
        # XXX should we check for --update and --all options ?
-       __git_complete_index_file "--others --modified"
+       __git_complete_index_file "--others --modified --directory --no-empty-directory"
 }
 
 _git_archive ()
@@ -1063,7 +1063,7 @@ _git_clean ()
        esac
 
        # XXX should we check for -x option ?
-       __git_complete_index_file "--others"
+       __git_complete_index_file "--others --directory"
 }
 
 _git_clone ()
@@ -1188,7 +1188,7 @@ _git_diff ()
        __git_complete_revlist_file
 }
 
-__git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
+__git_mergetools_common="diffuse diffmerge ecmerge emerge kdiff3 meld opendiff
                        tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare
 "
 
index d6c61b2bdecc5ca89e21ece5df7c2e4bbec9373c..202e2e520f42059c308f196e0c5022c3dbb4a142 100644 (file)
@@ -60,6 +60,7 @@
 # of values:
 #
 #     verbose       show number of commits ahead/behind (+/-) upstream
+#     name          if verbose, then also show the upstream abbrev name
 #     legacy        don't use the '--count' option available in recent
 #                   versions of git-rev-list
 #     git           always compare HEAD to @{upstream}
@@ -94,7 +95,7 @@ __git_ps1_show_upstream ()
 {
        local key value
        local svn_remote svn_url_pattern count n
-       local upstream=git legacy="" verbose=""
+       local upstream=git legacy="" verbose="" name=""
 
        svn_remote=()
        # get some config options from git-config
@@ -122,6 +123,7 @@ __git_ps1_show_upstream ()
                git|svn) upstream="$option" ;;
                verbose) verbose=1 ;;
                legacy)  legacy=1  ;;
+               name)    name=1 ;;
                esac
        done
 
@@ -204,6 +206,9 @@ __git_ps1_show_upstream ()
                *)          # diverged from upstream
                        p=" u+${count#* }-${count%      *}" ;;
                esac
+               if [[ -n "$count" && -n "$name" ]]; then
+                       p="$p $(git rev-parse --abbrev-ref "$upstream" 2>/dev/null)"
+               fi
        fi
 
 }
index fb6429b64be3cf7011ce69950987a8b328e0e758..428cc1a9a1367e36c2739cb226a0ffdd2704ce82 100755 (executable)
@@ -181,6 +181,10 @@ if (@rev_args) {
        scan_rev_args(\%sources, \@rev_args)
 }
 
+my $toplevel = `git rev-parse --show-toplevel`;
+chomp $toplevel;
+chdir($toplevel) or die "chdir failure: $toplevel: $!\n";
+
 my %commits;
 blame_sources(\%sources, \%commits);
 import_commits(\%commits);
index 6c51c438858e8ac34c5c75c72fbd5cb7a4defd9d..1571a7b2693e50ac93828a76a01366da1e8a6983 100755 (executable)
@@ -369,7 +369,9 @@ sub find_netrc_entry {
        {
                my $entry_text = join ', ', map { "$_=$entry->{$_}" } keys %$entry;
                foreach my $check (sort keys %$query) {
-                       if (defined $query->{$check}) {
+                       if (!defined $entry->{$check}) {
+                               log_debug("OK: entry has no $check token, so any value satisfies check $check");
+                       } elsif (defined $query->{$check}) {
                                log_debug("compare %s [%s] to [%s] (entry: %s)",
                                          $check,
                                          $entry->{$check},
diff --git a/contrib/examples/git-repack.sh b/contrib/examples/git-repack.sh
new file mode 100755 (executable)
index 0000000..7579331
--- /dev/null
@@ -0,0 +1,194 @@
+#!/bin/sh
+#
+# Copyright (c) 2005 Linus Torvalds
+#
+
+OPTIONS_KEEPDASHDASH=
+OPTIONS_SPEC="\
+git repack [options]
+--
+a               pack everything in a single pack
+A               same as -a, and turn unreachable objects loose
+d               remove redundant packs, and run git-prune-packed
+f               pass --no-reuse-delta to git-pack-objects
+F               pass --no-reuse-object to git-pack-objects
+n               do not run git-update-server-info
+q,quiet         be quiet
+l               pass --local to git-pack-objects
+unpack-unreachable=  with -A, do not loosen objects older than this
+ Packing constraints
+window=         size of the window used for delta compression
+window-memory=  same as the above, but limit memory size instead of entries count
+depth=          limits the maximum delta depth
+max-pack-size=  maximum size of each packfile
+"
+SUBDIRECTORY_OK='Yes'
+. git-sh-setup
+
+no_update_info= all_into_one= remove_redundant= unpack_unreachable=
+local= no_reuse= extra=
+while test $# != 0
+do
+       case "$1" in
+       -n)     no_update_info=t ;;
+       -a)     all_into_one=t ;;
+       -A)     all_into_one=t
+               unpack_unreachable=--unpack-unreachable ;;
+       --unpack-unreachable)
+               unpack_unreachable="--unpack-unreachable=$2"; shift ;;
+       -d)     remove_redundant=t ;;
+       -q)     GIT_QUIET=t ;;
+       -f)     no_reuse=--no-reuse-delta ;;
+       -F)     no_reuse=--no-reuse-object ;;
+       -l)     local=--local ;;
+       --max-pack-size|--window|--window-memory|--depth)
+               extra="$extra $1=$2"; shift ;;
+       --) shift; break;;
+       *)      usage ;;
+       esac
+       shift
+done
+
+case "`git config --bool repack.usedeltabaseoffset || echo true`" in
+true)
+       extra="$extra --delta-base-offset" ;;
+esac
+
+PACKDIR="$GIT_OBJECT_DIRECTORY/pack"
+PACKTMP="$PACKDIR/.tmp-$$-pack"
+rm -f "$PACKTMP"-*
+trap 'rm -f "$PACKTMP"-*' 0 1 2 3 15
+
+# There will be more repacking strategies to come...
+case ",$all_into_one," in
+,,)
+       args='--unpacked --incremental'
+       ;;
+,t,)
+       args= existing=
+       if [ -d "$PACKDIR" ]; then
+               for e in `cd "$PACKDIR" && find . -type f -name '*.pack' \
+                       | sed -e 's/^\.\///' -e 's/\.pack$//'`
+               do
+                       if [ -e "$PACKDIR/$e.keep" ]; then
+                               : keep
+                       else
+                               existing="$existing $e"
+                       fi
+               done
+               if test -n "$existing" -a -n "$unpack_unreachable" -a \
+                       -n "$remove_redundant"
+               then
+                       # This may have arbitrary user arguments, so we
+                       # have to protect it against whitespace splitting
+                       # when it gets run as "pack-objects $args" later.
+                       # Fortunately, we know it's an approxidate, so we
+                       # can just use dots instead.
+                       args="$args $(echo "$unpack_unreachable" | tr ' ' .)"
+               fi
+       fi
+       ;;
+esac
+
+mkdir -p "$PACKDIR" || exit
+
+args="$args $local ${GIT_QUIET:+-q} $no_reuse$extra"
+names=$(git pack-objects --keep-true-parents --honor-pack-keep --non-empty --all --reflog $args </dev/null "$PACKTMP") ||
+       exit 1
+if [ -z "$names" ]; then
+       say Nothing new to pack.
+fi
+
+# Ok we have prepared all new packfiles.
+
+# First see if there are packs of the same name and if so
+# if we can move them out of the way (this can happen if we
+# repacked immediately after packing fully.
+rollback=
+failed=
+for name in $names
+do
+       for sfx in pack idx
+       do
+               file=pack-$name.$sfx
+               test -f "$PACKDIR/$file" || continue
+               rm -f "$PACKDIR/old-$file" &&
+               mv "$PACKDIR/$file" "$PACKDIR/old-$file" || {
+                       failed=t
+                       break
+               }
+               rollback="$rollback $file"
+       done
+       test -z "$failed" || break
+done
+
+# If renaming failed for any of them, roll the ones we have
+# already renamed back to their original names.
+if test -n "$failed"
+then
+       rollback_failure=
+       for file in $rollback
+       do
+               mv "$PACKDIR/old-$file" "$PACKDIR/$file" ||
+               rollback_failure="$rollback_failure $file"
+       done
+       if test -n "$rollback_failure"
+       then
+               echo >&2 "WARNING: Some packs in use have been renamed by"
+               echo >&2 "WARNING: prefixing old- to their name, in order to"
+               echo >&2 "WARNING: replace them with the new version of the"
+               echo >&2 "WARNING: file.  But the operation failed, and"
+               echo >&2 "WARNING: attempt to rename them back to their"
+               echo >&2 "WARNING: original names also failed."
+               echo >&2 "WARNING: Please rename them in $PACKDIR manually:"
+               for file in $rollback_failure
+               do
+                       echo >&2 "WARNING:   old-$file -> $file"
+               done
+       fi
+       exit 1
+fi
+
+# Now the ones with the same name are out of the way...
+fullbases=
+for name in $names
+do
+       fullbases="$fullbases pack-$name"
+       chmod a-w "$PACKTMP-$name.pack"
+       chmod a-w "$PACKTMP-$name.idx"
+       mv -f "$PACKTMP-$name.pack" "$PACKDIR/pack-$name.pack" &&
+       mv -f "$PACKTMP-$name.idx"  "$PACKDIR/pack-$name.idx" ||
+       exit
+done
+
+# Remove the "old-" files
+for name in $names
+do
+       rm -f "$PACKDIR/old-pack-$name.idx"
+       rm -f "$PACKDIR/old-pack-$name.pack"
+done
+
+# End of pack replacement.
+
+if test "$remove_redundant" = t
+then
+       # We know $existing are all redundant.
+       if [ -n "$existing" ]
+       then
+               ( cd "$PACKDIR" &&
+                 for e in $existing
+                 do
+                       case " $fullbases " in
+                       *" $e "*) ;;
+                       *)      rm -f "$e.pack" "$e.idx" "$e.keep" ;;
+                       esac
+                 done
+               )
+       fi
+       git prune-packed ${GIT_QUIET:+-q}
+fi
+
+case "$no_update_info" in
+t) : ;;
+*) git update-server-info ;;
+esac
index c9a4805ec1f0d5767af7a5f27428db5a02fa94a1..476e0a2bc02d0708e01c63f6e0fc524a840d4c77 100755 (executable)
@@ -625,6 +625,9 @@ sub fetch_mw_revisions_for_page {
                rvstartid => $fetch_from,
                rvlimit => 500,
                pageids => $id,
+
+               # Let MediaWiki know that we support the latest API.
+               continue => '',
        };
 
        my $revnum = 0;
@@ -640,8 +643,15 @@ sub fetch_mw_revisions_for_page {
                        push(@page_revs, $page_rev_ids);
                        $revnum++;
                }
-               last if (!$result->{'query-continue'});
-               $query->{rvstartid} = $result->{'query-continue'}->{revisions}->{rvstartid};
+
+               if ($result->{'query-continue'}) { # For legacy APIs
+                       $query->{rvstartid} = $result->{'query-continue'}->{revisions}->{rvstartid};
+               } elsif ($result->{continue}) { # For newer APIs
+                       $query->{rvstartid} = $result->{continue}->{rvcontinue};
+                       $query->{continue} = $result->{continue}->{continue};
+               } else {
+                       last;
+               }
        }
        if ($shallow_import && @page_revs) {
                print {*STDERR} "  Found 1 revision (shallow import).\n";
diff --git a/contrib/mw-to-git/t/t9365-continuing-queries.sh b/contrib/mw-to-git/t/t9365-continuing-queries.sh
new file mode 100755 (executable)
index 0000000..27e267f
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+test_description='Test the Git Mediawiki remote helper: queries w/ more than 500 results'
+
+. ./test-gitmw-lib.sh
+. $TEST_DIRECTORY/test-lib.sh
+
+test_check_precond
+
+test_expect_success 'creating page w/ >500 revisions' '
+       wiki_reset &&
+       for i in `test_seq 501`
+       do
+               echo "creating revision $i" &&
+               wiki_editpage foo "revision $i<br/>" true
+       done
+'
+
+test_expect_success 'cloning page w/ >500 revisions' '
+       git clone mediawiki::'"$WIKI_URL"' mw_dir
+'
+
+test_done
diff --git a/diff.c b/diff.c
index a04a34d0487f231481a7c9c475ac4a3e92b5ed2d..e34bf971207f7737c3b1a10968acd8ffb3ecf93d 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -3219,6 +3219,9 @@ void diff_setup_done(struct diff_options *options)
 {
        int count = 0;
 
+       if (options->set_default)
+               options->set_default(options);
+
        if (options->output_format & DIFF_FORMAT_NAME)
                count++;
        if (options->output_format & DIFF_FORMAT_NAME_STATUS)
diff --git a/diff.h b/diff.h
index 44092c2176468257644a19f787038a1ff3033eaa..e34232501ee8e56a1d245da1c4f95ed8b928a837 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -88,8 +88,9 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data)
 #define DIFF_OPT_PICKAXE_IGNORE_CASE (1 << 30)
 
 #define DIFF_OPT_TST(opts, flag)    ((opts)->flags & DIFF_OPT_##flag)
-#define DIFF_OPT_SET(opts, flag)    ((opts)->flags |= DIFF_OPT_##flag)
-#define DIFF_OPT_CLR(opts, flag)    ((opts)->flags &= ~DIFF_OPT_##flag)
+#define DIFF_OPT_TOUCHED(opts, flag)    ((opts)->touched_flags & DIFF_OPT_##flag)
+#define DIFF_OPT_SET(opts, flag)    (((opts)->flags |= DIFF_OPT_##flag),((opts)->touched_flags |= DIFF_OPT_##flag))
+#define DIFF_OPT_CLR(opts, flag)    (((opts)->flags &= ~DIFF_OPT_##flag),((opts)->touched_flags |= DIFF_OPT_##flag))
 #define DIFF_XDL_TST(opts, flag)    ((opts)->xdl_opts & XDF_##flag)
 #define DIFF_XDL_SET(opts, flag)    ((opts)->xdl_opts |= XDF_##flag)
 #define DIFF_XDL_CLR(opts, flag)    ((opts)->xdl_opts &= ~XDF_##flag)
@@ -109,6 +110,7 @@ struct diff_options {
        const char *single_follow;
        const char *a_prefix, *b_prefix;
        unsigned flags;
+       unsigned touched_flags;
 
        /* diff-filter bits */
        unsigned int filter;
@@ -149,6 +151,8 @@ struct diff_options {
        /* to support internal diff recursion by --follow hack*/
        int found_follow;
 
+       void (*set_default)(struct diff_options *);
+
        FILE *file;
        int close_file;
 
diff --git a/dir.c b/dir.c
index b439ff0e63481bebb4039901b029bad978b46929..23b6de47036839ca4297a9b93d1a9794547ccff1 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -860,7 +860,7 @@ static struct dir_entry *dir_entry_new(const char *pathname, int len)
 
 static struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len)
 {
-       if (cache_name_exists(pathname, len, ignore_case))
+       if (cache_file_exists(pathname, len, ignore_case))
                return NULL;
 
        ALLOC_GROW(dir->entries, dir->nr+1, dir->alloc);
@@ -885,11 +885,11 @@ enum exist_status {
 /*
  * Do not use the alphabetically sorted index to look up
  * the directory name; instead, use the case insensitive
- * name hash.
+ * directory hash.
  */
 static enum exist_status directory_exists_in_index_icase(const char *dirname, int len)
 {
-       const struct cache_entry *ce = cache_name_exists(dirname, len + 1, ignore_case);
+       const struct cache_entry *ce = cache_dir_exists(dirname, len);
        unsigned char endchar;
 
        if (!ce)
@@ -1071,7 +1071,7 @@ static int get_index_dtype(const char *path, int len)
        int pos;
        const struct cache_entry *ce;
 
-       ce = cache_name_exists(path, len, 0);
+       ce = cache_file_exists(path, len, 0);
        if (ce) {
                if (!ce_uptodate(ce))
                        return DT_UNKNOWN;
@@ -1131,7 +1131,7 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
                                          int dtype, struct dirent *de)
 {
        int exclude;
-       int has_path_in_index = !!cache_name_exists(path->buf, path->len, ignore_case);
+       int has_path_in_index = !!cache_file_exists(path->buf, path->len, ignore_case);
 
        if (dtype == DT_UNKNOWN)
                dtype = get_dtype(de, path->buf, path->len);
@@ -1160,21 +1160,9 @@ static enum path_treatment treat_one_path(struct dir_struct *dir,
         */
        if ((dir->flags & DIR_COLLECT_KILLED_ONLY) &&
            (dtype == DT_DIR) &&
-           !has_path_in_index) {
-               /*
-                * NEEDSWORK: directory_exists_in_index_icase()
-                * assumes that one byte past the given path is
-                * readable and has '/', which needs to be fixed, but
-                * until then, work it around in the caller.
-                */
-               strbuf_addch(path, '/');
-               if (directory_exists_in_index(path->buf, path->len - 1) ==
-                   index_nonexistent) {
-                       strbuf_setlen(path, path->len - 1);
-                       return path_none;
-               }
-               strbuf_setlen(path, path->len - 1);
-       }
+           !has_path_in_index &&
+           (directory_exists_in_index(path->buf, path->len) == index_nonexistent))
+               return path_none;
 
        exclude = is_excluded(dir, path->buf, &dtype);
 
index 13b5b43bfa9092476d8715c005e06086b7343a54..a0e0350ae6bdf338b3c11c21fc050edb60c88569 100644 (file)
@@ -659,7 +659,7 @@ static int get_pack(struct fetch_pack_args *args,
        const char *argv[22];
        char keep_arg[256];
        char hdr_arg[256];
-       const char **av;
+       const char **av, *cmd_name;
        int do_keep = args->keep_pack;
        struct child_process cmd;
        int ret;
@@ -706,7 +706,7 @@ static int get_pack(struct fetch_pack_args *args,
        if (do_keep) {
                if (pack_lockfile)
                        cmd.out = -1;
-               *av++ = "index-pack";
+               *av++ = cmd_name = "index-pack";
                *av++ = "--stdin";
                if (!args->quiet && !args->no_progress)
                        *av++ = "-v";
@@ -723,7 +723,7 @@ static int get_pack(struct fetch_pack_args *args,
                        *av++ = "--check-self-contained-and-connected";
        }
        else {
-               *av++ = "unpack-objects";
+               *av++ = cmd_name = "unpack-objects";
                if (args->quiet || args->no_progress)
                        *av++ = "-q";
                args->check_self_contained_and_connected = 0;
@@ -741,7 +741,7 @@ static int get_pack(struct fetch_pack_args *args,
        cmd.in = demux.out;
        cmd.git_cmd = 1;
        if (start_command(&cmd))
-               die("fetch-pack: unable to fork off %s", argv[0]);
+               die("fetch-pack: unable to fork off %s", cmd_name);
        if (do_keep && pack_lockfile) {
                *pack_lockfile = index_pack_lockfile(cmd.out);
                close(cmd.out);
@@ -753,7 +753,7 @@ static int get_pack(struct fetch_pack_args *args,
                        args->check_self_contained_and_connected &&
                        ret == 0;
        else
-               die("%s failed", argv[0]);
+               die("%s failed", cmd_name);
        if (use_sideband && finish_async(&demux))
                die("error in sideband demultiplexer");
        return 0;
index 9549de6318147839c73b60b1fc72ceb44d9adb47..7776f126d3bd4facfe987bd844a339c8a17b102a 100644 (file)
@@ -86,7 +86,7 @@
 #define _SGI_SOURCE 1
 
 #if defined(WIN32) && !defined(__CYGWIN__) /* Both MinGW and MSVC */
-# if defined (_MSC_VER)
+# if defined (_MSC_VER) && !defined(_WIN32_WINNT)
 #  define _WIN32_WINNT 0x0502
 # endif
 #define WIN32_LEAN_AND_MEAN  /* stops windows.h including winsock.h */
index 98e8fe43d2fdde1b76e8f10f4c9473e23c8f347c..86d6994619151fb63327848e6763b07971017ad7 100755 (executable)
@@ -255,7 +255,7 @@ else
        remap_to_ancestor=t
 fi
 
-rev_args=$(git rev-parse --revs-only "$@")
+git rev-parse --revs-only "$@" >../parse
 
 case "$filter_subdir" in
 "")
@@ -268,7 +268,7 @@ case "$filter_subdir" in
 esac
 
 git rev-list --reverse --topo-order --default HEAD \
-       --parents --simplify-merges $rev_args "$@" > ../revs ||
+       --parents --simplify-merges --stdin "$@" <../parse >../revs ||
        die "Could not get the commits"
 commits=$(wc -l <../revs | tr -d " ")
 
index feee6a4a0d3a970c94fe506070ddc497c4b40658..a280f498179eb2747b32ba5de4111ccb32024848 100644 (file)
@@ -250,7 +250,8 @@ list_merge_tool_candidates () {
                else
                        tools="opendiff kdiff3 tkdiff xxdiff meld $tools"
                fi
-               tools="$tools gvimdiff diffuse ecmerge p4merge araxis bc3 codecompare"
+               tools="$tools gvimdiff diffuse diffmerge ecmerge"
+               tools="$tools p4merge araxis bc3 codecompare"
        fi
        case "${VISUAL:-$EDITOR}" in
        *vim*)
@@ -263,7 +264,7 @@ list_merge_tool_candidates () {
 }
 
 show_tool_help () {
-       tool_opt="'git ${TOOL_MODE}tool --tool-<tool>'"
+       tool_opt="'git ${TOOL_MODE}tool --tool=<tool>'"
 
        tab='   '
        LF='
index 10bf318d0d4ecc03dcf52d3f665410c48d26bdfd..3c6bed9a28f7ff96fa619a9acbfc42e4a2c78828 100644 (file)
@@ -713,7 +713,7 @@ expand_todo_ids() {
 }
 
 collapse_todo_ids() {
-       transform_todo_ids --short=7
+       transform_todo_ids --short
 }
 
 # Rearrange the todo list that has both "pick sha1 msg" and
diff --git a/git-repack.sh b/git-repack.sh
deleted file mode 100755 (executable)
index 7579331..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2005 Linus Torvalds
-#
-
-OPTIONS_KEEPDASHDASH=
-OPTIONS_SPEC="\
-git repack [options]
---
-a               pack everything in a single pack
-A               same as -a, and turn unreachable objects loose
-d               remove redundant packs, and run git-prune-packed
-f               pass --no-reuse-delta to git-pack-objects
-F               pass --no-reuse-object to git-pack-objects
-n               do not run git-update-server-info
-q,quiet         be quiet
-l               pass --local to git-pack-objects
-unpack-unreachable=  with -A, do not loosen objects older than this
- Packing constraints
-window=         size of the window used for delta compression
-window-memory=  same as the above, but limit memory size instead of entries count
-depth=          limits the maximum delta depth
-max-pack-size=  maximum size of each packfile
-"
-SUBDIRECTORY_OK='Yes'
-. git-sh-setup
-
-no_update_info= all_into_one= remove_redundant= unpack_unreachable=
-local= no_reuse= extra=
-while test $# != 0
-do
-       case "$1" in
-       -n)     no_update_info=t ;;
-       -a)     all_into_one=t ;;
-       -A)     all_into_one=t
-               unpack_unreachable=--unpack-unreachable ;;
-       --unpack-unreachable)
-               unpack_unreachable="--unpack-unreachable=$2"; shift ;;
-       -d)     remove_redundant=t ;;
-       -q)     GIT_QUIET=t ;;
-       -f)     no_reuse=--no-reuse-delta ;;
-       -F)     no_reuse=--no-reuse-object ;;
-       -l)     local=--local ;;
-       --max-pack-size|--window|--window-memory|--depth)
-               extra="$extra $1=$2"; shift ;;
-       --) shift; break;;
-       *)      usage ;;
-       esac
-       shift
-done
-
-case "`git config --bool repack.usedeltabaseoffset || echo true`" in
-true)
-       extra="$extra --delta-base-offset" ;;
-esac
-
-PACKDIR="$GIT_OBJECT_DIRECTORY/pack"
-PACKTMP="$PACKDIR/.tmp-$$-pack"
-rm -f "$PACKTMP"-*
-trap 'rm -f "$PACKTMP"-*' 0 1 2 3 15
-
-# There will be more repacking strategies to come...
-case ",$all_into_one," in
-,,)
-       args='--unpacked --incremental'
-       ;;
-,t,)
-       args= existing=
-       if [ -d "$PACKDIR" ]; then
-               for e in `cd "$PACKDIR" && find . -type f -name '*.pack' \
-                       | sed -e 's/^\.\///' -e 's/\.pack$//'`
-               do
-                       if [ -e "$PACKDIR/$e.keep" ]; then
-                               : keep
-                       else
-                               existing="$existing $e"
-                       fi
-               done
-               if test -n "$existing" -a -n "$unpack_unreachable" -a \
-                       -n "$remove_redundant"
-               then
-                       # This may have arbitrary user arguments, so we
-                       # have to protect it against whitespace splitting
-                       # when it gets run as "pack-objects $args" later.
-                       # Fortunately, we know it's an approxidate, so we
-                       # can just use dots instead.
-                       args="$args $(echo "$unpack_unreachable" | tr ' ' .)"
-               fi
-       fi
-       ;;
-esac
-
-mkdir -p "$PACKDIR" || exit
-
-args="$args $local ${GIT_QUIET:+-q} $no_reuse$extra"
-names=$(git pack-objects --keep-true-parents --honor-pack-keep --non-empty --all --reflog $args </dev/null "$PACKTMP") ||
-       exit 1
-if [ -z "$names" ]; then
-       say Nothing new to pack.
-fi
-
-# Ok we have prepared all new packfiles.
-
-# First see if there are packs of the same name and if so
-# if we can move them out of the way (this can happen if we
-# repacked immediately after packing fully.
-rollback=
-failed=
-for name in $names
-do
-       for sfx in pack idx
-       do
-               file=pack-$name.$sfx
-               test -f "$PACKDIR/$file" || continue
-               rm -f "$PACKDIR/old-$file" &&
-               mv "$PACKDIR/$file" "$PACKDIR/old-$file" || {
-                       failed=t
-                       break
-               }
-               rollback="$rollback $file"
-       done
-       test -z "$failed" || break
-done
-
-# If renaming failed for any of them, roll the ones we have
-# already renamed back to their original names.
-if test -n "$failed"
-then
-       rollback_failure=
-       for file in $rollback
-       do
-               mv "$PACKDIR/old-$file" "$PACKDIR/$file" ||
-               rollback_failure="$rollback_failure $file"
-       done
-       if test -n "$rollback_failure"
-       then
-               echo >&2 "WARNING: Some packs in use have been renamed by"
-               echo >&2 "WARNING: prefixing old- to their name, in order to"
-               echo >&2 "WARNING: replace them with the new version of the"
-               echo >&2 "WARNING: file.  But the operation failed, and"
-               echo >&2 "WARNING: attempt to rename them back to their"
-               echo >&2 "WARNING: original names also failed."
-               echo >&2 "WARNING: Please rename them in $PACKDIR manually:"
-               for file in $rollback_failure
-               do
-                       echo >&2 "WARNING:   old-$file -> $file"
-               done
-       fi
-       exit 1
-fi
-
-# Now the ones with the same name are out of the way...
-fullbases=
-for name in $names
-do
-       fullbases="$fullbases pack-$name"
-       chmod a-w "$PACKTMP-$name.pack"
-       chmod a-w "$PACKTMP-$name.idx"
-       mv -f "$PACKTMP-$name.pack" "$PACKDIR/pack-$name.pack" &&
-       mv -f "$PACKTMP-$name.idx"  "$PACKDIR/pack-$name.idx" ||
-       exit
-done
-
-# Remove the "old-" files
-for name in $names
-do
-       rm -f "$PACKDIR/old-pack-$name.idx"
-       rm -f "$PACKDIR/old-pack-$name.pack"
-done
-
-# End of pack replacement.
-
-if test "$remove_redundant" = t
-then
-       # We know $existing are all redundant.
-       if [ -n "$existing" ]
-       then
-               ( cd "$PACKDIR" &&
-                 for e in $existing
-                 do
-                       case " $fullbases " in
-                       *" $e "*) ;;
-                       *)      rm -f "$e.pack" "$e.idx" "$e.keep" ;;
-                       esac
-                 done
-               )
-       fi
-       git prune-packed ${GIT_QUIET:+-q}
-fi
-
-case "$no_update_info" in
-t) : ;;
-*) git update-server-info ;;
-esac
index e15be516369e5e5a9096bb957966938e134e616c..ebfe8f7a4d0697422a826d7878855bf9e92d0060 100644 (file)
@@ -103,6 +103,40 @@ $LONG_USAGE"
        esac
 fi
 
+# Set the name of the end-user facing command in the reflog when the
+# script may update refs.  When GIT_REFLOG_ACTION is already set, this
+# will not overwrite it, so that a scripted Porcelain (e.g. "git
+# rebase") can set it to its own name (e.g. "rebase") and then call
+# another scripted Porcelain (e.g. "git am") and a call to this
+# function in the latter will keep the name of the end-user facing
+# program (e.g. "rebase") in GIT_REFLOG_ACTION, ensuring whatever it
+# does will be record as actions done as part of the end-user facing
+# operation (e.g. "rebase").
+#
+# NOTE NOTE NOTE: consequently, after assigning a specific message to
+# GIT_REFLOG_ACTION when calling a "git" command to record a custom
+# reflog message, do not leave that custom value in GIT_REFLOG_ACTION,
+# after you are done.  Other callers of "git" commands that rely on
+# writing the default "program name" in reflog expect the variable to
+# contain the value set by this function.
+#
+# To use a custom reflog message, do either one of these three:
+#
+# (a) use a single-shot export form:
+#     GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: preparing frotz" \
+#         git command-that-updates-a-ref
+#
+# (b) save the original away and restore:
+#     SAVED_ACTION=$GIT_REFLOG_ACTION
+#     GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: preparing frotz"
+#     git command-that-updates-a-ref
+#     GIT_REFLOG_ACITON=$SAVED_ACTION
+#
+# (c) assign the variable in a subshell:
+#     (
+#         GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: preparing frotz"
+#         git command-that-updates-a-ref
+#     )
 set_reflog_action() {
        if [ -z "${GIT_REFLOG_ACTION:+set}" ]
        then
index c17bef10629d3fe53e03647ee16de7f9de24dfb5..896f1c9b820b6627da8d591469172d749bf0e700 100755 (executable)
@@ -1032,13 +1032,20 @@ cmd_summary() {
        # Get modified modules cared by user
        modules=$(git $diff_cmd $cached --ignore-submodules=dirty --raw $head -- "$@" |
                sane_egrep '^:([0-7]* )?160000' |
-               while read mod_src mod_dst sha1_src sha1_dst status name
+               while read mod_src mod_dst sha1_src sha1_dst status sm_path
                do
                        # Always show modules deleted or type-changed (blob<->module)
-                       test $status = D -o $status = T && echo "$name" && continue
+                       test $status = D -o $status = T && echo "$sm_path" && continue
+                       # Respect the ignore setting for --for-status.
+                       if test -n "$for_status"
+                       then
+                               name=$(module_name "$sm_path")
+                               ignore_config=$(get_submodule_config "$name" ignore none)
+                               test $status != A -a $ignore_config = all && continue
+                       fi
                        # Also show added or modified modules which are checked out
-                       GIT_DIR="$name/.git" git-rev-parse --git-dir >/dev/null 2>&1 &&
-                       echo "$name"
+                       GIT_DIR="$sm_path/.git" git-rev-parse --git-dir >/dev/null 2>&1 &&
+                       echo "$sm_path"
                done
        )
 
index ff1ce3d351c8e4e175321d45b7284070f9ce691a..7349ffea5ad36f5677e7127fd693a72d155b1fa5 100755 (executable)
@@ -1389,7 +1389,17 @@ sub cmd_multi_init {
                usage(1);
        }
 
-       $_prefix = '' unless defined $_prefix;
+       unless (defined $_prefix) {
+               $_prefix = '';
+               warn <<EOF
+WARNING: --prefix is not given, defaulting to empty prefix.
+         This is probably not what you want! In order to stay compatible
+         with regular remote-tracking refs, provide a prefix like
+         --prefix=origin/ (remember the trailing slash), which will cause
+         the SVN-tracking refs to be placed at refs/remotes/origin/*.
+NOTE: In Git v2.0, the default prefix will change from empty to 'origin/'.
+EOF
+       }
        if (defined $url) {
                $url = canonicalize_url($url);
                init_subdir(@_);
@@ -1759,7 +1769,7 @@ sub get_commit_entry {
                my $msgbuf = "";
                while (<$msg_fh>) {
                        if (!$in_msg) {
-                               $in_msg = 1 if (/^\s*$/);
+                               $in_msg = 1 if (/^$/);
                                $author = $1 if (/^author (.*>)/);
                        } elsif (/^git-svn-id: /) {
                                # skip this for now, we regenerate the
diff --git a/git.c b/git.c
index 1188979465654248c5936e8246886341846cc6f1..cb5208de6a5aab7c222a1d1655fe37089a119fe0 100644 (file)
--- a/git.c
+++ b/git.c
@@ -419,6 +419,7 @@ static void handle_internal_command(int argc, const char **argv)
                { "remote", cmd_remote, RUN_SETUP },
                { "remote-ext", cmd_remote_ext },
                { "remote-fd", cmd_remote_fd },
+               { "repack", cmd_repack, RUN_SETUP },
                { "replace", cmd_replace, RUN_SETUP },
                { "repo-config", cmd_repo_config, RUN_SETUP_GENTLY },
                { "rerere", cmd_rerere, RUN_SETUP },
diff --git a/grep.c b/grep.c
index bb548cae69d1eece8832c97332a91daac5f8dceb..c668034739258d0cd1e7108357da80d44891221f 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -2,6 +2,8 @@
 #include "grep.h"
 #include "userdiff.h"
 #include "xdiff-interface.h"
+#include "diff.h"
+#include "diffcore.h"
 
 static int grep_source_load(struct grep_source *gs);
 static int grep_source_is_binary(struct grep_source *gs);
@@ -1322,6 +1324,58 @@ static void std_output(struct grep_opt *opt, const void *buf, size_t size)
        fwrite(buf, size, 1, stdout);
 }
 
+static int fill_textconv_grep(struct userdiff_driver *driver,
+                             struct grep_source *gs)
+{
+       struct diff_filespec *df;
+       char *buf;
+       size_t size;
+
+       if (!driver || !driver->textconv)
+               return grep_source_load(gs);
+
+       /*
+        * The textconv interface is intimately tied to diff_filespecs, so we
+        * have to pretend to be one. If we could unify the grep_source
+        * and diff_filespec structs, this mess could just go away.
+        */
+       df = alloc_filespec(gs->path);
+       switch (gs->type) {
+       case GREP_SOURCE_SHA1:
+               fill_filespec(df, gs->identifier, 1, 0100644);
+               break;
+       case GREP_SOURCE_FILE:
+               fill_filespec(df, null_sha1, 0, 0100644);
+               break;
+       default:
+               die("BUG: attempt to textconv something without a path?");
+       }
+
+       /*
+        * fill_textconv is not remotely thread-safe; it may load objects
+        * behind the scenes, and it modifies the global diff tempfile
+        * structure.
+        */
+       grep_read_lock();
+       size = fill_textconv(driver, df, &buf);
+       grep_read_unlock();
+       free_filespec(df);
+
+       /*
+        * The normal fill_textconv usage by the diff machinery would just keep
+        * the textconv'd buf separate from the diff_filespec. But much of the
+        * grep code passes around a grep_source and assumes that its "buf"
+        * pointer is the beginning of the thing we are searching. So let's
+        * install our textconv'd version into the grep_source, taking care not
+        * to leak any existing buffer.
+        */
+       grep_source_clear_data(gs);
+       gs->buf = buf;
+       gs->size = size;
+
+       return 0;
+}
+
 static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int collect_hits)
 {
        char *bol;
@@ -1332,6 +1386,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
        unsigned count = 0;
        int try_lookahead = 0;
        int show_function = 0;
+       struct userdiff_driver *textconv = NULL;
        enum grep_context ctx = GREP_CONTEXT_HEAD;
        xdemitconf_t xecfg;
 
@@ -1353,19 +1408,36 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
        }
        opt->last_shown = 0;
 
-       switch (opt->binary) {
-       case GREP_BINARY_DEFAULT:
-               if (grep_source_is_binary(gs))
-                       binary_match_only = 1;
-               break;
-       case GREP_BINARY_NOMATCH:
-               if (grep_source_is_binary(gs))
-                       return 0; /* Assume unmatch */
-               break;
-       case GREP_BINARY_TEXT:
-               break;
-       default:
-               die("bug: unknown binary handling mode");
+       if (opt->allow_textconv) {
+               grep_source_load_driver(gs);
+               /*
+                * We might set up the shared textconv cache data here, which
+                * is not thread-safe.
+                */
+               grep_attr_lock();
+               textconv = userdiff_get_textconv(gs->driver);
+               grep_attr_unlock();
+       }
+
+       /*
+        * We know the result of a textconv is text, so we only have to care
+        * about binary handling if we are not using it.
+        */
+       if (!textconv) {
+               switch (opt->binary) {
+               case GREP_BINARY_DEFAULT:
+                       if (grep_source_is_binary(gs))
+                               binary_match_only = 1;
+                       break;
+               case GREP_BINARY_NOMATCH:
+                       if (grep_source_is_binary(gs))
+                               return 0; /* Assume unmatch */
+                       break;
+               case GREP_BINARY_TEXT:
+                       break;
+               default:
+                       die("bug: unknown binary handling mode");
+               }
        }
 
        memset(&xecfg, 0, sizeof(xecfg));
@@ -1373,7 +1445,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
 
        try_lookahead = should_lookahead(opt);
 
-       if (grep_source_load(gs) < 0)
+       if (fill_textconv_grep(textconv, gs) < 0)
                return 0;
 
        bol = gs->buf;
diff --git a/grep.h b/grep.h
index e4a1df56a423548af4cba728811eb21b62518e15..eaaced19737dfd46e718779cecadc352ff8d5f69 100644 (file)
--- a/grep.h
+++ b/grep.h
@@ -107,6 +107,7 @@ struct grep_opt {
 #define GREP_BINARY_NOMATCH    1
 #define GREP_BINARY_TEXT       2
        int binary;
+       int allow_textconv;
        int extended;
        int use_reflog_filter;
        int pcre;
diff --git a/ident.c b/ident.c
index 1c123e685fbfbfcd5289958adc54a6cd48351628..b29f81f83a68258b354c59df9bde40c254060ed9 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -402,3 +402,32 @@ int git_ident_config(const char *var, const char *value, void *data)
 
        return 0;
 }
+
+static int buf_cmp(const char *a_begin, const char *a_end,
+                  const char *b_begin, const char *b_end)
+{
+       int a_len = a_end - a_begin;
+       int b_len = b_end - b_begin;
+       int min = a_len < b_len ? a_len : b_len;
+       int cmp;
+
+       cmp = memcmp(a_begin, b_begin, min);
+       if (cmp)
+               return cmp;
+
+       return a_len - b_len;
+}
+
+int ident_cmp(const struct ident_split *a,
+             const struct ident_split *b)
+{
+       int cmp;
+
+       cmp = buf_cmp(a->mail_begin, a->mail_end,
+                     b->mail_begin, b->mail_end);
+       if (cmp)
+               return cmp;
+
+       return buf_cmp(a->name_begin, a->name_end,
+                      b->name_begin, b->name_end);
+}
index a7969c4c2e45df4f139c0bc85520f3bbc34da619..81890a6680029ec1d369a7eef11a4ec112847fb7 100644 (file)
--- a/mailmap.c
+++ b/mailmap.c
@@ -52,6 +52,20 @@ static void free_mailmap_entry(void *p, const char *s)
        string_list_clear_func(&me->namemap, free_mailmap_info);
 }
 
+/*
+ * On some systems (e.g. MinGW 4.0), string.h has _only_ inline
+ * definition of strcasecmp and no non-inline implementation is
+ * supplied anywhere, which is, eh, "unusual"; we cannot take an
+ * address of such a function to store it in namemap.cmp.  This is
+ * here as a workaround---do not assign strcasecmp directly to
+ * namemap.cmp until we know no systems that matter have such an
+ * "unusual" string.h.
+ */
+static int namemap_cmp(const char *a, const char *b)
+{
+       return strcasecmp(a, b);
+}
+
 static void add_mapping(struct string_list *map,
                        char *new_name, char *new_email,
                        char *old_name, char *old_email)
@@ -75,7 +89,7 @@ static void add_mapping(struct string_list *map,
                item = string_list_insert_at_index(map, index, old_email);
                me = xcalloc(1, sizeof(struct mailmap_entry));
                me->namemap.strdup_strings = 1;
-               me->namemap.cmp = strcasecmp;
+               me->namemap.cmp = namemap_cmp;
                item->util = me;
        }
 
@@ -237,7 +251,7 @@ int read_mailmap(struct string_list *map, char **repo_abbrev)
        int err = 0;
 
        map->strdup_strings = 1;
-       map->cmp = strcasecmp;
+       map->cmp = namemap_cmp;
 
        if (!git_mailmap_blob && is_bare_repository())
                git_mailmap_blob = "HEAD:.mailmap";
index 40eb840a52acce0d21a17ce5a898e93f164aef97..dbb7104c043b14f2a43d67e1ca87ce88f4a55408 100644 (file)
@@ -2069,8 +2069,8 @@ int parse_merge_opt(struct merge_options *o, const char *s)
                o->xdl_opts = DIFF_WITH_ALG(o, PATIENCE_DIFF);
        else if (!strcmp(s, "histogram"))
                o->xdl_opts = DIFF_WITH_ALG(o, HISTOGRAM_DIFF);
-       else if (!strcmp(s, "diff-algorithm=")) {
-               long value = parse_algorithm_value(s+15);
+       else if (!prefixcmp(s, "diff-algorithm=")) {
+               long value = parse_algorithm_value(s + strlen("diff-algorithm="));
                if (value < 0)
                        return -1;
                /* clear out previous settings */
diff --git a/mergetools/diffmerge b/mergetools/diffmerge
new file mode 100644 (file)
index 0000000..85ac720
--- /dev/null
@@ -0,0 +1,15 @@
+diff_cmd () {
+       "$merge_tool_path" "$LOCAL" "$REMOTE" >/dev/null 2>&1
+}
+
+merge_cmd () {
+       if $base_present
+       then
+               "$merge_tool_path" --merge --result="$MERGED" \
+                       "$LOCAL" "$BASE" "$REMOTE"
+       else
+               "$merge_tool_path" --merge \
+                       --result="$MERGED" "$LOCAL" "$REMOTE"
+       fi
+       status=$?
+}
index 617c86c53762575373d0bcbf3d8bab09cb042caa..e5b6e1ad239bac6914fecfb9071d208e1e6a11cc 100644 (file)
@@ -58,9 +58,9 @@ static struct dir_entry *hash_dir_entry(struct index_state *istate,
 {
        /*
         * Throw each directory component in the hash for quick lookup
-        * during a git status. Directory components are stored with their
+        * during a git status. Directory components are stored without their
         * closing slash.  Despite submodules being a directory, they never
-        * reach this point, because they are stored without a closing slash
+        * reach this point, because they are stored
         * in index_state.name_hash (as ordinary cache_entries).
         *
         * Note that the cache_entry stored with the dir_entry merely
@@ -78,6 +78,7 @@ static struct dir_entry *hash_dir_entry(struct index_state *istate,
                namelen--;
        if (namelen <= 0)
                return NULL;
+       namelen--;
 
        /* lookup existing entry for that directory */
        dir = find_dir_entry(istate, ce->name, namelen);
@@ -97,7 +98,7 @@ static struct dir_entry *hash_dir_entry(struct index_state *istate,
                }
 
                /* recursively add missing parent directories */
-               dir->parent = hash_dir_entry(istate, ce, namelen - 1);
+               dir->parent = hash_dir_entry(istate, ce, namelen);
        }
        return dir;
 }
@@ -222,7 +223,29 @@ static int same_name(const struct cache_entry *ce, const char *name, int namelen
        return slow_same_name(name, namelen, ce->name, len);
 }
 
-struct cache_entry *index_name_exists(struct index_state *istate, const char *name, int namelen, int icase)
+struct cache_entry *index_dir_exists(struct index_state *istate, const char *name, int namelen)
+{
+       struct cache_entry *ce;
+       struct dir_entry *dir;
+
+       lazy_init_name_hash(istate);
+       dir = find_dir_entry(istate, name, namelen);
+       if (dir && dir->nr)
+               return dir->ce;
+
+       /*
+        * It might be a submodule. Unlike plain directories, which are stored
+        * in the dir-hash, submodules are stored in the name-hash, so check
+        * there, as well.
+        */
+       ce = index_file_exists(istate, name, namelen, 1);
+       if (ce && S_ISGITLINK(ce->ce_mode))
+               return ce;
+
+       return NULL;
+}
+
+struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int icase)
 {
        unsigned int hash = hash_name(name, namelen);
        struct cache_entry *ce;
@@ -237,32 +260,16 @@ struct cache_entry *index_name_exists(struct index_state *istate, const char *na
                }
                ce = ce->next;
        }
-
-       /*
-        * When looking for a directory (trailing '/'), it might be a
-        * submodule or a directory. Despite submodules being directories,
-        * they are stored in the name hash without a closing slash.
-        * When ignore_case is 1, directories are stored in a separate hash
-        * table *with* their closing slash.
-        *
-        * The side effect of this storage technique is we have need to
-        * lookup the directory in a separate hash table, and if not found
-        * remove the slash from name and perform the lookup again without
-        * the slash.  If a match is made, S_ISGITLINK(ce->mode) will be
-        * true.
-        */
-       if (icase && name[namelen - 1] == '/') {
-               struct dir_entry *dir = find_dir_entry(istate, name, namelen);
-               if (dir && dir->nr)
-                       return dir->ce;
-
-               ce = index_name_exists(istate, name, namelen - 1, icase);
-               if (ce && S_ISGITLINK(ce->ce_mode))
-                       return ce;
-       }
        return NULL;
 }
 
+struct cache_entry *index_name_exists(struct index_state *istate, const char *name, int namelen, int icase)
+{
+       if (namelen > 0 && name[namelen - 1] == '/')
+               return index_dir_exists(istate, name, namelen - 1);
+       return index_file_exists(istate, name, namelen, icase);
+}
+
 static int free_dir_entry(void *entry, void *unused)
 {
        struct dir_entry *dir = entry;
index 5f792cbfd38c0b30d763902ba5f9399992ddab89..584f7acb36b68d17678b3fd6251105241794ea48 100644 (file)
--- a/object.c
+++ b/object.c
@@ -262,18 +262,16 @@ int object_list_contains(struct object_list *list, struct object *obj)
        return 0;
 }
 
-void add_object_array(struct object *obj, const char *name, struct object_array *array)
-{
-       add_object_array_with_mode(obj, name, array, S_IFINVALID);
-}
-
 /*
  * A zero-length string to which object_array_entry::name can be
  * initialized without requiring a malloc/free.
  */
 static char object_array_slopbuf[1];
 
-void add_object_array_with_mode(struct object *obj, const char *name, struct object_array *array, unsigned mode)
+static void add_object_array_with_mode_context(struct object *obj, const char *name,
+                                              struct object_array *array,
+                                              unsigned mode,
+                                              struct object_context *context)
 {
        unsigned nr = array->nr;
        unsigned alloc = array->alloc;
@@ -296,9 +294,28 @@ void add_object_array_with_mode(struct object *obj, const char *name, struct obj
        else
                entry->name = xstrdup(name);
        entry->mode = mode;
+       entry->context = context;
        array->nr = ++nr;
 }
 
+void add_object_array(struct object *obj, const char *name, struct object_array *array)
+{
+       add_object_array_with_mode(obj, name, array, S_IFINVALID);
+}
+
+void add_object_array_with_mode(struct object *obj, const char *name, struct object_array *array, unsigned mode)
+{
+       add_object_array_with_mode_context(obj, name, array, mode, NULL);
+}
+
+void add_object_array_with_context(struct object *obj, const char *name, struct object_array *array, struct object_context *context)
+{
+       if (context)
+               add_object_array_with_mode_context(obj, name, array, context->mode, context);
+       else
+               add_object_array_with_mode_context(obj, name, array, S_IFINVALID, context);
+}
+
 void object_array_filter(struct object_array *array,
                         object_array_each_func_t want, void *cb_data)
 {
index 2ff68c52dd48842a188eb8f0c9b1e12ff27fae37..dc5df8ce1d9579a28477f91300aa7a49f37ad4e4 100644 (file)
--- a/object.h
+++ b/object.h
@@ -19,6 +19,7 @@ struct object_array {
                 */
                char *name;
                unsigned mode;
+               struct object_context *context;
        } *objects;
 };
 
@@ -91,6 +92,7 @@ int object_list_contains(struct object_list *list, struct object *obj);
 /* Object array handling .. */
 void add_object_array(struct object *obj, const char *name, struct object_array *array);
 void add_object_array_with_mode(struct object *obj, const char *name, struct object_array *array, unsigned mode);
+void add_object_array_with_context(struct object *obj, const char *name, struct object_array *array, struct object_context *context);
 
 typedef int (*object_array_each_func_t)(struct object_array_entry *, void *);
 
index 49e0ec14ab105dce3d457ae3898542cd146aecc9..7a7daa398cc45a800cf4f8b3f8bf6ac84b11463e 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,6 +8,7 @@
 #
 #   English          |  French
 #   -----------------+---------------------------------
+#   3-way merge      |  fusion Ã  3 points
 #   #NN              |  n°NN
 #   a commit         |  un commit
 #   backward         |
 #   blob             |  blob
 #   bug              |  bogue
 #   bundle           |  colis
+#   bypass           |  Ã©viter d'utiliser
+#   to checkout      |  extraire
 #   cherry-pick      |  picorer
+#   to commit        |  valider
+#   commit-ish       |  commit ou apparenté
+#   config file      |  fichier de configuration
 #   dangling         |  en suspens
+#   to debug         |  déboguer
 #   debugging        |  débogage
+#   to deflate       |  compresser
+#   email            |  e-mail
+#   entry            |  Ã©lément
 #   fast-forward     |  avance rapide
 #   fast-forwarded   |  mis Ã  jour en avance rapide
+#   to fetch         |  rapatrier
+#   fix conflicts    |  réglez les conflits
+#   to format        |  formater
 #   glob             |  glob
 #   hash             |  hachage
 #   HEAD             |  HEAD (genre féminin)
-#   hook             |  hook
+#   hook             |  crochet
 #   hunk             |  section
+#   to inflate       |  décompresser
+#   to list          |  afficher
+#   mapping          |  mise en correspondance
 #   merge            |  fusion
+#   pack             |  paquet
+#   patches          |  patchs
 #   pattern          |  motif
+#   to prune         |  Ã©liminer
+#   to push          |  pousser
+#   to rebase        |  rebaser
 #   repository       |  dépôt
 #   remote           |  distante (ou serveur distant)
 #   revision         |  révision
+#   shell            |  interpréteur de commandes
 #   stash            |  remisage
+#   to stash         |  remiser
 #   tag              |  Ã©tiquette
 #   template         |  modèle
-#   to checkout      |  extraire
-#   to commit        |  valider
-#   to fetch         |  rapatrier
-#   to prune         |  Ã©laguer
-#   to push          |  pousser
-#   to rebase        |  rebaser
-#   to stash         |  remiser
+#   thread           |  fil
 #   to track         |  suivre
+#   tree             |  arbre
+#   tree-ish         |  arbre ou apparenté
 #   to unstage       |  désindexer
-#   tree-ish         |  arbre
 #   upstream         |  amont
+#   viewer           |  visualiseur
 #   worktree /       |
 #   work(ing) tree   |  copie de travail
 #
@@ -53,8 +72,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2013-04-30 08:25+0800\n"
-"PO-Revision-Date: 2013-08-27 19:43+0200\n"
+"POT-Creation-Date: 2013-08-06 14:10+0800\n"
+"PO-Revision-Date: 2013-10-05 21:17+0200\n"
 "Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
 "Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n"
 "Language: fr\n"
@@ -64,7 +83,7 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n<=1 ?0 : 1;\n"
 "X-Generator: Poedit 1.5.4\n"
 
-#: advice.c:53
+#: advice.c:57
 #, c-format
 msgid "hint: %.*s\n"
 msgstr "astuce: %.*s\n"
@@ -73,7 +92,7 @@ msgstr "astuce: %.*s\n"
 #. * Message used both when 'git commit' fails and when
 #. * other commands doing a merge do.
 #.
-#: advice.c:83
+#: advice.c:87
 msgid ""
 "Fix them up in the work tree,\n"
 "and then use 'git add/rm <file>' as\n"
@@ -87,7 +106,7 @@ msgstr ""
 
 #: archive.c:10
 msgid "git archive [options] <tree-ish> [<path>...]"
-msgstr "git archive [options] <arbre> [<chemin>...]"
+msgstr "git archive [options] <arbre ou apparenté> [<chemin>...]"
 
 #: archive.c:11
 msgid "git archive --list"
@@ -96,7 +115,9 @@ msgstr "git archive --list"
 #: archive.c:12
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]"
-msgstr "git archive --remote <dépôt> [--exec <commande>] [options] <arbre> [<chemin>...]"
+msgstr ""
+"git archive --remote <dépôt> [--exec <commande>] [options] <arbre ou "
+"apparenté> [<chemin>...]"
 
 #: archive.c:13
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
@@ -110,7 +131,7 @@ msgstr "fmt"
 msgid "archive format"
 msgstr "format d'archive"
 
-#: archive.c:324 builtin/log.c:1126
+#: archive.c:324 builtin/log.c:1173
 msgid "prefix"
 msgstr "préfixe"
 
@@ -118,11 +139,11 @@ msgstr "préfixe"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "préfixer chaque chemin de fichier dans l'archive"
 
-#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371
-#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665
-#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77
-#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536
-#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149
+#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292
+#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673
+#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77
+#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408
+#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152
 msgid "file"
 msgstr "fichier"
 
@@ -152,9 +173,9 @@ msgstr "compression efficace"
 
 #: archive.c:343
 msgid "list supported archive formats"
-msgstr "lister les formats d'archive supportés"
+msgstr "afficher les formats d'archive supportés"
 
-#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86
+#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85
 msgid "repo"
 msgstr "dépôt"
 
@@ -162,7 +183,7 @@ msgstr "dépôt"
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "récupérer l'archive depuis le dépôt distant <dépôt>"
 
-#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615
+#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487
 msgid "command"
 msgstr "commande"
 
@@ -186,17 +207,21 @@ msgstr "La branche %s ne peut pas Ãªtre sa propre branche amont."
 #: branch.c:82
 #, c-format
 msgid "Branch %s set up to track remote branch %s from %s by rebasing."
-msgstr "La branche %s est paramétrée pour suivre la branche distante %s de %s en rebasant."
+msgstr ""
+"La branche %s est paramétrée pour suivre la branche distante %s de %s en "
+"rebasant."
 
 #: branch.c:83
 #, c-format
 msgid "Branch %s set up to track remote branch %s from %s."
-msgstr "La branche %s est paramétrée pour suivre la branche distante %s depuis %s."
+msgstr ""
+"La branche %s est paramétrée pour suivre la branche distante %s depuis %s."
 
 #: branch.c:87
 #, c-format
 msgid "Branch %s set up to track local branch %s by rebasing."
-msgstr "La branche %s est paramétrée pour suivre la branche locale %s en rebasant."
+msgstr ""
+"La branche %s est paramétrée pour suivre la branche locale %s en rebasant."
 
 #: branch.c:88
 #, c-format
@@ -206,7 +231,9 @@ msgstr "La branche %s est paramétrée pour suivre la branche locale %s."
 #: branch.c:92
 #, c-format
 msgid "Branch %s set up to track remote ref %s by rebasing."
-msgstr "La branche %s est paramétrée pour suivre la référence distante %s en rebasant."
+msgstr ""
+"La branche %s est paramétrée pour suivre la référence distante %s en "
+"rebasant."
 
 #: branch.c:93
 #, c-format
@@ -216,7 +243,8 @@ msgstr "La branche %s est paramétrée pour suivre la référence distante %s."
 #: branch.c:97
 #, c-format
 msgid "Branch %s set up to track local ref %s by rebasing."
-msgstr "La branche %s est paramétrée pour suivre la référence locale %s en rebasant."
+msgstr ""
+"La branche %s est paramétrée pour suivre la référence locale %s en rebasant."
 
 #: branch.c:98
 #, c-format
@@ -247,17 +275,19 @@ msgstr "Une branche nommée '%s' existe déjà."
 msgid "Cannot force update the current branch."
 msgstr "Impossible de forcer la mise Ã  jour de la branche courante."
 
-#: branch.c:201
+#: branch.c:216
 #, c-format
 msgid "Cannot setup tracking information; starting point '%s' is not a branch."
-msgstr "Impossible de paramétrer le suivi de branche ; le point de départ '%s' n'est pas une branche."
+msgstr ""
+"Impossible de paramétrer le suivi de branche ; le point de départ '%s' n'est "
+"pas une branche."
 
-#: branch.c:203
+#: branch.c:218
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "la branche amont demandée '%s' n'existe pas"
 
-#: branch.c:205
+#: branch.c:220
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -277,26 +307,26 @@ msgstr ""
 "sa jumelle distante, vous souhaiterez utiliser \"git push -u\"\n"
 "pour paramétrer le suivi distant en même temps que vous poussez."
 
-#: branch.c:250
+#: branch.c:265
 #, c-format
 msgid "Not a valid object name: '%s'."
 msgstr "Nom d'objet invalide : '%s'."
 
-#: branch.c:270
+#: branch.c:285
 #, c-format
 msgid "Ambiguous object name: '%s'."
 msgstr "Nom d'objet ambigu : '%s'."
 
-#: branch.c:275
+#: branch.c:290
 #, c-format
 msgid "Not a valid branch point: '%s'."
 msgstr "Point d'embranchement invalide : '%s'."
 
-#: branch.c:281
+#: branch.c:296
 msgid "Failed to lock ref for update"
 msgstr "Échec du verrouillage de la référence pour mise Ã  jour"
 
-#: branch.c:299
+#: branch.c:314
 msgid "Failed to write ref"
 msgstr "Échec de l'écriture de la référence"
 
@@ -310,7 +340,7 @@ msgstr "'%s' ne semble pas Ãªtre un fichier bundle v2"
 msgid "unrecognized header: %s%s (%d)"
 msgstr "en-tête non reconnu : %s%s (%d)"
 
-#: bundle.c:89 builtin/commit.c:676
+#: bundle.c:89 builtin/commit.c:697
 #, c-format
 msgid "could not open '%s'"
 msgstr "impossible d'ouvrir '%s'"
@@ -319,9 +349,9 @@ msgstr "impossible d'ouvrir '%s'"
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Le dépôt ne dispose pas des commits prérequis :"
 
-#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300
-#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349
-#: builtin/shortlog.c:155
+#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331
+#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364
+#: builtin/shortlog.c:156
 msgid "revision walk setup failed"
 msgstr "échec de la préparation du parcours des révisions"
 
@@ -347,7 +377,7 @@ msgstr[1] "Le colis exige ces %d références :"
 msgid "rev-list died"
 msgstr "rev-list a disparu"
 
-#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258
+#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argument non reconnu : %s"
@@ -378,12 +408,12 @@ msgstr "impossible de créer '%s'"
 msgid "index-pack died"
 msgstr "l'index de groupe a disparu"
 
-#: commit.c:50
+#: commit.c:53
 #, c-format
 msgid "could not parse %s"
 msgstr "impossible d'analyser %s"
 
-#: commit.c:52
+#: commit.c:55
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s n'est pas un commit !"
@@ -392,19 +422,19 @@ msgstr "%s %s n'est pas un commit !"
 msgid "memory exhausted"
 msgstr "plus de mémoire"
 
-#: connected.c:39
+#: connected.c:60
 msgid "Could not run 'git rev-list'"
 msgstr "Impossible de lancer 'git rev-list'"
 
-#: connected.c:48
+#: connected.c:80
 #, c-format
 msgid "failed write to rev-list: %s"
 msgstr "impossible d'écrire dans la rev-list : %s"
 
-#: connected.c:56
+#: connected.c:88
 #, c-format
 msgid "failed to close rev-list's stdin: %s"
-msgstr "impossible de fermer le stdin du rev-list : %s"
+msgstr "impossible de fermer l'entrée standard du rev-list : %s"
 
 #: date.c:95
 msgid "in the future"
@@ -476,7 +506,8 @@ msgstr[1] "il y a %lu ans"
 #: diff.c:112
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
-msgstr "  Impossible d'analyser le pourcentage de modification de dirstat '%s'\n"
+msgstr ""
+"  Impossible d'analyser le pourcentage de modification de dirstat '%s'\n"
 
 #: diff.c:117
 #, c-format
@@ -486,25 +517,28 @@ msgstr "  Paramètre dirstat inconnu '%s'\n"
 #: diff.c:210
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
-msgstr "Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'"
+msgstr ""
+"Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'"
 
 #: diff.c:260
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
 "%s"
-msgstr "Erreurs dans la variable de configuration 'diff.dirstat' :\n"
+msgstr ""
+"Erreurs dans la variable de configuration 'diff.dirstat' :\n"
 "%s"
 
-#: diff.c:3481
+#: diff.c:3487
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
 "%s"
-msgstr "Impossible d'analyser le paramètre de l'option --dirstat/-X :\n"
+msgstr ""
+"Impossible d'analyser le paramètre de l'option --dirstat/-X :\n"
 "%s"
 
-#: diff.c:3495
+#: diff.c:3501
 #, c-format
 msgid "Failed to parse --submodule option parameter: '%s'"
 msgstr "Impossible d'analyser le paramètre de l'option --submodule : '%s'"
@@ -546,20 +580,20 @@ msgstr "'%s' : %s"
 msgid "'%s': short read %s"
 msgstr "'%s' : lecture tronquée %s"
 
-#: help.c:212
+#: help.c:210
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "commandes git disponibles dans '%s'"
 
-#: help.c:219
+#: help.c:217
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "commandes git disponibles depuis un autre endroit de votre $PATH"
 
-#: help.c:235
+#: help.c:233
 msgid "The most commonly used git commands are:"
 msgstr "Les commandes git les plus utilisées sont :"
 
-#: help.c:292
+#: help.c:290
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -568,45 +602,55 @@ msgstr ""
 "'%s' semble Ãªtre une commande git, mais elle n'a pas pu\n"
 "être exécutée. Peut-être git-%s est-elle cassée ?"
 
-#: help.c:349
+#: help.c:347
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Ahem. Votre système n'indique aucune commande Git."
 
-#: help.c:371
+#: help.c:369
 #, c-format
 msgid ""
 "WARNING: You called a Git command named '%s', which does not exist.\n"
 "Continuing under the assumption that you meant '%s'"
-msgstr "ATTENTION : vous avez invoqué une commande Git nommée '%s' qui n'existe pas.\n"
+msgstr ""
+"ATTENTION : vous avez invoqué une commande Git nommée '%s' qui n'existe "
+"pas.\n"
 "Poursuite en supposant que vous avez voulu dire '%s'"
 
-#: help.c:376
+#: help.c:374
 #, c-format
 msgid "in %0.1f seconds automatically..."
 msgstr "dans %0.1f secondes automatiquement..."
 
-#: help.c:383
+#: help.c:381
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git : '%s' n'est pas une commande git. Voir 'git --help'."
 
-#: help.c:387
+#: help.c:385 help.c:444
 msgid ""
 "\n"
 "Did you mean this?"
 msgid_plural ""
 "\n"
 "Did you mean one of these?"
-msgstr[0] "\n"
+msgstr[0] ""
+"\n"
 "Vouliez-vous dire cela ?"
-msgstr[1] "\nVouliez-vous dire un de ceux-là ?"
+msgstr[1] ""
+"\n"
+"Vouliez-vous dire un de ceux-là ?"
+
+#: help.c:440
+#, c-format
+msgid "%s: %s - %s"
+msgstr "%s: %s - %s"
 
 #: merge.c:56
 msgid "failed to read the cache"
 msgstr "impossible de lire le cache"
 
 #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566
-#: builtin/clone.c:645
+#: builtin/clone.c:656
 msgid "unable to write new index file"
 msgstr "impossible d'écrire le nouveau fichier d'index"
 
@@ -620,243 +664,274 @@ msgstr "(mauvais commit)\n"
 msgid "addinfo_cache failed for path '%s'"
 msgstr "échec de addinfo_cache pour le chemin '%s'"
 
-#: merge-recursive.c:268
+#: merge-recursive.c:269
 msgid "error building trees"
 msgstr "erreur de construction des arbres"
 
-#: merge-recursive.c:672
+#: merge-recursive.c:673
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "impossible de créer le chemin '%s' %s"
 
-#: merge-recursive.c:683
+#: merge-recursive.c:684
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Suppression de %s pour faire de la place pour le sous-répertoire\n"
 
 #. something else exists
 #. .. but not some other error (who really cares what?)
-#: merge-recursive.c:697 merge-recursive.c:718
+#: merge-recursive.c:698 merge-recursive.c:719
 msgid ": perhaps a D/F conflict?"
 msgstr ": peut-être un conflit D/F ?"
 
-#: merge-recursive.c:708
+#: merge-recursive.c:709
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "refus de perdre le fichier non suivi '%s'"
 
-#: merge-recursive.c:748
+#: merge-recursive.c:749
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "impossible de lire l'objet %s '%s'"
 
-#: merge-recursive.c:750
+#: merge-recursive.c:751
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "blob attendu pour %s '%s'"
 
-#: merge-recursive.c:773 builtin/clone.c:313
+#: merge-recursive.c:774 builtin/clone.c:312
 #, c-format
 msgid "failed to open '%s'"
 msgstr "échec Ã  l'ouverture de '%s'"
 
-#: merge-recursive.c:781
+#: merge-recursive.c:782
 #, c-format
 msgid "failed to symlink '%s'"
 msgstr "échec Ã  la création du lien symbolique '%s'"
 
-#: merge-recursive.c:784
+#: merge-recursive.c:785
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "ne sait pas traiter %06o %s '%s'"
 
-#: merge-recursive.c:922
+#: merge-recursive.c:923
 msgid "Failed to execute internal merge"
 msgstr "Échec Ã  l'exécution de la fusion interne"
 
-#: merge-recursive.c:926
+#: merge-recursive.c:927
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Impossible d'ajouter %s Ã  la base de données"
 
-#: merge-recursive.c:942
+#: merge-recursive.c:943
 msgid "unsupported object type in the tree"
 msgstr "type d'objet non supporté dans l'arbre"
 
-#: merge-recursive.c:1021 merge-recursive.c:1035
+#: merge-recursive.c:1022 merge-recursive.c:1036
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree."
-msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre."
+msgstr ""
+"CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
+"%s laissée dans l'arbre."
 
-#: merge-recursive.c:1027 merge-recursive.c:1040
+#: merge-recursive.c:1028 merge-recursive.c:1041
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree at %s."
-msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre dans le fichier %s."
+msgstr ""
+"CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
+"%s laissée dans l'arbre dans le fichier %s."
 
-#: merge-recursive.c:1081
+#: merge-recursive.c:1082
 msgid "rename"
 msgstr "renommage"
 
-#: merge-recursive.c:1081
+#: merge-recursive.c:1082
 msgid "renamed"
 msgstr "renommé"
 
-#: merge-recursive.c:1137
+#: merge-recursive.c:1138
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s est un répertoire dans %s ajouté plutôt comme %s"
 
-#: merge-recursive.c:1159
+#: merge-recursive.c:1160
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
 "\"->\"%s\" in \"%s\"%s"
-msgstr "CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche \"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s"
+msgstr ""
+"CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche "
+"\"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s"
 
-#: merge-recursive.c:1164
+#: merge-recursive.c:1165
 msgid " (left unresolved)"
 msgstr " (laissé non résolu)"
 
-#: merge-recursive.c:1218
+#: merge-recursive.c:1219
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
-msgstr "CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'->'%s' dans %s"
+msgstr ""
+"CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'-"
+">'%s' dans %s"
 
-#: merge-recursive.c:1248
+#: merge-recursive.c:1249
 #, c-format
 msgid "Renaming %s to %s and %s to %s instead"
 msgstr "Renommage de %s en %s et de %s en %s Ã  la place"
 
-#: merge-recursive.c:1447
+#: merge-recursive.c:1448
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
-msgstr "CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s"
+msgstr ""
+"CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s"
 
-#: merge-recursive.c:1457
+#: merge-recursive.c:1458
 #, c-format
 msgid "Adding merged %s"
 msgstr "Ajout de %s fusionné"
 
-#: merge-recursive.c:1462 merge-recursive.c:1660
+#: merge-recursive.c:1463 merge-recursive.c:1661
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Ajout plutôt comme %s"
 
-#: merge-recursive.c:1513
+#: merge-recursive.c:1514
 #, c-format
 msgid "cannot read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: merge-recursive.c:1516
+#: merge-recursive.c:1517
 #, c-format
 msgid "object %s is not a blob"
 msgstr "l'objet %s n'est pas un blob"
 
-#: merge-recursive.c:1564
+#: merge-recursive.c:1565
 msgid "modify"
 msgstr "modification"
 
-#: merge-recursive.c:1564
+#: merge-recursive.c:1565
 msgid "modified"
 msgstr "modifié"
 
-#: merge-recursive.c:1574
+#: merge-recursive.c:1575
 msgid "content"
 msgstr "contenu"
 
-#: merge-recursive.c:1581
+#: merge-recursive.c:1582
 msgid "add/add"
 msgstr "ajout/ajout"
 
-#: merge-recursive.c:1615
+#: merge-recursive.c:1616
 #, c-format
 msgid "Skipped %s (merged same as existing)"
-msgstr "%s ignoré (fusion identique Ã  l'existant)"
+msgstr "%s sauté (fusion identique Ã  l'existant)"
 
-#: merge-recursive.c:1629
+#: merge-recursive.c:1630
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Fusion automatique de %s"
 
-#: merge-recursive.c:1633 git-submodule.sh:1029
+#: merge-recursive.c:1634 git-submodule.sh:1118
 msgid "submodule"
 msgstr "sous-module"
 
-#: merge-recursive.c:1634
+#: merge-recursive.c:1635
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLIT (%s) : Conflit de fusion dans %s"
 
-#: merge-recursive.c:1724
+#: merge-recursive.c:1725
 #, c-format
 msgid "Removing %s"
 msgstr "Suppression de %s"
 
-#: merge-recursive.c:1749
+#: merge-recursive.c:1750
 msgid "file/directory"
 msgstr "fichier/répertoire"
 
-#: merge-recursive.c:1755
+#: merge-recursive.c:1756
 msgid "directory/file"
 msgstr "répertoire/fichier"
 
-#: merge-recursive.c:1760
+#: merge-recursive.c:1761
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
-msgstr "CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s"
+msgstr ""
+"CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s"
 
-#: merge-recursive.c:1770
+#: merge-recursive.c:1771
 #, c-format
 msgid "Adding %s"
 msgstr "Ajout de %s"
 
-#: merge-recursive.c:1787
+#: merge-recursive.c:1788
 msgid "Fatal merge failure, shouldn't happen."
 msgstr "Échec fatal de fusion, qui ne devrait jamais arriver."
 
-#: merge-recursive.c:1806
+#: merge-recursive.c:1807
 msgid "Already up-to-date!"
 msgstr "Déjà Ã  jour !"
 
-#: merge-recursive.c:1815
+#: merge-recursive.c:1816
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "échec de fusion des arbres %s et %s"
 
-#: merge-recursive.c:1845
+#: merge-recursive.c:1846
 #, c-format
 msgid "Unprocessed path??? %s"
 msgstr "Chemin non traité ??? %s"
 
-#: merge-recursive.c:1890
+#: merge-recursive.c:1891
 msgid "Merging:"
 msgstr "Fusion :"
 
-#: merge-recursive.c:1903
+#: merge-recursive.c:1904
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u ancêtre commun trouvé :"
 msgstr[1] "%u ancêtres communs trouvés :"
 
-#: merge-recursive.c:1940
+#: merge-recursive.c:1941
 msgid "merge returned no commit"
 msgstr "la fusion n'a pas retourné de commit"
 
-#: merge-recursive.c:1997
+#: merge-recursive.c:1998
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Impossible d'analyser l'objet '%s'"
 
-#: merge-recursive.c:2009 builtin/merge.c:658
+#: merge-recursive.c:2010 builtin/merge.c:672
 msgid "Unable to write index."
 msgstr "Impossible d'écrire l'index."
 
-#: object.c:195
+#: notes-utils.c:40
+msgid "Cannot commit uninitialized/unreferenced notes tree"
+msgstr "Impossible de valider un arbre de notes non initialisé/référencé"
+
+#: notes-utils.c:81
+#, c-format
+msgid "Bad notes.rewriteMode value: '%s'"
+msgstr "Mauvaise valeur de notes.rewriteMode : '%s'"
+
+#: notes-utils.c:91
+#, c-format
+msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
+msgstr "Refus de réécrire des notes dans %s (hors de refs/notes/)"
+
+#. TRANSLATORS: The first %s is the name of the
+#. environment variable, the second %s is its value
+#: notes-utils.c:118
+#, c-format
+msgid "Bad %s value: '%s'"
+msgstr "Mauvaise valeur de %s : '%s'"
+
+#: object.c:204
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "impossible d'analyser l'objet : %s"
@@ -896,30 +971,34 @@ msgstr "Le chemin '%s' est dans le sous-module '%.*s'"
 msgid "'%s' is beyond a symbolic link"
 msgstr "'%s' est au delà d'un lien symbolique"
 
-#: remote.c:1781
+#: remote.c:1788
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Votre branche est en avance sur '%s' de %d commit.\n"
 msgstr[1] "Votre branche est en avance sur '%s' de %d commits.\n"
 
-#: remote.c:1787
+#: remote.c:1794
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (utilisez \"git push\" pour publier vos commits locaux)\n"
 
-#: remote.c:1790
+#: remote.c:1797
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
 "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
-msgstr[0] "Votre branche est en retard sur '%s' de %d commit, et peut Ãªtre mise Ã  jour en avance rapide.\n"
-msgstr[1] "Votre branche est en retard sur '%s' de %d commits, et peut Ãªtre mise Ã  jour en avance rapide.\n"
+msgstr[0] ""
+"Votre branche est en retard sur '%s' de %d commit, et peut Ãªtre mise Ã  jour "
+"en avance rapide.\n"
+msgstr[1] ""
+"Votre branche est en retard sur '%s' de %d commits, et peut Ãªtre mise Ã  jour "
+"en avance rapide.\n"
 
-#: remote.c:1798
+#: remote.c:1805
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (utilisez \"git pull\" pour mettre Ã  jour votre branche locale)\n"
 
-#: remote.c:1801
+#: remote.c:1808
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -927,23 +1006,35 @@ msgid ""
 msgid_plural ""
 "Your branch and '%s' have diverged,\n"
 "and have %d and %d different commits each, respectively.\n"
-msgstr[0] "Votre branche et '%s' ont divergé,\n"
+msgstr[0] ""
+"Votre branche et '%s' ont divergé,\n"
 "et ont %d et %d commit différent chacune respectivement.\n"
-msgstr[1] "Votre branche et '%s' ont divergé,\n"
+msgstr[1] ""
+"Votre branche et '%s' ont divergé,\n"
 "et ont %d et %d commits différents chacune respectivement.\n"
 
-#: remote.c:1811
+#: remote.c:1818
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
-msgstr "  (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n"
+msgstr ""
+"  (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n"
+
+#: run-command.c:80
+msgid "open /dev/null failed"
+msgstr "échec de l'ouverture de /dev/null"
+
+#: run-command.c:82
+#, c-format
+msgid "dup2(%d,%d) failed"
+msgstr "échec de dup2(%d,%d)"
 
-#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999
-#: builtin/merge.c:1009
+#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903
+#: builtin/merge.c:1013 builtin/merge.c:1023
 #, c-format
 msgid "Could not open '%s' for writing"
 msgstr "Impossible d'ouvrir '%s' en Ã©criture"
 
-#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779
-#: builtin/merge.c:1001 builtin/merge.c:1014
+#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793
+#: builtin/merge.c:1015 builtin/merge.c:1028
 #, c-format
 msgid "Could not write to '%s'"
 msgstr "Impossible d'écrire dans '%s'"
@@ -952,7 +1043,8 @@ msgstr "Impossible d'écrire dans '%s'"
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
-msgstr "après résolution des conflits, marquez les chemins corrigés\n"
+msgstr ""
+"après résolution des conflits, marquez les chemins corrigés\n"
 "avec 'git add <chemins>' ou 'git rm <chemins>'"
 
 #: sequencer.c:232
@@ -965,7 +1057,7 @@ msgstr ""
 "avec 'git add <chemins>' ou 'git rm <chemins>'\n"
 "puis validez le résultat avec 'git commit'"
 
-#: sequencer.c:245 sequencer.c:859 sequencer.c:942
+#: sequencer.c:245 sequencer.c:869 sequencer.c:952
 #, c-format
 msgid "Could not write to %s"
 msgstr "Impossible d'écrire dans %s"
@@ -988,215 +1080,242 @@ msgid "Commit your changes or stash them to proceed."
 msgstr "Validez vos modifications ou remisez-les pour continuer."
 
 #. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:319
+#: sequencer.c:324
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Impossible d'écrire le nouveau fichier index"
 
-#: sequencer.c:350
+#: sequencer.c:355
 msgid "Could not resolve HEAD commit\n"
 msgstr "Impossible de résoudre le commit HEAD\n"
 
-#: sequencer.c:371
+#: sequencer.c:377
 msgid "Unable to update cache tree\n"
 msgstr "Impossible de mettre Ã  jour l'arbre de cache\n"
 
-#: sequencer.c:416
+#: sequencer.c:422
 #, c-format
 msgid "Could not parse commit %s\n"
 msgstr "Impossible d'analyser le commit %s\n"
 
-#: sequencer.c:421
+#: sequencer.c:427
 #, c-format
 msgid "Could not parse parent commit %s\n"
 msgstr "Impossible d'analyser le commit parent %s\n"
 
-#: sequencer.c:487
+#: sequencer.c:493
 msgid "Your index file is unmerged."
 msgstr "Votre fichier d'index n'est pas fusionné."
 
-#: sequencer.c:506
+#: sequencer.c:512
 #, c-format
 msgid "Commit %s is a merge but no -m option was given."
 msgstr "Le commit %s est une fusion mais l'option -m n'a pas Ã©té spécifiée."
 
-#: sequencer.c:514
+#: sequencer.c:520
 #, c-format
 msgid "Commit %s does not have parent %d"
 msgstr "Le commit %s n'a pas le parent %d"
 
-#: sequencer.c:518
+#: sequencer.c:524
 #, c-format
 msgid "Mainline was specified but commit %s is not a merge."
-msgstr "Une branche principale a Ã©té spécifiée mais le commit %s n'est pas une fusion."
+msgstr ""
+"Une branche principale a Ã©té spécifiée mais le commit %s n'est pas une "
+"fusion."
 
 #. TRANSLATORS: The first %s will be "revert" or
 #. "cherry-pick", the second %s a SHA1
-#: sequencer.c:531
+#: sequencer.c:537
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s : impossible d'analyser le commit parent %s"
 
-#: sequencer.c:535
+#: sequencer.c:541
 #, c-format
 msgid "Cannot get commit message for %s"
 msgstr "Impossible d'obtenir un message de validation pour %s"
 
-#: sequencer.c:621
+#: sequencer.c:627
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "impossible d'annuler %s... %s"
 
-#: sequencer.c:622
+#: sequencer.c:628
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "impossible d'appliquer %s... %s"
 
-#: sequencer.c:654
+#: sequencer.c:664
 msgid "empty commit set passed"
-msgstr "l'ensemble de commits spéficifié est vide"
+msgstr "l'ensemble de commits spécifié est vide"
 
-#: sequencer.c:662
+#: sequencer.c:672
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s : Ã©chec Ã  la lecture de l'index"
 
-#: sequencer.c:667
+#: sequencer.c:677
 #, c-format
 msgid "git %s: failed to refresh the index"
-msgstr "git %s : Ã©chec du raffraîchissement de l'index"
+msgstr "git %s : Ã©chec du rafraîchissement de l'index"
 
-#: sequencer.c:725
+#: sequencer.c:735
 #, c-format
 msgid "Cannot %s during a %s"
 msgstr "Impossible de %s pendant un %s"
 
-#: sequencer.c:747
+#: sequencer.c:757
 #, c-format
 msgid "Could not parse line %d."
 msgstr "Impossible d'analyser la ligne %d."
 
-#: sequencer.c:752
+#: sequencer.c:762
 msgid "No commits parsed."
 msgstr "Aucun commit analysé."
 
-#: sequencer.c:765
+#: sequencer.c:775
 #, c-format
 msgid "Could not open %s"
 msgstr "Impossible d'ouvrir %s"
 
-#: sequencer.c:769
+#: sequencer.c:779
 #, c-format
 msgid "Could not read %s."
 msgstr "Impossible de lire %s."
 
-#: sequencer.c:776
+#: sequencer.c:786
 #, c-format
 msgid "Unusable instruction sheet: %s"
 msgstr "Feuille d'instruction inutilisable : %s"
 
-#: sequencer.c:804
+#: sequencer.c:814
 #, c-format
 msgid "Invalid key: %s"
 msgstr "Clé invalide: %s"
 
-#: sequencer.c:807
+#: sequencer.c:817
 #, c-format
 msgid "Invalid value for %s: %s"
 msgstr "Valeur invalide pour %s : %s"
 
-#: sequencer.c:819
+#: sequencer.c:829
 #, c-format
 msgid "Malformed options sheet: %s"
 msgstr "Feuille d'options malformée : %s"
 
-#: sequencer.c:840
+#: sequencer.c:850
 msgid "a cherry-pick or revert is already in progress"
 msgstr "un picorage ou un retour est déjà en cours"
 
-#: sequencer.c:841
+#: sequencer.c:851
 msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
 msgstr "essayez \"git cherry-pick (--continue|--quit|-- abort)\""
 
-#: sequencer.c:845
+#: sequencer.c:855
 #, c-format
 msgid "Could not create sequencer directory %s"
 msgstr "Impossible de créer le répertoire de séquenceur %s"
 
-#: sequencer.c:861 sequencer.c:946
+#: sequencer.c:871 sequencer.c:956
 #, c-format
 msgid "Error wrapping up %s."
 msgstr "Erreur lors de l'emballage de %s."
 
-#: sequencer.c:880 sequencer.c:1014
+#: sequencer.c:890 sequencer.c:1024
 msgid "no cherry-pick or revert in progress"
 msgstr "aucun picorage ou retour en cours"
 
-#: sequencer.c:882
+#: sequencer.c:892
 msgid "cannot resolve HEAD"
 msgstr "impossible de résoudre HEAD"
 
-#: sequencer.c:884
+#: sequencer.c:894
 msgid "cannot abort from a branch yet to be born"
 msgstr "impossible d'abandonner depuis une branche non encore créée"
 
-#: sequencer.c:906 builtin/apply.c:4060
+#: sequencer.c:916 builtin/apply.c:4061
 #, c-format
 msgid "cannot open %s: %s"
 msgstr "impossible d'ouvrir %s : %s"
 
-#: sequencer.c:909
+#: sequencer.c:919
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "impossible de lire %s : %s"
 
-#: sequencer.c:910
+#: sequencer.c:920
 msgid "unexpected end of file"
 msgstr "fin de fichier inattendue"
 
-#: sequencer.c:916
+#: sequencer.c:926
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "le fichier HEAD de préparation de picorage '%s' est corrompu"
 
-#: sequencer.c:939
+#: sequencer.c:949
 #, c-format
 msgid "Could not format %s."
 msgstr "Impossible de formater %s."
 
-#: sequencer.c:1083
+#: sequencer.c:1092
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s : impossible de picorer un %s"
 
-#: sequencer.c:1085
+#: sequencer.c:1095
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s : mauvaise révision"
 
-#: sequencer.c:1119
+#: sequencer.c:1129
 msgid "Can't revert as initial commit"
 msgstr "Impossible d'annuler en tant que commit initial"
 
-#: sequencer.c:1120
+#: sequencer.c:1130
 msgid "Can't cherry-pick into empty head"
 msgstr "Impossible de picorer vers une HEAD vide"
 
-#: sha1_name.c:1036
+#: sha1_name.c:440
+msgid ""
+"Git normally never creates a ref that ends with 40 hex characters\n"
+"because it will be ignored when you just specify 40-hex. These refs\n"
+"may be created by mistake. For example,\n"
+"\n"
+"  git checkout -b $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git ne créé normalement jamais de référence qui se termine par 40 caractères "
+"hexa\n"
+"car elle serait ignorée si vous spécifiiez 40-hexa. Ces références\n"
+"peuvent Ãªtre créées par erreur. Par exemple,\n"
+"\n"
+"  git checkout -b $br $(git rev-parse ...)\n"
+"\n"
+"où \"$br\" est d'une manière ou d'une autre vide et une référence 40-hexa "
+"est créée.\n"
+"Veuillez examiner ces références et peut-être les supprimer. Désactivez ce "
+"message\n"
+"en lançant \"git config advice.objectNameWarning false\""
+
+#: sha1_name.c:1097
 msgid "HEAD does not point to a branch"
 msgstr "HEAD ne pointe pas sur une branche"
 
-#: sha1_name.c:1039
+#: sha1_name.c:1100
 #, c-format
 msgid "No such branch: '%s'"
 msgstr "Branche inconnue : '%s'"
 
-#: sha1_name.c:1041
+#: sha1_name.c:1102
 #, c-format
 msgid "No upstream configured for branch '%s'"
 msgstr "Aucune branche amont configurée pour la branche '%s'"
 
-#: sha1_name.c:1044
+#: sha1_name.c:1106
 #, c-format
 msgid "Upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "La branche amont '%s' n'est pas stockée comme branche de suivi"
@@ -1206,160 +1325,171 @@ msgstr "La branche amont '%s' n'est pas stockée comme branche de suivi"
 msgid "unable to access '%s': %s"
 msgstr "impossible d'accéder Ã  '%s' : %s"
 
-#: wrapper.c:423
+#: wrapper.c:429
 #, c-format
 msgid "unable to access '%s'"
 msgstr "impossible d'accéder Ã  '%s'"
 
-#: wrapper.c:434
+#: wrapper.c:440
 #, c-format
 msgid "unable to look up current user in the passwd file: %s"
-msgstr "impossible de rechercher l'utilisateur actuel dans le fichier de mots de passe : %s"
+msgstr ""
+"impossible de rechercher l'utilisateur actuel dans le fichier de mots de "
+"passe : %s"
 
-#: wrapper.c:435
+#: wrapper.c:441
 msgid "no such user"
 msgstr "utilisateur inconnu"
 
-#: wt-status.c:140
+#: wt-status.c:141
 msgid "Unmerged paths:"
 msgstr "Chemins non fusionnés :"
 
-#: wt-status.c:167 wt-status.c:194
+#: wt-status.c:168 wt-status.c:195
 #, c-format
 msgid "  (use \"git reset %s <file>...\" to unstage)"
 msgstr "  (utilisez \"git reset %s <fichier>...\" pour désindexer)"
 
-#: wt-status.c:169 wt-status.c:196
+#: wt-status.c:170 wt-status.c:197
 msgid "  (use \"git rm --cached <file>...\" to unstage)"
 msgstr "  (utilisez \"git rm --cached <fichier>...\" pour désindexer)"
 
-#: wt-status.c:173
+#: wt-status.c:174
 msgid "  (use \"git add <file>...\" to mark resolution)"
 msgstr "  (utilisez \"git add <fichier>...\" pour marquer comme résolu)"
 
-#: wt-status.c:175 wt-status.c:179
+#: wt-status.c:176 wt-status.c:180
 msgid "  (use \"git add/rm <file>...\" as appropriate to mark resolution)"
-msgstr "  (utilisez \"git add/rm <fichier>...\" si nécessaire pour marquer comme résolu)"
+msgstr ""
+"  (utilisez \"git add/rm <fichier>...\" si nécessaire pour marquer comme "
+"résolu)"
 
-#: wt-status.c:177
+#: wt-status.c:178
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (utilisez \"git rm <fichier>...\" pour marquer comme résolu)"
 
-#: wt-status.c:188
+#: wt-status.c:189
 msgid "Changes to be committed:"
 msgstr "Modifications qui seront validées :"
 
-#: wt-status.c:206
+#: wt-status.c:207
 msgid "Changes not staged for commit:"
 msgstr "Modifications qui ne seront pas validées :"
 
-#: wt-status.c:210
+#: wt-status.c:211
 msgid "  (use \"git add <file>...\" to update what will be committed)"
-msgstr "  (utilisez \"git add <fichier>...\" pour mettre Ã  jour ce qui sera validé)"
+msgstr ""
+"  (utilisez \"git add <fichier>...\" pour mettre Ã  jour ce qui sera validé)"
 
-#: wt-status.c:212
+#: wt-status.c:213
 msgid "  (use \"git add/rm <file>...\" to update what will be committed)"
-msgstr "  (utilisez \"git add/rm <fichier>...\" pour mettre Ã  jour ce qui sera validé)"
+msgstr ""
+"  (utilisez \"git add/rm <fichier>...\" pour mettre Ã  jour ce qui sera "
+"validé)"
 
-#: wt-status.c:213
+#: wt-status.c:214
 msgid ""
 "  (use \"git checkout -- <file>...\" to discard changes in working directory)"
-msgstr "  (utilisez \"git checkout -- <fichier>...\" pour annuler les modifications dans la copie de travail)"
+msgstr ""
+"  (utilisez \"git checkout -- <fichier>...\" pour annuler les modifications "
+"dans la copie de travail)"
 
-#: wt-status.c:215
+#: wt-status.c:216
 msgid "  (commit or discard the untracked or modified content in submodules)"
-msgstr "  (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)"
+msgstr ""
+"  (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)"
 
-#: wt-status.c:227
+#: wt-status.c:228
 #, c-format
 msgid "  (use \"git %s <file>...\" to include in what will be committed)"
-msgstr "  (utilisez \"git %s <fichier>...\" pour inclure dans ce qui sera validé)"
+msgstr ""
+"  (utilisez \"git %s <fichier>...\" pour inclure dans ce qui sera validé)"
 
-#: wt-status.c:244
+#: wt-status.c:245
 msgid "bug"
 msgstr "bogue"
 
-#: wt-status.c:249
+#: wt-status.c:250
 msgid "both deleted:"
 msgstr "supprimé des deux côtés :"
 
-#: wt-status.c:250
+#: wt-status.c:251
 msgid "added by us:"
 msgstr "ajouté par nous :"
 
-#: wt-status.c:251
+#: wt-status.c:252
 msgid "deleted by them:"
 msgstr "supprimé par eux :"
 
-#: wt-status.c:252
+#: wt-status.c:253
 msgid "added by them:"
 msgstr "ajouté par eux :"
 
-#: wt-status.c:253
+#: wt-status.c:254
 msgid "deleted by us:"
 msgstr "supprimé par nous :"
 
-#: wt-status.c:254
+#: wt-status.c:255
 msgid "both added:"
 msgstr "ajouté de deux côtés :"
 
-#: wt-status.c:255
+#: wt-status.c:256
 msgid "both modified:"
 msgstr "modifié des deux côtés :"
 
-#: wt-status.c:285
+#: wt-status.c:286
 msgid "new commits, "
 msgstr "nouveaux commits, "
 
-#: wt-status.c:287
+#: wt-status.c:288
 msgid "modified content, "
 msgstr "contenu modifié, "
 
-#: wt-status.c:289
+#: wt-status.c:290
 msgid "untracked content, "
 msgstr "contenu non suivi, "
 
-#: wt-status.c:306
+#: wt-status.c:307
 #, c-format
 msgid "new file:   %s"
 msgstr "nouveau :   %s"
 
-#: wt-status.c:309
+#: wt-status.c:310
 #, c-format
 msgid "copied:     %s -> %s"
 msgstr "copié :     %s -> %s"
 
-#: wt-status.c:312
+#: wt-status.c:313
 #, c-format
 msgid "deleted:    %s"
 msgstr "supprimé :  %s"
 
-#: wt-status.c:315
+#: wt-status.c:316
 #, c-format
 msgid "modified:   %s"
 msgstr "modifié :   %s"
 
-#: wt-status.c:318
+#: wt-status.c:319
 #, c-format
 msgid "renamed:    %s -> %s"
 msgstr "renommé :   %s -> %s"
 
-#: wt-status.c:321
+#: wt-status.c:322
 #, c-format
 msgid "typechange: %s"
 msgstr "nv type :   %s"
 
-#: wt-status.c:324
+#: wt-status.c:325
 #, c-format
 msgid "unknown:    %s"
 msgstr "inconnu :   %s"
 
-#: wt-status.c:327
+#: wt-status.c:328
 #, c-format
 msgid "unmerged:   %s"
 msgstr "non fus. :  %s"
 
-#: wt-status.c:330
+#: wt-status.c:331
 #, c-format
 msgid "bug: unhandled diff status %c"
 msgstr "bogue : Ã©tat de diff non géré %c"
@@ -1368,9 +1498,9 @@ msgstr "bogue : Ã©tat de diff non géré %c"
 msgid "You have unmerged paths."
 msgstr "Vous avez des chemins non fusionnés."
 
-#: wt-status.c:806 wt-status.c:958
+#: wt-status.c:806
 msgid "  (fix conflicts and run \"git commit\")"
-msgstr "  (réglez les conflits et lancez \"git commit\")"
+msgstr "  (réglez les conflits puis lancez \"git commit\")"
 
 #: wt-status.c:809
 msgid "All conflicts fixed but you are still merging."
@@ -1389,8 +1519,8 @@ msgid "The current patch is empty."
 msgstr "Le patch actuel est vide."
 
 #: wt-status.c:829
-msgid "  (fix conflicts and then run \"git am --resolved\")"
-msgstr "  (réglez les conflits puis lancez \"git am --resolved\")"
+msgid "  (fix conflicts and then run \"git am --continue\")"
+msgstr "  (réglez les conflits puis lancez \"git am --continue\")"
 
 #: wt-status.c:831
 msgid "  (use \"git am --skip\" to skip this patch)"
@@ -1411,7 +1541,7 @@ msgstr "Vous Ãªtes en train de rebaser."
 
 #: wt-status.c:901
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
-msgstr "  (résolvez les conflits puis lancez \"git rebase --continue\")"
+msgstr "  (réglez les conflits puis lancez \"git rebase --continue\")"
 
 #: wt-status.c:903
 msgid "  (use \"git rebase --skip\" to skip this patch)"
@@ -1423,30 +1553,37 @@ msgstr "  (utilisez \"git rebase --abort\" pour extraire la branche d'origine)"
 
 #: wt-status.c:918
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
-msgstr "  (tous les conflits sont résolus : lancez \"git rebase --continue\")"
+msgstr "  (tous les conflits sont réglés : lancez \"git rebase --continue\")"
 
 #: wt-status.c:922
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
-msgstr "Vous Ãªtes actuellement en train de fractionner un commit pendant un rebasage de la branche '%s' sur '%s'."
+msgstr ""
+"Vous Ãªtes actuellement en train de fractionner un commit pendant un rebasage "
+"de la branche '%s' sur '%s'."
 
 #: wt-status.c:927
 msgid "You are currently splitting a commit during a rebase."
-msgstr "Vous Ãªtes actuellement en train de fractionner un commit pendant un rebasage."
+msgstr ""
+"Vous Ãªtes actuellement en train de fractionner un commit pendant un rebasage."
 
 #: wt-status.c:930
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
-msgstr "  (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")"
+msgstr ""
+"  (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")"
 
 #: wt-status.c:934
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
-msgstr "Vous Ãªtes actuellement en train d'éditer un commit pendant un rebasage de la branche '%s' sur '%s'."
+msgstr ""
+"Vous Ãªtes actuellement en train d'éditer un commit pendant un rebasage de la "
+"branche '%s' sur '%s'."
 
 #: wt-status.c:939
 msgid "You are currently editing a commit during a rebase."
-msgstr "Vous Ãªtes actuellement en train d'éditer un commit pendant un rebasage."
+msgstr ""
+"Vous Ãªtes actuellement en train d'éditer un commit pendant un rebasage."
 
 #: wt-status.c:942
 msgid "  (use \"git commit --amend\" to amend the current commit)"
@@ -1455,43 +1592,54 @@ msgstr "  (utilisez \"git commit --amend\" pour corriger le commit actuel)"
 #: wt-status.c:944
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
-msgstr "  (utilisez \"git rebase --continue\" quand vous Ãªtes satisfait de vos modifications)"
+msgstr ""
+"  (utilisez \"git rebase --continue\" quand vous Ãªtes satisfait de vos "
+"modifications)"
 
 #: wt-status.c:954
 msgid "You are currently cherry-picking."
 msgstr "Vous Ãªtes actuellement en train de picorer."
 
+#: wt-status.c:958
+msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
+msgstr "  (réglez les conflits puis lancez \"git cherry-pick --continue\")"
+
 #: wt-status.c:961
-msgid "  (all conflicts fixed: run \"git commit\")"
-msgstr "  (tous les conflits sont résolus : lancez \"git commit\")"
+msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
+msgstr ""
+"  (tous les conflits sont réglés : lancez \"git cherry-pick --continue\")"
+
+#: wt-status.c:963
+msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
+msgstr "  (utilisez \"git cherry-pick --abort\" pour annuler le picorage)"
 
-#: wt-status.c:970
+#: wt-status.c:972
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Vous Ãªtes actuellement en train de rétablir le commit %s."
 
-#: wt-status.c:975
+#: wt-status.c:977
 msgid "  (fix conflicts and run \"git revert --continue\")"
-msgstr "  (résolvez les conflits et lancez \"git revert --continue\")"
+msgstr "  (réglez les conflits puis lancez \"git revert --continue\")"
 
-#: wt-status.c:978
+#: wt-status.c:980
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
-msgstr "  (tous les conflits sont résolus : lancez \"git revert --continue\")"
+msgstr "  (tous les conflits sont réglés : lancez \"git revert --continue\")"
 
-#: wt-status.c:980
+#: wt-status.c:982
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (utilisez \"git revert --abort\" pour annuler le rétablissement)"
 
-#: wt-status.c:991
+#: wt-status.c:993
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Vous Ãªtes en cours de bissection, depuis la branche '%s'."
 
-#: wt-status.c:995
+#: wt-status.c:997
 msgid "You are currently bisecting."
 msgstr "Vous Ãªtes en cours de bissection."
 
-#: wt-status.c:998
+#: wt-status.c:1000
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (utilisez \"git bisect reset\" pour revenir Ã  la branche d'origine)"
 
@@ -1499,119 +1647,133 @@ msgstr "  (utilisez \"git bisect reset\" pour revenir Ã  la branche d'origine)"
 msgid "On branch "
 msgstr "Sur la branche "
 
-#: wt-status.c:1184
+#: wt-status.c:1180
+msgid "rebase in progress; onto "
+msgstr "rebasage en cours ; sur "
+
+#: wt-status.c:1187
 msgid "HEAD detached at "
 msgstr "HEAD détachée sur "
 
-#: wt-status.c:1186
+#: wt-status.c:1189
 msgid "HEAD detached from "
 msgstr "HEAD détachée depuis "
 
-#: wt-status.c:1189
+#: wt-status.c:1192
 msgid "Not currently on any branch."
 msgstr "Actuellement sur aucun branche."
 
-#: wt-status.c:1206
+#: wt-status.c:1209
 msgid "Initial commit"
 msgstr "Validation initiale"
 
-#: wt-status.c:1220
+#: wt-status.c:1223
 msgid "Untracked files"
 msgstr "Fichiers non suivis"
 
-#: wt-status.c:1222
+#: wt-status.c:1225
 msgid "Ignored files"
 msgstr "Fichiers ignorés"
 
-#: wt-status.c:1226
+#: wt-status.c:1229
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
 "may speed it up, but you have to be careful not to forget to add\n"
 "new files yourself (see 'git help status')."
-msgstr "L'énumération des fichiers non suivis a duré %.2f secondes. 'status -uno'\n"
-"peut l'accélerer, mais vous devez alors faire attention Ã  ne pas\n"
-"oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help status')."
+msgstr ""
+"L'énumération des fichiers non suivis a duré %.2f secondes. 'status -uno'\n"
+"peut l'accélérer, mais vous devez alors faire attention Ã  ne pas\n"
+"oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help "
+"status')."
 
-#: wt-status.c:1232
+#: wt-status.c:1235
 #, c-format
 msgid "Untracked files not listed%s"
-msgstr "Fichiers non suivis non listés%s"
+msgstr "Fichiers non suivis non affichés%s"
 
-#: wt-status.c:1234
+#: wt-status.c:1237
 msgid " (use -u option to show untracked files)"
 msgstr " (utilisez -u pour afficher les fichiers non suivis)"
 
-#: wt-status.c:1240
+#: wt-status.c:1243
 msgid "No changes"
 msgstr "Aucune modification"
 
-#: wt-status.c:1245
+#: wt-status.c:1248
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
-msgstr "aucune modification n'a Ã©té ajoutée Ã  la validation (utilisez \"git add\" ou \"git commit -a\")\n"
+msgstr ""
+"aucune modification n'a Ã©té ajoutée Ã  la validation (utilisez \"git add\" ou "
+"\"git commit -a\")\n"
 
-#: wt-status.c:1248
+#: wt-status.c:1251
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "aucune modification ajoutée Ã  la validation\n"
 
-#: wt-status.c:1251
+#: wt-status.c:1254
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
-msgstr "aucune modification ajoutée Ã  la validation mais des fichiers non suivis sont présents (utilisez \"git add\" pour les suivre)\n"
+msgstr ""
+"aucune modification ajoutée Ã  la validation mais des fichiers non suivis "
+"sont présents (utilisez \"git add\" pour les suivre)\n"
 
-#: wt-status.c:1254
+#: wt-status.c:1257
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
-msgstr "aucune modification ajoutée Ã  la validation mais des fichiers non suivis sont présents\n"
+msgstr ""
+"aucune modification ajoutée Ã  la validation mais des fichiers non suivis "
+"sont présents\n"
 
-#: wt-status.c:1257
+#: wt-status.c:1260
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
-msgstr "rien Ã  valider (créez/copiez des fichiers et utilisez \"git add\" pour les suivre)\n"
+msgstr ""
+"rien Ã  valider (créez/copiez des fichiers et utilisez \"git add\" pour les "
+"suivre)\n"
 
-#: wt-status.c:1260 wt-status.c:1265
+#: wt-status.c:1263 wt-status.c:1268
 #, c-format
 msgid "nothing to commit\n"
 msgstr "rien Ã  valider\n"
 
-#: wt-status.c:1263
+#: wt-status.c:1266
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "rien Ã  valider (utilisez -u pour afficher les fichiers non suivis)\n"
 
-#: wt-status.c:1267
+#: wt-status.c:1270
 #, c-format
 msgid "nothing to commit, working directory clean\n"
 msgstr "rien Ã  valider, la copie de travail est propre\n"
 
-#: wt-status.c:1375
+#: wt-status.c:1378
 msgid "HEAD (no branch)"
 msgstr "HEAD (aucune branche)"
 
-#: wt-status.c:1381
+#: wt-status.c:1384
 msgid "Initial commit on "
 msgstr "Validation initiale sur "
 
-#: wt-status.c:1396
+#: wt-status.c:1399
 msgid "behind "
 msgstr "derrière "
 
-#: wt-status.c:1399 wt-status.c:1402
+#: wt-status.c:1402 wt-status.c:1405
 msgid "ahead "
 msgstr "devant "
 
-#: wt-status.c:1404
+#: wt-status.c:1407
 msgid ", behind "
 msgstr ", derrière "
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:352
+#: compat/precompose_utf8.c:58 builtin/clone.c:351
 #, c-format
 msgid "failed to unlink '%s'"
-msgstr "echec lors de l'unlink de '%s'"
+msgstr "échec lors de l'unlink de '%s'"
 
 #: builtin/add.c:20
 msgid "git add [options] [--] <pathspec>..."
@@ -1647,7 +1809,8 @@ msgid ""
 "directory.\n"
 msgstr ""
 "Le comportement de 'git add %s (ou %s)' sans argument de chemin depuis un\n"
-"sous-répertoire du projet va changer dans Git 2.0 et ne doit plus Ãªtre utilisé.\n"
+"sous-répertoire du projet va changer dans Git 2.0 et ne doit plus Ãªtre "
+"utilisé.\n"
 "Pour ajouter le contenu de toute l'arborescence, lancez :\n"
 "\n"
 "  git add %s :/\n"
@@ -1658,7 +1821,8 @@ msgstr ""
 "  git add %s .\n"
 "  (ou git add %s .)\n"
 "\n"
-"Avec la version actuelle de Git, la commande est restreinte au répertoire courant.\n"
+"Avec la version actuelle de Git, la commande est restreinte au répertoire "
+"courant.\n"
 
 #: builtin/add.c:100
 #, c-format
@@ -1676,23 +1840,26 @@ msgid ""
 "Run 'git status' to check the paths you removed from your working tree.\n"
 msgstr ""
 "Vous avez lancé 'git add' sans '-A (--all)' ni '--ignore-removal',\n"
-"dont le comportement va changer dans Git 2.0 avec le respect des chemins que vous supprimez.\n"
+"dont le comportement va changer dans Git 2.0 avec le respect des chemins que "
+"vous supprimez.\n"
 "Les chemins tels que '%s' qui ont Ã©té\n"
 "retirés de votre copie de travail sont ignorés avec cette version de Git.\n"
 "\n"
-"* 'git add --ignore-removal <chemin>', qui est l'option par défaut actuelle,\n"
+"* 'git add --ignore-removal <chemin>', qui est l'option par défaut "
+"actuelle,\n"
 "  ignore les chemins que vous avez supprimés de votre copie de travail.\n"
 "\n"
 "* 'git add --all <chemin>' permet d'enregistrer aussi les suppressions.\n"
 "\n"
-"Lancez 'git status' pour vérifier les chemins que vous avez supprimés de votre copie de travail.\n"
+"Lancez 'git status' pour vérifier les chemins que vous avez supprimés de "
+"votre copie de travail.\n"
 
 #: builtin/add.c:144
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "status de diff inattendu %c"
 
-#: builtin/add.c:149 builtin/commit.c:233
+#: builtin/add.c:149 builtin/commit.c:252
 msgid "updating files failed"
 msgstr "échec de la mise Ã  jour des fichiers"
 
@@ -1705,7 +1872,7 @@ msgstr "suppression de '%s'\n"
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Modifications non indexées après rafraîchissement de l'index :"
 
-#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275
+#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "le chemin '%s' ne correspond Ã  aucun fichier"
@@ -1714,127 +1881,132 @@ msgstr "le chemin '%s' ne correspond Ã  aucun fichier"
 msgid "Could not read the index"
 msgstr "Impossible de lire l'index"
 
-#: builtin/add.c:349
+#: builtin/add.c:350
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Impossible d'ouvrir '%s' en Ã©criture."
 
-#: builtin/add.c:353
+#: builtin/add.c:354
 msgid "Could not write patch"
 msgstr "Impossible d'écrire le patch"
 
-#: builtin/add.c:358
+#: builtin/add.c:359
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Stat de '%s' impossible"
 
-#: builtin/add.c:360
+#: builtin/add.c:361
 msgid "Empty patch. Aborted."
 msgstr "Patch vide. Abandon."
 
-#: builtin/add.c:366
+#: builtin/add.c:367
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Impossible d'appliquer '%s'"
 
-#: builtin/add.c:376
+#: builtin/add.c:377
 msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr "Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n"
+msgstr ""
+"Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n"
 
-#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63
-#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253
-#: builtin/rm.c:206
+#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63
+#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253
+#: builtin/rm.c:268
 msgid "dry run"
-msgstr "à vide"
+msgstr "simuler l'action"
 
-#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19
-#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613
-#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112
+#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19
+#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613
+#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113
 msgid "be verbose"
 msgstr "mode verbeux"
 
-#: builtin/add.c:396
+#: builtin/add.c:397
 msgid "interactive picking"
 msgstr "sélection interactive"
 
-#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258
+#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261
 msgid "select hunks interactively"
 msgstr "sélection interactive des sections"
 
-#: builtin/add.c:398
+#: builtin/add.c:399
 msgid "edit current diff and apply"
 msgstr "édition du diff actuel et application"
 
-#: builtin/add.c:399
+#: builtin/add.c:400
 msgid "allow adding otherwise ignored files"
 msgstr "permettre l'ajout de fichiers ignorés"
 
-#: builtin/add.c:400
+#: builtin/add.c:401
 msgid "update tracked files"
 msgstr "mettre Ã  jour les fichiers suivis"
 
-#: builtin/add.c:401
+#: builtin/add.c:402
 msgid "record only the fact that the path will be added later"
 msgstr "enregistrer seulement le fait que le chemin sera ajouté plus tard"
 
-#: builtin/add.c:402
+#: builtin/add.c:403
 msgid "add changes from all tracked and untracked files"
 msgstr "ajouter les modifications de tous les fichiers suivis et non suivis"
 
 #. takes no arguments
-#: builtin/add.c:405
+#: builtin/add.c:406
 msgid "ignore paths removed in the working tree (same as --no-all)"
-msgstr "ignorer les chemins effacés dans la copie de travail (identique Ã  --no-all)"
+msgstr ""
+"ignorer les chemins effacés dans la copie de travail (identique Ã  --no-all)"
 
-#: builtin/add.c:407
+#: builtin/add.c:408
 msgid "don't add, only refresh the index"
 msgstr "ne pas ajouter, juste rafraîchir l'index"
 
-#: builtin/add.c:408
+#: builtin/add.c:409
 msgid "just skip files which cannot be added because of errors"
-msgstr "sauter seulement les fichiers qui ne peuvent pas Ãªtre ajoutés du fait d'erreurs"
+msgstr ""
+"sauter seulement les fichiers qui ne peuvent pas Ãªtre ajoutés du fait "
+"d'erreurs"
 
-#: builtin/add.c:409
+#: builtin/add.c:410
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "vérifier si des fichiers - même manquants - sont ignorés, Ã  vide"
 
-#: builtin/add.c:431
+#: builtin/add.c:432
 #, c-format
 msgid "Use -f if you really want to add them.\n"
 msgstr "Utilisez -f si vous voulez réellement les ajouter.\n"
 
-#: builtin/add.c:432
+#: builtin/add.c:433
 msgid "no files added"
 msgstr "aucun fichier ajouté"
 
-#: builtin/add.c:438
+#: builtin/add.c:439
 msgid "adding files failed"
 msgstr "échec de l'ajout de fichiers"
 
-#: builtin/add.c:477
+#: builtin/add.c:478
 msgid "-A and -u are mutually incompatible"
 msgstr "-A et -u sont mutuellement incompatibles"
 
-#: builtin/add.c:495
+#: builtin/add.c:496
 msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr "L'option --ignore-missing ne peut Ãªtre utilisée qu'en complément de --dry-run"
+msgstr ""
+"L'option --ignore-missing ne peut Ãªtre utilisée qu'en complément de --dry-run"
 
-#: builtin/add.c:525
+#: builtin/add.c:526
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Rien de spécifié, rien n'a Ã©té ajouté.\n"
 
-#: builtin/add.c:526
+#: builtin/add.c:527
 #, c-format
 msgid "Maybe you wanted to say 'git add .'?\n"
 msgstr "Vous vouliez sûrement dire 'git add .' ?\n"
 
-#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204
-#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235
+#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919
+#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297
 msgid "index file corrupt"
 msgstr "fichier d'index corrompu"
 
-#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370
+#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432
 msgid "Unable to write new index file"
 msgstr "Impossible d'écrire le nouveau fichier d'index"
 
@@ -1850,7 +2022,7 @@ msgstr "option d'espace non reconnue '%s'"
 #: builtin/apply.c:125
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
-msgstr "option d'ignorance d'espce non reconnue '%s'"
+msgstr "option d'ignorance d'espace non reconnue '%s'"
 
 #: builtin/apply.c:823
 #, c-format
@@ -1870,27 +2042,34 @@ msgstr "nom de fichier du patch introuvable Ã  la ligne %d"
 #: builtin/apply.c:945
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
-msgstr "git apply : mauvais format de git-diff - /dev/null attendu, %s trouvé Ã  la ligne %d"
+msgstr ""
+"git apply : mauvais format de git-diff - /dev/null attendu, %s trouvé Ã  la "
+"ligne %d"
 
 #: builtin/apply.c:949
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
-msgstr "git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant Ã  la ligne %d"
+msgstr ""
+"git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant "
+"à la ligne %d"
 
 #: builtin/apply.c:950
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
-msgstr "git apply : mauvais format de git-diff - ancien nom de fichier inconsistant Ã  la ligne %d"
+msgstr ""
+"git apply : mauvais format de git-diff - ancien nom de fichier inconsistant "
+"à la ligne %d"
 
 #: builtin/apply.c:957
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
-msgstr "git apply : mauvais format de git-diff - /dev/null attendu Ã  la ligne %d"
+msgstr ""
+"git apply : mauvais format de git-diff - /dev/null attendu Ã  la ligne %d"
 
 #: builtin/apply.c:1422
 #, c-format
 msgid "recount: unexpected line: %.*s"
-msgstr "recount : ligne inattendue : %.*s"
+msgstr "recomptage : ligne inattendue : %.*s"
 
 #: builtin/apply.c:1479
 #, c-format
@@ -1905,8 +2084,12 @@ msgid ""
 msgid_plural ""
 "git diff header lacks filename information when removing %d leading pathname "
 "components (line %d)"
-msgstr[0] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composant de préfixe de chemin (ligne %d)"
-msgstr[1] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composants de préfixe de chemin (ligne %d)"
+msgstr[0] ""
+"information de nom de fichier manquante dans l'en-tête de git diff lors de "
+"la suppression de %d composant de préfixe de chemin (ligne %d)"
+msgstr[1] ""
+"information de nom de fichier manquante dans l'en-tête de git diff lors de "
+"la suppression de %d composants de préfixe de chemin (ligne %d)"
 
 #: builtin/apply.c:1656
 msgid "new file depends on old contents"
@@ -1984,7 +2167,8 @@ msgstr "Contexte réduit Ã  (%ld/%ld) pour appliquer le fragment Ã  la ligne %d"
 msgid ""
 "while searching for:\n"
 "%.*s"
-msgstr "pendant la recherche de :\n"
+msgstr ""
+"pendant la recherche de :\n"
 "%.*s"
 
 #: builtin/apply.c:2843
@@ -2000,7 +2184,9 @@ msgstr "le patch binaire ne s'applique par correctement Ã  '%s'"
 #: builtin/apply.c:2952
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
-msgstr "le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s trouvé)"
+msgstr ""
+"le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s "
+"trouvé)"
 
 #: builtin/apply.c:2973
 #, c-format
@@ -2012,293 +2198,302 @@ msgstr "le patch a Ã©choué : %s:%ld"
 msgid "cannot checkout %s"
 msgstr "extraction de %s impossible"
 
-#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193
+#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194
 #, c-format
 msgid "read of %s failed"
-msgstr "echec de la lecture de %s"
+msgstr "échec de la lecture de %s"
 
-#: builtin/apply.c:3173 builtin/apply.c:3395
+#: builtin/apply.c:3174 builtin/apply.c:3396
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "le chemin %s a Ã©té renommé/supprimé"
 
-#: builtin/apply.c:3254 builtin/apply.c:3409
+#: builtin/apply.c:3255 builtin/apply.c:3410
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s : n'existe pas dans l'index"
 
-#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423
+#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424
 #, c-format
 msgid "%s: %s"
 msgstr "%s : %s"
 
-#: builtin/apply.c:3263 builtin/apply.c:3417
+#: builtin/apply.c:3264 builtin/apply.c:3418
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s : ne correspond pas Ã  l'index"
 
-#: builtin/apply.c:3365
+#: builtin/apply.c:3366
 msgid "removal patch leaves file contents"
 msgstr "le patch de suppression laisse un contenu dans le fichier"
 
-#: builtin/apply.c:3434
+#: builtin/apply.c:3435
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s : type erroné"
 
-#: builtin/apply.c:3436
+#: builtin/apply.c:3437
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s est de type %o, mais %o attendu"
 
-#: builtin/apply.c:3537
+#: builtin/apply.c:3538
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s : existe déjà dans l'index"
 
-#: builtin/apply.c:3540
+#: builtin/apply.c:3541
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s : existe déjà dans la copie de travail"
 
-#: builtin/apply.c:3560
+#: builtin/apply.c:3561
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "le nouveau mode (%o) de %s ne correspond pas Ã  l'ancien mode (%o)"
 
-#: builtin/apply.c:3565
+#: builtin/apply.c:3566
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
-msgstr "le nouveau mode (%o) de %s ne correspond pas Ã  l'ancien mode (%o) de %s"
+msgstr ""
+"le nouveau mode (%o) de %s ne correspond pas Ã  l'ancien mode (%o) de %s"
 
-#: builtin/apply.c:3573
+#: builtin/apply.c:3574
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s : le patch ne s'applique pas"
 
-#: builtin/apply.c:3586
+#: builtin/apply.c:3587
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Vérification du patch %s..."
 
-#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124
+#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
-msgstr "echec de make_cache_entry pour le chemin '%s'"
+msgstr "échec de make_cache_entry pour le chemin '%s'"
 
-#: builtin/apply.c:3822
+#: builtin/apply.c:3823
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "suppression de %s dans l'index impossible"
 
-#: builtin/apply.c:3850
+#: builtin/apply.c:3851
 #, c-format
-msgid "corrupt patch for subproject %s"
-msgstr "patch corrompu pour le sous-projet %s"
+msgid "corrupt patch for submodule %s"
+msgstr "patch corrompu pour le sous-module %s"
 
-#: builtin/apply.c:3854
+#: builtin/apply.c:3855
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "stat du fichier nouvellement créé '%s' impossible"
 
-#: builtin/apply.c:3859
+#: builtin/apply.c:3860
 #, c-format
 msgid "unable to create backing store for newly created file %s"
-msgstr "création du magasin de stockage pour le fichier nouvellement créé %s impossible"
+msgstr ""
+"création du magasin de stockage pour le fichier nouvellement créé %s "
+"impossible"
 
-#: builtin/apply.c:3862 builtin/apply.c:3970
+#: builtin/apply.c:3863 builtin/apply.c:3971
 #, c-format
 msgid "unable to add cache entry for %s"
-msgstr "ajout de l'entrée de cache %s impossible"
+msgstr "ajout de l'élément de cache %s impossible"
 
-#: builtin/apply.c:3895
+#: builtin/apply.c:3896
 #, c-format
 msgid "closing file '%s'"
 msgstr "fermeture du fichier '%s'"
 
-#: builtin/apply.c:3944
+#: builtin/apply.c:3945
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "écriture du fichier '%s' mode %o impossible"
 
-#: builtin/apply.c:4031
+#: builtin/apply.c:4032
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s appliqué proprement."
 
-#: builtin/apply.c:4039
+#: builtin/apply.c:4040
 msgid "internal error"
 msgstr "erreur interne"
 
 #. Say this even without --verbose
-#: builtin/apply.c:4042
+#: builtin/apply.c:4043
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Application du patch %%s avec %d rejet..."
 msgstr[1] "Application du patch %%s avec %d rejets..."
 
-#: builtin/apply.c:4052
+#: builtin/apply.c:4053
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "troncature du nom de fichier .rej en %.*s.rej"
 
-#: builtin/apply.c:4073
+#: builtin/apply.c:4074
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Section n°%d appliquée proprement."
 
-#: builtin/apply.c:4076
+#: builtin/apply.c:4077
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Section n°%d rejetée."
 
-#: builtin/apply.c:4226
+#: builtin/apply.c:4227
 msgid "unrecognized input"
 msgstr "entrée non reconnue"
 
-#: builtin/apply.c:4237
+#: builtin/apply.c:4238
 msgid "unable to read index file"
 msgstr "lecture du fichier d'index impossible"
 
-#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92
+#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91
 #: builtin/fetch.c:63
 msgid "path"
 msgstr "chemin"
 
-#: builtin/apply.c:4357
+#: builtin/apply.c:4358
 msgid "don't apply changes matching the given path"
 msgstr "ne pas appliquer les modifications qui correspondent au chemin donné"
 
-#: builtin/apply.c:4360
+#: builtin/apply.c:4361
 msgid "apply changes matching the given path"
 msgstr "appliquer les modifications qui correspondent au chemin donné"
 
-#: builtin/apply.c:4362
+#: builtin/apply.c:4363
 msgid "num"
 msgstr "num"
 
-#: builtin/apply.c:4363
+#: builtin/apply.c:4364
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "supprimer <num> barres obliques des chemins traditionnels de diff"
 
-#: builtin/apply.c:4366
+#: builtin/apply.c:4367
 msgid "ignore additions made by the patch"
 msgstr "ignorer les additions réalisées par le patch"
 
-#: builtin/apply.c:4368
+#: builtin/apply.c:4369
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "au lieu d'appliquer le patch, afficher le diffstat de l'entrée"
 
-#: builtin/apply.c:4372
+#: builtin/apply.c:4373
 msgid "show number of added and deleted lines in decimal notation"
-msgstr "afficher le nombre de lignes ajoutées et supprimées en notation décimale"
+msgstr ""
+"afficher le nombre de lignes ajoutées et supprimées en notation décimale"
 
-#: builtin/apply.c:4374
+#: builtin/apply.c:4375
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "au lieu d'appliquer le patch, afficher un résumer de l'entrée"
 
-#: builtin/apply.c:4376
+#: builtin/apply.c:4377
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "au lieu d'appliquer le patch, voir si le patch est applicable"
 
-#: builtin/apply.c:4378
+#: builtin/apply.c:4379
 msgid "make sure the patch is applicable to the current index"
 msgstr "s'assurer que le patch est applicable sur l'index actuel"
 
-#: builtin/apply.c:4380
+#: builtin/apply.c:4381
 msgid "apply a patch without touching the working tree"
 msgstr "appliquer les patch sans toucher Ã  la copie de travail"
 
-#: builtin/apply.c:4382
+#: builtin/apply.c:4383
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "appliquer aussi le patch (à utiliser avec ---stat/--summary/--check)"
 
-#: builtin/apply.c:4384
+#: builtin/apply.c:4385
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "tenter une fusion Ã  3 points si le patch ne s'applique pas proprement"
 
-#: builtin/apply.c:4386
+#: builtin/apply.c:4387
 msgid "build a temporary index based on embedded index information"
-msgstr "construire un index temporaire fondé sur l'information de l'index embarqué"
+msgstr ""
+"construire un index temporaire fondé sur l'information de l'index embarqué"
 
-#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456
+#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462
 msgid "paths are separated with NUL character"
 msgstr "les chemins sont séparés par un caractère NUL"
 
-#: builtin/apply.c:4391
+#: builtin/apply.c:4392
 msgid "ensure at least <n> lines of context match"
 msgstr "s'assurer d'au moins <n> lignes de correspondance de contexte"
 
-#: builtin/apply.c:4392
+#: builtin/apply.c:4393
 msgid "action"
 msgstr "action"
 
-#: builtin/apply.c:4393
+#: builtin/apply.c:4394
 msgid "detect new or modified lines that have whitespace errors"
-msgstr "détecter des lignes nouvelles ou modifiées qui contiennent des erreurs d'espace"
+msgstr ""
+"détecter des lignes nouvelles ou modifiées qui contiennent des erreurs "
+"d'espace"
 
-#: builtin/apply.c:4396 builtin/apply.c:4399
+#: builtin/apply.c:4397 builtin/apply.c:4400
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorer des modifications d'espace lors de la recherche de contexte"
 
-#: builtin/apply.c:4402
+#: builtin/apply.c:4403
 msgid "apply the patch in reverse"
 msgstr "appliquer le patch en sens inverse"
 
-#: builtin/apply.c:4404
+#: builtin/apply.c:4405
 msgid "don't expect at least one line of context"
 msgstr "ne pas s'attendre Ã  au moins une ligne de contexte"
 
-#: builtin/apply.c:4406
+#: builtin/apply.c:4407
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "laisser les sections rejetées dans les fichiers *.rej correspondants"
 
-#: builtin/apply.c:4408
+#: builtin/apply.c:4409
 msgid "allow overlapping hunks"
 msgstr "accepter les recouvrements de sections"
 
-#: builtin/apply.c:4411
+#: builtin/apply.c:4412
 msgid "tolerate incorrectly detected missing new-line at the end of file"
-msgstr "tolérer des erreurs de détection de retours chariot manquants en fin de fichier"
+msgstr ""
+"tolérer des erreurs de détection de retours chariot manquants en fin de "
+"fichier"
 
-#: builtin/apply.c:4414
+#: builtin/apply.c:4415
 msgid "do not trust the line counts in the hunk headers"
 msgstr "ne pas se fier au compte de lignes dans les en-têtes de section"
 
-#: builtin/apply.c:4416
+#: builtin/apply.c:4417
 msgid "root"
 msgstr "racine"
 
-#: builtin/apply.c:4417
+#: builtin/apply.c:4418
 msgid "prepend <root> to all filenames"
 msgstr "préfixer tous les noms de fichier avec <root>"
 
-#: builtin/apply.c:4439
+#: builtin/apply.c:4440
 msgid "--3way outside a repository"
 msgstr "--3way hors d'un dépôt"
 
-#: builtin/apply.c:4447
+#: builtin/apply.c:4448
 msgid "--index outside a repository"
 msgstr "--index hors d'un dépôt"
 
-#: builtin/apply.c:4450
+#: builtin/apply.c:4451
 msgid "--cached outside a repository"
 msgstr "--cached hors d'un dépôt"
 
-#: builtin/apply.c:4466
+#: builtin/apply.c:4467
 #, c-format
 msgid "can't open patch '%s'"
 msgstr "ouverture impossible du patch '%s'"
 
-#: builtin/apply.c:4480
+#: builtin/apply.c:4481
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d erreur d'espace ignorée"
 msgstr[1] "%d erreurs d'espace ignorées"
 
-#: builtin/apply.c:4486 builtin/apply.c:4496
+#: builtin/apply.c:4487 builtin/apply.c:4497
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
@@ -2352,105 +2547,111 @@ msgstr "effectuer 'git bisect next'"
 msgid "update BISECT_HEAD instead of checking out the current commit"
 msgstr "mettre Ã  jour BISECT_HEAD au lieu d'extraire le commit actuel"
 
-#: builtin/blame.c:25
+#: builtin/blame.c:26
 msgid "git blame [options] [rev-opts] [rev] [--] file"
 msgstr "git blame [options] [options-de-révision] [rev] [--] fichier"
 
-#: builtin/blame.c:30
+#: builtin/blame.c:31
 msgid "[rev-opts] are documented in git-rev-list(1)"
 msgstr "[options-de-révision] sont documentés dans git-rev-list(1)"
 
-#: builtin/blame.c:2355
+#: builtin/blame.c:2276
 msgid "Show blame entries as we find them, incrementally"
-msgstr "Montrer les entrée de blâme au fur et Ã  mesure de leur découverte, de manière incrémentale"
+msgstr ""
+"Montrer les Ã©léments de blâme au fur et Ã  mesure de leur découverte, de "
+"manière incrémentale"
 
-#: builtin/blame.c:2356
+#: builtin/blame.c:2277
 msgid "Show blank SHA-1 for boundary commits (Default: off)"
 msgstr "Montrer un SHA-1 blanc pour les commits de limite (Défaut : désactivé)"
 
-#: builtin/blame.c:2357
+#: builtin/blame.c:2278
 msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "Ne pas traiter les commits racine comme des limites (Défaut : désactivé)"
+msgstr ""
+"Ne pas traiter les commits racine comme des limites (Défaut : désactivé)"
 
-#: builtin/blame.c:2358
+#: builtin/blame.c:2279
 msgid "Show work cost statistics"
 msgstr "Montrer les statistiques de coût d'activité"
 
-#: builtin/blame.c:2359
+#: builtin/blame.c:2280
 msgid "Show output score for blame entries"
-msgstr "Montrer le score de sortie pour les entrées de blâme"
+msgstr "Montrer le score de sortie pour les Ã©léments de blâme"
 
-#: builtin/blame.c:2360
+#: builtin/blame.c:2281
 msgid "Show original filename (Default: auto)"
 msgstr "Montrer les noms de fichier originaux (Défaut : auto)"
 
-#: builtin/blame.c:2361
+#: builtin/blame.c:2282
 msgid "Show original linenumber (Default: off)"
 msgstr "Montrer les numéros de lignes originaux (Défaut : désactivé)"
 
-#: builtin/blame.c:2362
+#: builtin/blame.c:2283
 msgid "Show in a format designed for machine consumption"
 msgstr "Afficher dans un format propice Ã  la consommation par machine"
 
-#: builtin/blame.c:2363
+#: builtin/blame.c:2284
 msgid "Show porcelain format with per-line commit information"
 msgstr "Afficher en format porcelaine avec l'information de commit par ligne"
 
-#: builtin/blame.c:2364
+#: builtin/blame.c:2285
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Utiliser le même mode de sortie que git-annotate (Défaut : désactivé)"
 
-#: builtin/blame.c:2365
+#: builtin/blame.c:2286
 msgid "Show raw timestamp (Default: off)"
-msgstr "Afficher les horodatages bruts (Défaut: désactivé)"
+msgstr "Afficher les horodatages bruts (Défaut : désactivé)"
 
-#: builtin/blame.c:2366
+#: builtin/blame.c:2287
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Afficher les longs SHA1 de commits (Défaut : désactivé)"
 
-#: builtin/blame.c:2367
+#: builtin/blame.c:2288
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)"
 
-#: builtin/blame.c:2368
+#: builtin/blame.c:2289
 msgid "Show author email instead of name (Default: off)"
 msgstr "Afficher l'e-mail de l'auteur au lieu du nom (Défaut : désactivé)"
 
-#: builtin/blame.c:2369
+#: builtin/blame.c:2290
 msgid "Ignore whitespace differences"
 msgstr "Ignorer les différences d'espace"
 
-#: builtin/blame.c:2370
+#: builtin/blame.c:2291
 msgid "Spend extra cycles to find better match"
-msgstr "Dépenser des cycles supplémentaires pour trouver une meilleure correspondance"
+msgstr ""
+"Dépenser des cycles supplémentaires pour trouver une meilleure correspondance"
 
-#: builtin/blame.c:2371
+#: builtin/blame.c:2292
 msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list"
+msgstr ""
+"Utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list"
 
-#: builtin/blame.c:2372
+#: builtin/blame.c:2293
 msgid "Use <file>'s contents as the final image"
 msgstr "Utiliser le contenu de <fichier> comme image finale"
 
-#: builtin/blame.c:2373 builtin/blame.c:2374
+#: builtin/blame.c:2294 builtin/blame.c:2295
 msgid "score"
 msgstr "score"
 
-#: builtin/blame.c:2373
+#: builtin/blame.c:2294
 msgid "Find line copies within and across files"
 msgstr "Trouver les copies de ligne dans et entre les fichiers"
 
-#: builtin/blame.c:2374
+#: builtin/blame.c:2295
 msgid "Find line movements within and across files"
 msgstr "Trouver les mouvements de ligne dans et entre les fichiers"
 
-#: builtin/blame.c:2375
+#: builtin/blame.c:2296
 msgid "n,m"
 msgstr "n,m"
 
-#: builtin/blame.c:2375
+#: builtin/blame.c:2296
 msgid "Process only line range n,m, counting from 1"
-msgstr "Traiter seulement l'intervalle de ligne n,m en commençant le compte Ã  1"
+msgstr ""
+"Traiter seulement l'intervalle de ligne n,m en commençant le compte Ã  1"
 
 #: builtin/branch.c:24
 msgid "git branch [options] [-r | -a] [--merged | --no-merged]"
@@ -2458,7 +2659,7 @@ msgstr "git branch [options] [-r | -a] [--merged | --no-merged]"
 
 #: builtin/branch.c:25
 msgid "git branch [options] [-l] [-f] <branchname> [<start-point>]"
-msgstr "git branch [options] [-l] [-f] <nomdebranch> [<point-de-départ>]"
+msgstr "git branch [options] [-l] [-f] <nomdebranche> [<point-de-départ>]"
 
 #: builtin/branch.c:26
 msgid "git branch [options] [-r] (-d | -D) <branchname>..."
@@ -2502,7 +2703,7 @@ msgstr ""
 
 #: builtin/branch.c:185
 msgid "Update of config-file failed"
-msgstr "Échec de la mise Ã  jour du fichier de config"
+msgstr "Échec de la mise Ã  jour du fichier de configuration"
 
 #: builtin/branch.c:213
 msgid "cannot use -a with -d"
@@ -2625,7 +2826,7 @@ msgstr "Nom de branche invalide : '%s'"
 
 #: builtin/branch.c:707
 msgid "Branch rename failed"
-msgstr "Echec de renommage de la branche"
+msgstr "Échec de renommage de la branche"
 
 #: builtin/branch.c:711
 #, c-format
@@ -2639,7 +2840,9 @@ msgstr "La branche a Ã©té renommée en %s, mais HEAD n'est pas mise Ã  jour !"
 
 #: builtin/branch.c:722
 msgid "Branch is renamed, but update of config-file failed"
-msgstr "La branche est renommée, mais la mise Ã  jour du fichier de config a Ã©choué"
+msgstr ""
+"La branche est renommée, mais la mise Ã  jour du fichier de configuration a "
+"échoué"
 
 #: builtin/branch.c:737
 #, c-format
@@ -2680,10 +2883,10 @@ msgid "act on remote-tracking branches"
 msgstr "agir sur les branches de suivi distantes"
 
 #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832
-#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369
-#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468
+#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434
+#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468
 msgid "commit"
-msgstr "valider"
+msgstr "commit"
 
 #: builtin/branch.c:806 builtin/branch.c:812
 msgid "print only branches that contain the commit"
@@ -2745,7 +2948,7 @@ msgstr "afficher les branches en colonnes"
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Échec de résolution de HEAD comme référence valide."
 
-#: builtin/branch.c:860 builtin/clone.c:619
+#: builtin/branch.c:860 builtin/clone.c:630
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD non trouvée sous refs/heads !"
 
@@ -2787,7 +2990,9 @@ msgstr "trop de branches pour spécifier une branche amont"
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
-msgstr "impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur aucune branche."
+msgstr ""
+"impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur "
+"aucune branche."
 
 #: builtin/branch.c:946 builtin/branch.c:968 builtin/branch.c:990
 #, c-format
@@ -2805,7 +3010,9 @@ msgstr "trop de branches pour désactiver un amont"
 
 #: builtin/branch.c:966
 msgid "could not unset upstream of HEAD when it does not point to any branch."
-msgstr "impossible de désactiver une branche amont de HEAD quand elle ne pointe sur aucune branche."
+msgstr ""
+"impossible de désactiver une branche amont de HEAD quand elle ne pointe sur "
+"aucune branche."
 
 #: builtin/branch.c:972
 #, c-format
@@ -2814,18 +3021,21 @@ msgstr "La branche '%s' n'a aucune information de branche amont"
 
 #: builtin/branch.c:987
 msgid "it does not make sense to create 'HEAD' manually"
-msgstr "créer manuellement 'HEAD' n'a aucun sens"
+msgstr "créer manuellement 'HEAD' n'a pas de sens"
 
 #: builtin/branch.c:993
 msgid "-a and -r options to 'git branch' do not make sense with a branch name"
-msgstr "les options -a et -r de 'git branch' n'ont pas de sens avec un nom de branche"
+msgstr ""
+"les options -a et -r de 'git branch' n'ont pas de sens avec un nom de branche"
 
 #: builtin/branch.c:996
 #, c-format
 msgid ""
 "The --set-upstream flag is deprecated and will be removed. Consider using --"
 "track or --set-upstream-to\n"
-msgstr "l'option --set-upstream est obsolète et va disparaître. Utilisez plutôt --track ou --set-upstream-to\n"
+msgstr ""
+"l'option --set-upstream est obsolète et va disparaître. Utilisez plutôt --"
+"track ou --set-upstream-to\n"
 
 #: builtin/branch.c:1013
 #, c-format
@@ -2833,7 +3043,8 @@ msgid ""
 "\n"
 "If you wanted to make '%s' track '%s', do this:\n"
 "\n"
-msgstr "\n"
+msgstr ""
+"\n"
 "Si vous vouliez que '%s' suive '%s', faîtes ceci :\n"
 "\n"
 
@@ -2860,43 +3071,44 @@ msgstr "La création d'un colis requiert un dépôt."
 msgid "Need a repository to unbundle."
 msgstr "Le dépaquetage d'un colis requiert un dépôt."
 
-#: builtin/cat-file.c:176
+#: builtin/cat-file.c:285
 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"
 msgstr "git cat-file (-t|-s|-e|-p|<type>|--textconv) <objet>"
 
-#: builtin/cat-file.c:177
+#: builtin/cat-file.c:286
 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>"
 msgstr "git cat-file (--batch|--batch-check) < <liste_d_objets>"
 
-#: builtin/cat-file.c:195
+#: builtin/cat-file.c:323
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<type> peut Ãªtre : blob, tree, commit ou tag"
 
-#: builtin/cat-file.c:196
+#: builtin/cat-file.c:324
 msgid "show object type"
 msgstr "afficher le type de l'objet"
 
-#: builtin/cat-file.c:197
+#: builtin/cat-file.c:325
 msgid "show object size"
 msgstr "afficher la taille de l'objet"
 
-#: builtin/cat-file.c:199
+#: builtin/cat-file.c:327
 msgid "exit with zero when there's no error"
 msgstr "sortir avec un code d'erreur nul quand il n'y a aucune erreur"
 
-#: builtin/cat-file.c:200
+#: builtin/cat-file.c:328
 msgid "pretty-print object's content"
 msgstr "afficher avec mise en forme le contenu de l'objet"
 
-#: builtin/cat-file.c:202
+#: builtin/cat-file.c:330
 msgid "for blob objects, run textconv on object's content"
 msgstr "pour les objets blob, lancer textconv sur le contenu de l'objet"
 
-#: builtin/cat-file.c:204
+#: builtin/cat-file.c:332
 msgid "show info and content of objects fed from the standard input"
-msgstr "afficher l'information et le contenu des objets passés en entrée standard"
+msgstr ""
+"afficher l'information et le contenu des objets passés en entrée standard"
 
-#: builtin/cat-file.c:207
+#: builtin/cat-file.c:335
 msgid "show info about objects fed from the standard input"
 msgstr "afficher l'information des objets passés en entrée standard"
 
@@ -2906,7 +3118,8 @@ msgstr "git check-attr [-a | --all | attr...] [--] chemin..."
 
 #: builtin/check-attr.c:12
 msgid "git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>"
-msgstr "git check-attr --stdin [-z] [-a | --all | attr...] < <liste-de-chemins>"
+msgstr ""
+"git check-attr --stdin [-z] [-a | --all | attr...] < <liste-de-chemins>"
 
 #: builtin/check-attr.c:19
 msgid "report all attributes set on file"
@@ -2918,36 +3131,61 @@ msgstr "utiliser .gitattributes seulement depuis l'index"
 
 #: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75
 msgid "read file names from stdin"
-msgstr "lire les noms de fichier depuis stdin"
+msgstr "lire les noms de fichier depuis l'entrée standard"
 
 #: builtin/check-attr.c:23 builtin/check-ignore.c:24
 msgid "input paths are terminated by a null character"
 msgstr "les chemins en entrée sont terminés par le caractère nul"
 
-#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177
+#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177
 msgid "suppress progress reporting"
 msgstr "supprimer l'état d'avancement"
 
-#: builtin/check-ignore.c:146
+#: builtin/check-ignore.c:26
+msgid "show non-matching input paths"
+msgstr "afficher les chemins en entrée qui ne correspondent pas"
+
+#: builtin/check-ignore.c:143
 msgid "cannot specify pathnames with --stdin"
 msgstr "impossible de spécifier les chemins avec --stdin"
 
-#: builtin/check-ignore.c:149
+#: builtin/check-ignore.c:146
 msgid "-z only makes sense with --stdin"
 msgstr "-z n'a de sens qu'avec l'option --stdin"
 
-#: builtin/check-ignore.c:151
+#: builtin/check-ignore.c:148
 msgid "no path specified"
 msgstr "aucun chemin spécifié"
 
-#: builtin/check-ignore.c:155
+#: builtin/check-ignore.c:152
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet n'est valide qu'avec un seul chemin"
 
-#: builtin/check-ignore.c:157
+#: builtin/check-ignore.c:154
 msgid "cannot have both --quiet and --verbose"
 msgstr "impossible d'avoir --quiet et --verbose"
 
+#: builtin/check-ignore.c:157
+msgid "--non-matching is only valid with --verbose"
+msgstr "--non-matching n'est valide qu'avec --verbose"
+
+#: builtin/check-mailmap.c:8
+msgid "git check-mailmap [options] <contact>..."
+msgstr "git check-mailmap [options] <contact>..."
+
+#: builtin/check-mailmap.c:13
+msgid "also read contacts from stdin"
+msgstr "lire aussi les contacts depuis l'entrée standard"
+
+#: builtin/check-mailmap.c:24
+#, c-format
+msgid "unable to parse contact: %s"
+msgstr "impossible d'analyser le contact : %s"
+
+#: builtin/check-mailmap.c:47
+msgid "no contacts specified"
+msgstr "aucun contact spécifié"
+
 #: builtin/checkout-index.c:126
 msgid "git checkout-index [options] [--] [<file>...]"
 msgstr "git checkout-index [options] [--] [<fichier>...]"
@@ -2962,7 +3200,9 @@ msgstr "forcer l'écrasement des fichiers existants"
 
 #: builtin/checkout-index.c:190
 msgid "no warning for existing files and files not in index"
-msgstr "pas d'avertissement pour les fichiers existants et les fichiers absents de l'index"
+msgstr ""
+"pas d'avertissement pour les fichiers existants et les fichiers absents de "
+"l'index"
 
 #: builtin/checkout-index.c:192
 msgid "don't checkout new files"
@@ -3044,7 +3284,9 @@ msgstr "'%s' ne peut pas Ãªtre utilisé avec %s"
 #: builtin/checkout.c:255
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
-msgstr "Impossible de mettre Ã  jour les chemins et basculer sur la branche '%s' en même temps."
+msgstr ""
+"Impossible de mettre Ã  jour les chemins et basculer sur la branche '%s' en "
+"même temps."
 
 #: builtin/checkout.c:266 builtin/checkout.c:458
 msgid "corrupt index file"
@@ -3064,42 +3306,42 @@ msgstr "vous devez d'abord résoudre votre index courant"
 msgid "Can not do reflog for '%s'\n"
 msgstr "Impossible de faire un reflog pour '%s'\n"
 
-#: builtin/checkout.c:634
+#: builtin/checkout.c:639
 msgid "HEAD is now at"
 msgstr "HEAD est maintenant sur"
 
-#: builtin/checkout.c:641
+#: builtin/checkout.c:646
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Remise Ã  zéro de la branche '%s'\n"
 
-#: builtin/checkout.c:644
+#: builtin/checkout.c:649
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Déjà sur '%s'\n"
 
-#: builtin/checkout.c:648
+#: builtin/checkout.c:653
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Basculement et remise Ã  zéro de la branche '%s'\n"
 
-#: builtin/checkout.c:650 builtin/checkout.c:987
+#: builtin/checkout.c:655 builtin/checkout.c:997
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Basculement sur la nouvelle branche '%s'\n"
 
-#: builtin/checkout.c:652
+#: builtin/checkout.c:657
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Basculement sur la branche '%s'\n"
 
-#: builtin/checkout.c:708
+#: builtin/checkout.c:713
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... et %d en plus.\n"
 
 #. The singular version
-#: builtin/checkout.c:714
+#: builtin/checkout.c:719
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -3122,7 +3364,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:732
+#: builtin/checkout.c:737
 #, c-format
 msgid ""
 "If you want to keep them by creating a new branch, this may be a good time\n"
@@ -3131,156 +3373,158 @@ msgid ""
 " git branch new_branch_name %s\n"
 "\n"
 msgstr ""
-"Si vous souhaitez les garder en créant une nouvelle branche, c'est le bon moment\n"
+"Si vous souhaitez les garder en créant une nouvelle branche, c'est le bon "
+"moment\n"
 "de le faire avec :\n"
 "\n"
 "git branche nouvelle_branche %s\n"
 "\n"
 
-#: builtin/checkout.c:762
+#: builtin/checkout.c:767
 msgid "internal error in revision walk"
 msgstr "erreur interne lors du parcours des révisions"
 
-#: builtin/checkout.c:766
+#: builtin/checkout.c:771
 msgid "Previous HEAD position was"
 msgstr "La position précédente de HEAD Ã©tait"
 
-#: builtin/checkout.c:793 builtin/checkout.c:982
+#: builtin/checkout.c:798 builtin/checkout.c:992
 msgid "You are on a branch yet to be born"
 msgstr "Vous Ãªtes sur une branche qui doit encore naître"
 
 #. case (1)
-#: builtin/checkout.c:918
+#: builtin/checkout.c:928
 #, c-format
 msgid "invalid reference: %s"
 msgstr "référence invalide : %s"
 
 #. case (1): want a tree
-#: builtin/checkout.c:957
+#: builtin/checkout.c:967
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "la référence n'est pas un arbre : %s"
 
-#: builtin/checkout.c:996
+#: builtin/checkout.c:1006
 msgid "paths cannot be used with switching branches"
 msgstr "impossible d'utiliser des chemins avec un basculement de branches"
 
-#: builtin/checkout.c:999 builtin/checkout.c:1003
+#: builtin/checkout.c:1009 builtin/checkout.c:1013
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' ne peut pas Ãªtre utilisé avec un basculement de branches"
 
-#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025
+#: builtin/checkout.c:1028
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' ne peut pas Ãªtre utilisé avec '%s'"
 
-#: builtin/checkout.c:1023
+#: builtin/checkout.c:1033
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Impossible de basculer de branche vers '%s' qui n'est pas un commit"
 
-#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90
+#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89
 #: builtin/remote.c:169 builtin/remote.c:171
 msgid "branch"
 msgstr "branche"
 
-#: builtin/checkout.c:1046
+#: builtin/checkout.c:1056
 msgid "create and checkout a new branch"
 msgstr "créer et extraire une nouvelle branche"
 
-#: builtin/checkout.c:1048
+#: builtin/checkout.c:1058
 msgid "create/reset and checkout a branch"
 msgstr "créer/réinitialiser et extraire une branche"
 
-#: builtin/checkout.c:1049
+#: builtin/checkout.c:1059
 msgid "create reflog for new branch"
-msgstr "créer un refog pour une nouvelle branche"
+msgstr "créer un reflog pour une nouvelle branche"
 
-#: builtin/checkout.c:1050
+#: builtin/checkout.c:1060
 msgid "detach the HEAD at named commit"
 msgstr "détacher la HEAD Ã  la validation nommée"
 
-#: builtin/checkout.c:1051
+#: builtin/checkout.c:1061
 msgid "set upstream info for new branch"
 msgstr "paramétrer l'information de branche amont pour une nouvelle branche"
 
-#: builtin/checkout.c:1053
+#: builtin/checkout.c:1063
 msgid "new branch"
 msgstr "nouvelle branche"
 
-#: builtin/checkout.c:1053
+#: builtin/checkout.c:1063
 msgid "new unparented branch"
 msgstr "nouvelle branche sans parent"
 
-#: builtin/checkout.c:1054
+#: builtin/checkout.c:1064
 msgid "checkout our version for unmerged files"
 msgstr "extraire notre version pour les fichiers non fusionnés"
 
-#: builtin/checkout.c:1056
+#: builtin/checkout.c:1066
 msgid "checkout their version for unmerged files"
 msgstr "extraire leur version pour les fichiers non fusionnés"
 
-#: builtin/checkout.c:1058
+#: builtin/checkout.c:1068
 msgid "force checkout (throw away local modifications)"
 msgstr "forcer l'extraction (laisser tomber les modifications locales)"
 
-#: builtin/checkout.c:1059
+#: builtin/checkout.c:1069
 msgid "perform a 3-way merge with the new branch"
-msgstr "réaliser une fusion Ã  3 points avec la nouvelle branche"
+msgstr "effectuer une fusion Ã  3 points avec la nouvelle branche"
 
-#: builtin/checkout.c:1060 builtin/merge.c:217
+#: builtin/checkout.c:1070 builtin/merge.c:232
 msgid "update ignored files (default)"
 msgstr "mettre Ã  jour les fichiers ignorés (par défaut)"
 
-#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245
+#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249
 msgid "style"
 msgstr "style"
 
-#: builtin/checkout.c:1062
+#: builtin/checkout.c:1072
 msgid "conflict style (merge or diff3)"
 msgstr "style de conflit (fusion ou diff3)"
 
-#: builtin/checkout.c:1065
+#: builtin/checkout.c:1075
 msgid "do not limit pathspecs to sparse entries only"
-msgstr "ne pas limiter les spécificateurs de chemins aux seules entrées creuses"
+msgstr "ne pas limiter les spécificateurs de chemins aux seuls Ã©léments creux"
 
-#: builtin/checkout.c:1067
+#: builtin/checkout.c:1077
 msgid "second guess 'git checkout no-such-branch'"
 msgstr "deuxième chance 'git checkout branche-inexistante'"
 
-#: builtin/checkout.c:1091
+#: builtin/checkout.c:1101
 msgid "-b, -B and --orphan are mutually exclusive"
 msgstr "-b, -B et --orphan sont mutuellement exclusifs"
 
-#: builtin/checkout.c:1108
+#: builtin/checkout.c:1118
 msgid "--track needs a branch name"
 msgstr "--track requiert un nom de branche"
 
-#: builtin/checkout.c:1115
+#: builtin/checkout.c:1125
 msgid "Missing branch name; try -b"
 msgstr "Nom de branche manquant ; essayez -b"
 
-#: builtin/checkout.c:1150
+#: builtin/checkout.c:1160
 msgid "invalid path specification"
 msgstr "spécification de chemin invalide"
 
-#: builtin/checkout.c:1157
+#: builtin/checkout.c:1167
 #, c-format
 msgid ""
 "Cannot update paths and switch to branch '%s' at the same time.\n"
 "Did you intend to checkout '%s' which can not be resolved as commit?"
 msgstr ""
-"Impossible de mettre Ã  jour les chemins et de basculer sur la branche '%s' en même temps.\n"
+"Impossible de mettre Ã  jour les chemins et de basculer sur la branche '%s' "
+"en même temps.\n"
 "Souhaitiez-vous extraire '%s' qui ne peut Ãªtre résolu comme commit ?"
 
-#: builtin/checkout.c:1162
+#: builtin/checkout.c:1172
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach n'accepte pas un argument de chemin '%s'"
 
-#: builtin/checkout.c:1166
+#: builtin/checkout.c:1176
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -3288,305 +3532,431 @@ msgstr ""
 "git checkout: --ours/--theirs, --force et --merge sont incompatibles lors\n"
 "de l'extraction de l'index."
 
-#: builtin/clean.c:20
-msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
-msgstr "git clean [-d] [-f] [-n] [-q] [-e <motif>] [-x | -X] [--] <chemins>..."
+#: builtin/clean.c:25
+msgid ""
+"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
+msgstr ""
+"git clean [-d] [-f] [-i] [-n] [-q] [-e <motif>] [-x | -X] [--] <chemins>..."
 
-#: builtin/clean.c:24
+#: builtin/clean.c:29
 #, c-format
 msgid "Removing %s\n"
 msgstr "Suppression de %s\n"
 
-#: builtin/clean.c:25
+#: builtin/clean.c:30
 #, c-format
 msgid "Would remove %s\n"
 msgstr "Supprimerait %s\n"
 
-#: builtin/clean.c:26
+#: builtin/clean.c:31
 #, c-format
 msgid "Skipping repository %s\n"
 msgstr "Ignore le dépôt %s\n"
 
-#: builtin/clean.c:27
+#: builtin/clean.c:32
 #, c-format
 msgid "Would skip repository %s\n"
 msgstr "Ignorerait le dépôt %s\n"
 
-#: builtin/clean.c:28
+#: builtin/clean.c:33
 #, c-format
 msgid "failed to remove %s"
 msgstr "échec de la suppression de %s"
 
-#: builtin/clean.c:160
+#: builtin/clean.c:293
+msgid ""
+"Prompt help:\n"
+"1          - select a numbered item\n"
+"foo        - select item based on unique prefix\n"
+"           - (empty) select nothing"
+msgstr ""
+"Aide en ligne :\n"
+"1           - sélectionner un Ã©lément numéroté\n"
+"foo         - sélectionner un Ã©lément par un préfixe unique\n"
+"            - (vide) ne rien sélectionner"
+
+#: builtin/clean.c:297
+msgid ""
+"Prompt help:\n"
+"1          - select a single item\n"
+"3-5        - select a range of items\n"
+"2-3,6-9    - select multiple ranges\n"
+"foo        - select item based on unique prefix\n"
+"-...       - unselect specified items\n"
+"*          - choose all items\n"
+"           - (empty) finish selecting"
+msgstr ""
+"Aide en ligne :\n"
+"1          - sélectionner un seul Ã©lément\n"
+"3-5        - sélectionner une plage d'éléments\n"
+"2-3,6-9    - sélectionner plusieurs plages\n"
+"foo        - sélectionner un Ã©lément par un préfixe unique\n"
+"-...       - désélectionner les Ã©léments spécifiés\n"
+"*          - choisir tous les Ã©léments\n"
+"           - (vide) terminer la sélection"
+
+#: builtin/clean.c:515
+#, c-format
+msgid "Huh (%s)?"
+msgstr "Hein (%s) ?"
+
+#: builtin/clean.c:658
+#, c-format
+msgid "Input ignore patterns>> "
+msgstr "Entrez les motifs Ã  ignorer>> "
+
+#: builtin/clean.c:695
+#, c-format
+msgid "WARNING: Cannot find items matched by: %s"
+msgstr "ATTENTION : Impossible de trouver les Ã©léments correspondant Ã  : %s"
+
+#: builtin/clean.c:716
+msgid "Select items to delete"
+msgstr "Sélectionner les Ã©léments Ã  supprimer"
+
+#: builtin/clean.c:756
+#, c-format
+msgid "remove %s? "
+msgstr "supprimer %s ? "
+
+#: builtin/clean.c:781
+msgid "Bye."
+msgstr "Au revoir."
+
+#: builtin/clean.c:789
+msgid ""
+"clean               - start cleaning\n"
+"filter by pattern   - exclude items from deletion\n"
+"select by numbers   - select items to be deleted by numbers\n"
+"ask each            - confirm each deletion (like \"rm -i\")\n"
+"quit                - stop cleaning\n"
+"help                - this screen\n"
+"?                   - help for prompt selection"
+msgstr ""
+"clean               - démarrer le nettoyage\n"
+"filter by pattern   - exclure des Ã©léments par motif\n"
+"select by numbers   - sélectionner les Ã©léments Ã  supprimer par numéros\n"
+"ask each            - confirmer chaque suppression (comme \"rm -i\")\n"
+"quit                - arrêter le nettoyage\n"
+"help                - cet Ã©cran\n"
+"?                   - aide pour la sélection en ligne"
+
+#: builtin/clean.c:816
+msgid "*** Commands ***"
+msgstr "*** Commandes ***"
+
+#: builtin/clean.c:817
+msgid "What now"
+msgstr "Et maintenant ?"
+
+#: builtin/clean.c:825
+msgid "Would remove the following item:"
+msgid_plural "Would remove the following items:"
+msgstr[0] "Supprimerait l'élément suivant :"
+msgstr[1] "Supprimerait les Ã©léments suivants :"
+
+#: builtin/clean.c:842
+msgid "No more files to clean, exiting."
+msgstr "Plus de fichier Ã  nettoyer, sortie."
+
+#: builtin/clean.c:874
 msgid "do not print names of files removed"
 msgstr "ne pas afficher les noms des fichiers supprimés"
 
-#: builtin/clean.c:162
+#: builtin/clean.c:876
 msgid "force"
 msgstr "forcer"
 
-#: builtin/clean.c:164
+#: builtin/clean.c:877
+msgid "interactive cleaning"
+msgstr "nettoyage interactif"
+
+#: builtin/clean.c:879
 msgid "remove whole directories"
 msgstr "supprimer les répertoires entiers"
 
-#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717
-#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182
+#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716
+#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186
 msgid "pattern"
 msgstr "motif"
 
-#: builtin/clean.c:166
+#: builtin/clean.c:881
 msgid "add <pattern> to ignore rules"
 msgstr "ajouter <motif> aux règles ignore"
 
-#: builtin/clean.c:167
+#: builtin/clean.c:882
 msgid "remove ignored files, too"
 msgstr "supprimer les fichiers ignorés, aussi"
 
-#: builtin/clean.c:169
+#: builtin/clean.c:884
 msgid "remove only ignored files"
 msgstr "supprimer seulement les fichiers ignorés"
 
-#: builtin/clean.c:187
+#: builtin/clean.c:902
 msgid "-x and -X cannot be used together"
 msgstr "-x et -X ne peuvent pas Ãªtre utilisés ensemble"
 
-#: builtin/clean.c:191
+#: builtin/clean.c:906
 msgid ""
-"clean.requireForce set to true and neither -n nor -f given; refusing to clean"
-msgstr "clean.requireForce positionné Ã  true et ni -n ni -f fourni ; refus de nettoyer"
+"clean.requireForce set to true and neither -i, -n nor -f given; refusing to "
+"clean"
+msgstr ""
+"clean.requireForce positionné Ã  true et ni -i, -n ou -f fourni ; refus de "
+"nettoyer"
 
-#: builtin/clean.c:194
+#: builtin/clean.c:909
 msgid ""
-"clean.requireForce defaults to true and neither -n nor -f given; refusing to "
-"clean"
-msgstr "clean.requireForce Ã  true par défaut et ni -n ni -f fourni ; refus de nettoyer"
+"clean.requireForce defaults to true and neither -i, -n nor -f given; "
+"refusing to clean"
+msgstr ""
+"clean.requireForce Ã  true par défaut et ni -i, -n ou -f fourni ; refus de "
+"nettoyer"
 
-#: builtin/clone.c:37
+#: builtin/clone.c:36
 msgid "git clone [options] [--] <repo> [<dir>]"
 msgstr "git clone [options] [--] <dépôt> [<répertoire>]"
 
-#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214
-#: builtin/push.c:436
+#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229
+#: builtin/push.c:462
 msgid "force progress reporting"
 msgstr "forcer l'état d'avancement"
 
-#: builtin/clone.c:67
+#: builtin/clone.c:66
 msgid "don't create a checkout"
 msgstr "ne pas créer d'extraction"
 
-#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488
+#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488
 msgid "create a bare repository"
 msgstr "créer un dépôt nu"
 
-#: builtin/clone.c:73
+#: builtin/clone.c:72
 msgid "create a mirror repository (implies bare)"
 msgstr "créer un dépôt miroir (implique dépôt nu)"
 
-#: builtin/clone.c:75
+#: builtin/clone.c:74
 msgid "to clone from a local repository"
 msgstr "pour cloner depuis un dépôt local"
 
-#: builtin/clone.c:77
+#: builtin/clone.c:76
 msgid "don't use local hardlinks, always copy"
 msgstr "ne pas utiliser de liens durs locaux, toujours copier"
 
-#: builtin/clone.c:79
+#: builtin/clone.c:78
 msgid "setup as shared repository"
 msgstr "régler comme dépôt partagé"
 
-#: builtin/clone.c:81 builtin/clone.c:83
+#: builtin/clone.c:80 builtin/clone.c:82
 msgid "initialize submodules in the clone"
 msgstr "initialiser les sous-modules dans le clone"
 
-#: builtin/clone.c:84 builtin/init-db.c:485
+#: builtin/clone.c:83 builtin/init-db.c:485
 msgid "template-directory"
 msgstr "répertoire-modèle"
 
-#: builtin/clone.c:85 builtin/init-db.c:486
+#: builtin/clone.c:84 builtin/init-db.c:486
 msgid "directory from which templates will be used"
 msgstr "répertoire depuis lequel les modèles vont Ãªtre utilisés"
 
-#: builtin/clone.c:87
+#: builtin/clone.c:86
 msgid "reference repository"
 msgstr "dépôt de référence"
 
-#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44
+#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44
 msgid "name"
 msgstr "nom"
 
-#: builtin/clone.c:89
+#: builtin/clone.c:88
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "utiliser <nom> au lieu de 'origin' pour suivre la branche amont"
 
-#: builtin/clone.c:91
+#: builtin/clone.c:90
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "extraire <branche> au lieu de la HEAD du répertoire distant"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:92
 msgid "path to git-upload-pack on the remote"
 msgstr "chemin vers git-upload-pack sur le serveur distant"
 
-#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662
+#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661
 msgid "depth"
 msgstr "profondeur"
 
-#: builtin/clone.c:95
+#: builtin/clone.c:94
 msgid "create a shallow clone of that depth"
 msgstr "créer un clone superficiel de cette profondeur"
 
-#: builtin/clone.c:97
+#: builtin/clone.c:96
 msgid "clone only one branch, HEAD or --branch"
 msgstr "cloner seulement une branche, HEAD ou --branch"
 
-#: builtin/clone.c:98 builtin/init-db.c:494
+#: builtin/clone.c:97 builtin/init-db.c:494
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:99 builtin/init-db.c:495
+#: builtin/clone.c:98 builtin/init-db.c:495
 msgid "separate git dir from working tree"
 msgstr "séparer le répertoire git de la copie de travail"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:99
 msgid "key=value"
 msgstr "clé=valeur"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:100
 msgid "set config inside the new repository"
 msgstr "régler la configuration dans le nouveau dépôt"
 
-#: builtin/clone.c:254
+#: builtin/clone.c:253
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "le dépôt de référence '%s' n'est pas un dépôt local."
 
-#: builtin/clone.c:317
+#: builtin/clone.c:316
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "échec de la création du répertoire '%s'"
 
-#: builtin/clone.c:319 builtin/diff.c:77
+#: builtin/clone.c:318 builtin/diff.c:77
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "échec du stat de '%s'"
 
-#: builtin/clone.c:321
+#: builtin/clone.c:320
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe et n'est pas un répertoire"
 
-#: builtin/clone.c:335
+#: builtin/clone.c:334
 #, c-format
 msgid "failed to stat %s\n"
 msgstr "échec du stat de %s\n"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:356
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "échec de la création du lien '%s'"
 
-#: builtin/clone.c:361
+#: builtin/clone.c:360
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "échec de la copie vers '%s'"
 
-#: builtin/clone.c:384
+#: builtin/clone.c:383
 #, c-format
 msgid "done.\n"
 msgstr "fait.\n"
 
-#: builtin/clone.c:397
+#: builtin/clone.c:396
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
 "and retry the checkout with 'git checkout -f HEAD'\n"
-msgstr "Le clone a réussi, mais l'extraction a Ã©choué.\n"
+msgstr ""
+"Le clone a réussi, mais l'extraction a Ã©choué.\n"
 "Vous pouvez inspecter ce qui a Ã©té extrait avec 'git status'\n"
 "et réessayer l'extraction avec 'git checkout -f HEAD'\n"
 
-#: builtin/clone.c:476
+#: builtin/clone.c:475
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Impossible de trouver la branche distante '%s' Ã  cloner."
 
-#: builtin/clone.c:550
+#: builtin/clone.c:555
+#, c-format
+msgid "Checking connectivity... "
+msgstr "Vérification de la connectivité... "
+
+#: builtin/clone.c:558
 msgid "remote did not send all necessary objects"
 msgstr "le serveur distant n'a pas envoyé tous les objets nécessaires"
 
-#: builtin/clone.c:610
+#: builtin/clone.c:560
+#, c-format
+msgid "done\n"
+msgstr "fait\n"
+
+#: builtin/clone.c:621
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
-msgstr "la HEAD distante réfère Ã  une référence non existante, impossible de l'extraire.\n"
+msgstr ""
+"la HEAD distante réfère Ã  une référence non existante, impossible de "
+"l'extraire.\n"
 
-#: builtin/clone.c:641
+#: builtin/clone.c:652
 msgid "unable to checkout working tree"
-msgstr "inpossible d'extraire la copie de travail"
+msgstr "impossible d'extraire la copie de travail"
 
-#: builtin/clone.c:749
+#: builtin/clone.c:760
 msgid "Too many arguments."
 msgstr "Trop d'arguments."
 
-#: builtin/clone.c:753
+#: builtin/clone.c:764
 msgid "You must specify a repository to clone."
 msgstr "Vous devez spécifier un dépôt Ã  cloner."
 
-#: builtin/clone.c:764
+#: builtin/clone.c:775
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "les options --bare et --origin %s sont incompatibles."
 
-#: builtin/clone.c:767
+#: builtin/clone.c:778
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare et --separate-git-dir sont incompatibles."
 
-#: builtin/clone.c:780
+#: builtin/clone.c:791
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "le dépôt '%s' n'existe pas"
 
-#: builtin/clone.c:785
+#: builtin/clone.c:796
 msgid "--depth is ignored in local clones; use file:// instead."
-msgstr "--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
+msgstr ""
+"--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
 
-#: builtin/clone.c:795
+#: builtin/clone.c:798
+msgid "--local is ignored"
+msgstr "--local est ignoré"
+
+#: builtin/clone.c:808
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
-msgstr "le chemin de destination '%s' existe déjà et n'est pas un répertoire vide."
+msgstr ""
+"le chemin de destination '%s' existe déjà et n'est pas un répertoire vide."
 
-#: builtin/clone.c:805
+#: builtin/clone.c:818
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "la copie de travail '%s' existe déjà."
 
-#: builtin/clone.c:818 builtin/clone.c:830
+#: builtin/clone.c:831 builtin/clone.c:843
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "impossible de créer les répertoires de premier niveau dans '%s'"
 
-#: builtin/clone.c:821
+#: builtin/clone.c:834
 #, c-format
 msgid "could not create work tree dir '%s'."
 msgstr "impossible de créer le répertoire de la copie de travail '%s'."
 
-#: builtin/clone.c:840
+#: builtin/clone.c:853
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Clonage dans le dépôt nu '%s'\n"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:855
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Clonage dans '%s'...\n"
 
-#: builtin/clone.c:877
+#: builtin/clone.c:890
 #, c-format
 msgid "Don't know how to clone %s"
 msgstr "Je ne sais pas cloner %s"
 
-#: builtin/clone.c:926
+#: builtin/clone.c:942
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "La branche distante %s n'a pas Ã©té trouvée dans le dépôt amont %s"
 
-#: builtin/clone.c:933
+#: builtin/clone.c:949
 msgid "You appear to have cloned an empty repository."
 msgstr "Vous semblez avoir cloné un dépôt vide."
 
@@ -3622,15 +3992,15 @@ msgstr "Remplissage d'espace entre les colonnes"
 msgid "--command must be the first argument"
 msgstr "--command doit Ãªtre le premier argument"
 
-#: builtin/commit.c:34
+#: builtin/commit.c:35
 msgid "git commit [options] [--] <pathspec>..."
 msgstr "git commit [options] [--] <spécification-de-chemin>..."
 
-#: builtin/commit.c:39
+#: builtin/commit.c:40
 msgid "git status [options] [--] <pathspec>..."
 msgstr "git status [options] [--] <spécification-de-chemin>..."
 
-#: builtin/commit.c:44
+#: builtin/commit.c:45
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -3643,8 +4013,10 @@ msgid ""
 "\n"
 "    git commit --amend --reset-author\n"
 msgstr ""
-"Votre nom et votre adresse e-mail ont Ã©té configurés automatiquement en se fondant\n"
-"sur votre nom d'utilisateur et votre nom d'ordinateur. Veuillez vérifier qu'ils sont corrects.\n"
+"Votre nom et votre adresse e-mail ont Ã©té configurés automatiquement en se "
+"fondant\n"
+"sur votre nom d'utilisateur et votre nom d'ordinateur. Veuillez vérifier "
+"qu'ils sont corrects.\n"
 "Vous pouvez supprimer ce message en les paramétrant explicitement :\n"
 "\n"
 "    git config --global user.name \"Votre Nom\"\n"
@@ -3654,118 +4026,139 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: builtin/commit.c:56
+#: builtin/commit.c:57
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
 "remove the commit entirely with \"git reset HEAD^\".\n"
-msgstr "Vous avez demandé de corriger le commit le plus récent, mais le faire le rendrait\n"
+msgstr ""
+"Vous avez demandé de corriger le commit le plus récent, mais le faire le "
+"rendrait\n"
 "vide. Vous pouvez répéter votre commande avec --allow-empty, ou vous pouvez\n"
 "supprimer complètement le commit avec \"git reset HEAD^\".\n"
 
-#: builtin/commit.c:61
+#: builtin/commit.c:62
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
 "\n"
 "    git commit --allow-empty\n"
 "\n"
-"Otherwise, please use 'git reset'\n"
 msgstr ""
-"Le picorage précédent est Ã  présent vide, vraisemblablement dû Ã  une résolution de conflit.\n"
+"Le picorage précédent est Ã  présent vide, vraisemblablement dû Ã  une "
+"résolution de conflit.\n"
 "Si vous souhaitez tout de même le valider, utilisez :\n"
 "\n"
 "    git commit --allow-empty\n"
 "\n"
-"Sinon, utilisez 'git reset'\n"
 
-#: builtin/commit.c:260
+#: builtin/commit.c:69
+msgid "Otherwise, please use 'git reset'\n"
+msgstr "Sinon, veuillez utiliser 'git reset'\n"
+
+#: builtin/commit.c:72
+msgid ""
+"If you wish to skip this commit, use:\n"
+"\n"
+"    git reset\n"
+"\n"
+"Then \"git cherry-pick --continue\" will resume cherry-picking\n"
+"the remaining commits.\n"
+msgstr ""
+"Si vous souhaitez sauter ce commit, utilisez :\n"
+"\n"
+"    git reset\n"
+"\n"
+"Puis \"git cherry-pick --continue\" continuera le picorage \n"
+"des commits restants.\n"
+
+#: builtin/commit.c:279
 msgid "failed to unpack HEAD tree object"
 msgstr "échec du dépaquetage de l'objet arbre HEAD"
 
-#: builtin/commit.c:302
+#: builtin/commit.c:321
 msgid "unable to create temporary index"
 msgstr "impossible de créer l'index temporaire"
 
-#: builtin/commit.c:308
+#: builtin/commit.c:327
 msgid "interactive add failed"
 msgstr "échec de l'ajout interactif"
 
-#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412
+#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431
 msgid "unable to write new_index file"
 msgstr "impossible d'écrire le fichier new_index"
 
-#: builtin/commit.c:393
+#: builtin/commit.c:412
 msgid "cannot do a partial commit during a merge."
 msgstr "impossible de faire une validation partielle pendant une fusion."
 
-#: builtin/commit.c:395
+#: builtin/commit.c:414
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "impossible de faire une validation partielle pendant un picorage."
 
-#: builtin/commit.c:405
+#: builtin/commit.c:424
 msgid "cannot read the index"
 msgstr "impossible de lire l'index"
 
-#: builtin/commit.c:425
+#: builtin/commit.c:444
 msgid "unable to write temporary index file"
 msgstr "impossible d'écrire le fichier d'index temporaire"
 
-#: builtin/commit.c:513 builtin/commit.c:519
+#: builtin/commit.c:535 builtin/commit.c:541
 #, c-format
 msgid "invalid commit: %s"
 msgstr "commit invalide : %s"
 
-#: builtin/commit.c:542
+#: builtin/commit.c:563
 msgid "malformed --author parameter"
 msgstr "paramètre --author mal formé"
 
-#: builtin/commit.c:562
+#: builtin/commit.c:583
 #, c-format
 msgid "Malformed ident string: '%s'"
 msgstr "Chaîne ident mal formée : '%s'"
 
-#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956
+#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "impossible de rechercher le commit %s"
 
-#: builtin/commit.c:612 builtin/shortlog.c:270
+#: builtin/commit.c:633 builtin/shortlog.c:271
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(lecture du message de journal depuis l'entrée standard)\n"
 
-#: builtin/commit.c:614
+#: builtin/commit.c:635
 msgid "could not read log from standard input"
 msgstr "impossible de lire le journal depuis l'entrée standard"
 
-#: builtin/commit.c:618
+#: builtin/commit.c:639
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "impossible de lire le fichier de journal '%s'"
 
-#: builtin/commit.c:624
+#: builtin/commit.c:645
 msgid "commit has empty message"
 msgstr "le commit a un message vide"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:661
 msgid "could not read MERGE_MSG"
 msgstr "impossible de lire MERGE_MSG"
 
-#: builtin/commit.c:644
+#: builtin/commit.c:665
 msgid "could not read SQUASH_MSG"
 msgstr "impossible de lire SQUASH_MSG"
 
-#: builtin/commit.c:648
+#: builtin/commit.c:669
 #, c-format
 msgid "could not read '%s'"
 msgstr "impossible de lire '%s'"
 
-#: builtin/commit.c:709
+#: builtin/commit.c:730
 msgid "could not write commit template"
 msgstr "impossible d'écrire le modèle de commit"
 
-#: builtin/commit.c:720
+#: builtin/commit.c:741
 #, c-format
 msgid ""
 "\n"
@@ -3780,7 +4173,7 @@ msgstr ""
 "\t%s\n"
 "et essayez Ã  nouveau.\n"
 
-#: builtin/commit.c:725
+#: builtin/commit.c:746
 #, c-format
 msgid ""
 "\n"
@@ -3795,16 +4188,17 @@ msgstr ""
 "\t%s\n"
 "et essayez Ã  nouveau.\n"
 
-#: builtin/commit.c:737
+#: builtin/commit.c:758
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored, and an empty message aborts the commit.\n"
 msgstr ""
 "Veuillez saisir le message de validation pour vos modifications. Les lignes\n"
-"commençant par '%c' seront ignorées, et un message vide abandonne la validation.\n"
+"commençant par '%c' seront ignorées, et un message vide abandonne la "
+"validation.\n"
 
-#: builtin/commit.c:742
+#: builtin/commit.c:763
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -3815,1067 +4209,1106 @@ msgstr ""
 "commençant par '%c' seront conservées ; vous pouvez les supprimer vous-même\n"
 "si vous le souhaitez. Un message vide abandonne la validation.\n"
 
-#: builtin/commit.c:755
+#: builtin/commit.c:776
 #, c-format
 msgid "%sAuthor:    %s"
 msgstr "%sAuteur :     %s"
 
-#: builtin/commit.c:762
+#: builtin/commit.c:783
 #, c-format
 msgid "%sCommitter: %s"
 msgstr "%sValidateur : %s"
 
-#: builtin/commit.c:782
+#: builtin/commit.c:803
 msgid "Cannot read index"
 msgstr "Impossible de lire l'index"
 
-#: builtin/commit.c:819
+#: builtin/commit.c:845
 msgid "Error building trees"
 msgstr "Erreur lors de la construction des arbres"
 
-#: builtin/commit.c:834 builtin/tag.c:359
+#: builtin/commit.c:860 builtin/tag.c:359
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Veuillez fournir le message en utilisant l'option -m ou -F.\n"
 
-#: builtin/commit.c:931
+#: builtin/commit.c:957
 #, c-format
 msgid "No existing author found with '%s'"
 msgstr "Aucun auteur existant trouvé avec '%s'"
 
-#: builtin/commit.c:946 builtin/commit.c:1140
+#: builtin/commit.c:972 builtin/commit.c:1208
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Mode de fichier non suivi invalide '%s'"
 
-#: builtin/commit.c:976
+#: builtin/commit.c:1009
+msgid "--long and -z are incompatible"
+msgstr "--long et -z sont incompatibles"
+
+#: builtin/commit.c:1039
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "L'utilisation simultanée de --reset-author et --author n'a pas de sens"
 
-#: builtin/commit.c:987
+#: builtin/commit.c:1050
 msgid "You have nothing to amend."
 msgstr "Il n'y a rien Ã  corriger."
 
-#: builtin/commit.c:990
+#: builtin/commit.c:1053
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Vous Ãªtes en pleine fusion -- impossible de corriger (amend)."
 
-#: builtin/commit.c:992
+#: builtin/commit.c:1055
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Vous Ãªtes en plein picorage -- impossible de corriger (amend)."
 
-#: builtin/commit.c:995
+#: builtin/commit.c:1058
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Les options --squash et --fixup ne peuvent pas Ãªtre utilisées ensemble"
 
-#: builtin/commit.c:1005
+#: builtin/commit.c:1068
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Une seule option parmi -c/-C/-F/--fixup peut Ãªtre utilisée."
 
-#: builtin/commit.c:1007
+#: builtin/commit.c:1070
 msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
 msgstr "L'option -m ne peut pas Ãªtre combinée avec -c/-C/-F/--fixup."
 
-#: builtin/commit.c:1015
+#: builtin/commit.c:1078
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author ne peut Ãªtre utilisé qu'avec -C, -c ou --amend."
 
-#: builtin/commit.c:1032
+#: builtin/commit.c:1095
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr "Une seule option parmi --include/--only/--all/--interactive/--patch peut Ãªtre utilisée."
+msgstr ""
+"Une seule option parmi --include/--only/--all/--interactive/--patch peut "
+"être utilisée."
 
-#: builtin/commit.c:1034
+#: builtin/commit.c:1097
 msgid "No paths with --include/--only does not make sense."
 msgstr "Aucun chemin avec les options --include/--only n'a pas de sens."
 
-#: builtin/commit.c:1036
+#: builtin/commit.c:1099
 msgid "Clever... amending the last one with dirty index."
 msgstr "Malin... correction du dernier avec un index sale."
 
-#: builtin/commit.c:1038
+#: builtin/commit.c:1101
 msgid "Explicit paths specified without -i nor -o; assuming --only paths..."
-msgstr ""
+msgstr "Chemins explicites spécifiés sans -i ni -o ; --only supposé..."
 
-#: builtin/commit.c:1048 builtin/tag.c:575
+#: builtin/commit.c:1111 builtin/tag.c:575
 #, c-format
 msgid "Invalid cleanup mode %s"
-msgstr ""
+msgstr "Mode de nettoyage invalide %s"
 
-#: builtin/commit.c:1053
+#: builtin/commit.c:1116
 msgid "Paths with -a does not make sense."
-msgstr ""
-
-#: builtin/commit.c:1059 builtin/commit.c:1194
-msgid "--long and -z are incompatible"
-msgstr ""
+msgstr "Spécifier des chemins avec l'option -a n'a pas de sens."
 
-#: builtin/commit.c:1154 builtin/commit.c:1390
+#: builtin/commit.c:1222 builtin/commit.c:1455
 msgid "show status concisely"
-msgstr ""
+msgstr "afficher le statut avec concision"
 
-#: builtin/commit.c:1156 builtin/commit.c:1392
+#: builtin/commit.c:1224 builtin/commit.c:1457
 msgid "show branch information"
-msgstr ""
+msgstr "afficher l'information de branche"
 
-#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426
+#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452
 msgid "machine-readable output"
-msgstr ""
+msgstr "sortie pour traitement automatique"
 
-#: builtin/commit.c:1161 builtin/commit.c:1396
+#: builtin/commit.c:1229 builtin/commit.c:1461
 msgid "show status in long format (default)"
-msgstr ""
+msgstr "afficher le statut en format long (par défaut)"
 
-#: builtin/commit.c:1164 builtin/commit.c:1399
+#: builtin/commit.c:1232 builtin/commit.c:1464
 msgid "terminate entries with NUL"
-msgstr ""
+msgstr "terminer les Ã©léments par NUL"
 
-#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659
-#: builtin/fast-export.c:662 builtin/tag.c:459
+#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667
+#: builtin/fast-export.c:670 builtin/tag.c:459
 msgid "mode"
-msgstr ""
+msgstr "mode"
 
-#: builtin/commit.c:1167 builtin/commit.c:1402
+#: builtin/commit.c:1235 builtin/commit.c:1467
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
+"afficher les fichiers non suivis, \"mode\" facultatif : all (tous), normal, "
+"no. (Défaut : all)"
 
-#: builtin/commit.c:1170
+#: builtin/commit.c:1238
 msgid "show ignored files"
-msgstr ""
+msgstr "afficher les fichiers ignorés"
 
-#: builtin/commit.c:1171 parse-options.h:151
+#: builtin/commit.c:1239 parse-options.h:154
 msgid "when"
-msgstr ""
+msgstr "quand"
 
-#: builtin/commit.c:1172
+#: builtin/commit.c:1240
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
+"ignorer les modifications dans les sous-modules, \"quand\" facultatif : all "
+"(tous), dirty (sale), untracked (non suivi). (Défaut : all)"
 
-#: builtin/commit.c:1174
+#: builtin/commit.c:1242
 msgid "list untracked files in columns"
-msgstr ""
+msgstr "afficher les fichiers non suivis en colonnes"
 
-#: builtin/commit.c:1248
+#: builtin/commit.c:1313
 msgid "couldn't look up newly created commit"
-msgstr ""
+msgstr "impossible de retrouver le commit nouvellement créé"
 
-#: builtin/commit.c:1250
+#: builtin/commit.c:1315
 msgid "could not parse newly created commit"
-msgstr ""
+msgstr "impossible d'analyser le commit nouvellement créé"
 
-#: builtin/commit.c:1291
+#: builtin/commit.c:1356
 msgid "detached HEAD"
-msgstr ""
+msgstr "HEAD détachée"
 
-#: builtin/commit.c:1293
+#: builtin/commit.c:1358
 msgid " (root-commit)"
-msgstr ""
+msgstr " (commit racine)"
 
-#: builtin/commit.c:1360
+#: builtin/commit.c:1425
 msgid "suppress summary after successful commit"
-msgstr ""
+msgstr "supprimer le résumé après une validation réussie"
 
-#: builtin/commit.c:1361
+#: builtin/commit.c:1426
 msgid "show diff in commit message template"
-msgstr ""
+msgstr "afficher les diff dans le modèle de message de validation"
 
-#: builtin/commit.c:1363
+#: builtin/commit.c:1428
 msgid "Commit message options"
-msgstr ""
+msgstr "Options du message de validation"
 
-#: builtin/commit.c:1364 builtin/tag.c:457
+#: builtin/commit.c:1429 builtin/tag.c:457
 msgid "read message from file"
-msgstr ""
+msgstr "lire le message depuis un fichier"
 
-#: builtin/commit.c:1365
+#: builtin/commit.c:1430
 msgid "author"
-msgstr ""
+msgstr "auteur"
 
-#: builtin/commit.c:1365
+#: builtin/commit.c:1430
 msgid "override author for commit"
-msgstr ""
+msgstr "remplacer l'auteur pour la validation"
 
-#: builtin/commit.c:1366 builtin/gc.c:178
+#: builtin/commit.c:1431 builtin/gc.c:178
 msgid "date"
-msgstr ""
+msgstr "date"
 
-#: builtin/commit.c:1366
+#: builtin/commit.c:1431
 msgid "override date for commit"
-msgstr ""
+msgstr "remplacer la date pour la validation"
 
-#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533
-#: builtin/notes.c:690 builtin/tag.c:455
+#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405
+#: builtin/notes.c:562 builtin/tag.c:455
 msgid "message"
-msgstr ""
+msgstr "message"
 
-#: builtin/commit.c:1367
+#: builtin/commit.c:1432
 msgid "commit message"
-msgstr ""
+msgstr "message de validation"
 
-#: builtin/commit.c:1368
+#: builtin/commit.c:1433
 msgid "reuse and edit message from specified commit"
-msgstr ""
+msgstr "réutiliser et Ã©diter le message du commit spécifié"
 
-#: builtin/commit.c:1369
+#: builtin/commit.c:1434
 msgid "reuse message from specified commit"
-msgstr ""
+msgstr "réutiliser le message du commit spécifié"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1435
 msgid "use autosquash formatted message to fixup specified commit"
 msgstr ""
+"utiliser un message formaté par autosquash pour corriger le commit spécifié"
 
-#: builtin/commit.c:1371
+#: builtin/commit.c:1436
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
+"utiliser un message formaté par autosquash pour compresser le commit spécifié"
 
-#: builtin/commit.c:1372
+#: builtin/commit.c:1437
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
+"à présent je suis l'auteur de la validation (utilisé avec -C/-c/--amend)"
 
-#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109
+#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111
 msgid "add Signed-off-by:"
-msgstr ""
+msgstr "ajouter une entrée Signed-off-by :"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1439
 msgid "use specified template file"
-msgstr ""
+msgstr "utiliser le fichier de modèle spécifié"
 
-#: builtin/commit.c:1375
+#: builtin/commit.c:1440
 msgid "force edit of commit"
-msgstr ""
+msgstr "forcer l'édition du commit"
 
-#: builtin/commit.c:1376
+#: builtin/commit.c:1441
 msgid "default"
-msgstr ""
+msgstr "défaut"
 
-#: builtin/commit.c:1376 builtin/tag.c:460
+#: builtin/commit.c:1441 builtin/tag.c:460
 msgid "how to strip spaces and #comments from message"
-msgstr ""
+msgstr "comment Ã©liminer les espaces et les commentaires # du message"
 
-#: builtin/commit.c:1377
+#: builtin/commit.c:1442
 msgid "include status in commit message template"
-msgstr ""
+msgstr "inclure le statut dans le modèle de message de validation"
 
-#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461
+#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461
 msgid "key id"
-msgstr ""
+msgstr "identifiant de clé"
 
-#: builtin/commit.c:1379 builtin/merge.c:216
+#: builtin/commit.c:1444 builtin/merge.c:231
 msgid "GPG sign commit"
-msgstr ""
+msgstr "signer la validation avec GPG"
 
 #. end commit message options
-#: builtin/commit.c:1382
+#: builtin/commit.c:1447
 msgid "Commit contents options"
-msgstr ""
+msgstr "Valider les options des contenus"
 
-#: builtin/commit.c:1383
+#: builtin/commit.c:1448
 msgid "commit all changed files"
-msgstr ""
+msgstr "valider tous les fichiers modifiés"
 
-#: builtin/commit.c:1384
+#: builtin/commit.c:1449
 msgid "add specified files to index for commit"
-msgstr ""
+msgstr "ajouter les fichiers spécifiés Ã  l'index pour la validation"
 
-#: builtin/commit.c:1385
+#: builtin/commit.c:1450
 msgid "interactively add files"
-msgstr ""
+msgstr "ajouter des fichiers en mode interactif"
 
-#: builtin/commit.c:1386
+#: builtin/commit.c:1451
 msgid "interactively add changes"
-msgstr ""
+msgstr "ajouter les modifications en mode interactif"
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1452
 msgid "commit only specified files"
-msgstr ""
+msgstr "valider seulement les fichiers spécifiés"
 
-#: builtin/commit.c:1388
+#: builtin/commit.c:1453
 msgid "bypass pre-commit hook"
-msgstr ""
+msgstr "éviter d'utiliser le crochet pre-commit"
 
-#: builtin/commit.c:1389
+#: builtin/commit.c:1454
 msgid "show what would be committed"
-msgstr ""
+msgstr "afficher ce qui serait validé"
 
-#: builtin/commit.c:1400
+#: builtin/commit.c:1465
 msgid "amend previous commit"
-msgstr ""
+msgstr "corriger la validation précédente"
 
-#: builtin/commit.c:1401
+#: builtin/commit.c:1466
 msgid "bypass post-rewrite hook"
-msgstr ""
+msgstr "éviter d'utiliser le crochet post-rewrite"
 
-#: builtin/commit.c:1406
+#: builtin/commit.c:1471
 msgid "ok to record an empty change"
-msgstr ""
+msgstr "accepter d'enregistrer une modification vide"
 
-#: builtin/commit.c:1409
+#: builtin/commit.c:1474
 msgid "ok to record a change with an empty message"
-msgstr ""
+msgstr "accepter d'enregistrer une modification avec un message vide"
 
-#: builtin/commit.c:1441
+#: builtin/commit.c:1507
 msgid "could not parse HEAD commit"
-msgstr ""
+msgstr "impossible d'analyser le commit HEAD"
 
-#: builtin/commit.c:1479 builtin/merge.c:510
+#: builtin/commit.c:1545 builtin/merge.c:525
 #, c-format
 msgid "could not open '%s' for reading"
-msgstr ""
+msgstr "impossible d'ouvrir '%s' en lecture"
 
-#: builtin/commit.c:1486
+#: builtin/commit.c:1552
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
-msgstr ""
+msgstr "Fichier MERGE_HEAD corrompu (%s)"
 
-#: builtin/commit.c:1493
+#: builtin/commit.c:1559
 msgid "could not read MERGE_MODE"
-msgstr ""
+msgstr "impossible de lire MERGE_MODE"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1578
 #, c-format
 msgid "could not read commit message: %s"
-msgstr ""
+msgstr "impossible de lire le message de validation : %s"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1592
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
-msgstr ""
+msgstr "Abandon de la validation ; vous n'avez pas Ã©dité le message\n"
 
-#: builtin/commit.c:1531
+#: builtin/commit.c:1597
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
-msgstr ""
+msgstr "Abandon de la validation du Ã  un message de validation vide\n"
 
-#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872
+#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886
 msgid "failed to write commit object"
-msgstr ""
+msgstr "échec de l'écriture de l'objet commit"
 
-#: builtin/commit.c:1567
+#: builtin/commit.c:1633
 msgid "cannot lock HEAD ref"
-msgstr ""
+msgstr "impossible de verrouiller la référence HEAD"
 
-#: builtin/commit.c:1571
+#: builtin/commit.c:1637
 msgid "cannot update HEAD ref"
-msgstr ""
+msgstr "impossible de mettre Ã  jour la référence HEAD"
 
-#: builtin/commit.c:1582
+#: builtin/commit.c:1648
 msgid ""
 "Repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full or quota is\n"
 "not exceeded, and then \"git reset HEAD\" to recover."
 msgstr ""
+"Le dépôt a Ã©té mis Ã  jour, mais impossible d'écrire le fichier\n"
+"new_index. Vérifiez que le disque n'est pas plein ou que le quota\n"
+"n'a pas Ã©té dépassé, puis lancez \"git reset HEAD\" pour réparer."
 
 #: builtin/config.c:7
 msgid "git config [options]"
-msgstr ""
+msgstr "git config [options]"
 
-#: builtin/config.c:51
+#: builtin/config.c:52
 msgid "Config file location"
-msgstr ""
+msgstr "Emplacement du fichier de configuration"
 
-#: builtin/config.c:52
+#: builtin/config.c:53
 msgid "use global config file"
-msgstr ""
+msgstr "utiliser les fichier de configuration global"
 
-#: builtin/config.c:53
+#: builtin/config.c:54
 msgid "use system config file"
-msgstr ""
+msgstr "utiliser le fichier de configuration du système"
 
-#: builtin/config.c:54
+#: builtin/config.c:55
 msgid "use repository config file"
-msgstr ""
+msgstr "utiliser le fichier de configuration du dépôt"
 
-#: builtin/config.c:55
+#: builtin/config.c:56
 msgid "use given config file"
-msgstr ""
+msgstr "utiliser le fichier de configuration spécifié"
 
-#: builtin/config.c:56
-msgid "Action"
-msgstr ""
+#: builtin/config.c:57
+msgid "blob-id"
+msgstr "blob-id"
 
 #: builtin/config.c:57
-msgid "get value: name [value-regex]"
-msgstr ""
+msgid "read config from given blob object"
+msgstr "lire la configuration depuis l'objet blob fourni"
 
 #: builtin/config.c:58
-msgid "get all values: key [value-regex]"
-msgstr ""
+msgid "Action"
+msgstr "Action"
 
 #: builtin/config.c:59
-msgid "get values for regexp: name-regex [value-regex]"
-msgstr ""
+msgid "get value: name [value-regex]"
+msgstr "obtenir la valeur : nom [regex-de-valeur]"
 
 #: builtin/config.c:60
-msgid "replace all matching variables: name value [value_regex]"
-msgstr ""
+msgid "get all values: key [value-regex]"
+msgstr "obtenir toutes le valeurs : clé [regex-de-valeur]"
 
 #: builtin/config.c:61
-msgid "add a new variable: name value"
-msgstr ""
+msgid "get values for regexp: name-regex [value-regex]"
+msgstr "obtenir les valeur pour la regexp : regex-de-nom [regex-de-valeur]"
 
 #: builtin/config.c:62
-msgid "remove a variable: name [value-regex]"
+msgid "replace all matching variables: name value [value_regex]"
 msgstr ""
+"remplacer toutes les variables correspondant : nom valeur [regex-de-valeur]"
 
 #: builtin/config.c:63
-msgid "remove all matches: name [value-regex]"
-msgstr ""
+msgid "add a new variable: name value"
+msgstr "ajouter une nouvelle variable : nom valeur"
 
 #: builtin/config.c:64
-msgid "rename section: old-name new-name"
-msgstr ""
+msgid "remove a variable: name [value-regex]"
+msgstr "supprimer une variable : nom [regex-de-valeur]"
 
 #: builtin/config.c:65
-msgid "remove a section: name"
-msgstr ""
+msgid "remove all matches: name [value-regex]"
+msgstr "supprimer toutes les correspondances nom [regex-de-valeur]"
 
 #: builtin/config.c:66
-msgid "list all"
-msgstr ""
+msgid "rename section: old-name new-name"
+msgstr "renommer une section : ancien-nom nouveau-nom"
 
 #: builtin/config.c:67
+msgid "remove a section: name"
+msgstr "supprimer une section : nom"
+
+#: builtin/config.c:68
+msgid "list all"
+msgstr "afficher tout"
+
+#: builtin/config.c:69
 msgid "open an editor"
-msgstr ""
+msgstr "ouvrir un Ã©diteur"
 
-#: builtin/config.c:68 builtin/config.c:69
+#: builtin/config.c:70 builtin/config.c:71
 msgid "slot"
-msgstr ""
+msgstr "emplacement"
 
-#: builtin/config.c:68
+#: builtin/config.c:70
 msgid "find the color configured: [default]"
-msgstr ""
+msgstr "trouver la couleur configurée : [par défaut]"
 
-#: builtin/config.c:69
+#: builtin/config.c:71
 msgid "find the color setting: [stdout-is-tty]"
-msgstr ""
+msgstr "trouver le réglage de la couleur : [stdout-est-tty]"
 
-#: builtin/config.c:70
+#: builtin/config.c:72
 msgid "Type"
-msgstr ""
+msgstr "Type"
 
-#: builtin/config.c:71
+#: builtin/config.c:73
 msgid "value is \"true\" or \"false\""
-msgstr ""
+msgstr "la valeur est \"true\" (vrai) our \"false\" (faux)"
 
-#: builtin/config.c:72
+#: builtin/config.c:74
 msgid "value is decimal number"
-msgstr ""
+msgstr "la valeur est un nombre décimal"
 
-#: builtin/config.c:73
+#: builtin/config.c:75
 msgid "value is --bool or --int"
-msgstr ""
+msgstr "la valeur est --bool ou --int"
 
-#: builtin/config.c:74
+#: builtin/config.c:76
 msgid "value is a path (file or directory name)"
-msgstr ""
+msgstr "la valeur est un chemin (vers un fichier ou un répertoire)"
 
-#: builtin/config.c:75
+#: builtin/config.c:77
 msgid "Other"
-msgstr ""
+msgstr "Autre"
 
-#: builtin/config.c:76
+#: builtin/config.c:78
 msgid "terminate values with NUL byte"
-msgstr ""
+msgstr "terminer les valeurs avec un caractère NUL"
 
-#: builtin/config.c:77
+#: builtin/config.c:79
 msgid "respect include directives on lookup"
-msgstr ""
+msgstr "respecter les directives d'inclusion lors de la recherche"
 
 #: builtin/count-objects.c:82
 msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr ""
+msgstr "git count-objects [-v] [-H | --human-readable]"
 
 #: builtin/count-objects.c:97
 msgid "print sizes in human readable format"
-msgstr ""
+msgstr "affiche les tailles dans un format humainement lisible"
 
 #: builtin/describe.c:15
 msgid "git describe [options] <commit-ish>*"
-msgstr ""
+msgstr "git describe [options] <commit ou apparenté>*"
 
-#: builtin/describe.c:16
+#: builtin/describe.c:17
 msgid "git describe [options] --dirty"
-msgstr ""
+msgstr "git describe [options] --dirty"
 
-#: builtin/describe.c:233
+#: builtin/describe.c:237
 #, c-format
 msgid "annotated tag %s not available"
-msgstr ""
+msgstr "l'étiquette annotée %s n'est pas disponible"
 
-#: builtin/describe.c:237
+#: builtin/describe.c:241
 #, c-format
 msgid "annotated tag %s has no embedded name"
-msgstr ""
+msgstr "l'étiquette annotée %s n'a pas de nom embarqué"
 
-#: builtin/describe.c:239
+#: builtin/describe.c:243
 #, c-format
 msgid "tag '%s' is really '%s' here"
-msgstr ""
+msgstr "l'étiquette '%s' est en fait '%s'"
 
-#: builtin/describe.c:266
+#: builtin/describe.c:270
 #, c-format
 msgid "Not a valid object name %s"
-msgstr ""
+msgstr "%s n'est pas un nom d'objet valide"
 
-#: builtin/describe.c:269
+#: builtin/describe.c:273
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s n'est pas un objet '%s' valide"
 
-#: builtin/describe.c:286
+#: builtin/describe.c:290
 #, c-format
 msgid "no tag exactly matches '%s'"
-msgstr ""
+msgstr "aucune Ã©tiquette ne correspond parfaitement Ã  '%s'"
 
-#: builtin/describe.c:288
+#: builtin/describe.c:292
 #, c-format
 msgid "searching to describe %s\n"
-msgstr ""
+msgstr "recherche de la description de %s\n"
 
-#: builtin/describe.c:328
+#: builtin/describe.c:332
 #, c-format
 msgid "finished search at %s\n"
-msgstr ""
+msgstr "recherche terminée Ã  %s\n"
 
-#: builtin/describe.c:352
+#: builtin/describe.c:359
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
 "However, there were unannotated tags: try --tags."
 msgstr ""
+"Aucune Ã©tiquette annotée ne peut décrire '%s'.\n"
+"Cependant, il existe des Ã©tiquettes non-annotées : essayez avec --tags."
 
-#: builtin/describe.c:356
+#: builtin/describe.c:363
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
 "Try --always, or create some tags."
 msgstr ""
+"Aucune Ã©tiquette ne peut décrire '%s'.\n"
+"Essayez --always, ou créez des Ã©tiquettes."
 
-#: builtin/describe.c:377
+#: builtin/describe.c:384
 #, c-format
 msgid "traversed %lu commits\n"
-msgstr ""
+msgstr "%lu commits parcourus\n"
 
-#: builtin/describe.c:380
+#: builtin/describe.c:387
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
 "gave up search at %s\n"
 msgstr ""
+"plus de %i Ã©tiquettes ont Ã©té trouvées; seules les %i plus récentes sont "
+"affichées\n"
+"abandon de la recherche Ã  %s\n"
 
-#: builtin/describe.c:402
+#: builtin/describe.c:409
 msgid "find the tag that comes after the commit"
-msgstr ""
+msgstr "rechercher l'étiquette qui suit le commit"
 
-#: builtin/describe.c:403
+#: builtin/describe.c:410
 msgid "debug search strategy on stderr"
-msgstr ""
+msgstr "déboguer la stratégie de recherche sur stderr"
 
-#: builtin/describe.c:404
+#: builtin/describe.c:411
 msgid "use any ref"
-msgstr ""
+msgstr "utiliser n'importe quelle référence"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:412
 msgid "use any tag, even unannotated"
-msgstr ""
+msgstr "utiliser n'importe quelle Ã©tiquette, même non-annotée"
 
-#: builtin/describe.c:406
+#: builtin/describe.c:413
 msgid "always use long format"
-msgstr ""
+msgstr "toujours utiliser le format long"
 
-#: builtin/describe.c:409
+#: builtin/describe.c:414
+msgid "only follow first parent"
+msgstr "ne suivre que le premier parent"
+
+#: builtin/describe.c:417
 msgid "only output exact matches"
-msgstr ""
+msgstr "n'afficher que les correspondances exactes"
 
-#: builtin/describe.c:411
+#: builtin/describe.c:419
 msgid "consider <n> most recent tags (default: 10)"
 msgstr ""
+"considérer uniquement les <n> Ã©tiquettes le plus récentes (défaut : 10)"
 
-#: builtin/describe.c:413
+#: builtin/describe.c:421
 msgid "only consider tags matching <pattern>"
-msgstr ""
+msgstr "ne considérer que les Ã©tiquettes correspondant Ã  <motif>"
 
-#: builtin/describe.c:415 builtin/name-rev.c:238
+#: builtin/describe.c:423 builtin/name-rev.c:322
 msgid "show abbreviated commit object as fallback"
-msgstr ""
+msgstr "afficher les objets commits abrégés en dernier recours"
 
-#: builtin/describe.c:416
+#: builtin/describe.c:424
 msgid "mark"
-msgstr ""
+msgstr "marque"
 
-#: builtin/describe.c:417
+#: builtin/describe.c:425
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
-msgstr ""
+msgstr "ajouter <marque> si la copie de travail est sale (défaut : \"-dirty\")"
 
-#: builtin/describe.c:435
+#: builtin/describe.c:443
 msgid "--long is incompatible with --abbrev=0"
-msgstr ""
+msgstr "--long et --abbrev=0 sont incompatibles"
 
-#: builtin/describe.c:461
+#: builtin/describe.c:469
 msgid "No names found, cannot describe anything."
-msgstr ""
+msgstr "aucun nom trouvé, impossible de décrire quoi que ce soit."
 
 #: builtin/describe.c:481
 msgid "--dirty is incompatible with commit-ishes"
-msgstr ""
+msgstr "--dirty est incompatible avec la spécification de commits ou assimilés"
 
 #: builtin/diff.c:79
 #, c-format
 msgid "'%s': not a regular file or symlink"
-msgstr ""
+msgstr "'%s' : n'est pas un fichier régulier ni un lien symbolique"
 
-#: builtin/diff.c:228
+#: builtin/diff.c:230
 #, c-format
 msgid "invalid option: %s"
-msgstr ""
+msgstr "option invalide : %s"
 
-#: builtin/diff.c:305
+#: builtin/diff.c:307
 msgid "Not a git repository"
-msgstr ""
+msgstr "Ce n'est pas un dépôt git !"
 
-#: builtin/diff.c:348
+#: builtin/diff.c:350
 #, c-format
 msgid "invalid object '%s' given."
-msgstr ""
+msgstr "objet spécifié '%s' invalide."
 
-#: builtin/diff.c:353
-#, c-format
-msgid "more than %d trees given: '%s'"
-msgstr ""
-
-#: builtin/diff.c:363
+#: builtin/diff.c:359
 #, c-format
 msgid "more than two blobs given: '%s'"
-msgstr ""
+msgstr "plus de deux blobs spécifiés : '%s'"
 
-#: builtin/diff.c:371
+#: builtin/diff.c:366
 #, c-format
 msgid "unhandled object '%s' given."
-msgstr ""
+msgstr "objet non géré '%s' spécifié."
 
 #: builtin/fast-export.c:22
 msgid "git fast-export [rev-list-opts]"
-msgstr ""
+msgstr "git fast-export [options-de-liste-de-révisions]"
 
-#: builtin/fast-export.c:658
+#: builtin/fast-export.c:666
 msgid "show progress after <n> objects"
-msgstr ""
+msgstr "afficher la progression après <n> objets"
 
-#: builtin/fast-export.c:660
+#: builtin/fast-export.c:668
 msgid "select handling of signed tags"
-msgstr ""
+msgstr "sélectionner la gestion des Ã©tiquettes signées"
 
-#: builtin/fast-export.c:663
+#: builtin/fast-export.c:671
 msgid "select handling of tags that tag filtered objects"
 msgstr ""
+"sélectionner la gestion des Ã©tiquettes qui pointent sur des objets filtrés"
 
-#: builtin/fast-export.c:666
+#: builtin/fast-export.c:674
 msgid "Dump marks to this file"
-msgstr ""
+msgstr "Enregistrer les marques dans ce fichier"
 
-#: builtin/fast-export.c:668
+#: builtin/fast-export.c:676
 msgid "Import marks from this file"
-msgstr ""
+msgstr "importer les marques depuis ce fichier"
 
-#: builtin/fast-export.c:670
+#: builtin/fast-export.c:678
 msgid "Fake a tagger when tags lack one"
-msgstr ""
+msgstr "falsifier un auteur d'étiquette si l'étiquette n'en présente pas"
 
-#: builtin/fast-export.c:672
+#: builtin/fast-export.c:680
 msgid "Output full tree for each commit"
-msgstr ""
+msgstr "Afficher l'arbre complet pour chaque commit"
 
-#: builtin/fast-export.c:674
+#: builtin/fast-export.c:682
 msgid "Use the done feature to terminate the stream"
-msgstr ""
+msgstr "Utiliser la fonction \"done\" pour terminer le flux"
 
-#: builtin/fast-export.c:675
+#: builtin/fast-export.c:683
 msgid "Skip output of blob data"
-msgstr ""
+msgstr "Sauter l'affichage de données de blob"
 
 #: builtin/fetch.c:20
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
-msgstr ""
+msgstr "git fetch [<options>] [<dépôt> [<spécification-de-référence>...]]"
 
 #: builtin/fetch.c:21
 msgid "git fetch [<options>] <group>"
-msgstr ""
+msgstr "git fetch [<options>] <groupe>"
 
 #: builtin/fetch.c:22
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
-msgstr ""
+msgstr "git fetch --multiple [<options>] [(<dépôt> | <groupe>)...]"
 
 #: builtin/fetch.c:23
 msgid "git fetch --all [<options>]"
-msgstr ""
+msgstr "git fetch --all [<options>]"
 
 #: builtin/fetch.c:60
 msgid "fetch from all remotes"
-msgstr ""
+msgstr "récupérer depuis tous le dépôts distants"
 
 #: builtin/fetch.c:62
 msgid "append to .git/FETCH_HEAD instead of overwriting"
-msgstr ""
+msgstr "ajouter Ã  .git/FETCH_HEAD au lieu de l'écraser"
 
 #: builtin/fetch.c:64
 msgid "path to upload pack on remote end"
-msgstr ""
+msgstr "chemin vers lequel télécharger le paquet sur le poste distant"
 
 #: builtin/fetch.c:65
 msgid "force overwrite of local branch"
-msgstr ""
+msgstr "forcer l'écrasement de la branche locale"
 
 #: builtin/fetch.c:67
 msgid "fetch from multiple remotes"
-msgstr ""
+msgstr "récupérer depuis plusieurs dépôts distants"
 
 #: builtin/fetch.c:69
 msgid "fetch all tags and associated objects"
-msgstr ""
+msgstr "récupérer toutes les Ã©tiquettes et leurs objets associés"
 
 #: builtin/fetch.c:71
 msgid "do not fetch all tags (--no-tags)"
-msgstr ""
+msgstr "ne pas récupérer toutes les Ã©tiquettes (--no-tags)"
 
 #: builtin/fetch.c:73
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
+"éliminer les branches de suivi distant si la branche n'existe plus dans le "
+"dépôt distant"
 
 #: builtin/fetch.c:74
 msgid "on-demand"
-msgstr ""
+msgstr "à la demande"
 
 #: builtin/fetch.c:75
 msgid "control recursive fetching of submodules"
-msgstr ""
+msgstr "contrôler la récupération récursive dans les sous-modules"
 
 #: builtin/fetch.c:79
 msgid "keep downloaded pack"
-msgstr ""
+msgstr "conserver le paquet téléchargé"
 
 #: builtin/fetch.c:81
 msgid "allow updating of HEAD ref"
-msgstr ""
+msgstr "permettre la mise Ã  jour de la référence HEAD"
 
 #: builtin/fetch.c:84
 msgid "deepen history of shallow clone"
-msgstr ""
+msgstr "approfondir l'historique d'un clone superficiel"
 
 #: builtin/fetch.c:86
 msgid "convert to a complete repository"
-msgstr ""
+msgstr "convertir en un dépôt complet"
 
-#: builtin/fetch.c:88 builtin/log.c:1130
+#: builtin/fetch.c:88 builtin/log.c:1177
 msgid "dir"
-msgstr ""
+msgstr "dir"
 
 #: builtin/fetch.c:89
 msgid "prepend this to submodule path output"
-msgstr ""
+msgstr "préfixer ceci Ã  la sortie du chemin du sous-module"
 
 #: builtin/fetch.c:92
 msgid "default mode for recursion"
-msgstr ""
+msgstr "mode par défaut pour la récursion"
 
-#: builtin/fetch.c:204
+#: builtin/fetch.c:220
 msgid "Couldn't find remote ref HEAD"
-msgstr ""
+msgstr "impossible de trouver la référence HEAD distante"
 
-#: builtin/fetch.c:257
+#: builtin/fetch.c:273
 #, c-format
 msgid "object %s not found"
-msgstr ""
+msgstr "objet %s non trouvé"
 
-#: builtin/fetch.c:262
+#: builtin/fetch.c:278
 msgid "[up to date]"
-msgstr ""
+msgstr "[à jour]"
 
-#: builtin/fetch.c:276
+#: builtin/fetch.c:292
 #, c-format
 msgid "! %-*s %-*s -> %s  (can't fetch in current branch)"
-msgstr ""
+msgstr "! %-*s %-*s -> %s  (impossible de récupérer la branche actuelle)"
 
-#: builtin/fetch.c:277 builtin/fetch.c:363
+#: builtin/fetch.c:293 builtin/fetch.c:379
 msgid "[rejected]"
-msgstr ""
+msgstr "[rejeté]"
 
-#: builtin/fetch.c:288
+#: builtin/fetch.c:304
 msgid "[tag update]"
-msgstr ""
+msgstr "[mise Ã  jour de l'étiquette]"
 
-#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343
+#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359
 msgid "  (unable to update local ref)"
-msgstr ""
+msgstr "  (impossible de mettre Ã  jour la référence locale)"
 
-#: builtin/fetch.c:308
+#: builtin/fetch.c:324
 msgid "[new tag]"
-msgstr ""
+msgstr "[nouvelle Ã©tiquette]"
 
-#: builtin/fetch.c:311
+#: builtin/fetch.c:327
 msgid "[new branch]"
-msgstr ""
+msgstr "[nouvelle branche]"
 
-#: builtin/fetch.c:314
+#: builtin/fetch.c:330
 msgid "[new ref]"
-msgstr ""
+msgstr "[nouvelle référence]"
 
-#: builtin/fetch.c:359
+#: builtin/fetch.c:375
 msgid "unable to update local ref"
-msgstr ""
+msgstr "impossible de mettre Ã  jour la référence locale"
 
-#: builtin/fetch.c:359
+#: builtin/fetch.c:375
 msgid "forced update"
-msgstr ""
+msgstr "mise Ã  jour forcée"
 
-#: builtin/fetch.c:365
+#: builtin/fetch.c:381
 msgid "(non-fast-forward)"
-msgstr ""
+msgstr "(pas d'avance rapide)"
 
-#: builtin/fetch.c:396 builtin/fetch.c:688
+#: builtin/fetch.c:412 builtin/fetch.c:718
 #, c-format
 msgid "cannot open %s: %s\n"
 msgstr "impossible d'ouvrir %s : %s\n"
 
-#: builtin/fetch.c:405
+#: builtin/fetch.c:421
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s n'a pas envoyé tous les objets nécessaires\n"
 
-#: builtin/fetch.c:491
+#: builtin/fetch.c:520
 #, c-format
 msgid "From %.*s\n"
-msgstr ""
+msgstr "Depuis %.*s\n"
 
-#: builtin/fetch.c:502
+#: builtin/fetch.c:531
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr ""
+"des références locales n'ont pas pu Ãªtre mises Ã  jour ; essayez de lancer\n"
+" 'git remote prune %s' pour supprimer des branches anciennes en conflit"
 
-#: builtin/fetch.c:552
+#: builtin/fetch.c:581
 #, c-format
 msgid "   (%s will become dangling)"
-msgstr ""
+msgstr "   (%s sera en suspens)"
 
-#: builtin/fetch.c:553
+#: builtin/fetch.c:582
 #, c-format
 msgid "   (%s has become dangling)"
-msgstr ""
+msgstr "   (%s est devenu en suspens)"
 
-#: builtin/fetch.c:560
+#: builtin/fetch.c:589
 msgid "[deleted]"
-msgstr ""
+msgstr "[supprimé]"
 
-#: builtin/fetch.c:561 builtin/remote.c:1055
+#: builtin/fetch.c:590 builtin/remote.c:1055
 msgid "(none)"
-msgstr ""
+msgstr "(aucun(e))"
 
-#: builtin/fetch.c:678
+#: builtin/fetch.c:708
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
-msgstr ""
+msgstr "Refus de récupérer dans la branche courant %s d'un dépôt non nu"
 
-#: builtin/fetch.c:712
+#: builtin/fetch.c:742
 #, c-format
 msgid "Don't know how to fetch from %s"
-msgstr ""
+msgstr "Je ne sais pas récupérer depuis %s"
 
-#: builtin/fetch.c:789
+#: builtin/fetch.c:823
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
-msgstr ""
+msgstr "La valeur \"%2$s\" de l'option \"%1$s\" est invalide pour %3$s"
 
-#: builtin/fetch.c:792
+#: builtin/fetch.c:826
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
-msgstr ""
+msgstr "L'option \"%s\" est ignorée pour %s\n"
 
-#: builtin/fetch.c:894
+#: builtin/fetch.c:928
 #, c-format
 msgid "Fetching %s\n"
-msgstr ""
+msgstr "Récupération de %s\n"
 
-#: builtin/fetch.c:896 builtin/remote.c:100
+#: builtin/fetch.c:930 builtin/remote.c:100
 #, c-format
 msgid "Could not fetch %s"
-msgstr ""
+msgstr "Impossible de récupérer %s"
 
-#: builtin/fetch.c:915
+#: builtin/fetch.c:949
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
 msgstr ""
+"Aucun dépôt distant spécifié. Veuillez spécifier une URL ou un nom\n"
+"distant depuis lesquels les nouvelles révisions devraient Ãªtre récupérées."
 
-#: builtin/fetch.c:935
+#: builtin/fetch.c:969
 msgid "You need to specify a tag name."
-msgstr ""
+msgstr "Vous devez spécifier un nom d'étiquette."
 
-#: builtin/fetch.c:981
+#: builtin/fetch.c:1015
 msgid "--depth and --unshallow cannot be used together"
-msgstr ""
+msgstr "--depth et --unshallow ne peuvent pas Ãªtre utilisés ensemble"
 
-#: builtin/fetch.c:983
+#: builtin/fetch.c:1017
 msgid "--unshallow on a complete repository does not make sense"
-msgstr ""
+msgstr "--unshallow sur un dépôt complet n'a pas de sens"
 
-#: builtin/fetch.c:1002
+#: builtin/fetch.c:1036
 msgid "fetch --all does not take a repository argument"
-msgstr ""
+msgstr "fetch --all n'accepte pas d'argument de dépôt"
 
-#: builtin/fetch.c:1004
+#: builtin/fetch.c:1038
 msgid "fetch --all does not make sense with refspecs"
-msgstr ""
+msgstr "fetch --all n'a pas de sens avec des spécifications de référence"
 
-#: builtin/fetch.c:1015
+#: builtin/fetch.c:1049
 #, c-format
 msgid "No such remote or remote group: %s"
-msgstr ""
+msgstr "distant ou groupe distant inexistant : %s"
 
-#: builtin/fetch.c:1023
+#: builtin/fetch.c:1057
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
+"La récupération d'un groupe et les spécifications de référence n'ont pas de "
+"sens"
 
 #: builtin/fmt-merge-msg.c:13
 msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
 msgstr ""
+"git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <fichier>]"
 
-#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701
-#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175
-#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239
+#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700
+#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179
+#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243
 msgid "n"
-msgstr ""
+msgstr "n"
 
 #: builtin/fmt-merge-msg.c:664
 msgid "populate log with at most <n> entries from shortlog"
-msgstr ""
+msgstr "peupler le journal avec au plus <n> Ã©léments depuis le journal court"
 
 #: builtin/fmt-merge-msg.c:667
 msgid "alias for --log (deprecated)"
-msgstr ""
+msgstr "alias pour --log (obsolète)"
 
 #: builtin/fmt-merge-msg.c:670
 msgid "text"
-msgstr ""
+msgstr "texte"
 
 #: builtin/fmt-merge-msg.c:671
 msgid "use <text> as start of message"
-msgstr ""
+msgstr "utiliser <texte> comme début de message"
 
 #: builtin/fmt-merge-msg.c:672
 msgid "file to read from"
-msgstr ""
+msgstr "fichier d'où lire"
 
 #: builtin/for-each-ref.c:979
 msgid "git for-each-ref [options] [<pattern>]"
-msgstr ""
+msgstr "git for-each-ref [options] [<motif>]"
 
 #: builtin/for-each-ref.c:994
 msgid "quote placeholders suitably for shells"
-msgstr ""
+msgstr "échapper les champs réservés pour les interpréteurs de commandes"
 
 #: builtin/for-each-ref.c:996
 msgid "quote placeholders suitably for perl"
-msgstr ""
+msgstr "échapper les champs réservés pour perl"
 
 #: builtin/for-each-ref.c:998
 msgid "quote placeholders suitably for python"
-msgstr ""
+msgstr "échapper les champs réservés pour python"
 
 #: builtin/for-each-ref.c:1000
 msgid "quote placeholders suitably for tcl"
-msgstr ""
+msgstr "échapper les champs réservés pour tcl"
 
 #: builtin/for-each-ref.c:1003
 msgid "show only <n> matched refs"
-msgstr ""
+msgstr "n'afficher que <n> références correspondant"
 
 #: builtin/for-each-ref.c:1004
 msgid "format"
-msgstr ""
+msgstr "format"
 
 #: builtin/for-each-ref.c:1004
 msgid "format to use for the output"
-msgstr ""
+msgstr "format Ã  utiliser pour la sortie"
 
 #: builtin/for-each-ref.c:1005
 msgid "key"
-msgstr ""
+msgstr "clé"
 
 #: builtin/for-each-ref.c:1006
 msgid "field name to sort on"
-msgstr ""
+msgstr "nom du champ servant Ã  trier"
 
 #: builtin/fsck.c:608
 msgid "git fsck [options] [<object>...]"
-msgstr ""
+msgstr "git fsck [options] [<objet>...]"
 
 #: builtin/fsck.c:614
 msgid "show unreachable objects"
-msgstr ""
+msgstr "afficher les objets inaccessibles"
 
 #: builtin/fsck.c:615
 msgid "show dangling objects"
-msgstr ""
+msgstr "afficher les objets en suspens"
 
 #: builtin/fsck.c:616
 msgid "report tags"
-msgstr ""
+msgstr "afficher les Ã©tiquettes"
 
 #: builtin/fsck.c:617
 msgid "report root nodes"
-msgstr ""
+msgstr "signaler les nÅ“uds racines"
 
 #: builtin/fsck.c:618
 msgid "make index objects head nodes"
-msgstr ""
+msgstr "considérer les objets de l'index comme nÅ“uds tête"
 
+# translated from man page
 #: builtin/fsck.c:619
 msgid "make reflogs head nodes (default)"
-msgstr ""
+msgstr "considérer les reflogs comme nÅ“uds tête (par défaut)"
 
 #: builtin/fsck.c:620
 msgid "also consider packs and alternate objects"
-msgstr ""
+msgstr "inspecter aussi les objets pack et alternatifs"
 
 #: builtin/fsck.c:621
 msgid "enable more strict checking"
-msgstr ""
+msgstr "activer une vérification plus strict"
 
 #: builtin/fsck.c:623
 msgid "write dangling objects in .git/lost-found"
-msgstr ""
+msgstr "écrire les objets en suspens dans .git/lost-found"
 
 #: builtin/fsck.c:624 builtin/prune.c:134
 msgid "show progress"
-msgstr ""
+msgstr "afficher la progression"
 
 #: builtin/gc.c:22
 msgid "git gc [options]"
-msgstr ""
+msgstr "git gc [options]"
 
 #: builtin/gc.c:63
 #, c-format
 msgid "Invalid %s: '%s'"
-msgstr ""
+msgstr "%s invalide : '%s'"
 
 #: builtin/gc.c:90
 #, c-format
 msgid "insanely long object directory %.*s"
-msgstr ""
+msgstr "objet répertoire démentiellement long %.*s"
 
 #: builtin/gc.c:179
 msgid "prune unreferenced objects"
-msgstr ""
+msgstr "éliminer les objets non référencés"
 
 #: builtin/gc.c:181
 msgid "be more thorough (increased runtime)"
-msgstr ""
+msgstr "être plus consciencieux (durée de traitement allongée)"
 
 #: builtin/gc.c:182
 msgid "enable auto-gc mode"
-msgstr ""
+msgstr "activer le mode auto-gc"
 
 #: builtin/gc.c:222
 #, c-format
@@ -4883,734 +5316,758 @@ msgid ""
 "Auto packing the repository for optimum performance. You may also\n"
 "run \"git gc\" manually. See \"git help gc\" for more information.\n"
 msgstr ""
+"Compression automatique du dépôt pour une performance optimum. Vous pouvez "
+"aussi\n"
+"lancer \"git gc\" manuellement. Voir \"git help gc\" pour plus "
+"d'information.\n"
 
 #: builtin/gc.c:249
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
+"Il y a trop d'objets seuls inaccessibles ; lancez 'git prune' pour les "
+"supprimer."
 
 #: builtin/grep.c:22
 msgid "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]"
-msgstr ""
+msgstr "git grep [options] [-e] <motif> [<révision>...] [[--] <chemin>...]"
 
 #: builtin/grep.c:217
 #, c-format
 msgid "grep: failed to create thread: %s"
-msgstr ""
+msgstr "grep : Ã©chec de création du fil: %s"
 
-#: builtin/grep.c:365
+#: builtin/grep.c:364
 #, c-format
 msgid "Failed to chdir: %s"
-msgstr ""
+msgstr "Échec de chdir: %s"
 
-#: builtin/grep.c:443 builtin/grep.c:478
+#: builtin/grep.c:442 builtin/grep.c:477
 #, c-format
 msgid "unable to read tree (%s)"
-msgstr ""
+msgstr "impossible de lire l'arbre (%s)"
 
-#: builtin/grep.c:493
+#: builtin/grep.c:492
 #, c-format
 msgid "unable to grep from object of type %s"
-msgstr ""
+msgstr "impossible de faire un grep sur un objet de type %s"
 
-#: builtin/grep.c:551
+#: builtin/grep.c:550
 #, c-format
 msgid "switch `%c' expects a numerical value"
-msgstr ""
+msgstr "l'option '%c' attend un valeur numérique"
 
-#: builtin/grep.c:568
+#: builtin/grep.c:567
 #, c-format
 msgid "cannot open '%s'"
-msgstr ""
+msgstr "impossible d'ouvrir '%s'"
 
-#: builtin/grep.c:643
+#: builtin/grep.c:642
 msgid "search in index instead of in the work tree"
-msgstr ""
+msgstr "rechercher dans l'index plutôt que dans la copie de travail"
 
-#: builtin/grep.c:645
+#: builtin/grep.c:644
 msgid "find in contents not managed by git"
-msgstr ""
+msgstr "rechercher dans les contenus non gérés par git"
 
-#: builtin/grep.c:647
+#: builtin/grep.c:646
 msgid "search in both tracked and untracked files"
-msgstr ""
+msgstr "rechercher dans les fichiers suivis et non-suivis"
 
-#: builtin/grep.c:649
+#: builtin/grep.c:648
 msgid "search also in ignored files"
-msgstr ""
+msgstr "rechercher aussi dans les fichiers ignorés"
 
-#: builtin/grep.c:652
+#: builtin/grep.c:651
 msgid "show non-matching lines"
-msgstr ""
+msgstr "afficher les lignes qui ne correspondent pas"
 
-#: builtin/grep.c:654
+#: builtin/grep.c:653
 msgid "case insensitive matching"
-msgstr ""
+msgstr "correspondance insensible Ã  la casse"
 
-#: builtin/grep.c:656
+#: builtin/grep.c:655
 msgid "match patterns only at word boundaries"
-msgstr ""
+msgstr "rechercher les motifs aux séparateurs de mots"
 
-#: builtin/grep.c:658
+#: builtin/grep.c:657
 msgid "process binary files as text"
-msgstr ""
+msgstr "traiter les fichiers binaires comme texte"
 
-#: builtin/grep.c:660
+#: builtin/grep.c:659
 msgid "don't match patterns in binary files"
-msgstr ""
+msgstr "ne pas chercher les motifs dans les fichiers binaires"
 
-#: builtin/grep.c:663
+#: builtin/grep.c:662
 msgid "descend at most <depth> levels"
-msgstr ""
+msgstr "descendre au plus de <profondeur> dans l'arborescence"
 
-#: builtin/grep.c:667
+#: builtin/grep.c:666
 msgid "use extended POSIX regular expressions"
-msgstr ""
+msgstr "utiliser des expressions régulières Ã©tendues POSIX"
 
-#: builtin/grep.c:670
+#: builtin/grep.c:669
 msgid "use basic POSIX regular expressions (default)"
-msgstr ""
+msgstr "utiliser des expressions régulières basiques POSIX (par défaut)"
 
-#: builtin/grep.c:673
+#: builtin/grep.c:672
 msgid "interpret patterns as fixed strings"
-msgstr ""
+msgstr "interpréter les motifs comme de chaînes fixes"
 
-#: builtin/grep.c:676
+#: builtin/grep.c:675
 msgid "use Perl-compatible regular expressions"
-msgstr ""
+msgstr "utiliser des expressions régulières compatibles avec Perl"
 
-#: builtin/grep.c:679
+#: builtin/grep.c:678
 msgid "show line numbers"
-msgstr ""
+msgstr "afficher les numéros de ligne"
 
-#: builtin/grep.c:680
+#: builtin/grep.c:679
 msgid "don't show filenames"
-msgstr ""
+msgstr "ne pas pas afficher les noms de fichier"
 
-#: builtin/grep.c:681
+#: builtin/grep.c:680
 msgid "show filenames"
-msgstr ""
+msgstr "afficher les noms de fichier"
 
-#: builtin/grep.c:683
+#: builtin/grep.c:682
 msgid "show filenames relative to top directory"
-msgstr ""
+msgstr "afficher les noms de fichiers relativement au répertoire de base"
 
-#: builtin/grep.c:685
+#: builtin/grep.c:684
 msgid "show only filenames instead of matching lines"
-msgstr ""
+msgstr "n'afficher que les noms de fichiers au lieu des lignes correspondant"
 
-#: builtin/grep.c:687
+#: builtin/grep.c:686
 msgid "synonym for --files-with-matches"
-msgstr ""
+msgstr "synonyme pour --files-with-matches"
 
-#: builtin/grep.c:690
+#: builtin/grep.c:689
 msgid "show only the names of files without match"
-msgstr ""
+msgstr "n'afficher que les noms des fichiers sans correspondance"
 
-#: builtin/grep.c:692
+#: builtin/grep.c:691
 msgid "print NUL after filenames"
-msgstr ""
+msgstr "imprimer une caractère NUL après le noms de fichier"
 
-#: builtin/grep.c:694
+#: builtin/grep.c:693
 msgid "show the number of matches instead of matching lines"
-msgstr ""
+msgstr "afficher le nombre de correspondances au lieu des lignes correspondant"
 
-#: builtin/grep.c:695
+#: builtin/grep.c:694
 msgid "highlight matches"
-msgstr ""
+msgstr "mettre en Ã©vidence les correspondances"
 
-#: builtin/grep.c:697
+#: builtin/grep.c:696
 msgid "print empty line between matches from different files"
 msgstr ""
+"imprimer une ligne vide entre les correspondances de fichiers différents"
 
-#: builtin/grep.c:699
+#: builtin/grep.c:698
 msgid "show filename only once above matches from same file"
 msgstr ""
+"afficher le nom de fichier une fois au dessus des correspondances du même "
+"fichier"
 
-#: builtin/grep.c:702
+#: builtin/grep.c:701
 msgid "show <n> context lines before and after matches"
-msgstr ""
+msgstr "afficher <n> lignes de contexte avant et après les correspondances"
 
-#: builtin/grep.c:705
+#: builtin/grep.c:704
 msgid "show <n> context lines before matches"
-msgstr ""
+msgstr "afficher <n> lignes de contexte avant les correspondances"
 
-#: builtin/grep.c:707
+#: builtin/grep.c:706
 msgid "show <n> context lines after matches"
-msgstr ""
+msgstr "afficher <n> lignes de contexte après les correspondances"
 
-#: builtin/grep.c:708
+#: builtin/grep.c:707
 msgid "shortcut for -C NUM"
-msgstr ""
+msgstr "raccourci pour -C NUM"
 
-#: builtin/grep.c:711
+#: builtin/grep.c:710
 msgid "show a line with the function name before matches"
 msgstr ""
+"afficher une ligne avec le nom de la fonction avant les correspondances"
 
-#: builtin/grep.c:713
+#: builtin/grep.c:712
 msgid "show the surrounding function"
-msgstr ""
+msgstr "afficher la fonction contenante"
 
-#: builtin/grep.c:716
+#: builtin/grep.c:715
 msgid "read patterns from file"
-msgstr ""
+msgstr "lire les motifs depuis fichier"
 
-#: builtin/grep.c:718
+#: builtin/grep.c:717
 msgid "match <pattern>"
-msgstr ""
+msgstr "rechercher <motif>"
 
-#: builtin/grep.c:720
+#: builtin/grep.c:719
 msgid "combine patterns specified with -e"
-msgstr ""
+msgstr "combiner les motifs spécifiés par -e"
 
-#: builtin/grep.c:732
+#: builtin/grep.c:731
 msgid "indicate hit with exit status without output"
 msgstr ""
+"indiquer des correspondances avec le code de sortie mais sans rien afficher"
 
-#: builtin/grep.c:734
+#: builtin/grep.c:733
 msgid "show only matches from files that match all patterns"
 msgstr ""
+"n'afficher que les correspondances de fichiers qui correspondent Ã  tous les "
+"motifs"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:735
 msgid "show parse tree for grep expression"
-msgstr ""
+msgstr "afficher l'arbre d'analyse pour le motif grep"
 
-#: builtin/grep.c:740
+#: builtin/grep.c:739
 msgid "pager"
-msgstr ""
+msgstr "pagineur"
 
-#: builtin/grep.c:740
+#: builtin/grep.c:739
 msgid "show matching files in the pager"
-msgstr ""
+msgstr "afficher les fichiers correspondant dans le pagineur"
 
-#: builtin/grep.c:743
+#: builtin/grep.c:742
 msgid "allow calling of grep(1) (ignored by this build)"
-msgstr ""
+msgstr "permettre l'appel de grep(1) (ignoré par ce build)"
 
-#: builtin/grep.c:744 builtin/show-ref.c:184
+#: builtin/grep.c:743 builtin/show-ref.c:188
 msgid "show usage"
-msgstr ""
+msgstr "afficher l'usage"
 
-#: builtin/grep.c:811
+#: builtin/grep.c:810
 msgid "no pattern given."
-msgstr ""
+msgstr "aucun motif fourni."
 
-#: builtin/grep.c:866
+#: builtin/grep.c:865
 msgid "--open-files-in-pager only works on the worktree"
-msgstr ""
+msgstr "--open-files-in-pager ne fonctionne que sur la copie de travail"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:888
 msgid "--cached or --untracked cannot be used with --no-index."
-msgstr ""
+msgstr "--cached ou --untracked ne peuvent pas Ãªtre utilisés avec --no-index."
 
-#: builtin/grep.c:894
+#: builtin/grep.c:893
 msgid "--no-index or --untracked cannot be used with revs."
 msgstr ""
+"--no-index ou --untracked ne peuvent pas Ãªtre utilisés avec des révisions."
 
-#: builtin/grep.c:897
+#: builtin/grep.c:896
 msgid "--[no-]exclude-standard cannot be used for tracked contents."
 msgstr ""
+"--[no-]exclude-standard ne peut pas Ãªtre utilisé avec du contenu suivi."
 
-#: builtin/grep.c:905
+#: builtin/grep.c:904
 msgid "both --cached and trees are given."
-msgstr ""
+msgstr "--cached et des arbres sont fournis en même temps."
 
 #: builtin/hash-object.c:60
 msgid ""
 "git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin] [--] "
 "<file>..."
 msgstr ""
+"git hash-object [-t <type>] [-w] [--path=<fichier>|--no-filters] [--stdin] "
+"[--] <fichier>..."
 
 #: builtin/hash-object.c:61
 msgid "git hash-object  --stdin-paths < <list-of-paths>"
-msgstr ""
+msgstr "git hash-object  --stdin-paths < <liste-de-chemins>"
 
 #: builtin/hash-object.c:72
 msgid "type"
-msgstr ""
+msgstr "type"
 
 #: builtin/hash-object.c:72
 msgid "object type"
-msgstr ""
+msgstr "type d'objet"
 
 #: builtin/hash-object.c:73
 msgid "write the object into the object database"
-msgstr ""
+msgstr "écrire l'objet dans la base de donnée d'objets"
 
 #: builtin/hash-object.c:74
 msgid "read the object from stdin"
-msgstr ""
+msgstr "lire l'objet depuis l'entrée standard"
 
 #: builtin/hash-object.c:76
 msgid "store file as is without filters"
-msgstr ""
+msgstr "stocker le fichier tel quel sans filtrage"
 
 #: builtin/hash-object.c:77
 msgid "process file as it were from this path"
-msgstr ""
+msgstr "traiter le fichier comme s'il venait de ce chemin"
 
-#: builtin/help.c:43
+#: builtin/help.c:41
 msgid "print all available commands"
-msgstr ""
+msgstr "afficher toutes les commandes disponibles"
 
-#: builtin/help.c:44
+#: builtin/help.c:42
 msgid "print list of useful guides"
-msgstr ""
+msgstr "afficher une liste de guides utiles"
 
-#: builtin/help.c:45
+#: builtin/help.c:43
 msgid "show man page"
-msgstr ""
+msgstr "afficher la page de manuel"
 
-#: builtin/help.c:46
+#: builtin/help.c:44
 msgid "show manual in web browser"
-msgstr ""
+msgstr "afficher le manuel dans un navigateur web"
 
-#: builtin/help.c:48
+#: builtin/help.c:46
 msgid "show info page"
-msgstr ""
+msgstr "afficher la page info"
 
-#: builtin/help.c:54
+#: builtin/help.c:52
 msgid "git help [--all] [--guides] [--man|--web|--info] [command]"
-msgstr ""
+msgstr "git help [--all] [--guides] [--man|--web|--info] [commande]"
 
-#: builtin/help.c:66
+#: builtin/help.c:64
 #, c-format
 msgid "unrecognized help format '%s'"
-msgstr ""
+msgstr "format d'aide non reconnu '%s'"
 
-#: builtin/help.c:94
+#: builtin/help.c:92
 msgid "Failed to start emacsclient."
-msgstr ""
+msgstr "échec de démarrage d'emacsclient."
 
-#: builtin/help.c:107
+#: builtin/help.c:105
 msgid "Failed to parse emacsclient version."
-msgstr ""
+msgstr "échec d'analyse de la version d'emacsclient."
 
-#: builtin/help.c:115
+#: builtin/help.c:113
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
-msgstr ""
+msgstr "la version d'emacsclient '%d' est trop ancienne (<22)."
 
-#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178
+#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176
 #, c-format
 msgid "failed to exec '%s': %s"
-msgstr ""
+msgstr "échec de l'exécution de '%s' : %s"
 
-#: builtin/help.c:218
+#: builtin/help.c:216
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
 "Please consider using 'man.<tool>.cmd' instead."
 msgstr ""
+"'%s' : chemin pour l'utilitaire de visualisation de manuel non supporté.\n"
+"Veuillez utiliser plutôt 'man.<outil>.cmd'."
 
-#: builtin/help.c:230
+#: builtin/help.c:228
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
 "Please consider using 'man.<tool>.path' instead."
 msgstr ""
+"'%s' : chemin pour l'utilitaire de visualisation de manuel supporté.\n"
+"Veuillez utiliser plutôt 'man.<outil>.cmd'."
 
-#: builtin/help.c:351
+#: builtin/help.c:349
 #, c-format
 msgid "'%s': unknown man viewer."
-msgstr ""
+msgstr "'%s' : visualiseur de manuel inconnu."
 
-#: builtin/help.c:368
+#: builtin/help.c:366
 msgid "no man viewer handled the request"
-msgstr ""
+msgstr "aucun visualiseur de manuel n'a pris en charge la demande"
 
-#: builtin/help.c:376
+#: builtin/help.c:374
 msgid "no info viewer handled the request"
-msgstr ""
+msgstr "aucun visualiseur de 'info' n'a pris en charge la demande"
 
-#: builtin/help.c:422
+#: builtin/help.c:420
 msgid "Defining attributes per path"
-msgstr ""
+msgstr "Définition des attributs par chemin"
 
-#: builtin/help.c:423
+#: builtin/help.c:421
 msgid "A Git glossary"
-msgstr ""
+msgstr "Un glossaire Git"
 
-#: builtin/help.c:424
+#: builtin/help.c:422
 msgid "Specifies intentionally untracked files to ignore"
-msgstr ""
+msgstr "Spécifie les fichiers non-suivis Ã  ignorer intentionnellement"
 
-#: builtin/help.c:425
+#: builtin/help.c:423
 msgid "Defining submodule properties"
-msgstr ""
+msgstr "Définition des propriétés de sous-module"
 
-#: builtin/help.c:426
+#: builtin/help.c:424
 msgid "Specifying revisions and ranges for Git"
-msgstr ""
+msgstr "Spécification des révisions et portées pour Git"
 
-#: builtin/help.c:427
+#: builtin/help.c:425
 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
 msgstr ""
+"Une introduction pratique Ã  Git (pour les versions 1.5.1 et supérieures)"
 
-#: builtin/help.c:428
+#: builtin/help.c:426
 msgid "An overview of recommended workflows with Git"
-msgstr ""
+msgstr "Un aperçu des flux de travail recommandés avec Git"
 
-#: builtin/help.c:440
+#: builtin/help.c:438
 msgid "The common Git guides are:\n"
-msgstr ""
+msgstr "Les guides Git populaires sont : \n"
 
-#: builtin/help.c:462 builtin/help.c:478
+#: builtin/help.c:460 builtin/help.c:476
 #, c-format
 msgid "usage: %s%s"
-msgstr ""
+msgstr "usage : %s%s"
 
-#: builtin/help.c:494
+#: builtin/help.c:492
 #, c-format
 msgid "`git %s' is aliased to `%s'"
-msgstr ""
+msgstr "`git %s\" est un alias de `%s'"
 
-#: builtin/index-pack.c:182
+#: builtin/index-pack.c:184
 #, c-format
 msgid "object type mismatch at %s"
-msgstr ""
+msgstr "type d'objet non correspondant Ã  %s"
 
-#: builtin/index-pack.c:202
+#: builtin/index-pack.c:204
 msgid "object of unexpected type"
-msgstr ""
+msgstr "objet de type inattendu"
 
-#: builtin/index-pack.c:239
+#: builtin/index-pack.c:244
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "impossible de remplir %d octet"
+msgstr[1] "impossible de remplir %d octets"
 
-#: builtin/index-pack.c:249
+#: builtin/index-pack.c:254
 msgid "early EOF"
-msgstr ""
+msgstr "fin de fichier prématurée"
 
-#: builtin/index-pack.c:250
+#: builtin/index-pack.c:255
 msgid "read error on input"
-msgstr ""
+msgstr "erreur de lecture sur l'entrée"
 
-#: builtin/index-pack.c:262
+#: builtin/index-pack.c:267
 msgid "used more bytes than were available"
-msgstr ""
+msgstr "plus d'octets utilisés que disponibles"
 
-#: builtin/index-pack.c:269
+#: builtin/index-pack.c:274
 msgid "pack too large for current definition of off_t"
-msgstr ""
+msgstr "le paquet est trop grand pour la définition actuelle de off_t"
 
-#: builtin/index-pack.c:285
+#: builtin/index-pack.c:290
 #, c-format
 msgid "unable to create '%s'"
-msgstr ""
+msgstr "impossible de créer '%s'"
 
-#: builtin/index-pack.c:290
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot open packfile '%s'"
-msgstr ""
+msgstr "impossible d'ouvrir le fichier paquet '%s'"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:309
 msgid "pack signature mismatch"
-msgstr ""
+msgstr "la signature du paquet ne correspond pas"
 
-#: builtin/index-pack.c:306
+#: builtin/index-pack.c:311
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
-msgstr ""
+msgstr "la version de paquet %<PRIu32> non supportée"
 
-#: builtin/index-pack.c:324
+#: builtin/index-pack.c:329
 #, c-format
 msgid "pack has bad object at offset %lu: %s"
-msgstr ""
+msgstr "le paquet a un mauvais objet Ã  l'offset %lu: %s"
 
-#: builtin/index-pack.c:446
+#: builtin/index-pack.c:451
 #, c-format
 msgid "inflate returned %d"
-msgstr ""
+msgstr "la décompression (inflate) a retourné %d"
 
-#: builtin/index-pack.c:495
+#: builtin/index-pack.c:500
 msgid "offset value overflow for delta base object"
-msgstr ""
+msgstr "dépassement de la valeur d'offset pour l'objet delta de base"
 
-#: builtin/index-pack.c:503
+#: builtin/index-pack.c:508
 msgid "delta base offset is out of bound"
-msgstr ""
+msgstr "l'objet delta de base est hors limite"
 
-#: builtin/index-pack.c:511
+#: builtin/index-pack.c:516
 #, c-format
 msgid "unknown object type %d"
-msgstr ""
+msgstr "type d'objet inconnu %d"
 
-#: builtin/index-pack.c:542
+#: builtin/index-pack.c:547
 msgid "cannot pread pack file"
-msgstr ""
+msgstr "impossible de lire (pread) le fichier paquet"
 
-#: builtin/index-pack.c:544
+#: builtin/index-pack.c:549
 #, c-format
 msgid "premature end of pack file, %lu byte missing"
 msgid_plural "premature end of pack file, %lu bytes missing"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "fin prématurée du fichier paquet, %lu octet lu"
+msgstr[1] "fin prématurée du fichier paquet, %lu octets lus"
 
-#: builtin/index-pack.c:570
+#: builtin/index-pack.c:575
 msgid "serious inflate inconsistency"
-msgstr ""
+msgstr "grave incohérence dans la décompression (inflate)"
 
-#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690
-#: builtin/index-pack.c:724 builtin/index-pack.c:733
+#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695
+#: builtin/index-pack.c:729 builtin/index-pack.c:738
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
-msgstr ""
+msgstr "COLLISION SHA1 TROUVÉE AVEC %s !"
 
-#: builtin/index-pack.c:664 builtin/pack-objects.c:170
+#: builtin/index-pack.c:669 builtin/pack-objects.c:170
 #: builtin/pack-objects.c:262
 #, c-format
 msgid "unable to read %s"
-msgstr ""
+msgstr "impossible de lire %s"
 
-#: builtin/index-pack.c:730
+#: builtin/index-pack.c:735
 #, c-format
 msgid "cannot read existing object %s"
-msgstr ""
+msgstr "impossible de lire l'objet existant %s"
 
-#: builtin/index-pack.c:744
+#: builtin/index-pack.c:749
 #, c-format
 msgid "invalid blob object %s"
-msgstr ""
+msgstr "objet blob invalide %s"
 
-#: builtin/index-pack.c:759
+#: builtin/index-pack.c:763
 #, c-format
 msgid "invalid %s"
-msgstr ""
+msgstr "%s invalide"
 
-#: builtin/index-pack.c:761
+#: builtin/index-pack.c:766
 msgid "Error in object"
-msgstr ""
+msgstr "Erreur dans l'objet"
 
-#: builtin/index-pack.c:763
+#: builtin/index-pack.c:768
 #, c-format
 msgid "Not all child objects of %s are reachable"
-msgstr ""
+msgstr "Tous les objets enfants de %s ne sont pas accessibles"
 
-#: builtin/index-pack.c:833 builtin/index-pack.c:863
+#: builtin/index-pack.c:838 builtin/index-pack.c:868
 msgid "failed to apply delta"
-msgstr ""
+msgstr "échec d'application du delta"
 
-#: builtin/index-pack.c:1004
+#: builtin/index-pack.c:1009
 msgid "Receiving objects"
-msgstr ""
+msgstr "Réception d'objets"
 
-#: builtin/index-pack.c:1004
+#: builtin/index-pack.c:1009
 msgid "Indexing objects"
-msgstr ""
+msgstr "Indexation d'objets"
 
-#: builtin/index-pack.c:1030
+#: builtin/index-pack.c:1035
 msgid "pack is corrupted (SHA1 mismatch)"
-msgstr ""
+msgstr "le paquet est corrompu (SHA1 ne correspond pas)"
 
-#: builtin/index-pack.c:1035
+#: builtin/index-pack.c:1040
 msgid "cannot fstat packfile"
-msgstr ""
+msgstr "impossible d'obtenir le statut (fstat) du fichier paquet"
 
-#: builtin/index-pack.c:1038
+#: builtin/index-pack.c:1043
 msgid "pack has junk at the end"
-msgstr ""
+msgstr "le paquet est invalide Ã  la fin"
 
-#: builtin/index-pack.c:1049
+#: builtin/index-pack.c:1054
 msgid "confusion beyond insanity in parse_pack_objects()"
-msgstr ""
+msgstr "confusion extrême dans parse_pack_objects()"
 
-#: builtin/index-pack.c:1072
+#: builtin/index-pack.c:1077
 msgid "Resolving deltas"
-msgstr ""
+msgstr "Résolution des deltas"
 
-#: builtin/index-pack.c:1082
+#: builtin/index-pack.c:1087
 #, c-format
 msgid "unable to create thread: %s"
-msgstr ""
+msgstr "impossible de créer le fil : %s"
 
-#: builtin/index-pack.c:1124
+#: builtin/index-pack.c:1129
 msgid "confusion beyond insanity"
-msgstr ""
+msgstr "confusion extrême"
 
-#: builtin/index-pack.c:1132
+#: builtin/index-pack.c:1137
 #, c-format
 msgid "completed with %d local objects"
-msgstr ""
+msgstr "complété avec %d objets locaux"
 
-#: builtin/index-pack.c:1142
+#: builtin/index-pack.c:1147
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr ""
+"Somme de contrôle de fin inattendue pour %s (corruption sur le disque ?)"
 
-#: builtin/index-pack.c:1146
+#: builtin/index-pack.c:1151
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "le paquet a %d delta non résolu"
+msgstr[1] "le paquet a %d deltas non résolus"
 
-#: builtin/index-pack.c:1171
+#: builtin/index-pack.c:1176
 #, c-format
 msgid "unable to deflate appended object (%d)"
-msgstr ""
+msgstr "impossible de compresser l'objet ajouté (%d)"
 
-#: builtin/index-pack.c:1250
+#: builtin/index-pack.c:1255
 #, c-format
 msgid "local object %s is corrupt"
-msgstr ""
+msgstr "l'objet local %s est corrompu"
 
-#: builtin/index-pack.c:1274
+#: builtin/index-pack.c:1279
 msgid "error while closing pack file"
-msgstr ""
+msgstr "erreur en fermeture du fichier paquet"
 
-#: builtin/index-pack.c:1287
+#: builtin/index-pack.c:1292
 #, c-format
 msgid "cannot write keep file '%s'"
-msgstr ""
+msgstr "impossible d'écrire le fichier \"keep\" '%s'"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "cannot close written keep file '%s'"
-msgstr ""
+msgstr "impossible de fermer le fichier \"keep\" '%s'"
 
-#: builtin/index-pack.c:1308
+#: builtin/index-pack.c:1313
 msgid "cannot store pack file"
-msgstr ""
+msgstr "impossible de stocker le fichier paquet"
 
-#: builtin/index-pack.c:1319
+#: builtin/index-pack.c:1324
 msgid "cannot store index file"
-msgstr ""
+msgstr "impossible de stocker le fichier d'index"
 
-#: builtin/index-pack.c:1352
+#: builtin/index-pack.c:1357
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
-msgstr ""
+msgstr "mauvais pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1358
+#: builtin/index-pack.c:1363
 #, c-format
 msgid "invalid number of threads specified (%d)"
-msgstr ""
+msgstr "nombre de fils spécifié invalide (%d)"
 
-#: builtin/index-pack.c:1362 builtin/index-pack.c:1535
+#: builtin/index-pack.c:1367 builtin/index-pack.c:1545
 #, c-format
 msgid "no threads support, ignoring %s"
-msgstr ""
+msgstr "pas de support des fils, ignore %s"
 
-#: builtin/index-pack.c:1420
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "Cannot open existing pack file '%s'"
-msgstr ""
+msgstr "Impossible d'ouvrir le fichier paquet existant '%s'"
 
-#: builtin/index-pack.c:1422
+#: builtin/index-pack.c:1427
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
-msgstr ""
+msgstr "Impossible d'ouvrir le fichier paquet d'index existant pour '%s'"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1474
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "pas un delta : %d objet"
+msgstr[1] "pas un delta : %d objets"
 
-#: builtin/index-pack.c:1476
+#: builtin/index-pack.c:1481
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "longueur chaînée = %d : %lu objet"
+msgstr[1] "longueur chaînée = %d : %lu objets"
 
-#: builtin/index-pack.c:1503
+#: builtin/index-pack.c:1509
 msgid "Cannot come back to cwd"
-msgstr ""
+msgstr "Impossible de revenir au répertoire de travail courant"
 
-#: builtin/index-pack.c:1547 builtin/index-pack.c:1550
-#: builtin/index-pack.c:1562 builtin/index-pack.c:1566
+#: builtin/index-pack.c:1557 builtin/index-pack.c:1560
+#: builtin/index-pack.c:1572 builtin/index-pack.c:1576
 #, c-format
 msgid "bad %s"
-msgstr ""
+msgstr "mauvais %s"
 
-#: builtin/index-pack.c:1580
+#: builtin/index-pack.c:1590
 msgid "--fix-thin cannot be used without --stdin"
-msgstr ""
+msgstr "--fix-thin ne peut pas Ãªtre utilisé sans --stdin"
 
-#: builtin/index-pack.c:1584 builtin/index-pack.c:1594
+#: builtin/index-pack.c:1594 builtin/index-pack.c:1604
 #, c-format
 msgid "packfile name '%s' does not end with '.pack'"
-msgstr ""
+msgstr "le nom de fichier paquet '%s' ne se termine pas par '.pack'"
 
-#: builtin/index-pack.c:1603
+#: builtin/index-pack.c:1613
 msgid "--verify with no packfile name given"
-msgstr ""
+msgstr "--verify sans nom de fichier paquet donné"
 
 #: builtin/init-db.c:35
 #, c-format
 msgid "Could not make %s writable by group"
-msgstr ""
+msgstr "Impossible de rendre %s inscriptible pour le groupe"
 
 #: builtin/init-db.c:62
 #, c-format
 msgid "insanely long template name %s"
-msgstr ""
+msgstr "nom de modèle démentiellement long %s"
 
 #: builtin/init-db.c:67
 #, c-format
 msgid "cannot stat '%s'"
-msgstr ""
+msgstr "impossible de faire un stat de '%s'"
 
 #: builtin/init-db.c:73
 #, c-format
 msgid "cannot stat template '%s'"
-msgstr ""
+msgstr "impossible de faire un stat du modèle '%s'"
 
 #: builtin/init-db.c:80
 #, c-format
 msgid "cannot opendir '%s'"
-msgstr ""
+msgstr "impossible d'ouvrir (opendir) '%s'"
 
 #: builtin/init-db.c:97
 #, c-format
 msgid "cannot readlink '%s'"
-msgstr ""
+msgstr "impossible de readlink '%s'"
 
 #: builtin/init-db.c:99
 #, c-format
 msgid "insanely long symlink %s"
-msgstr ""
+msgstr "lien symbolique démentiellement long %s"
 
 #: builtin/init-db.c:102
 #, c-format
 msgid "cannot symlink '%s' '%s'"
-msgstr ""
+msgstr "impossible de créer un lien symbolique de '%s' '%s'"
 
 #: builtin/init-db.c:106
 #, c-format
 msgid "cannot copy '%s' to '%s'"
-msgstr ""
+msgstr "impossible de copier '%s' vers '%s'"
 
 #: builtin/init-db.c:110
 #, c-format
 msgid "ignoring template %s"
-msgstr ""
+msgstr "modèle %s ignoré"
 
 #: builtin/init-db.c:133
 #, c-format
 msgid "insanely long template path %s"
-msgstr ""
+msgstr "chemin de modèle %s démentiellement long"
 
 #: builtin/init-db.c:141
 #, c-format
 msgid "templates not found %s"
-msgstr ""
+msgstr "modèles non trouvés %s"
 
 #: builtin/init-db.c:154
 #, c-format
 msgid "not copying templates of a wrong format version %d from '%s'"
 msgstr ""
+"pas de copie des modèles Ã©tant dans une mauvaise version du format %d de '%s'"
 
 #: builtin/init-db.c:192
 #, c-format
 msgid "insane git directory %s"
-msgstr ""
+msgstr "répertoire git démentiel %s"
 
 #: builtin/init-db.c:323 builtin/init-db.c:326
 #, c-format
@@ -5620,17 +6077,17 @@ msgstr "%s existe déjà"
 #: builtin/init-db.c:355
 #, c-format
 msgid "unable to handle file type %d"
-msgstr ""
+msgstr "impossible de traiter le fichier de type %d"
 
 #: builtin/init-db.c:358
 #, c-format
 msgid "unable to move %s to %s"
-msgstr ""
+msgstr "impossible de déplacer %s vers %s"
 
 #: builtin/init-db.c:363
 #, c-format
 msgid "Could not create git link %s"
-msgstr ""
+msgstr "Impossible de créer le lien git %s"
 
 #.
 #. * TRANSLATORS: The first '%s' is either "Reinitialized
@@ -5640,51 +6097,53 @@ msgstr ""
 #: builtin/init-db.c:420
 #, c-format
 msgid "%s%s Git repository in %s%s\n"
-msgstr "%s%s Dépôt git dans %s%s\n"
+msgstr "Dépôt Git%2$s %1$s dans %3$s%4$s\n"
 
 #: builtin/init-db.c:421
 msgid "Reinitialized existing"
-msgstr ""
+msgstr "existant réinitialisé"
 
 #: builtin/init-db.c:421
 msgid "Initialized empty"
-msgstr ""
+msgstr "vide initialisé"
 
 #: builtin/init-db.c:422
 msgid " shared"
-msgstr ""
+msgstr " partagé"
 
 #: builtin/init-db.c:441
 msgid "cannot tell cwd"
-msgstr ""
+msgstr "impossible de déterminer le répertoire de travail courant"
 
 #: builtin/init-db.c:467
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [directory]"
 msgstr ""
+"git init [-q | --quiet] [--bare] [--template=<répertoire-modèle>] [--"
+"shared[=<permissions>]] [répertoire]"
 
 #: builtin/init-db.c:490
 msgid "permissions"
-msgstr ""
+msgstr "permissions"
 
 #: builtin/init-db.c:491
 msgid "specify that the git repository is to be shared amongst several users"
-msgstr ""
+msgstr "spécifier que le dépôt git sera partagé entre plusieurs utilisateurs"
 
-#: builtin/init-db.c:493 builtin/prune-packed.c:77
+#: builtin/init-db.c:493 builtin/prune-packed.c:75
 msgid "be quiet"
-msgstr ""
+msgstr "être silencieux"
 
 #: builtin/init-db.c:522 builtin/init-db.c:529
 #, c-format
 msgid "cannot mkdir %s"
-msgstr ""
+msgstr "impossible de créer le répertoire (mkdir) %s"
 
 #: builtin/init-db.c:533
 #, c-format
 msgid "cannot chdir to %s"
-msgstr ""
+msgstr "impossible de se déplacer vers le répertoire (chdir) %s"
 
 #: builtin/init-db.c:555
 #, c-format
@@ -5692,562 +6151,591 @@ msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
 "dir=<directory>)"
 msgstr ""
+"%s (ou --work-tree=<répertoire>) n'est pas autorisé sans spécifier %s (ou --"
+"git-dir=<répertoire>)"
 
 #: builtin/init-db.c:579
 msgid "Cannot access current working directory"
-msgstr ""
+msgstr "Impossible d'accéder au répertoire de travail courant"
 
 #: builtin/init-db.c:586
 #, c-format
 msgid "Cannot access work tree '%s'"
-msgstr ""
+msgstr "Impossible d'accéder Ã  l'arbre de travail '%s'"
 
-#: builtin/log.c:40
+#: builtin/log.c:41
 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n"
-msgstr ""
+msgstr "git log [<options>] [<page de révisions>] [[--] <chemin>...]\n"
 
-#: builtin/log.c:41
+#: builtin/log.c:42
 msgid "   or: git show [options] <object>..."
-msgstr ""
+msgstr "   ou : git show [options] <objet>..."
 
-#: builtin/log.c:103
+#: builtin/log.c:124
 msgid "suppress diff output"
-msgstr ""
+msgstr "supprimer la sortie des différences"
 
-#: builtin/log.c:104
+#: builtin/log.c:125
 msgid "show source"
-msgstr ""
+msgstr "afficher la source"
 
-#: builtin/log.c:105
+#: builtin/log.c:126
 msgid "Use mail map file"
-msgstr ""
+msgstr "Utiliser le fichier de correspondance de mail"
 
-#: builtin/log.c:106
+#: builtin/log.c:127
 msgid "decorate options"
-msgstr ""
+msgstr "décorer les options"
 
-#: builtin/log.c:199
+#: builtin/log.c:230
 #, c-format
 msgid "Final output: %d %s\n"
-msgstr ""
+msgstr "Sortie finale : %d %s\n"
 
-#: builtin/log.c:422 builtin/log.c:514
+#: builtin/log.c:453 builtin/log.c:545
 #, c-format
 msgid "Could not read object %s"
-msgstr ""
+msgstr "Impossible de lire l'objet %s"
 
-#: builtin/log.c:538
+#: builtin/log.c:569
 #, c-format
 msgid "Unknown type: %d"
-msgstr ""
+msgstr "Type inconnu : %d"
 
-#: builtin/log.c:638
+#: builtin/log.c:669
 msgid "format.headers without value"
-msgstr ""
+msgstr "format.headers sans valeur"
 
-#: builtin/log.c:720
+#: builtin/log.c:751
 msgid "name of output directory is too long"
-msgstr ""
+msgstr "le nom du répertoire de sortie est trop long"
 
-#: builtin/log.c:736
+#: builtin/log.c:767
 #, c-format
 msgid "Cannot open patch file %s"
-msgstr ""
+msgstr "Impossible d'ouvrir le fichier correctif %s"
 
-#: builtin/log.c:750
+#: builtin/log.c:781
 msgid "Need exactly one range."
-msgstr ""
+msgstr "Exactement une plage nécessaire."
 
-#: builtin/log.c:758
+#: builtin/log.c:789
 msgid "Not a range."
-msgstr ""
+msgstr "Pas une plage."
 
-#: builtin/log.c:860
+#: builtin/log.c:891
 msgid "Cover letter needs email format"
-msgstr ""
+msgstr "La lettre de motivation doit Ãªtre au format e-mail"
 
-#: builtin/log.c:936
+#: builtin/log.c:967
 #, c-format
 msgid "insane in-reply-to: %s"
-msgstr ""
+msgstr "in-reply-to aberrant : %s"
 
-#: builtin/log.c:964
+#: builtin/log.c:995
 msgid "git format-patch [options] [<since> | <revision range>]"
-msgstr ""
+msgstr "git format-patch [options] [<depuis> | <plage de révisions>]"
 
-#: builtin/log.c:1009
+#: builtin/log.c:1040
 msgid "Two output directories?"
-msgstr ""
+msgstr "Deux répertoires de sortie ?"
 
-#: builtin/log.c:1108
+#: builtin/log.c:1155
 msgid "use [PATCH n/m] even with a single patch"
-msgstr ""
+msgstr "utiliser [PATCH n/m] même avec un patch unique"
 
-#: builtin/log.c:1111
+#: builtin/log.c:1158
 msgid "use [PATCH] even with multiple patches"
-msgstr ""
+msgstr "utiliser [PATCH] même avec des patchs multiples"
 
-#: builtin/log.c:1115
+#: builtin/log.c:1162
 msgid "print patches to standard out"
-msgstr ""
+msgstr "afficher les patchs sur la sortie standard"
 
-#: builtin/log.c:1117
+#: builtin/log.c:1164
 msgid "generate a cover letter"
-msgstr ""
+msgstr "générer une lettre de motivation"
 
-#: builtin/log.c:1119
+#: builtin/log.c:1166
 msgid "use simple number sequence for output file names"
 msgstr ""
+"utiliser une séquence simple de nombres pour les nom des fichiers de sortie"
 
-#: builtin/log.c:1120
+#: builtin/log.c:1167
 msgid "sfx"
-msgstr ""
+msgstr "sfx"
 
-#: builtin/log.c:1121
+#: builtin/log.c:1168
 msgid "use <sfx> instead of '.patch'"
-msgstr ""
+msgstr "utiliser <sfx> au lieu de '.patch'"
 
-#: builtin/log.c:1123
+#: builtin/log.c:1170
 msgid "start numbering patches at <n> instead of 1"
-msgstr ""
+msgstr "démarrer la numérotation des patchs Ã  <n> au lieu de 1"
 
-#: builtin/log.c:1125
+#: builtin/log.c:1172
 msgid "mark the series as Nth re-roll"
-msgstr ""
+msgstr "marquer la série comme une Nième réédition"
 
-#: builtin/log.c:1127
+#: builtin/log.c:1174
 msgid "Use [<prefix>] instead of [PATCH]"
-msgstr ""
+msgstr "utiliser [<préfixe>] au lieu de [PATCH]"
 
-#: builtin/log.c:1130
+#: builtin/log.c:1177
 msgid "store resulting files in <dir>"
-msgstr ""
+msgstr "stocker les fichiers résultats dans <répertoire>"
 
-#: builtin/log.c:1133
+#: builtin/log.c:1180
 msgid "don't strip/add [PATCH]"
-msgstr ""
+msgstr "ne pas retirer/ajouter [PATCH]"
 
-#: builtin/log.c:1136
+#: builtin/log.c:1183
 msgid "don't output binary diffs"
-msgstr ""
+msgstr "ne pas imprimer les diffs binaires"
 
-#: builtin/log.c:1138
+#: builtin/log.c:1185
 msgid "don't include a patch matching a commit upstream"
-msgstr ""
+msgstr "ne pas inclure un patch correspondant Ã  un commit amont"
 
-#: builtin/log.c:1140
+#: builtin/log.c:1187
 msgid "show patch format instead of default (patch + stat)"
-msgstr ""
+msgstr "afficher le format du patch au lieu du défaut (patch + stat)"
 
-#: builtin/log.c:1142
+#: builtin/log.c:1189
 msgid "Messaging"
-msgstr ""
+msgstr "Communication"
 
-#: builtin/log.c:1143
+#: builtin/log.c:1190
 msgid "header"
-msgstr ""
+msgstr "en-tête"
 
-#: builtin/log.c:1144
+#: builtin/log.c:1191
 msgid "add email header"
-msgstr ""
+msgstr "ajouter l'en-tête d'e-mail"
 
-#: builtin/log.c:1145 builtin/log.c:1147
+#: builtin/log.c:1192 builtin/log.c:1194
 msgid "email"
-msgstr ""
+msgstr "e-mail"
 
-#: builtin/log.c:1145
+#: builtin/log.c:1192
 msgid "add To: header"
-msgstr ""
+msgstr "ajouter l'en-tête \"To:\""
 
-#: builtin/log.c:1147
+#: builtin/log.c:1194
 msgid "add Cc: header"
-msgstr ""
+msgstr "ajouter l'en-tête \"Cc:\""
+
+#: builtin/log.c:1196
+msgid "ident"
+msgstr "ident"
 
-#: builtin/log.c:1149
+#: builtin/log.c:1197
+msgid "set From address to <ident> (or committer ident if absent)"
+msgstr "Renseigner l'adresse From Ã  <ident> (ou Ã  l'ident du validateur si absent)"
+
+#: builtin/log.c:1199
 msgid "message-id"
-msgstr ""
+msgstr "id-message"
 
-#: builtin/log.c:1150
+#: builtin/log.c:1200
 msgid "make first mail a reply to <message-id>"
-msgstr ""
+msgstr "répondre dans le premier message Ã  <id-message>"
 
-#: builtin/log.c:1151 builtin/log.c:1154
+#: builtin/log.c:1201 builtin/log.c:1204
 msgid "boundary"
-msgstr ""
+msgstr "frontière"
 
-#: builtin/log.c:1152
+#: builtin/log.c:1202
 msgid "attach the patch"
-msgstr ""
+msgstr "attacher le patch"
 
-#: builtin/log.c:1155
+#: builtin/log.c:1205
 msgid "inline the patch"
-msgstr ""
+msgstr "patch Ã  l'intérieur"
 
-#: builtin/log.c:1159
+#: builtin/log.c:1209
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
+"activer l'enfilage de message, styles : shallow (superficiel), deep (profond)"
 
-#: builtin/log.c:1161
+#: builtin/log.c:1211
 msgid "signature"
-msgstr ""
+msgstr "signature"
 
-#: builtin/log.c:1162
+#: builtin/log.c:1212
 msgid "add a signature"
-msgstr ""
+msgstr "ajouter une signature"
 
-#: builtin/log.c:1164
+#: builtin/log.c:1214
 msgid "don't print the patch filenames"
-msgstr ""
+msgstr "ne pas afficher les noms de fichiers des patchs"
+
+#: builtin/log.c:1288
+#, c-format
+msgid "invalid ident line: %s"
+msgstr "ligne d'identification invalide : %s"
 
-#: builtin/log.c:1248
+#: builtin/log.c:1303
 msgid "-n and -k are mutually exclusive."
-msgstr ""
+msgstr "-n et -k sont mutuellement exclusifs."
 
-#: builtin/log.c:1250
+#: builtin/log.c:1305
 msgid "--subject-prefix and -k are mutually exclusive."
-msgstr ""
+msgstr "--subject-prefix et -k sont mutuellement exclusifs."
 
-#: builtin/log.c:1258
+#: builtin/log.c:1313
 msgid "--name-only does not make sense"
-msgstr ""
+msgstr "--name-only n'a pas de sens"
 
-#: builtin/log.c:1260
+#: builtin/log.c:1315
 msgid "--name-status does not make sense"
-msgstr ""
+msgstr "--name-status n'a pas de sens"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1317
 msgid "--check does not make sense"
-msgstr ""
+msgstr "--check n'a pas de sens"
 
-#: builtin/log.c:1285
+#: builtin/log.c:1340
 msgid "standard output, or directory, which one?"
-msgstr ""
+msgstr "sortie standard, ou répertoire, lequel ?"
 
-#: builtin/log.c:1287
+#: builtin/log.c:1342
 #, c-format
 msgid "Could not create directory '%s'"
-msgstr ""
+msgstr "Impossible de créer le répertoire '%s'"
 
-#: builtin/log.c:1435
+#: builtin/log.c:1490
 msgid "Failed to create output files"
-msgstr ""
+msgstr "Échec de création des fichiers en sortie"
 
-#: builtin/log.c:1484
+#: builtin/log.c:1539
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
-msgstr ""
+msgstr "git cherry [-v] [<branche_amont> [<head> [<limite>]]]"
 
-#: builtin/log.c:1539
+#: builtin/log.c:1594
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr ""
+"Impossible de trouver une branche distante suivie, merci de spécifier "
+"<branche_amont> manuellement.\n"
 
-#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566
+#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621
 #, c-format
 msgid "Unknown commit %s"
-msgstr ""
+msgstr "Commit inconnu %s"
 
-#: builtin/ls-files.c:402
+#: builtin/ls-files.c:408
 msgid "git ls-files [options] [<file>...]"
-msgstr ""
+msgstr "git ls-files [options] [<fichier>...]"
 
-#: builtin/ls-files.c:459
+#: builtin/ls-files.c:465
 msgid "identify the file status with tags"
-msgstr ""
+msgstr "identifier le statut de fichier avec les Ã©tiquettes"
 
-#: builtin/ls-files.c:461
+#: builtin/ls-files.c:467
 msgid "use lowercase letters for 'assume unchanged' files"
-msgstr ""
+msgstr "utiliser des minuscules pour les fichier 'assumés inchangés'"
 
-#: builtin/ls-files.c:463
+#: builtin/ls-files.c:469
 msgid "show cached files in the output (default)"
-msgstr ""
+msgstr "afficher les fichiers mis en cache dans la sortie (défaut)"
 
-#: builtin/ls-files.c:465
+#: builtin/ls-files.c:471
 msgid "show deleted files in the output"
-msgstr ""
+msgstr "afficher les fichiers supprimés dans la sortie"
 
-#: builtin/ls-files.c:467
+#: builtin/ls-files.c:473
 msgid "show modified files in the output"
-msgstr ""
+msgstr "afficher les fichiers modifiés dans la sortie"
 
-#: builtin/ls-files.c:469
+#: builtin/ls-files.c:475
 msgid "show other files in the output"
-msgstr ""
+msgstr "afficher les autres fichiers dans la sortie"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:477
 msgid "show ignored files in the output"
-msgstr ""
+msgstr "afficher les fichiers ignorés dans la sortie"
 
-#: builtin/ls-files.c:474
+#: builtin/ls-files.c:480
 msgid "show staged contents' object name in the output"
-msgstr ""
+msgstr "afficher les nom des objets indexés dans la sortie"
 
-#: builtin/ls-files.c:476
+#: builtin/ls-files.c:482
 msgid "show files on the filesystem that need to be removed"
 msgstr ""
+"afficher les fichiers du système de fichiers qui ont besoin d'être supprimés"
 
-#: builtin/ls-files.c:478
+#: builtin/ls-files.c:484
 msgid "show 'other' directories' name only"
-msgstr ""
+msgstr "afficher seulement les noms des répertoires 'other'"
 
-#: builtin/ls-files.c:481
+#: builtin/ls-files.c:487
 msgid "don't show empty directories"
-msgstr ""
+msgstr "ne pas afficher les répertoires vides"
 
-#: builtin/ls-files.c:484
+#: builtin/ls-files.c:490
 msgid "show unmerged files in the output"
-msgstr ""
+msgstr "afficher les fichiers non fusionnés dans la sortie"
 
-#: builtin/ls-files.c:486
+#: builtin/ls-files.c:492
 msgid "show resolve-undo information"
-msgstr ""
+msgstr "afficher l'information resolv-undo"
 
-#: builtin/ls-files.c:488
+#: builtin/ls-files.c:494
 msgid "skip files matching pattern"
-msgstr ""
+msgstr "sauter les fichiers correspondant au motif"
 
-#: builtin/ls-files.c:491
+#: builtin/ls-files.c:497
 msgid "exclude patterns are read from <file>"
-msgstr ""
+msgstr "les motifs d'exclusion sont lus depuis <fichier>"
 
-#: builtin/ls-files.c:494
+#: builtin/ls-files.c:500
 msgid "read additional per-directory exclude patterns in <file>"
-msgstr ""
+msgstr "lire des motifs d'exclusion additionnels par répertoire dans <fichier>"
 
-#: builtin/ls-files.c:496
+#: builtin/ls-files.c:502
 msgid "add the standard git exclusions"
-msgstr ""
+msgstr "ajouter les exclusions git standard"
 
-#: builtin/ls-files.c:499
+#: builtin/ls-files.c:505
 msgid "make the output relative to the project top directory"
-msgstr ""
+msgstr "afficher en relatif par rapport au répertoire racine du projet"
 
-#: builtin/ls-files.c:502
+#: builtin/ls-files.c:508
 msgid "if any <file> is not in the index, treat this as an error"
-msgstr ""
+msgstr "si un <fichier> n'est pas dans l'index, traiter cela comme une erreur"
 
-#: builtin/ls-files.c:503
+#: builtin/ls-files.c:509
 msgid "tree-ish"
-msgstr ""
+msgstr "arbre ou apparenté"
 
-#: builtin/ls-files.c:504
+#: builtin/ls-files.c:510
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
+"considérer que les chemins supprimés depuis <arbre ou apparenté> sont "
+"toujours présents"
 
-#: builtin/ls-files.c:506
+#: builtin/ls-files.c:512
 msgid "show debugging data"
-msgstr ""
+msgstr "afficher les données de débogage"
 
 #: builtin/ls-tree.c:27
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
-msgstr ""
+msgstr "git ls-tree [<options>] <arbre ou apparenté> [<chemin>...]"
 
 #: builtin/ls-tree.c:125
 msgid "only show trees"
-msgstr ""
+msgstr "afficher seulement les arbres"
 
 #: builtin/ls-tree.c:127
 msgid "recurse into subtrees"
-msgstr ""
+msgstr "parcourir les sous-arbres"
 
 #: builtin/ls-tree.c:129
 msgid "show trees when recursing"
-msgstr ""
+msgstr "afficher les arbres en les parcourant"
 
 #: builtin/ls-tree.c:132
 msgid "terminate entries with NUL byte"
-msgstr ""
+msgstr "terminer les Ã©léments avec un octet NUL"
 
 #: builtin/ls-tree.c:133
 msgid "include object size"
-msgstr ""
+msgstr "inclure la taille d'objet"
 
 #: builtin/ls-tree.c:135 builtin/ls-tree.c:137
 msgid "list only filenames"
-msgstr ""
+msgstr "afficher seulement les noms de fichiers"
 
 #: builtin/ls-tree.c:140
 msgid "use full path names"
-msgstr ""
+msgstr "utiliser les noms de chemins complets"
 
 #: builtin/ls-tree.c:142
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
+"afficher l'arbre entier ; pas seulement le répertoire courant (implique --"
+"full-name)"
 
 #: builtin/merge.c:43
 msgid "git merge [options] [<commit>...]"
-msgstr ""
+msgstr "git merge [options] [<commit>...]"
 
 #: builtin/merge.c:44
 msgid "git merge [options] <msg> HEAD <commit>"
-msgstr ""
+msgstr "git merge [options] <message> HEAD <commit>"
 
 #: builtin/merge.c:45
 msgid "git merge --abort"
-msgstr ""
+msgstr "git merge --abort"
 
-#: builtin/merge.c:90
+#: builtin/merge.c:98
 msgid "switch `m' requires a value"
-msgstr ""
+msgstr "le commutateur `m' a besoin d'une valeur"
 
-#: builtin/merge.c:127
+#: builtin/merge.c:135
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
-msgstr ""
+msgstr "Impossible de trouver la stratégie de fusion '%s'.\n"
 
-#: builtin/merge.c:128
+#: builtin/merge.c:136
 #, c-format
 msgid "Available strategies are:"
-msgstr ""
+msgstr "Les stratégies disponibles sont :"
 
-#: builtin/merge.c:133
+#: builtin/merge.c:141
 #, c-format
 msgid "Available custom strategies are:"
-msgstr ""
+msgstr "Les stratégies personnalisées sont :"
 
-#: builtin/merge.c:183
+#: builtin/merge.c:198
 msgid "do not show a diffstat at the end of the merge"
-msgstr ""
+msgstr "ne pas afficher un diffstat Ã  la fin de la fusion"
 
-#: builtin/merge.c:186
+#: builtin/merge.c:201
 msgid "show a diffstat at the end of the merge"
-msgstr ""
+msgstr "afficher un diffstat Ã  la fin de la fusion"
 
-#: builtin/merge.c:187
+#: builtin/merge.c:202
 msgid "(synonym to --stat)"
-msgstr ""
+msgstr "(synonyme de --stat)"
 
-#: builtin/merge.c:189
+#: builtin/merge.c:204
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
+"ajouter (au plus <n>) Ã©léments du journal court au message de validation de "
+"la fusion"
 
-#: builtin/merge.c:192
+#: builtin/merge.c:207
 msgid "create a single commit instead of doing a merge"
-msgstr ""
+msgstr "créer une validation unique au lieu de faire une fusion"
 
-#: builtin/merge.c:194
+#: builtin/merge.c:209
 msgid "perform a commit if the merge succeeds (default)"
-msgstr ""
+msgstr "effectuer une validation si la fusion réussit (défaut)"
 
-#: builtin/merge.c:196
+#: builtin/merge.c:211
 msgid "edit message before committing"
-msgstr ""
+msgstr "éditer le message avant la validation"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:212
 msgid "allow fast-forward (default)"
-msgstr ""
+msgstr "autoriser l'avance rapide (défaut)"
 
-#: builtin/merge.c:200
+#: builtin/merge.c:214
 msgid "abort if fast-forward is not possible"
-msgstr ""
+msgstr "abandonner si l'avance rapide n'est pas possible"
 
-#: builtin/merge.c:203
+#: builtin/merge.c:218
 msgid "Verify that the named commit has a valid GPG signature"
-msgstr ""
+msgstr "Vérifier que la validation a une signature GPG valide"
 
-#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112
+#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114
 msgid "strategy"
-msgstr ""
+msgstr "stratégie"
 
-#: builtin/merge.c:205
+#: builtin/merge.c:220
 msgid "merge strategy to use"
-msgstr ""
+msgstr "stratégie de fusion Ã  utiliser"
 
-#: builtin/merge.c:206
+#: builtin/merge.c:221
 msgid "option=value"
-msgstr ""
+msgstr "option=valeur"
 
-#: builtin/merge.c:207
+#: builtin/merge.c:222
 msgid "option for selected merge strategy"
-msgstr ""
+msgstr "option pour la stratégie de fusion sélectionnée"
 
-#: builtin/merge.c:209
+#: builtin/merge.c:224
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr ""
+"message de validation de la fusion (pour une fusion sans avance rapide)"
 
-#: builtin/merge.c:213
+#: builtin/merge.c:228
 msgid "abort the current in-progress merge"
-msgstr ""
+msgstr "abandonner la fusion en cours"
 
-#: builtin/merge.c:242
+#: builtin/merge.c:257
 msgid "could not run stash."
-msgstr ""
+msgstr "impossible de lancer le remisage."
 
-#: builtin/merge.c:247
+#: builtin/merge.c:262
 msgid "stash failed"
-msgstr ""
+msgstr "échec du remisage"
 
-#: builtin/merge.c:252
+#: builtin/merge.c:267
 #, c-format
 msgid "not a valid object: %s"
-msgstr ""
+msgstr "pas un objet valide : %s"
 
-#: builtin/merge.c:271 builtin/merge.c:288
+#: builtin/merge.c:286 builtin/merge.c:303
 msgid "read-tree failed"
-msgstr ""
+msgstr "read-tree a Ã©choué"
 
-#: builtin/merge.c:318
+#: builtin/merge.c:333
 msgid " (nothing to squash)"
 msgstr " (rien Ã  compresser)"
 
-#: builtin/merge.c:331
+#: builtin/merge.c:346
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
-msgstr ""
+msgstr "Validation compressée -- HEAD non mise Ã  jour\n"
 
-#: builtin/merge.c:363
+#: builtin/merge.c:378
 msgid "Writing SQUASH_MSG"
-msgstr ""
+msgstr "Écriture de SQUASH_MSG"
 
-#: builtin/merge.c:365
+#: builtin/merge.c:380
 msgid "Finishing SQUASH_MSG"
-msgstr ""
+msgstr "Finition de SQUASH_MSG"
 
-#: builtin/merge.c:388
+#: builtin/merge.c:403
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
-msgstr ""
+msgstr "Pas de message de fusion -- pas de mise Ã  jour de HEAD\n"
 
-#: builtin/merge.c:438
+#: builtin/merge.c:453
 #, c-format
 msgid "'%s' does not point to a commit"
-msgstr ""
+msgstr "'%s' ne pointe pas sur un commit"
 
-#: builtin/merge.c:550
+#: builtin/merge.c:565
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
-msgstr ""
+msgstr "Mauvaise chaîne branch.%s.mergeoptions : %s"
 
-#: builtin/merge.c:643
+#: builtin/merge.c:657
 msgid "git write-tree failed to write a tree"
-msgstr ""
+msgstr "git write-tree a Ã©choué Ã  Ã©crire un arbre"
 
-#: builtin/merge.c:671
+#: builtin/merge.c:685
 msgid "Not handling anything other than two heads merge."
-msgstr ""
+msgstr "Impossible de gérer autre chose que la fusion de deux têtes."
 
-#: builtin/merge.c:685
+#: builtin/merge.c:699
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
-msgstr ""
+msgstr "Options inconnue pour merge-recursive : -X%s"
 
-#: builtin/merge.c:699
+#: builtin/merge.c:713
 #, c-format
 msgid "unable to write %s"
-msgstr ""
+msgstr "impossible d'écrire %s"
 
-#: builtin/merge.c:788
+#: builtin/merge.c:802
 #, c-format
 msgid "Could not read from '%s'"
-msgstr ""
+msgstr "Impossible de lire depuis '%s'"
 
-#: builtin/merge.c:797
+#: builtin/merge.c:811
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
+"Pas de validation de la fusion ; utilisez 'git commit' pour terminer la "
+"fusion.\n"
 
-#: builtin/merge.c:803
+#: builtin/merge.c:817
 #, c-format
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
@@ -6256,310 +6744,324 @@ msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr ""
+"Veuillez entrer un message de validation pour expliquer en quoi cette fusion "
+"est\n"
+"nécessaire, surtout si cela fusionne une branche amont mise Ã  jour dans une "
+"branche de sujet.\n"
+"\n"
+"Les lignes commençant par '%c' seront ignorées, et un message vide\n"
+"abandonne la validation.\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:841
 msgid "Empty commit message."
-msgstr ""
+msgstr "Message de validation vide."
 
-#: builtin/merge.c:839
+#: builtin/merge.c:853
 #, c-format
 msgid "Wonderful.\n"
-msgstr ""
+msgstr "Merveilleux.\n"
 
-#: builtin/merge.c:904
+#: builtin/merge.c:918
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
+"La fusion automatique a Ã©choué ; réglez les conflits et validez le "
+"résultat.\n"
 
-#: builtin/merge.c:920
+#: builtin/merge.c:934
 #, c-format
 msgid "'%s' is not a commit"
-msgstr ""
+msgstr "'%s' n'est pas une validation"
 
-#: builtin/merge.c:961
+#: builtin/merge.c:975
 msgid "No current branch."
-msgstr ""
+msgstr "Pas de branche courante."
 
-#: builtin/merge.c:963
+#: builtin/merge.c:977
 msgid "No remote for the current branch."
-msgstr ""
+msgstr "Pas de branche distante pour la branche courante."
 
-#: builtin/merge.c:965
+#: builtin/merge.c:979
 msgid "No default upstream defined for the current branch."
-msgstr ""
+msgstr "Pas de branche amont par défaut définie pour la branche courante."
 
-#: builtin/merge.c:970
+#: builtin/merge.c:984
 #, c-format
-msgid "No remote tracking branch for %s from %s"
-msgstr ""
-
-#: builtin/merge.c:1057 builtin/merge.c:1214
-#, c-format
-msgid "%s - not something we can merge"
-msgstr ""
+msgid "No remote-tracking branch for %s from %s"
+msgstr "Pas de branche de suivi pour %s depuis %s"
 
-#: builtin/merge.c:1125
+#: builtin/merge.c:1140
 msgid "There is no merge to abort (MERGE_HEAD missing)."
-msgstr ""
+msgstr "Il n'y a pas de fusion Ã  abandonner (MERGE_HEAD manquant)."
 
-#: builtin/merge.c:1141 git-pull.sh:31
+#: builtin/merge.c:1156 git-pull.sh:31
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you can merge."
 msgstr ""
+"Vous n'avez pas terminé votre fusion (MERGE_HEAD existe).\n"
+"Veuillez valider vos changements avant de pouvoir fusionner."
 
-#: builtin/merge.c:1144 git-pull.sh:34
+#: builtin/merge.c:1159 git-pull.sh:34
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
-msgstr ""
+msgstr "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe)."
 
-#: builtin/merge.c:1148
+#: builtin/merge.c:1163
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you can merge."
 msgstr ""
+"Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe).\n"
+"Veuillez valider vos changements avant de pouvoir fusionner."
 
-#: builtin/merge.c:1151
+#: builtin/merge.c:1166
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
-msgstr ""
+msgstr "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe)."
 
-#: builtin/merge.c:1160
+#: builtin/merge.c:1175
 msgid "You cannot combine --squash with --no-ff."
-msgstr ""
-
-#: builtin/merge.c:1165
-msgid "You cannot combine --no-ff with --ff-only."
-msgstr ""
+msgstr "Vous ne pouvez pas combiner --squash avec --no-ff."
 
-#: builtin/merge.c:1172
+#: builtin/merge.c:1184
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
+"Pas de validation spécifiée et merge.defaultToUpstream n'est pas défini."
 
-#: builtin/merge.c:1204
+#: builtin/merge.c:1216
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
+"Possible de fusionner exactement une seule validation dans une tête vide"
 
-#: builtin/merge.c:1207
+#: builtin/merge.c:1219
 msgid "Squash commit into empty head not supported yet"
-msgstr ""
+msgstr "La validation compressée vers une tête vide n'est pas encore supportée"
 
-#: builtin/merge.c:1209
+#: builtin/merge.c:1221
 msgid "Non-fast-forward commit does not make sense into an empty head"
-msgstr ""
+msgstr "Une validation sans avance rapide n'a pas de sens dans une tête vide"
+
+#: builtin/merge.c:1226
+#, c-format
+msgid "%s - not something we can merge"
+msgstr "%s - pas possible de fusionner ceci"
 
-#: builtin/merge.c:1265
+#: builtin/merge.c:1277
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
-msgstr ""
+msgstr "La validation %s a une signature GPG non fiable, prétendument par %s."
 
-#: builtin/merge.c:1268
+#: builtin/merge.c:1280
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
-msgstr ""
+msgstr "La validation %s a une mauvaise signature GPG prétendument par %s."
 
 #. 'N'
-#: builtin/merge.c:1271
+#: builtin/merge.c:1283
 #, c-format
 msgid "Commit %s does not have a GPG signature."
-msgstr ""
+msgstr "La validation %s n'a pas de signature GPG."
 
-#: builtin/merge.c:1274
+#: builtin/merge.c:1286
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
-msgstr ""
+msgstr "La validation %s a une signature GPG correcte par %s\n"
 
-#: builtin/merge.c:1358
+#: builtin/merge.c:1370
 #, c-format
 msgid "Updating %s..%s\n"
-msgstr ""
+msgstr "Mise Ã  jour %s..%s\n"
 
-#: builtin/merge.c:1397
+#: builtin/merge.c:1409
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
-msgstr ""
+msgstr "Essai de fusion vraiment triviale dans l'index...\n"
 
-#: builtin/merge.c:1404
+#: builtin/merge.c:1416
 #, c-format
 msgid "Nope.\n"
-msgstr ""
+msgstr "Non.\n"
 
-#: builtin/merge.c:1436
+#: builtin/merge.c:1448
 msgid "Not possible to fast-forward, aborting."
-msgstr ""
+msgstr "Pas possible d'avancer rapidement, abandon."
 
-#: builtin/merge.c:1459 builtin/merge.c:1538
+#: builtin/merge.c:1471 builtin/merge.c:1550
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
-msgstr ""
+msgstr "Retour de l'arbre Ã  l'original...\n"
 
-#: builtin/merge.c:1463
+#: builtin/merge.c:1475
 #, c-format
 msgid "Trying merge strategy %s...\n"
-msgstr ""
+msgstr "Essai de la stratégie de fusion %s...\n"
 
-#: builtin/merge.c:1529
+#: builtin/merge.c:1541
 #, c-format
 msgid "No merge strategy handled the merge.\n"
-msgstr ""
+msgstr "Aucune stratégie de fusion n'a pris en charge la fusion.\n"
 
-#: builtin/merge.c:1531
+#: builtin/merge.c:1543
 #, c-format
 msgid "Merge with strategy %s failed.\n"
-msgstr ""
+msgstr "La fusion avec la stratégie %s a Ã©choué.\n"
 
-#: builtin/merge.c:1540
+#: builtin/merge.c:1552
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
-msgstr ""
+msgstr "Utilisation de %s pour préparer la résolution Ã  la main.\n"
 
-#: builtin/merge.c:1552
+#: builtin/merge.c:1564
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
+"La fusion automatique a réussi ; stoppée avant la validation comme demandé\n"
 
 #: builtin/merge-base.c:26
 msgid "git merge-base [-a|--all] <commit> <commit>..."
-msgstr ""
+msgstr "git merge-base [-a|--all] <validation> <validation>..."
 
 #: builtin/merge-base.c:27
 msgid "git merge-base [-a|--all] --octopus <commit>..."
-msgstr ""
+msgstr "git merge-base [-a|--all] --octopus <validation>..."
 
 #: builtin/merge-base.c:28
 msgid "git merge-base --independent <commit>..."
-msgstr ""
+msgstr "git merge-base --independent <validation>..."
 
 #: builtin/merge-base.c:29
 msgid "git merge-base --is-ancestor <commit> <commit>"
-msgstr ""
+msgstr "git merge-base --is-ancestor <validation> <validation>"
 
 #: builtin/merge-base.c:98
 msgid "output all common ancestors"
-msgstr ""
+msgstr "afficher tous les ancêtres communs"
 
 #: builtin/merge-base.c:99
 msgid "find ancestors for a single n-way merge"
-msgstr ""
+msgstr "trouver les ancêtres pour une fusion simple Ã  n points"
 
 #: builtin/merge-base.c:100
 msgid "list revs not reachable from others"
-msgstr ""
+msgstr "afficher les révisions inaccessibles depuis les autres"
 
 #: builtin/merge-base.c:102
 msgid "is the first one ancestor of the other?"
-msgstr ""
+msgstr "est le premier ancêtre de l'autre ?"
 
 #: builtin/merge-file.c:8
 msgid ""
 "git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file "
 "file2"
 msgstr ""
+"git merge-file [options] [-L nom1 [-L orig [-L nom2]]] fichier1 orig_file "
+"fichier2"
 
 #: builtin/merge-file.c:33
 msgid "send results to standard output"
-msgstr ""
+msgstr "envoyer les résultats sur la sortie standard"
 
 #: builtin/merge-file.c:34
 msgid "use a diff3 based merge"
-msgstr ""
+msgstr "utiliser une fusion basée sur diff3"
 
 #: builtin/merge-file.c:35
 msgid "for conflicts, use our version"
-msgstr ""
+msgstr "pour les conflits, utiliser notre version (our)"
 
 #: builtin/merge-file.c:37
 msgid "for conflicts, use their version"
-msgstr ""
+msgstr "pour les conflits, utiliser leur version (their)"
 
 #: builtin/merge-file.c:39
 msgid "for conflicts, use a union version"
-msgstr ""
+msgstr "pour les conflits, utiliser l'ensemble des versions"
 
 #: builtin/merge-file.c:42
 msgid "for conflicts, use this marker size"
-msgstr ""
+msgstr "pour les conflits, utiliser cette taille de marqueur"
 
 #: builtin/merge-file.c:43
 msgid "do not warn about conflicts"
-msgstr ""
+msgstr "ne pas avertir Ã  propos des conflits"
 
 #: builtin/merge-file.c:45
 msgid "set labels for file1/orig_file/file2"
-msgstr ""
+msgstr "définir les labels pour fichier1/orig_file/fichier2"
 
 #: builtin/mktree.c:67
 msgid "git mktree [-z] [--missing] [--batch]"
-msgstr ""
+msgstr "git mktree [-z] [--missing] [--batch]"
 
 #: builtin/mktree.c:153
 msgid "input is NUL terminated"
-msgstr ""
+msgstr "l'entrée se termine par NUL"
 
 #: builtin/mktree.c:154 builtin/write-tree.c:24
 msgid "allow missing objects"
-msgstr ""
+msgstr "autoriser les objets manquants"
 
 #: builtin/mktree.c:155
 msgid "allow creation of more than one tree"
-msgstr ""
+msgstr "autoriser la création de plus d'un arbre"
 
 #: builtin/mv.c:14
 msgid "git mv [options] <source>... <destination>"
-msgstr ""
+msgstr "git mv [options] <source>... <destination>"
 
 #: builtin/mv.c:64
 msgid "force move/rename even if target exists"
-msgstr ""
+msgstr "forcer le déplacement/renommage même si la cible existe"
 
 #: builtin/mv.c:65
 msgid "skip move/rename errors"
-msgstr ""
+msgstr "sauter les erreurs de déplacement/renommage"
 
 #: builtin/mv.c:108
 #, c-format
 msgid "Checking rename of '%s' to '%s'\n"
-msgstr ""
+msgstr "Vérification du renommage de '%s' en '%s'\n"
 
 #: builtin/mv.c:112
 msgid "bad source"
-msgstr ""
+msgstr "mauvaise source"
 
 #: builtin/mv.c:115
 msgid "can not move directory into itself"
-msgstr ""
+msgstr "impossible de déplacer un répertoire dans lui-même"
 
 #: builtin/mv.c:118
 msgid "cannot move directory over file"
-msgstr ""
+msgstr "impossible de déplacer un répertoire sur un fichier"
 
 #: builtin/mv.c:128
 #, c-format
 msgid "Huh? %.*s is in index?"
-msgstr ""
+msgstr "Hein ? %.*s est dans l'index ?"
 
 #: builtin/mv.c:140
 msgid "source directory is empty"
-msgstr ""
+msgstr "le répertoire source est vide"
 
 #: builtin/mv.c:171
 msgid "not under version control"
-msgstr ""
+msgstr "pas sous le contrôle de version"
 
 #: builtin/mv.c:173
 msgid "destination exists"
-msgstr ""
+msgstr "la destination existe"
 
 #: builtin/mv.c:181
 #, c-format
 msgid "overwriting '%s'"
-msgstr ""
+msgstr "écrasement de '%s'"
 
 #: builtin/mv.c:184
 msgid "Cannot overwrite"
-msgstr ""
+msgstr "Impossible d'écraser"
 
 #: builtin/mv.c:187
 msgid "multiple sources for the same target"
-msgstr ""
+msgstr "multiples sources pour la même destination"
 
 #: builtin/mv.c:202
 #, c-format
@@ -6569,582 +7071,594 @@ msgstr "%s, source=%s, destination=%s"
 #: builtin/mv.c:212
 #, c-format
 msgid "Renaming %s to %s\n"
-msgstr ""
+msgstr "Renommage de %s en %s\n"
 
 #: builtin/mv.c:215 builtin/remote.c:731
 #, c-format
 msgid "renaming '%s' failed"
-msgstr ""
+msgstr "le renommage de '%s' a Ã©choué"
 
-#: builtin/name-rev.c:175
+#: builtin/name-rev.c:259
 msgid "git name-rev [options] <commit>..."
-msgstr ""
+msgstr "git name-rev [options] <validation>..."
 
-#: builtin/name-rev.c:176
+#: builtin/name-rev.c:260
 msgid "git name-rev [options] --all"
-msgstr ""
+msgstr "git name-rev [options] --all"
 
-#: builtin/name-rev.c:177
+#: builtin/name-rev.c:261
 msgid "git name-rev [options] --stdin"
-msgstr ""
+msgstr "git name-rev [options] --stdin"
 
-#: builtin/name-rev.c:229
+#: builtin/name-rev.c:313
 msgid "print only names (no SHA-1)"
-msgstr ""
+msgstr "afficher seulement les noms (pas de SHA-1)"
 
-#: builtin/name-rev.c:230
+#: builtin/name-rev.c:314
 msgid "only use tags to name the commits"
-msgstr ""
+msgstr "utiliser seulement les Ã©tiquettes pour nommer les validations"
 
-#: builtin/name-rev.c:232
+#: builtin/name-rev.c:316
 msgid "only use refs matching <pattern>"
-msgstr ""
+msgstr "utiliser seulement les références correspondant Ã  <motif>"
 
-#: builtin/name-rev.c:234
+#: builtin/name-rev.c:318
 msgid "list all commits reachable from all refs"
 msgstr ""
+"afficher toutes les validations accessibles depuis toutes les références"
 
-#: builtin/name-rev.c:235
+#: builtin/name-rev.c:319
 msgid "read from stdin"
-msgstr ""
+msgstr "lire depuis l'entrée standard"
 
-#: builtin/name-rev.c:236
+#: builtin/name-rev.c:320
 msgid "allow to print `undefined` names"
-msgstr ""
+msgstr "autoriser l'affichage des noms `non définis`"
 
-#: builtin/notes.c:26
+#: builtin/name-rev.c:326
+msgid "dereference tags in the input (internal use)"
+msgstr "déréférencer les Ã©tiquettes en entrée (usage interne)"
+
+#: builtin/notes.c:24
 msgid "git notes [--ref <notes_ref>] [list [<object>]]"
-msgstr ""
+msgstr "git notes [--ref <références_notes>] [list [<object>]]"
 
-#: builtin/notes.c:27
+#: builtin/notes.c:25
 msgid ""
 "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) "
 "<object>] [<object>]"
 msgstr ""
+"git notes [--ref <références_notes>] add [-f] [-m <message> | -F <fichier> | "
+"(-c | -C) <objet>] [<objet>]"
 
-#: builtin/notes.c:28
+#: builtin/notes.c:26
 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>"
 msgstr ""
+"git notes [--ref <références_notes>] copy [-f] <depuis-objet> <vers-objet>"
 
-#: builtin/notes.c:29
+#: builtin/notes.c:27
 msgid ""
 "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) "
 "<object>] [<object>]"
 msgstr ""
+"git notes [--ref <références_notes>] append [-m <message> | -F <fichier> | (-"
+"c | -C) <objet>] [<objet>]"
 
-#: builtin/notes.c:30
+#: builtin/notes.c:28
 msgid "git notes [--ref <notes_ref>] edit [<object>]"
-msgstr ""
+msgstr "git notes [--ref <références_notes>] edit [<objet>]"
 
-#: builtin/notes.c:31
+#: builtin/notes.c:29
 msgid "git notes [--ref <notes_ref>] show [<object>]"
-msgstr ""
+msgstr "git notes [--ref <références_notes>] show [<objet>]"
 
-#: builtin/notes.c:32
+#: builtin/notes.c:30
 msgid ""
 "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>"
 msgstr ""
+"git notes [--ref <références_notes>] merge [-v | -q] [-s <stratégie> ] "
+"<références_notes>"
 
-#: builtin/notes.c:33
+#: builtin/notes.c:31
 msgid "git notes merge --commit [-v | -q]"
-msgstr ""
+msgstr "git notes merge --commit [-v | -q]"
 
-#: builtin/notes.c:34
+#: builtin/notes.c:32
 msgid "git notes merge --abort [-v | -q]"
-msgstr ""
+msgstr "git notes merge --abort [-v | -q]"
 
-#: builtin/notes.c:35
+#: builtin/notes.c:33
 msgid "git notes [--ref <notes_ref>] remove [<object>...]"
-msgstr ""
+msgstr "git notes [--ref <références_notes>] remove [<objet>...]"
 
-#: builtin/notes.c:36
+#: builtin/notes.c:34
 msgid "git notes [--ref <notes_ref>] prune [-n | -v]"
-msgstr ""
+msgstr "git notes [--ref <références_notes>] prune [-n | -v]"
 
-#: builtin/notes.c:37
+#: builtin/notes.c:35
 msgid "git notes [--ref <notes_ref>] get-ref"
-msgstr ""
+msgstr "git notes [--ref <références_notes>] get-ref"
 
-#: builtin/notes.c:42
+#: builtin/notes.c:40
 msgid "git notes [list [<object>]]"
-msgstr ""
+msgstr "git notes [list [<objet>]]"
 
-#: builtin/notes.c:47
+#: builtin/notes.c:45
 msgid "git notes add [<options>] [<object>]"
-msgstr ""
+msgstr "git notes add [<options>] [<objet>]"
 
-#: builtin/notes.c:52
+#: builtin/notes.c:50
 msgid "git notes copy [<options>] <from-object> <to-object>"
-msgstr ""
+msgstr "git notes copy [<options>] <depuis-objet> <vers-objet>"
 
-#: builtin/notes.c:53
+#: builtin/notes.c:51
 msgid "git notes copy --stdin [<from-object> <to-object>]..."
-msgstr ""
+msgstr "git notes copy --stdin [<depuis-objet> <vers-objet>]..."
 
-#: builtin/notes.c:58
+#: builtin/notes.c:56
 msgid "git notes append [<options>] [<object>]"
-msgstr ""
+msgstr "git notes append [<options>] [<objet>]"
 
-#: builtin/notes.c:63
+#: builtin/notes.c:61
 msgid "git notes edit [<object>]"
-msgstr ""
+msgstr "git notes edit [<objet>]"
 
-#: builtin/notes.c:68
+#: builtin/notes.c:66
 msgid "git notes show [<object>]"
-msgstr ""
+msgstr "git notes show [<objet>]"
 
-#: builtin/notes.c:73
+#: builtin/notes.c:71
 msgid "git notes merge [<options>] <notes_ref>"
-msgstr ""
+msgstr "git notes merge [<options>] <références_notes>"
 
-#: builtin/notes.c:74
+#: builtin/notes.c:72
 msgid "git notes merge --commit [<options>]"
-msgstr ""
+msgstr "git notes merge --commit [<options>]"
 
-#: builtin/notes.c:75
+#: builtin/notes.c:73
 msgid "git notes merge --abort [<options>]"
-msgstr ""
+msgstr "git notes merge --abort [<options>]"
 
-#: builtin/notes.c:80
+#: builtin/notes.c:78
 msgid "git notes remove [<object>]"
-msgstr ""
+msgstr "git notes remove [<objet>]"
 
-#: builtin/notes.c:85
+#: builtin/notes.c:83
 msgid "git notes prune [<options>]"
-msgstr ""
+msgstr "git notes prune [<options>]"
 
-#: builtin/notes.c:90
+#: builtin/notes.c:88
 msgid "git notes get-ref"
-msgstr ""
+msgstr "git notes get-ref"
 
-#: builtin/notes.c:139
+#: builtin/notes.c:137
 #, c-format
 msgid "unable to start 'show' for object '%s'"
-msgstr ""
+msgstr "impossible de démarrer 'show' pour l'objet '%s'"
 
-#: builtin/notes.c:143
+#: builtin/notes.c:141
 msgid "could not read 'show' output"
-msgstr ""
+msgstr "impossible de lire la sortie de 'show'"
 
-#: builtin/notes.c:151
+#: builtin/notes.c:149
 #, c-format
 msgid "failed to finish 'show' for object '%s'"
-msgstr ""
+msgstr "impossible de finir 'show' pour l'objet '%s'"
 
-#: builtin/notes.c:169 builtin/tag.c:341
+#: builtin/notes.c:167 builtin/tag.c:341
 #, c-format
 msgid "could not create file '%s'"
-msgstr ""
+msgstr "impossible de créer le fichier '%s'"
 
-#: builtin/notes.c:188
+#: builtin/notes.c:186
 msgid "Please supply the note contents using either -m or -F option"
-msgstr ""
+msgstr "Veuillez fournir le contenu de la note en utilisant l'option -m ou -F"
 
-#: builtin/notes.c:209 builtin/notes.c:972
+#: builtin/notes.c:207 builtin/notes.c:844
 #, c-format
 msgid "Removing note for object %s\n"
-msgstr ""
+msgstr "Suppression de la note pour l'objet %s\n"
 
-#: builtin/notes.c:214
+#: builtin/notes.c:212
 msgid "unable to write note object"
-msgstr ""
+msgstr "impossible d'écrire l'objet note"
 
-#: builtin/notes.c:216
+#: builtin/notes.c:214
 #, c-format
 msgid "The note contents has been left in %s"
-msgstr ""
+msgstr "Le contenu de la note a Ã©té laissé dans %s"
 
-#: builtin/notes.c:250 builtin/tag.c:540
+#: builtin/notes.c:248 builtin/tag.c:540
 #, c-format
 msgid "cannot read '%s'"
-msgstr ""
+msgstr "impossible de lire '%s'"
 
-#: builtin/notes.c:252 builtin/tag.c:543
+#: builtin/notes.c:250 builtin/tag.c:543
 #, c-format
 msgid "could not open or read '%s'"
-msgstr ""
+msgstr "impossible d'ouvrir ou lire '%s'"
 
-#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446
-#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643
-#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765
-#: builtin/notes.c:967 builtin/tag.c:556
+#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318
+#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515
+#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637
+#: builtin/notes.c:839 builtin/tag.c:556
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
-msgstr ""
+msgstr "Impossible de résoudre '%s' comme une référence valide."
 
-#: builtin/notes.c:274
+#: builtin/notes.c:272
 #, c-format
 msgid "Failed to read object '%s'."
-msgstr ""
-
-#: builtin/notes.c:298
-msgid "Cannot commit uninitialized/unreferenced notes tree"
-msgstr ""
-
-#: builtin/notes.c:339
-#, c-format
-msgid "Bad notes.rewriteMode value: '%s'"
-msgstr ""
-
-#: builtin/notes.c:349
-#, c-format
-msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
-msgstr ""
-
-#. TRANSLATORS: The first %s is the name of the
-#. environment variable, the second %s is its value
-#: builtin/notes.c:376
-#, c-format
-msgid "Bad %s value: '%s'"
-msgstr ""
+msgstr "Impossible de lire l'objet '%s'."
 
-#: builtin/notes.c:440
+#: builtin/notes.c:312
 #, c-format
 msgid "Malformed input line: '%s'."
-msgstr ""
+msgstr "Ligne en entrée malformée : '%s'."
 
-#: builtin/notes.c:455
+#: builtin/notes.c:327
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
-msgstr ""
+msgstr "Impossible de copier les notes de '%s' vers '%s'"
 
-#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626
-#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758
-#: builtin/notes.c:1032
+#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498
+#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630
+#: builtin/notes.c:904
 msgid "too many parameters"
-msgstr ""
+msgstr "trop de paramètres"
 
-#: builtin/notes.c:512 builtin/notes.c:771
+#: builtin/notes.c:384 builtin/notes.c:643
 #, c-format
 msgid "No note found for object %s."
-msgstr ""
+msgstr "Pas de note trouvée pour l'objet %s."
 
-#: builtin/notes.c:534 builtin/notes.c:691
+#: builtin/notes.c:406 builtin/notes.c:563
 msgid "note contents as a string"
-msgstr ""
+msgstr "contenu de la note sous forme de chaîne"
 
-#: builtin/notes.c:537 builtin/notes.c:694
+#: builtin/notes.c:409 builtin/notes.c:566
 msgid "note contents in a file"
-msgstr ""
+msgstr "contenu de la note dans un fichier"
 
-#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696
-#: builtin/notes.c:699 builtin/tag.c:474
+#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568
+#: builtin/notes.c:571 builtin/tag.c:474
 msgid "object"
-msgstr ""
+msgstr "objet"
 
-#: builtin/notes.c:540 builtin/notes.c:697
+#: builtin/notes.c:412 builtin/notes.c:569
 msgid "reuse and edit specified note object"
-msgstr ""
+msgstr "réutiliser et Ã©diter l'objet de note spécifié"
 
-#: builtin/notes.c:543 builtin/notes.c:700
+#: builtin/notes.c:415 builtin/notes.c:572
 msgid "reuse specified note object"
-msgstr ""
+msgstr "réutiliser l'objet de note spécifié"
 
-#: builtin/notes.c:545 builtin/notes.c:613
+#: builtin/notes.c:417 builtin/notes.c:485
 msgid "replace existing notes"
-msgstr ""
+msgstr "remplacer les notes existantes"
 
-#: builtin/notes.c:579
+#: builtin/notes.c:451
 #, c-format
 msgid ""
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
+"Impossible d'ajouter des notes. Des notes ont Ã©té trouvées pour l'objet %s. "
+"Utilisez '-f' pour Ã©craser les notes existantes"
 
-#: builtin/notes.c:584 builtin/notes.c:661
+#: builtin/notes.c:456 builtin/notes.c:533
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
-msgstr ""
+msgstr "Écrasement des notes existantes pour l'objet %s\n"
 
-#: builtin/notes.c:614
+#: builtin/notes.c:486
 msgid "read objects from stdin"
-msgstr ""
+msgstr "lire les objets depuis l'entrée standard"
 
-#: builtin/notes.c:616
+#: builtin/notes.c:488
 msgid "load rewriting config for <command> (implies --stdin)"
 msgstr ""
+"charger la configuration de réécriture pour <commande> (implique --stdin)"
 
-#: builtin/notes.c:634
+#: builtin/notes.c:506
 msgid "too few parameters"
-msgstr ""
+msgstr "pas assez de paramètres"
 
-#: builtin/notes.c:655
+#: builtin/notes.c:527
 #, c-format
 msgid ""
 "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
+"Impossible de copier des notes. Des notes ont Ã©té trouvées pour l'objet %s. "
+"Utilisez '-f' pour Ã©craser les notes existantes"
 
-#: builtin/notes.c:667
+#: builtin/notes.c:539
 #, c-format
 msgid "Missing notes on source object %s. Cannot copy."
-msgstr ""
+msgstr "Notes manquantes sur l'objet source %s. Impossible de copier."
 
-#: builtin/notes.c:716
+#: builtin/notes.c:588
 #, c-format
 msgid ""
 "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
 "Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
 msgstr ""
+"Les options -m/-F/-c/-C sont obsolètes pour la sous-commande 'edit'.\n"
+"Veuillez utiliser 'git notes add -f -m/-F/-c/-C' Ã  la place.\n"
 
-#: builtin/notes.c:863
+#: builtin/notes.c:735
 msgid "General options"
-msgstr ""
+msgstr "Options générales"
 
-#: builtin/notes.c:865
+#: builtin/notes.c:737
 msgid "Merge options"
-msgstr ""
+msgstr "Options de fusion"
 
-#: builtin/notes.c:867
+#: builtin/notes.c:739
 msgid ""
 "resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
 "cat_sort_uniq)"
 msgstr ""
+"résoudre les conflits de notes en utilisant la stratégie donnée (manual/ours/"
+"theirs/union/cat_sort_uniq)"
 
-#: builtin/notes.c:869
+#: builtin/notes.c:741
 msgid "Committing unmerged notes"
-msgstr ""
+msgstr "Validation des notes non fusionnées"
 
-#: builtin/notes.c:871
+#: builtin/notes.c:743
 msgid "finalize notes merge by committing unmerged notes"
-msgstr ""
+msgstr "finaliser la fusion de notes en validant les notes non fusionnées"
 
-#: builtin/notes.c:873
+#: builtin/notes.c:745
 msgid "Aborting notes merge resolution"
-msgstr ""
+msgstr "Abandon de la résolution de fusion des notes"
 
-#: builtin/notes.c:875
+#: builtin/notes.c:747
 msgid "abort notes merge"
-msgstr ""
+msgstr "abandonner la fusion de notes"
 
-#: builtin/notes.c:970
+#: builtin/notes.c:842
 #, c-format
 msgid "Object %s has no note\n"
-msgstr ""
+msgstr "L'objet %s n'a pas de note\n"
 
-#: builtin/notes.c:982
+#: builtin/notes.c:854
 msgid "attempt to remove non-existent note is not an error"
 msgstr ""
+"la tentative de suppression d'une note non existante n'est pas une erreur"
 
-#: builtin/notes.c:985
+#: builtin/notes.c:857
 msgid "read object names from the standard input"
-msgstr ""
+msgstr "lire les noms d'objet depuis l'entrée standard"
 
-#: builtin/notes.c:1066
+#: builtin/notes.c:938
 msgid "notes_ref"
-msgstr ""
+msgstr "références_notes"
 
-#: builtin/notes.c:1067
+#: builtin/notes.c:939
 msgid "use notes from <notes_ref>"
-msgstr ""
+msgstr "utiliser les notes depuis <références_notes>"
 
-#: builtin/notes.c:1102 builtin/remote.c:1598
+#: builtin/notes.c:974 builtin/remote.c:1598
 #, c-format
 msgid "Unknown subcommand: %s"
-msgstr ""
+msgstr "Sous-commande inconnue : %s"
 
 #: builtin/pack-objects.c:23
 msgid "git pack-objects --stdout [options...] [< ref-list | < object-list]"
 msgstr ""
+"git pack-objects --stdout [options...] [< liste-références | < liste-objets]"
 
 #: builtin/pack-objects.c:24
 msgid "git pack-objects [options...] base-name [< ref-list | < object-list]"
 msgstr ""
+"git pack-objects [options...] base-name [< liste-références | < liste-objets]"
 
 #: builtin/pack-objects.c:183 builtin/pack-objects.c:186
 #, c-format
 msgid "deflate error (%d)"
-msgstr ""
+msgstr "erreur de compression (%d)"
 
 #: builtin/pack-objects.c:2397
 #, c-format
 msgid "unsupported index version %s"
-msgstr ""
+msgstr "version d'index non supportée %s"
 
 #: builtin/pack-objects.c:2401
 #, c-format
 msgid "bad index version '%s'"
-msgstr ""
+msgstr "mauvaise version d'index '%s'"
 
 #: builtin/pack-objects.c:2424
 #, c-format
 msgid "option %s does not accept negative form"
-msgstr ""
+msgstr "l'option %s n'accepte pas de valeur négative"
 
 #: builtin/pack-objects.c:2428
 #, c-format
 msgid "unable to parse value '%s' for option %s"
-msgstr ""
+msgstr "impossible d'analyser la valeur '%s' pour l'option %s"
 
 #: builtin/pack-objects.c:2447
 msgid "do not show progress meter"
-msgstr ""
+msgstr "ne pas afficher la barre de progression"
 
 #: builtin/pack-objects.c:2449
 msgid "show progress meter"
-msgstr ""
+msgstr "afficher la barre de progression"
 
 #: builtin/pack-objects.c:2451
 msgid "show progress meter during object writing phase"
-msgstr ""
+msgstr "afficher la barre de progression durant la phase d'écrite des objets"
 
 #: builtin/pack-objects.c:2454
 msgid "similar to --all-progress when progress meter is shown"
-msgstr ""
+msgstr "similaire Ã  --all-progress quand la barre de progression est affichée"
 
 #: builtin/pack-objects.c:2455
 msgid "version[,offset]"
-msgstr ""
+msgstr "version[,offset]"
 
 #: builtin/pack-objects.c:2456
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
+"écrire le fichier d'index du paquet dans le format d'index de version "
+"spécifié"
 
 #: builtin/pack-objects.c:2459
 msgid "maximum size of each output pack file"
-msgstr ""
+msgstr "taille maximum de chaque fichier paquet en sortie"
 
 #: builtin/pack-objects.c:2461
 msgid "ignore borrowed objects from alternate object store"
-msgstr ""
+msgstr "ignorer les objets empruntés Ã  un autre magasin d'objets"
 
 #: builtin/pack-objects.c:2463
 msgid "ignore packed objects"
-msgstr ""
+msgstr "ignorer les objets empaquetés"
 
 #: builtin/pack-objects.c:2465
 msgid "limit pack window by objects"
-msgstr ""
+msgstr "limiter la fenêtre d'empaquetage par objets"
 
 #: builtin/pack-objects.c:2467
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
+"limiter la fenêtre d'empaquetage par mémoire en plus de la limite d'objets"
 
 #: builtin/pack-objects.c:2469
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
+"longueur maximum de la chaîne de delta autorisée dans le paquet résultant"
 
 #: builtin/pack-objects.c:2471
 msgid "reuse existing deltas"
-msgstr ""
+msgstr "réutiliser les deltas existants"
 
 #: builtin/pack-objects.c:2473
 msgid "reuse existing objects"
-msgstr ""
+msgstr "réutiliser les objets existants"
 
 #: builtin/pack-objects.c:2475
 msgid "use OFS_DELTA objects"
-msgstr ""
+msgstr "utiliser les objets OFS_DELTA"
 
 #: builtin/pack-objects.c:2477
 msgid "use threads when searching for best delta matches"
 msgstr ""
+"utiliser des fils lors de la recherche pour une meilleurs correspondance des "
+"deltas"
 
 #: builtin/pack-objects.c:2479
 msgid "do not create an empty pack output"
-msgstr ""
+msgstr "ne pas créer un paquet vide"
 
 #: builtin/pack-objects.c:2481
 msgid "read revision arguments from standard input"
-msgstr ""
+msgstr "lire les paramètres de révision depuis l'entrée standard"
 
 #: builtin/pack-objects.c:2483
 msgid "limit the objects to those that are not yet packed"
-msgstr ""
+msgstr "limiter les objets Ã  ceux qui ne sont pas encore empaquetés"
 
 #: builtin/pack-objects.c:2486
 msgid "include objects reachable from any reference"
-msgstr ""
+msgstr "inclure les objets accessibles depuis toute référence"
 
 #: builtin/pack-objects.c:2489
 msgid "include objects referred by reflog entries"
-msgstr ""
+msgstr "inclure les objets référencés par les Ã©léments de reflog"
 
 #: builtin/pack-objects.c:2492
 msgid "output pack to stdout"
-msgstr ""
+msgstr "afficher l'empaquetage sur la sortie standard"
 
 #: builtin/pack-objects.c:2494
 msgid "include tag objects that refer to objects to be packed"
-msgstr ""
+msgstr "inclure les objets d'étiquettes qui réfèrent Ã  des objets Ã  empaqueter"
 
 #: builtin/pack-objects.c:2496
 msgid "keep unreachable objects"
-msgstr ""
+msgstr "garder les objets inaccessibles"
 
 #: builtin/pack-objects.c:2497 parse-options.h:141
 msgid "time"
-msgstr ""
+msgstr "heure"
 
 #: builtin/pack-objects.c:2498
 msgid "unpack unreachable objects newer than <time>"
-msgstr ""
+msgstr "dépaqueter les objets inaccessibles plus récents que <heure>"
 
 #: builtin/pack-objects.c:2501
 msgid "create thin packs"
-msgstr ""
+msgstr "créer des paquets légers"
 
 #: builtin/pack-objects.c:2503
 msgid "ignore packs that have companion .keep file"
-msgstr ""
+msgstr "ignorer les paquets qui ont un fichier .keep"
 
 #: builtin/pack-objects.c:2505
 msgid "pack compression level"
-msgstr ""
+msgstr "niveau de compression du paquet"
 
 #: builtin/pack-objects.c:2507
 msgid "do not hide commits by grafts"
-msgstr ""
+msgstr "ne pas cacher les validations par greffes"
 
 #: builtin/pack-refs.c:6
 msgid "git pack-refs [options]"
-msgstr ""
+msgstr "git pack-refs [options]"
 
 #: builtin/pack-refs.c:14
 msgid "pack everything"
-msgstr ""
+msgstr "empaqueter tout"
 
 #: builtin/pack-refs.c:15
 msgid "prune loose refs (default)"
-msgstr ""
+msgstr "éliminer les références perdues (défaut)"
 
 #: builtin/prune-packed.c:7
 msgid "git prune-packed [-n|--dry-run] [-q|--quiet]"
-msgstr ""
+msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]"
 
 #: builtin/prune.c:12
 msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]"
-msgstr ""
+msgstr "git prune [-n] [-v] [--expire <heure>] [--] [<head>...]"
 
 #: builtin/prune.c:132
 msgid "do not remove, show only"
-msgstr ""
+msgstr "ne pas supprimer, afficher seulement"
 
 #: builtin/prune.c:133
 msgid "report pruned objects"
-msgstr ""
+msgstr "afficher les objets Ã©liminés"
 
 #: builtin/prune.c:136
 msgid "expire objects older than <time>"
-msgstr ""
+msgstr "faire expirer les objets plus vieux que <heure>"
 
 #: builtin/push.c:14
 msgid "git push [<options>] [<repository> [<refspec>...]]"
-msgstr ""
+msgstr "git push [<options>] [<dépôt> [<spécification-de-référence>...]]"
 
 #: builtin/push.c:45
 msgid "tag shorthand without <tag>"
-msgstr ""
+msgstr "raccourci d'étiquette sans <étiquette>"
 
 #: builtin/push.c:64
 msgid "--delete only accepts plain target ref names"
-msgstr ""
+msgstr "--delete accepte seulement des noms entiers de références cibles"
 
 #: builtin/push.c:99
 msgid ""
 "\n"
 "To choose either option permanently, see push.default in 'git help config'."
 msgstr ""
+"\n"
+"Pour choisir l'option de manière permanente, voir push.default dans 'git "
+"help config'."
 
 #: builtin/push.c:102
 #, c-format
@@ -7160,8 +7674,18 @@ msgid ""
 "    git push %s %s\n"
 "%s"
 msgstr ""
+"La branche amont de votre branche courante ne correspond pas\n"
+"au nom de votre branche courante.  Pour pousser vers la branche amont\n"
+"sur le serveur distant, utilisez\n"
+"\n"
+"    git push %s HEAD:%s\n"
+"\n"
+"Pour pousser vers la branche du même nom sur le serveur distant, utilisez\n"
+"\n"
+"    git push %s %s\n"
+"%s"
 
-#: builtin/push.c:121
+#: builtin/push.c:117
 #, c-format
 msgid ""
 "You are not currently on a branch.\n"
@@ -7170,8 +7694,13 @@ msgid ""
 "\n"
 "    git push %s HEAD:<name-of-remote-branch>\n"
 msgstr ""
+"Vous n'êtes actuellement sur aucune branche.\n"
+"Pour pousser l'historique menant Ã  l'état actuel (HEAD détachée),\n"
+"utilisez\n"
+"\n"
+"    git push %s HEAD:<nom-de-la-branche-amont>\n"
 
-#: builtin/push.c:128
+#: builtin/push.c:131
 #, c-format
 msgid ""
 "The current branch %s has no upstream branch.\n"
@@ -7179,21 +7708,30 @@ msgid ""
 "\n"
 "    git push --set-upstream %s %s\n"
 msgstr ""
+"La branche courante %s n'a pas de branche amont.\n"
+"Pour pousser la branche courante et définir la distante comme amont, "
+"utilisez\n"
+"\n"
+"    git push --set-upstream %s %s\n"
 
-#: builtin/push.c:136
+#: builtin/push.c:139
 #, c-format
 msgid "The current branch %s has multiple upstream branches, refusing to push."
 msgstr ""
+"La branche courante %s a de multiples branches amont, impossible de pousser."
 
-#: builtin/push.c:139
+#: builtin/push.c:142
 #, c-format
 msgid ""
 "You are pushing to remote '%s', which is not the upstream of\n"
 "your current branch '%s', without telling me what to push\n"
 "to update which remote branch."
 msgstr ""
+"Vous Ãªtes en train de pousser vers la branche distante '%s', qui n'est\n"
+"pas une branche amont de votre branche courante '%s', sans me dire\n"
+"quoi pousser pour mettre Ã  jour quelle branche amont."
 
-#: builtin/push.c:151
+#: builtin/push.c:165
 msgid ""
 "push.default is unset; its implicit value is changing in\n"
 "Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
@@ -7210,72 +7748,128 @@ msgid ""
 "(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
 "'current' instead of 'simple' if you sometimes use older versions of Git)"
 msgstr ""
+"push.default n'est pas défini ; sa valeur implicite change dans Git 2.0\n"
+"de 'matching' vers 'simple'. Pour supprimer ce message et maintenir\n"
+"le comportement actuel après les changements par défaut, utilisez :\n"
+"\n"
+"  git config --global push.default matching\n"
+"\n"
+"Pour supprimer ce message et adopter le nouveau comportement maintenant, "
+"utilisez :\n"
+"\n"
+"  git config --global push.default simple\n"
+"\n"
+"Voir 'git help config' et chercher 'push.default' pour plus d'information.\n"
+"(le mode 'simple' a Ã©té introduit dans Git 1.7.11. Utilisez le mode "
+"similaire\n"
+"'current' au lieu de 'simple' si vous utilisez de temps en temps d'anciennes "
+"versions de Git)"
 
-#: builtin/push.c:199
+#: builtin/push.c:225
 msgid ""
 "You didn't specify any refspecs to push, and push.default is \"nothing\"."
 msgstr ""
+"Vous n'avez pas spécifié de spécifications de référence Ã  pousser, et push."
+"default est \"nothing\"."
 
-#: builtin/push.c:206
+#: builtin/push.c:232
 msgid ""
 "Updates were rejected because the tip of your current branch is behind\n"
-"its remote counterpart. Merge the remote changes (e.g. 'git pull')\n"
-"before pushing again.\n"
+"its remote counterpart. Integrate the remote changes (e.g.\n"
+"'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
+"Les mises Ã  jour ont Ã©té rejetées car la pointe de la branche courante est "
+"derrière\n"
+"son homologue distant. Intégrez les changements distants (par exemple 'git "
+"pull ...')\n"
+"avant de pousser Ã  nouveau.\n"
+"Voir la 'Note Ã  propos des avances rapides' dans 'git push --help' pour plus "
+"d'information."
 
-#: builtin/push.c:212
+#: builtin/push.c:238
 msgid ""
 "Updates were rejected because a pushed branch tip is behind its remote\n"
 "counterpart. If you did not intend to push that branch, you may want to\n"
 "specify branches to push or set the 'push.default' configuration variable\n"
 "to 'simple', 'current' or 'upstream' to push only the current branch."
 msgstr ""
+"Les mises Ã  jour ont Ã©té rejetées car la pointe de la branche poussée est "
+"derrière\n"
+"son homologue distant. Si vous ne vouliez pas pousser cette branche, vous "
+"pourriez\n"
+"vouloir spécifier les branches Ã  pousser ou définir la variable de "
+"configuration\n"
+"'push.default' Ã  'simple', 'current' ou 'upstream' pour pousser seulement la "
+"branche courante."
 
-#: builtin/push.c:218
+#: builtin/push.c:244
 msgid ""
 "Updates were rejected because a pushed branch tip is behind its remote\n"
-"counterpart. Check out this branch and merge the remote changes\n"
-"(e.g. 'git pull') before pushing again.\n"
+"counterpart. Check out this branch and integrate the remote changes\n"
+"(e.g. 'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
+"Les mises Ã  jour ont Ã©té rejetées car la pointe de la branche courante est "
+"derrière\n"
+"son homologue distant. Extrayez cette branche et Intégrez les changements "
+"distants\n"
+"(par exemple 'git pull ...') avant de pousser Ã  nouveau.\n"
+"Voir la 'Note Ã  propos des avances rapides' dans 'git push --help' pour plus "
+"d'information."
 
-#: builtin/push.c:224
+#: builtin/push.c:250
 msgid ""
 "Updates were rejected because the remote contains work that you do\n"
 "not have locally. This is usually caused by another repository pushing\n"
-"to the same ref. You may want to first merge the remote changes (e.g.,\n"
-"'git pull') before pushing again.\n"
+"to the same ref. You may want to first integrate the remote changes\n"
+"(e.g., 'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-
-#: builtin/push.c:231
+"Les mises Ã  jour ont Ã©té rejetées car la branche distante contient du "
+"travail que\n"
+"vous n'avez pas en local. Ceci est généralement causé par un autre dépôt "
+"poussé\n"
+"vers la même référence. Vous pourriez intégrer d'abord les changements "
+"distants\n"
+"(par exemple 'git pull ...') avant de pousser Ã  nouveau.\n"
+"Voir la 'Note Ã  propos des avances rapides' dans 'git push --help' pour plus "
+"d'information."
+
+#: builtin/push.c:257
 msgid "Updates were rejected because the tag already exists in the remote."
 msgstr ""
+"Les mises Ã  jour ont Ã©té rejetées car l'étiquette existe déjà dans la "
+"branche distante."
 
-#: builtin/push.c:234
+#: builtin/push.c:260
 msgid ""
 "You cannot update a remote ref that points at a non-commit object,\n"
 "or update a remote ref to make it point at a non-commit object,\n"
 "without using the '--force' option.\n"
 msgstr ""
+"Vous ne pouvez pas mettre Ã  jour une référence distante qui pointe sur un "
+"objet qui\n"
+"n'est pas un commit, ou mettre Ã  jour une référence distante pour la faire "
+"pointer\n"
+"vers un objet qui n'est pas un commit, sans utiliser l'option '--force'.\n"
 
-#: builtin/push.c:294
+#: builtin/push.c:320
 #, c-format
 msgid "Pushing to %s\n"
-msgstr ""
+msgstr "Poussage vers %s\n"
 
-#: builtin/push.c:298
+#: builtin/push.c:324
 #, c-format
 msgid "failed to push some refs to '%s'"
-msgstr ""
+msgstr "impossible de pousser des références vers '%s'"
 
-#: builtin/push.c:331
+#: builtin/push.c:357
 #, c-format
 msgid "bad repository '%s'"
-msgstr ""
+msgstr "mauvais dépôt '%s'"
 
-#: builtin/push.c:332
+#: builtin/push.c:358
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -7287,90 +7881,100 @@ msgid ""
 "\n"
 "    git push <name>\n"
 msgstr ""
+"Pas de destination pour pousser.\n"
+"Spécifiez une URL depuis la ligne de commande ou configurez un dépôt distant "
+"en utilisant\n"
+"\n"
+"    git remote add <nom> <url>\n"
+"\n"
+"et poussez alors en utilisant le dépôt distant\n"
+"\n"
+"    git push <nom>\n"
 
-#: builtin/push.c:347
+#: builtin/push.c:373
 msgid "--all and --tags are incompatible"
-msgstr ""
+msgstr "--all et --tags sont incompatibles"
 
-#: builtin/push.c:348
+#: builtin/push.c:374
 msgid "--all can't be combined with refspecs"
-msgstr ""
+msgstr "--all ne peut pas Ãªtre combiné avec des spécifications de référence"
 
-#: builtin/push.c:353
+#: builtin/push.c:379
 msgid "--mirror and --tags are incompatible"
-msgstr ""
+msgstr "--mirror et --tags sont incompatibles"
 
-#: builtin/push.c:354
+#: builtin/push.c:380
 msgid "--mirror can't be combined with refspecs"
-msgstr ""
+msgstr "--mirror ne peut pas Ãªtre combiné avec des spécifications de référence"
 
-#: builtin/push.c:359
+#: builtin/push.c:385
 msgid "--all and --mirror are incompatible"
-msgstr ""
+msgstr "--all et --mirror sont incompatibles"
 
-#: builtin/push.c:419
+#: builtin/push.c:445
 msgid "repository"
-msgstr ""
+msgstr "dépôt"
 
-#: builtin/push.c:420
+#: builtin/push.c:446
 msgid "push all refs"
-msgstr ""
+msgstr "pousser toutes les références"
 
-#: builtin/push.c:421
+#: builtin/push.c:447
 msgid "mirror all refs"
-msgstr ""
+msgstr "refléter toutes les références"
 
-#: builtin/push.c:423
+#: builtin/push.c:449
 msgid "delete refs"
-msgstr ""
+msgstr "supprimer les références"
 
-#: builtin/push.c:424
+#: builtin/push.c:450
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr ""
+"pousser les Ã©tiquettes (ne peut pas Ãªtre utilisé avec --all ou --mirror)"
 
-#: builtin/push.c:427
+#: builtin/push.c:453
 msgid "force updates"
-msgstr ""
+msgstr "forcer les mises Ã  jour"
 
-#: builtin/push.c:428
+#: builtin/push.c:454
 msgid "check"
-msgstr ""
+msgstr "check"
 
-#: builtin/push.c:429
+#: builtin/push.c:455
 msgid "control recursive pushing of submodules"
-msgstr ""
+msgstr "contrôler le poussage récursif des sous-modules"
 
-#: builtin/push.c:431
+#: builtin/push.c:457
 msgid "use thin pack"
-msgstr ""
+msgstr "utiliser un empaquetage léger"
 
-#: builtin/push.c:432 builtin/push.c:433
+#: builtin/push.c:458 builtin/push.c:459
 msgid "receive pack program"
-msgstr ""
+msgstr "recevoir le programme d'empaquetage"
 
-#: builtin/push.c:434
+#: builtin/push.c:460
 msgid "set upstream for git pull/status"
-msgstr ""
+msgstr "définir la branche amont pour git pull/status"
 
-#: builtin/push.c:437
+#: builtin/push.c:463
 msgid "prune locally removed refs"
-msgstr ""
+msgstr "éliminer les références locales supprimées"
 
-#: builtin/push.c:439
+#: builtin/push.c:465
 msgid "bypass pre-push hook"
-msgstr ""
+msgstr "éviter d'utiliser le crochet pre-push"
 
-#: builtin/push.c:440
+#: builtin/push.c:466
 msgid "push missing but relevant tags"
-msgstr ""
+msgstr "pousser les Ã©tiquettes manquantes mais pertinentes"
 
-#: builtin/push.c:450
+#: builtin/push.c:476
 msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr ""
+msgstr "--delete est incompatible avec --all, --mirror et --tags"
 
-#: builtin/push.c:452
+#: builtin/push.c:478
 msgid "--delete doesn't make sense without any refs"
-msgstr ""
+msgstr "--delete n'a pas de sens sans aucune référence"
 
 #: builtin/read-tree.c:36
 msgid ""
@@ -7378,70 +7982,84 @@ msgid ""
 "[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
 "index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"
 msgstr ""
+"git read-tree [[-m [--trivial] [--aggressive] | --reset | --"
+"prefix=<préfixe>] [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-"
+"sparse-checkout] [--index-output=<fichier>] (--empty | <arbre ou apparenté "
+"1> [<arbre ou apparenté 2> [<arbre ou apparenté 3>]])"
 
-#: builtin/read-tree.c:108
+#: builtin/read-tree.c:109
 msgid "write resulting index to <file>"
-msgstr ""
+msgstr "écrire l'index résultant dans <fichier>"
 
-#: builtin/read-tree.c:111
+#: builtin/read-tree.c:112
 msgid "only empty the index"
-msgstr ""
+msgstr "juste vider l'index"
 
-#: builtin/read-tree.c:113
+#: builtin/read-tree.c:114
 msgid "Merging"
-msgstr ""
+msgstr "Fusion"
 
-#: builtin/read-tree.c:115
+#: builtin/read-tree.c:116
 msgid "perform a merge in addition to a read"
-msgstr ""
+msgstr "effectuer une fusion en plus d'une lecture"
 
-#: builtin/read-tree.c:117
+#: builtin/read-tree.c:118
 msgid "3-way merge if no file level merging required"
-msgstr ""
+msgstr "fusion Ã  3 points si aucune fusion de niveau fichier n'est requise"
 
-#: builtin/read-tree.c:119
+#: builtin/read-tree.c:120
 msgid "3-way merge in presence of adds and removes"
-msgstr ""
+msgstr "fusion Ã  3 points en présence d'ajouts et suppressions"
 
-#: builtin/read-tree.c:121
+#: builtin/read-tree.c:122
 msgid "same as -m, but discard unmerged entries"
-msgstr ""
+msgstr "comme -m, mais annule les Ã©léments non fusionnés"
 
-#: builtin/read-tree.c:122
+#: builtin/read-tree.c:123
 msgid "<subdirectory>/"
-msgstr ""
+msgstr "<sous-répertoire>/"
 
-#: builtin/read-tree.c:123
+#: builtin/read-tree.c:124
 msgid "read the tree into the index under <subdirectory>/"
-msgstr ""
+msgstr "lire l'arbre dans l'index dans <sous-répertoire>/"
 
-#: builtin/read-tree.c:126
+#: builtin/read-tree.c:127
 msgid "update working tree with merge result"
-msgstr ""
+msgstr "mettre Ã  jour la copie de travail avec le résultat de la fusion"
 
-#: builtin/read-tree.c:128
+#: builtin/read-tree.c:129
 msgid "gitignore"
-msgstr ""
+msgstr "gitignore"
 
-#: builtin/read-tree.c:129
+#: builtin/read-tree.c:130
 msgid "allow explicitly ignored files to be overwritten"
-msgstr ""
+msgstr "autoriser explicitement les fichiers ignorés Ã  Ãªtre Ã©crasés"
 
-#: builtin/read-tree.c:132
+#: builtin/read-tree.c:133
 msgid "don't check the working tree after merging"
-msgstr ""
+msgstr "ne pas vérifier la copie de travail après la fusion"
 
-#: builtin/read-tree.c:133
+#: builtin/read-tree.c:134
 msgid "don't update the index or the work tree"
-msgstr ""
+msgstr "ne pas mettre Ã  jour l'index ou la copie de travail"
 
-#: builtin/read-tree.c:135
+#: builtin/read-tree.c:136
 msgid "skip applying sparse checkout filter"
-msgstr ""
+msgstr "sauter l'application du filtre d'extraction creuse"
 
-#: builtin/read-tree.c:137
+#: builtin/read-tree.c:138
 msgid "debug unpack-trees"
-msgstr ""
+msgstr "deboguer unpack-trees"
+
+#: builtin/reflog.c:500
+#, c-format
+msgid "%s' for '%s' is not a valid timestamp"
+msgstr "%s' pour '%s' n'est pas un horodatage valide"
+
+#: builtin/reflog.c:616 builtin/reflog.c:621
+#, c-format
+msgid "'%s' is not a valid timestamp"
+msgstr "'%s' n'est pas un horodatage valide"
 
 #: builtin/remote.c:11
 msgid "git remote [-v | --verbose]"
@@ -7451,7 +8069,9 @@ msgstr "git remote [-v | --verbose]"
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
-msgstr "git remote add [-t <branche>] [-m <maîtresse>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <nom> <URL>"
+msgstr ""
+"git remote add [-t <branche>] [-m <maîtresse>] [-f] [--tags|--no-tags] [--"
+"mirror=<fetch|push>] <nom> <URL>"
 
 #: builtin/remote.c:13 builtin/remote.c:32
 msgid "git remote rename <old> <new>"
@@ -7476,7 +8096,9 @@ msgstr "git remote prune [-n | --dry-run] <nom>"
 #: builtin/remote.c:18
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
-msgstr "git remote [-v | --verbose] update [-p | --prune] [(<groupe> | <distante>)...]"
+msgstr ""
+"git remote [-v | --verbose] update [-p | --prune] [(<groupe> | "
+"<distante>)...]"
 
 #: builtin/remote.c:19
 msgid "git remote set-branches [--add] <name> <branch>..."
@@ -7542,7 +8164,8 @@ msgstr "rapatrier les branches distantes"
 
 #: builtin/remote.c:165
 msgid "import all tags and associated objects when fetching"
-msgstr "importer toutes les Ã©tiquettes et les objets associés lors du rapatriement"
+msgstr ""
+"importer toutes les Ã©tiquettes et les objets associés lors du rapatriement"
 
 #: builtin/remote.c:168
 msgid "or do not fetch any tag at all (--no-tags)"
@@ -7562,7 +8185,8 @@ msgstr "push|fetch"
 
 #: builtin/remote.c:173
 msgid "set up remote as a mirror to push to or fetch from"
-msgstr "paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis"
+msgstr ""
+"paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis"
 
 #: builtin/remote.c:185
 msgid "specifying a master branch makes no sense with --mirror"
@@ -7570,7 +8194,9 @@ msgstr "spécifier une branche maîtresse n'a pas de sens avec --mirror"
 
 #: builtin/remote.c:187
 msgid "specifying branches to track makes sense only with fetch mirrors"
-msgstr "spécifier les branches Ã  suivre n'a de sens qu'avec des miroirs de rapatriement"
+msgstr ""
+"spécifier les branches Ã  suivre n'a de sens qu'avec des miroirs de "
+"rapatriement"
 
 #: builtin/remote.c:195 builtin/remote.c:646
 #, c-format
@@ -7595,7 +8221,7 @@ msgstr "plus d'un %s"
 #: builtin/remote.c:339
 #, c-format
 msgid "Could not get fetch map for refspec %s"
-msgstr ""
+msgstr "Impossible d'obtenir une correspondance distante pour la spécification de référence %s"
 
 #: builtin/remote.c:440 builtin/remote.c:448
 msgid "(matching)"
@@ -7634,7 +8260,7 @@ msgid ""
 msgstr ""
 "Pas de mise Ã  jour du refspec de rapatriement qui n'est pas par défaut\n"
 "\t%s\n"
-"\tMerci de mettre Ã  jour la configuration si nécessaire."
+"\tVeuillez mettre Ã  jour la configuration manuellement si nécessaire."
 
 #: builtin/remote.c:683
 #, c-format
@@ -7672,7 +8298,8 @@ msgstr[0] ""
 "Note : Une branche en dehors de refs/remotes/ n'a pas Ã©té supprimée ;\n"
 "pour la supprimer, utilisez :"
 msgstr[1] ""
-"Note : Plusieurs branches en dehors de refs/remotes/ n'ont pas Ã©té supprimées ;\n"
+"Note : Plusieurs branches en dehors de refs/remotes/ n'ont pas Ã©té "
+"supprimées ;\n"
 "pour les supprimer, utilisez :"
 
 #: builtin/remote.c:943
@@ -7792,7 +8419,9 @@ msgstr "  Branche HEAD : %s"
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
-msgstr "  Branche HEAD (la HEAD distante est ambiguë, peut Ãªtre l'une des suivantes) :\n"
+msgstr ""
+"  Branche HEAD (la HEAD distante est ambiguë, peut Ãªtre l'une des "
+"suivantes) :\n"
 
 #: builtin/remote.c:1151
 #, c-format
@@ -7836,7 +8465,9 @@ msgstr "Impossible de déterminer la HEAD distante"
 
 #: builtin/remote.c:1218
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
-msgstr "Il y a de multiples branches HEAD distantes. Merci d'en choisir une explicitement avec :"
+msgstr ""
+"Il y a de multiples branches HEAD distantes. Veuillez en choisir une "
+"explicitement avec :"
 
 #: builtin/remote.c:1228
 #, c-format
@@ -7866,7 +8497,7 @@ msgstr " %s est devenu en suspens !"
 #: builtin/remote.c:1281
 #, c-format
 msgid "Pruning %s"
-msgstr "Élagage de %s"
+msgstr "Élimination de %s"
 
 #: builtin/remote.c:1282
 #, c-format
@@ -7876,16 +8507,16 @@ msgstr "URL : %s"
 #: builtin/remote.c:1295
 #, c-format
 msgid " * [would prune] %s"
-msgstr " * [serait Ã©lagué] %s"
+msgstr " * [serait Ã©liminé] %s"
 
 #: builtin/remote.c:1298
 #, c-format
 msgid " * [pruned] %s"
-msgstr " * [élagué] %s"
+msgstr " * [éliminé] %s"
 
 #: builtin/remote.c:1321
 msgid "prune remotes after fetching"
-msgstr "élaguer les distants après le rapatriement"
+msgstr "éliminer les distants après le rapatriement"
 
 #: builtin/remote.c:1387 builtin/remote.c:1461
 #, c-format
@@ -7928,7 +8559,7 @@ msgstr "Pas d'URL trouvée : %s"
 
 #: builtin/remote.c:1497
 msgid "Will not delete all non-push URLs"
-msgstr ""
+msgstr "Pas de suppression de toutes les URLs non-push"
 
 #: builtin/remote.c:1569
 msgid "be verbose; must be placed before a subcommand"
@@ -7969,15 +8600,16 @@ msgstr "enregistrer des résolutions propres dans l'index"
 #: builtin/reset.c:25
 msgid ""
 "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
-msgstr "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
+msgstr ""
+"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
 
 #: builtin/reset.c:26
 msgid "git reset [-q] <tree-ish> [--] <paths>..."
-msgstr "git reset [-q] <arbre> [--] <chemins>..."
+msgstr "git reset [-q] <arbre ou apparenté> [--] <chemins>..."
 
 #: builtin/reset.c:27
 msgid "git reset --patch [<tree-ish>] [--] [<paths>...]"
-msgstr "git reset --patch [<arbre>] [--] [<chemins>...]"
+msgstr "git reset --patch [<arbre ou apparenté>] [--] [<chemins>...]"
 
 #: builtin/reset.c:33
 msgid "mixed"
@@ -8012,95 +8644,97 @@ msgstr "Impossible de trouver l'arbre pour HEAD."
 msgid "Failed to find tree of %s."
 msgstr "Impossible de trouver l'arbre pour %s."
 
-#: builtin/reset.c:98
+#: builtin/reset.c:99
 #, c-format
 msgid "HEAD is now at %s"
 msgstr "HEAD est maintenant Ã  %s"
 
-#: builtin/reset.c:169
+#: builtin/reset.c:172
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Impossible de faire un \"reset %s\" au milieu d'une fusion."
 
-#: builtin/reset.c:248
+#: builtin/reset.c:251
 msgid "be quiet, only report errors"
 msgstr "être silencieux, afficher seulement les erreurs"
 
-#: builtin/reset.c:250
+#: builtin/reset.c:253
 msgid "reset HEAD and index"
 msgstr "réinitialiser HEAD et l'index"
 
-#: builtin/reset.c:251
+#: builtin/reset.c:254
 msgid "reset only HEAD"
 msgstr "réinitialiser seulement HEAD"
 
-#: builtin/reset.c:253 builtin/reset.c:255
+#: builtin/reset.c:256 builtin/reset.c:258
 msgid "reset HEAD, index and working tree"
 msgstr "réinitialiser HEAD, l'index et la copie de travail"
 
-#: builtin/reset.c:257
+#: builtin/reset.c:260
 msgid "reset HEAD but keep local changes"
 msgstr "réinitialiser HEAD mais garder les changements locaux"
 
-#: builtin/reset.c:275
+#: builtin/reset.c:278
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Échec de résolution de '%s' comme une révision valide."
 
-#: builtin/reset.c:278 builtin/reset.c:286
+#: builtin/reset.c:281 builtin/reset.c:289
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Impossible d'analyser l'objet '%s'."
 
-#: builtin/reset.c:283
+#: builtin/reset.c:286
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "Échec de résolution de '%s' comme un arbre valide."
 
-#: builtin/reset.c:292
+#: builtin/reset.c:295
 msgid "--patch is incompatible with --{hard,mixed,soft}"
 msgstr "--patch est incompatible avec --{hard,mixed,soft}"
 
-#: builtin/reset.c:301
+#: builtin/reset.c:304
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
-msgstr "--mixed avec des chemins est obsolète ; utilisez 'git reset -- <paths>' Ã  la place."
+msgstr ""
+"--mixed avec des chemins est obsolète ; utilisez 'git reset -- <paths>' Ã  la "
+"place."
 
-#: builtin/reset.c:303
+#: builtin/reset.c:306
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Impossible de faire un \"%s reset\" avec des chemins."
 
-#: builtin/reset.c:313
+#: builtin/reset.c:316
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "Le \"%s reset\" n'est pas permis dans un dépôt nu"
 
-#: builtin/reset.c:333
+#: builtin/reset.c:336
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Impossible de réinitialiser le fichier d'index Ã  la révision '%s'."
 
-#: builtin/reset.c:339
+#: builtin/reset.c:342
 msgid "Unstaged changes after reset:"
 msgstr "Modifications non indexées après reset :"
 
-#: builtin/reset.c:344
+#: builtin/reset.c:347
 msgid "Could not write new index file."
 msgstr "Impossible d'écrire le nouveau fichier d'index."
 
-#: builtin/rev-parse.c:339
+#: builtin/rev-parse.c:345
 msgid "git rev-parse --parseopt [options] -- [<args>...]"
 msgstr "git rev-parse --parseopt [options] -- [<arguments>...]"
 
-#: builtin/rev-parse.c:344
+#: builtin/rev-parse.c:350
 msgid "keep the `--` passed as an arg"
 msgstr "garder le `--` passé en argument"
 
-#: builtin/rev-parse.c:346
+#: builtin/rev-parse.c:352
 msgid "stop parsing after the first non-option argument"
 msgstr "arrêt de l'analyse après le premier argument qui n'est pas une option"
 
-#: builtin/rev-parse.c:464
+#: builtin/rev-parse.c:470
 msgid ""
 "git rev-parse --parseopt [options] -- [<args>...]\n"
 "   or: git rev-parse --sq-quote [<arg>...]\n"
@@ -8112,11 +8746,12 @@ msgstr ""
 "   ou : git rev-parse --sq-quote [<argument>...]\n"
 "   ou : git rev-parse [options] [<argument>...]\n"
 "\n"
-"Lancez \"git rev-parse --parseopt -h\" pour plus d'information sur l'utilisation principale."
+"Lancez \"git rev-parse --parseopt -h\" pour plus d'information sur "
+"l'utilisation principale."
 
 #: builtin/revert.c:22
 msgid "git revert [options] <commit-ish>..."
-msgstr "git revert [options] <commit>..."
+msgstr "git revert [options] <commit ou apparenté>..."
 
 #: builtin/revert.c:23
 msgid "git revert <subcommand>"
@@ -8124,151 +8759,180 @@ msgstr "git revert <sous-commande>"
 
 #: builtin/revert.c:28
 msgid "git cherry-pick [options] <commit-ish>..."
-msgstr "git cherry-pick [options] <commit>..."
+msgstr "git cherry-pick [options] <commit ou apparenté>..."
 
 #: builtin/revert.c:29
 msgid "git cherry-pick <subcommand>"
 msgstr "git cherry-pick <sous-commande>"
 
-#: builtin/revert.c:70 builtin/revert.c:92
+#: builtin/revert.c:71 builtin/revert.c:94
 #, c-format
 msgid "%s: %s cannot be used with %s"
 msgstr "%s : %s ne peut pas Ãªtre utilisé avec %s"
 
-#: builtin/revert.c:103
+#: builtin/revert.c:105
 msgid "end revert or cherry-pick sequence"
 msgstr "mettre fin au retour ou picorage"
 
-#: builtin/revert.c:104
+#: builtin/revert.c:106
 msgid "resume revert or cherry-pick sequence"
 msgstr "reprendre le retour ou picorage"
 
-#: builtin/revert.c:105
+#: builtin/revert.c:107
 msgid "cancel revert or cherry-pick sequence"
 msgstr "annuler le retour ou picorage"
 
-#: builtin/revert.c:106
+#: builtin/revert.c:108
 msgid "don't automatically commit"
 msgstr "ne pas valider automatiquement"
 
-#: builtin/revert.c:107
+#: builtin/revert.c:109
 msgid "edit the commit message"
 msgstr "éditer le message de validation"
 
-#: builtin/revert.c:110
+#: builtin/revert.c:112
 msgid "parent number"
 msgstr "numéro de parent"
 
-#: builtin/revert.c:112
+#: builtin/revert.c:114
 msgid "merge strategy"
 msgstr "stratégie de fusion"
 
-#: builtin/revert.c:113
+#: builtin/revert.c:115
 msgid "option"
 msgstr "option"
 
-#: builtin/revert.c:114
+#: builtin/revert.c:116
 msgid "option for merge strategy"
 msgstr "option pour la stratégie de fusion"
 
-#: builtin/revert.c:125
+#: builtin/revert.c:127
 msgid "append commit name"
 msgstr "ajouter le nom de validation"
 
-#: builtin/revert.c:126
+#: builtin/revert.c:128
 msgid "allow fast-forward"
 msgstr "autoriser l'avance rapide"
 
-#: builtin/revert.c:127
+#: builtin/revert.c:129
 msgid "preserve initially empty commits"
 msgstr "préserver les validations vides initialement"
 
-#: builtin/revert.c:128
+#: builtin/revert.c:130
 msgid "allow commits with empty messages"
 msgstr "autoriser les validations avec des messages vides"
 
-#: builtin/revert.c:129
+#: builtin/revert.c:131
 msgid "keep redundant, empty commits"
 msgstr "garder les validations redondantes, vides"
 
-#: builtin/revert.c:133
+#: builtin/revert.c:135
 msgid "program error"
 msgstr "erreur du programme"
 
-#: builtin/revert.c:223
+#: builtin/revert.c:225
 msgid "revert failed"
 msgstr "revert a Ã©choué"
 
-#: builtin/revert.c:238
+#: builtin/revert.c:240
 msgid "cherry-pick failed"
 msgstr "le picorage a Ã©choué"
 
-#: builtin/rm.c:15
+#: builtin/rm.c:16
 msgid "git rm [options] [--] <file>..."
 msgstr "git rm [options] [--] <fichier>..."
 
-#: builtin/rm.c:64 builtin/rm.c:186
-#, c-format
+#: builtin/rm.c:64
+msgid ""
+"the following submodule (or one of its nested submodules)\n"
+"uses a .git directory:"
+msgid_plural ""
+"the following submodules (or one of its nested submodules)\n"
+"use a .git directory:"
+msgstr[0] ""
+"le sous-module suivant (ou un de ses sous-modules imbriqués)\n"
+"utilise un répertoire .git :"
+msgstr[1] ""
+"les sous-modules suivants (ou un de ses sous-modules imbriqués)\n"
+"utilisent un répertoire .git :"
+
+#: builtin/rm.c:70
 msgid ""
-"submodule '%s' (or one of its nested submodules) uses a .git directory\n"
+"\n"
 "(use 'rm -rf' if you really want to remove it including all of its history)"
 msgstr ""
-"le sous-module '%s' (ou un des sous-modules imbriqués) utilise un répertoire .git\n"
-"(utilisez 'rm -rf' si vous souhaitez vraiment le supprimer avec tout son historique)"
+"\n"
+"(utilisez 'rm -rf' si vous voulez vraiment le supprimer en incluant tout son "
+"historique)"
 
-#: builtin/rm.c:174
-#, c-format
+#: builtin/rm.c:230
+msgid ""
+"the following file has staged content different from both the\n"
+"file and the HEAD:"
+msgid_plural ""
+"the following files have staged content different from both the\n"
+"file and the HEAD:"
+msgstr[0] ""
+"le fichier suivant a du contenu indexé différent\n"
+"du fichier et de HEAD :"
+msgstr[1] ""
+"les fichiers suivants ont du contenu indexé différent\n"
+"du fichier et de HEAD :"
+
+#: builtin/rm.c:235
 msgid ""
-"'%s' has staged content different from both the file and the HEAD\n"
+"\n"
 "(use -f to force removal)"
 msgstr ""
-"'%s' a du contenu indexé différent du fichier et de HEAD\n"
+"\n"
 "(utilisez -f pour forcer la suppression)"
 
-#: builtin/rm.c:180
-#, c-format
-msgid ""
-"'%s' has changes staged in the index\n"
-"(use --cached to keep the file, or -f to force removal)"
-msgstr ""
-"'%s' a des changements dans l'index\n"
-"(utilisez --cached pour garder le fichier, ou -f pour forcer la suppression)"
+#: builtin/rm.c:239
+msgid "the following file has changes staged in the index:"
+msgid_plural "the following files have changes staged in the index:"
+msgstr[0] "le fichier suivant a des changements indexés :"
+msgstr[1] "les fichiers suivants ont des changements indexés :"
 
-#: builtin/rm.c:191
-#, c-format
+#: builtin/rm.c:243 builtin/rm.c:254
 msgid ""
-"'%s' has local modifications\n"
+"\n"
 "(use --cached to keep the file, or -f to force removal)"
 msgstr ""
-"'%s' a des modifications locales\n"
+"\n"
 "(utilisez --cached pour garder le fichier, ou -f pour forcer la suppression)"
 
-#: builtin/rm.c:207
+#: builtin/rm.c:251
+msgid "the following file has local modifications:"
+msgid_plural "the following files have local modifications:"
+msgstr[0] "le fichier suivant a des modifications locales :"
+msgstr[1] "les fichiers suivants ont des modifications locales :"
+
+#: builtin/rm.c:269
 msgid "do not list removed files"
 msgstr "ne pas afficher les fichiers supprimés"
 
-#: builtin/rm.c:208
+#: builtin/rm.c:270
 msgid "only remove from the index"
 msgstr "supprimer seulement de l'index"
 
-#: builtin/rm.c:209
+#: builtin/rm.c:271
 msgid "override the up-to-date check"
 msgstr "outrepasser la vérification des fichiers Ã  jour"
 
-#: builtin/rm.c:210
+#: builtin/rm.c:272
 msgid "allow recursive removal"
 msgstr "autoriser la suppression récursive"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:274
 msgid "exit with a zero status even if nothing matched"
 msgstr "sortir avec un statut zéro même si rien ne correspondait"
 
-#: builtin/rm.c:283
+#: builtin/rm.c:345
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "pas de suppression récursive de '%s' sans -r"
 
-#: builtin/rm.c:322
+#: builtin/rm.c:384
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm : impossible de supprimer %s"
@@ -8282,23 +8946,25 @@ msgstr "git shortlog [<options>] [<intervalle révisions>] [[--] [<chemin>...]]"
 msgid "Missing author: %s"
 msgstr "Auteur manquant : %s"
 
-#: builtin/shortlog.c:227
+#: builtin/shortlog.c:228
 msgid "sort output according to the number of commits per author"
 msgstr "trier la sortie sur le nombre de validations par auteur"
 
-#: builtin/shortlog.c:229
+#: builtin/shortlog.c:230
 msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Supprimer les descriptions de validation, fournit seulement le nombre de validations"
+msgstr ""
+"Supprimer les descriptions de validation, fournit seulement le nombre de "
+"validations"
 
-#: builtin/shortlog.c:231
+#: builtin/shortlog.c:232
 msgid "Show the email address of each author"
 msgstr "Afficher l'adresse e-mail de chaque auteur"
 
-#: builtin/shortlog.c:232
+#: builtin/shortlog.c:233
 msgid "w[,i1[,i2]]"
 msgstr "w[,i1[,i2]]"
 
-#: builtin/shortlog.c:233
+#: builtin/shortlog.c:234
 msgid "Linewrap output"
 msgstr "Couper les lignes"
 
@@ -8308,7 +8974,11 @@ msgid ""
 "current] [--color[=<when>] | --no-color] [--sparse] [--more=<n> | --list | --"
 "independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<rev> | "
 "<glob>)...]"
-msgstr "git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--current] [--color[=<quand>] | --no-color] [--sparse] [--more=<n> | --list | --independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<révision> | <glob>)...]"
+msgstr ""
+"git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--"
+"current] [--color[=<quand>] | --no-color] [--sparse] [--more=<n> | --list | "
+"--independent | --merge-base] [--no-name | --sha1-name] [--topics] "
+"[(<révision> | <glob>)...]"
 
 #: builtin/show-branch.c:10
 msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"
@@ -8336,7 +9006,7 @@ msgstr "synonyme de more=-1"
 
 #: builtin/show-branch.c:659
 msgid "suppress naming strings"
-msgstr ""
+msgstr "supprimer les chaînes de nommage"
 
 #: builtin/show-branch.c:661
 msgid "include the current branch"
@@ -8352,73 +9022,82 @@ msgstr "afficher les bases possibles de fusion"
 
 #: builtin/show-branch.c:667
 msgid "show refs unreachable from any other ref"
-msgstr "afficher les références non accessibles depuis toute autre référence"
+msgstr "afficher les références inaccessibles depuis toute autre référence"
 
 #: builtin/show-branch.c:669
 msgid "show commits in topological order"
 msgstr "afficher les validations dans l'ordre topologique"
 
-#: builtin/show-branch.c:671
+#: builtin/show-branch.c:672
 msgid "show only commits not on the first branch"
-msgstr "afficher seulement les validations qui ne sont pas sur la première branche"
+msgstr ""
+"afficher seulement les validations qui ne sont pas sur la première branche"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "show merges reachable from only one tip"
 msgstr "afficher les fusions accessibles depuis une seule pointe"
 
-#: builtin/show-branch.c:675
-msgid "show commits where no parent comes before its children"
-msgstr "afficher les validations où aucun parent ne vient avant ses enfants"
+#: builtin/show-branch.c:676
+msgid "topologically sort, maintaining date order where possible"
+msgstr "tri topologique, maintenant l'ordre par date si possible"
 
-#: builtin/show-branch.c:677
+#: builtin/show-branch.c:679
 msgid "<n>[,<base>]"
 msgstr "<n>[,<base>]"
 
-#: builtin/show-branch.c:678
+#: builtin/show-branch.c:680
 msgid "show <n> most recent ref-log entries starting at base"
-msgstr "afficher les <n> plus récentes entrées de ref-log en commençant Ã  la base"
+msgstr ""
+"afficher les <n> plus récents Ã©léments de ref-log en commençant Ã  la base"
 
 #: builtin/show-ref.c:10
 msgid ""
 "git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--"
 "hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [pattern*] "
-msgstr "git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [motif*] "
+msgstr ""
+"git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--"
+"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [motif*] "
 
 #: builtin/show-ref.c:11
 msgid "git show-ref --exclude-existing[=pattern] < ref-list"
 msgstr "git show-ref --exclude-existing[=motif] < liste-références"
 
-#: builtin/show-ref.c:165
+#: builtin/show-ref.c:168
 msgid "only show tags (can be combined with heads)"
 msgstr "afficher seulement les Ã©tiquettes (peut Ãªtre combiné avec des têtes)"
 
-#: builtin/show-ref.c:166
+#: builtin/show-ref.c:169
 msgid "only show heads (can be combined with tags)"
 msgstr "afficher seulement les têtes (peut Ãªtre combiné avec des Ã©tiquettes)"
 
-#: builtin/show-ref.c:167
+#: builtin/show-ref.c:170
 msgid "stricter reference checking, requires exact ref path"
-msgstr "vérification de référence plus stricte, requiert un chemin de référence exact"
+msgstr ""
+"vérification de référence plus stricte, nécessite un chemin de référence "
+"exact"
 
-#: builtin/show-ref.c:170 builtin/show-ref.c:172
-msgid "show the HEAD reference"
-msgstr "afficher la référence HEAD"
+#: builtin/show-ref.c:173 builtin/show-ref.c:176
+msgid "show the HEAD reference, even if it would be filtered out"
+msgstr "afficher la référence HEAD, même si elle serait filtrée"
 
-#: builtin/show-ref.c:174
+#: builtin/show-ref.c:178
 msgid "dereference tags into object IDs"
 msgstr "déréférencer les Ã©tiquettes en IDs d'objet"
 
-#: builtin/show-ref.c:176
+#: builtin/show-ref.c:180
 msgid "only show SHA1 hash using <n> digits"
 msgstr "afficher seulement le hachage SHA1 en utilisant <n> chiffres"
 
-#: builtin/show-ref.c:180
+#: builtin/show-ref.c:184
 msgid "do not print results to stdout (useful with --verify)"
-msgstr "ne pas afficher les résultats sur la sortie standard (pratique avec --verify)"
+msgstr ""
+"ne pas afficher les résultats sur la sortie standard (pratique avec --verify)"
 
-#: builtin/show-ref.c:182
+#: builtin/show-ref.c:186
 msgid "show refs from stdin that aren't in local repository"
-msgstr "afficher les références de l'entrée standard qui ne sont pas dans le dépôt local"
+msgstr ""
+"afficher les références de l'entrée standard qui ne sont pas dans le dépôt "
+"local"
 
 #: builtin/symbolic-ref.c:7
 msgid "git symbolic-ref [options] name [ref]"
@@ -8430,7 +9109,8 @@ msgstr "git symbolic-ref -d [-q] nom"
 
 #: builtin/symbolic-ref.c:40
 msgid "suppress error message for non-symbolic (detached) refs"
-msgstr "supprimer le message d'erreur pour une référence non symbolique (détachée)"
+msgstr ""
+"supprimer le message d'erreur pour une référence non symbolique (détachée)"
 
 #: builtin/symbolic-ref.c:41
 msgid "delete symbolic ref"
@@ -8451,7 +9131,9 @@ msgstr "raison de la mise Ã  jour"
 #: builtin/tag.c:22
 msgid ""
 "git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]"
-msgstr "git tag [-a|-s|-u <id-clé>] [-f] [-m <msg>|-F <file>] <nométiquette> [<head>]"
+msgstr ""
+"git tag [-a|-s|-u <id-clé>] [-f] [-m <message>|-F <file>] <nométiquette> "
+"[<head>]"
 
 #: builtin/tag.c:23
 msgid "git tag -d <tagname>..."
@@ -8515,7 +9197,8 @@ msgid ""
 msgstr ""
 "\n"
 "Écrire un message pour l'étiquette\n"
-"Les lignes commençant par '%c' seront gardées ; vous pouvez les retirer vous-même si vous le souhaitez.\n"
+"Les lignes commençant par '%c' seront gardées ; vous pouvez les retirer vous-"
+"même si vous le souhaitez.\n"
 
 #: builtin/tag.c:292
 msgid "unable to sign the tag"
@@ -8544,7 +9227,7 @@ msgstr "Le message pour l'étiquette a Ã©té laissé dans %s\n"
 
 #: builtin/tag.c:423
 msgid "switch 'points-at' requires an object"
-msgstr "le commutateur 'points-at' requiert un objet"
+msgstr "le commutateur 'points-at' a besoin d'un objet"
 
 #: builtin/tag.c:425
 #, c-format
@@ -8682,7 +9365,7 @@ msgstr "aviser des fichiers manquants dans la copie de travail"
 
 #: builtin/update-index.c:730
 msgid "refresh even if index contains unmerged entries"
-msgstr "rafraîchir même si l'index contient des entrées non fusionnées"
+msgstr "rafraîchir même si l'index contient des Ã©léments non fusionnés"
 
 #: builtin/update-index.c:733
 msgid "refresh stat information"
@@ -8698,7 +9381,7 @@ msgstr "<mode> <objet> <chemin>"
 
 #: builtin/update-index.c:742
 msgid "add the specified entry to the index"
-msgstr "ajouter l'entrée spécifiée dans l'index"
+msgstr "ajouter l'élément spécifié dans l'index"
 
 #: builtin/update-index.c:746
 msgid "(+/-)x"
@@ -8714,7 +9397,7 @@ msgstr "marquer les fichiers comme \"non changeants\""
 
 #: builtin/update-index.c:754
 msgid "clear assumed-unchanged bit"
-msgstr ""
+msgstr "mettre Ã  zéro le bit supposé-non-modifié"
 
 #: builtin/update-index.c:757
 msgid "mark files as \"index-only\""
@@ -8722,15 +9405,19 @@ msgstr "marquer les fichiers comme \"index seulement\""
 
 #: builtin/update-index.c:760
 msgid "clear skip-worktree bit"
-msgstr ""
+msgstr "mettre Ã  zéro le bit sauter-la-copie-de travail"
 
 #: builtin/update-index.c:763
 msgid "add to index only; do not add content to object database"
-msgstr "ajouter seulement Ã  l'index ; ne pas ajouter le contenu dans la base de données des objets"
+msgstr ""
+"ajouter seulement Ã  l'index ; ne pas ajouter le contenu dans la base de "
+"données des objets"
 
 #: builtin/update-index.c:765
 msgid "remove named paths even if present in worktree"
-msgstr "supprimer les chemins nommés même s'ils sont présents dans la copie de travail"
+msgstr ""
+"supprimer les chemins nommés même s'ils sont présents dans la copie de "
+"travail"
 
 #: builtin/update-index.c:767
 msgid "with --stdin: input lines are terminated by null bytes"
@@ -8742,7 +9429,7 @@ msgstr "lire la liste des chemins Ã  mettre Ã  jour depuis l'entrée standard"
 
 #: builtin/update-index.c:773
 msgid "add entries from standard input to the index"
-msgstr "ajouter les entrées depuis l'entrée standard Ã  l'index"
+msgstr "ajouter les Ã©léments depuis l'entrée standard Ã  l'index"
 
 #: builtin/update-index.c:777
 msgid "repopulate stages #2 and #3 for the listed paths"
@@ -8750,7 +9437,7 @@ msgstr "repeupler les Ã©tapes n°2 et n°3 pour les chemins listés"
 
 #: builtin/update-index.c:781
 msgid "only update entries that differ from HEAD"
-msgstr "mettre Ã  jour seulement les entrées qui diffèrent de HEAD"
+msgstr "mettre Ã  jour seulement les Ã©léments qui diffèrent de HEAD"
 
 #: builtin/update-index.c:785
 msgid "ignore files missing from worktree"
@@ -8774,7 +9461,9 @@ msgstr "git update-ref [options] -d <nomréférence> [<anciennevaleur>]"
 
 #: builtin/update-ref.c:8
 msgid "git update-ref [options]    <refname> <newval> [<oldval>]"
-msgstr "git update-ref [options]    <nomréférence> <nouvellevaleur> [<anciennevaleur>]"
+msgstr ""
+"git update-ref [options]    <nomréférence> <nouvellevaleur> "
+"[<anciennevaleur>]"
 
 #: builtin/update-ref.c:19
 msgid "delete the reference"
@@ -8782,7 +9471,7 @@ msgstr "supprimer la référence"
 
 #: builtin/update-ref.c:21
 msgid "update <refname> not the one it points to"
-msgstr ""
+msgstr "mettre Ã  jour <nomréférence> et non la référence pointée par lui"
 
 #: builtin/update-server-info.c:6
 msgid "git update-server-info [--force]"
@@ -8828,7 +9517,7 @@ msgstr "écrire l'objet arbre pour un sous-répertoire <préfixe>"
 msgid "only useful for debugging"
 msgstr "seulement utile pour le débogage"
 
-#: git.c:16
+#: git.c:17
 msgid ""
 "'git help -a' and 'git help -g' lists available subcommands and some\n"
 "concept guides. See 'git help <command>' or 'git help <concept>'\n"
@@ -8838,19 +9527,23 @@ msgstr ""
 "quelques concepts. Voir 'git help <command>' ou 'git help <concept>'\n"
 "pour en lire plus Ã  propos d'une commande spécifique ou d'un concept."
 
-#: parse-options.h:156
+#: parse-options.h:144
+msgid "expiry date"
+msgstr "date d'expiration"
+
+#: parse-options.h:159
 msgid "no-op (backward compatibility)"
 msgstr "sans action (rétrocompatibilité)"
 
-#: parse-options.h:232
+#: parse-options.h:236
 msgid "be more verbose"
 msgstr "être plus verbeux"
 
-#: parse-options.h:234
+#: parse-options.h:238
 msgid "be more quiet"
 msgstr "être plus silencieux"
 
-#: parse-options.h:240
+#: parse-options.h:244
 msgid "use <n> digits to display SHA-1s"
 msgstr "utiliser <n> chiffres pour afficher les SHA-1s"
 
@@ -8880,7 +9573,9 @@ msgstr "Enregistrer les changements dans le dépôt"
 
 #: common-cmds.h:14
 msgid "Show changes between commits, commit and working tree, etc"
-msgstr "Afficher les changements entre les validations, entre validation et copie de travail, etc"
+msgstr ""
+"Afficher les changements entre les validations, entre validation et copie de "
+"travail, etc"
 
 #: common-cmds.h:15
 msgid "Download objects and refs from another repository"
@@ -8907,8 +9602,8 @@ msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Déplacer ou renommer un fichier, un répertoire, ou un lien symbolique"
 
 #: common-cmds.h:21
-msgid "Fetch from and merge with another repository or a local branch"
-msgstr "Rapatrier et fusionner avec un autre dépôt ou une branche locale"
+msgid "Fetch from and integrate with another repository or a local branch"
+msgstr "Rapatrier et intégrer avec un autre dépôt ou une branche locale"
 
 #: common-cmds.h:22
 msgid "Update remote refs along with associated objects"
@@ -8916,7 +9611,8 @@ msgstr "Mettre Ã  jour les références distantes ainsi que les objets associés
 
 #: common-cmds.h:23
 msgid "Forward-port local commits to the updated upstream head"
-msgstr "Reporter en avant les validations locales dans la tête en amont mise Ã  jour"
+msgstr ""
+"Reporter en avant les validations locales dans la tête en amont mise Ã  jour"
 
 #: common-cmds.h:24
 msgid "Reset current HEAD to the specified state"
@@ -8928,7 +9624,7 @@ msgstr "Supprimer les fichiers de la copie de travail et de l'index"
 
 #: common-cmds.h:26
 msgid "Show various types of objects"
-msgstr "Afficher différents types d'objects"
+msgstr "Afficher différents types d'objets"
 
 #: common-cmds.h:27
 msgid "Show the working tree status"
@@ -8936,7 +9632,8 @@ msgstr "Afficher le statut de la copie de travail"
 
 #: common-cmds.h:28
 msgid "Create, list, delete or verify a tag object signed with GPG"
-msgstr "Créer, lister, supprimer ou vérifier un objet d'étiquette signé avec GPG"
+msgstr ""
+"Créer, lister, supprimer ou vérifier un objet d'étiquette signé avec GPG"
 
 #: git-am.sh:50
 msgid "You need to set your committer info first"
@@ -8953,25 +9650,29 @@ msgstr ""
 #: git-am.sh:105
 #, sh-format
 msgid ""
-"When you have resolved this problem, run \"$cmdline --resolved\".\n"
+"When you have resolved this problem, run \"$cmdline --continue\".\n"
 "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n"
 "To restore the original branch and stop patching, run \"$cmdline --abort\"."
 msgstr ""
-"Lorsque vous aurez résolu ce problème, lancez \"$cmdline --resolved\".\n"
+"Lorsque vous aurez résolu ce problème, lancez \"$cmdline --continue\".\n"
 "Si vous préférez sauter ce patch, lancez \"$cmdline --skip\" Ã  la place.\n"
-"Pour restaurer la branche d'origine et stopper le patchage, lancez \"$cmdline --abort\"."
+"Pour restaurer la branche d'origine et stopper le patchage, lancez "
+"\"$cmdline --abort\"."
 
 #: git-am.sh:121
 msgid "Cannot fall back to three-way merge."
-msgstr "Impossible de retourner Ã  une fusion 3-way."
+msgstr "Impossible de retourner Ã  une fusion Ã  3 points."
 
 #: git-am.sh:137
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr "Le dépôt n'a pas les blobs nécessaires pour un retour Ã  une fusion 3-way."
+msgstr ""
+"Le dépôt n'a pas les blobs nécessaires pour un retour Ã  une fusion Ã  3 "
+"points."
 
 #: git-am.sh:139
 msgid "Using index info to reconstruct a base tree..."
-msgstr "Utilisation de l'information de l'index pour reconstruire un arbre de base..."
+msgstr ""
+"Utilisation de l'information de l'index pour reconstruire un arbre de base..."
 
 #: git-am.sh:154
 msgid ""
@@ -8983,15 +9684,15 @@ msgstr ""
 
 #: git-am.sh:163
 msgid "Falling back to patching base and 3-way merge..."
-msgstr "Retour Ã  un patch de la base et fusion 3-way..."
+msgstr "Retour Ã  un patch de la base et fusion Ã  3 points..."
 
 #: git-am.sh:179
 msgid "Failed to merge in the changes."
-msgstr "Échec de fusion dans les changements."
+msgstr "Échec d'intégration des modifications."
 
 #: git-am.sh:274
 msgid "Only one StGIT patch series can be applied at once"
-msgstr "Seulement une série de patches StGIT peut Ãªtre appliquée Ã  la fois"
+msgstr "Seulement une série de patchs StGIT peut Ãªtre appliquée Ã  la fois"
 
 #: git-am.sh:361
 #, sh-format
@@ -9008,27 +9709,39 @@ msgid ""
 "it will be removed. Please do not use it anymore."
 msgstr ""
 "L'option -b/--binary ne fait plus rien depuis longtemps,\n"
-"et elle sera supprimée. Merci de ne plus l'utiliser."
+"et elle sera supprimée. Veuillez ne plus l'utiliser."
 
-#: git-am.sh:477
+#: git-am.sh:479
 #, sh-format
 msgid "previous rebase directory $dotest still exists but mbox given."
-msgstr "le répertoire précédent de rebasage $dotest existe toujours mais mbox donnée."
+msgstr ""
+"le répertoire précédent de rebasage $dotest existe toujours mais mbox donnée."
 
-#: git-am.sh:482
+#: git-am.sh:484
 msgid "Please make up your mind. --skip or --abort?"
 msgstr "Décidez-vous. --skip ou --abort ?"
 
-#: git-am.sh:509
+#: git-am.sh:520
+#, sh-format
+msgid ""
+"Stray $dotest directory found.\n"
+"Use \"git am --abort\" to remove it."
+msgstr ""
+"Répertoire abandonné $dotest trouvé.\n"
+"Utilisez \"git am --abort\" pour le supprimer."
+
+#: git-am.sh:528
 msgid "Resolve operation not in progress, we are not resuming."
-msgstr "Pas de résolution de l'opération en cours, nous ne sommes pas dans une reprise."
+msgstr ""
+"Pas de résolution de l'opération en cours, nous ne sommes pas dans une "
+"reprise."
 
-#: git-am.sh:575
+#: git-am.sh:594
 #, sh-format
 msgid "Dirty index: cannot apply patches (dirty: $files)"
-msgstr "Index sale : impossible d'appliquer des patches (sales : $files)"
+msgstr "Index sale : impossible d'appliquer des patchs (sales : $files)"
 
-#: git-am.sh:679
+#: git-am.sh:698
 #, sh-format
 msgid ""
 "Patch is empty.  Was it split wrong?\n"
@@ -9037,40 +9750,46 @@ msgid ""
 msgstr ""
 "Le patch est vide.  Ã‰tait-il mal découpé ?\n"
 "Si vous préférez sauter ce patch, lancez plutôt \"$cmdline --skip\".\n"
-"Pour restaurer la branche d'origine et stopper le patchage, lancez \"$cmdline --abort\"."
+"Pour restaurer la branche d'origine et stopper le patchage, lancez "
+"\"$cmdline --abort\"."
 
-#: git-am.sh:706
+#: git-am.sh:725
 msgid "Patch does not have a valid e-mail address."
 msgstr "Le patch n'a pas d'adresse e-mail valide."
 
-#: git-am.sh:753
+#: git-am.sh:772
 msgid "cannot be interactive without stdin connected to a terminal."
-msgstr "impossible d'être interactif sans entrée standard connectée Ã  un terminal."
+msgstr ""
+"impossible d'être interactif sans entrée standard connectée Ã  un terminal."
 
-#: git-am.sh:757
+#: git-am.sh:776
 msgid "Commit Body is:"
 msgstr "Le corps de la validation est :"
 
 #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
 #. in your translation. The program will only accept English
 #. input at this point.
-#: git-am.sh:764
+#: git-am.sh:783
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
 msgstr "Appliquer ? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
 
-#: git-am.sh:800
+#: git-am.sh:819
 #, sh-format
 msgid "Applying: $FIRSTLINE"
 msgstr "Application : $FIRSTLINE"
 
-#: git-am.sh:821
+#: git-am.sh:840
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr ""
+"Aucun changement - avez-vous oublié d'utiliser 'git add' ?\n"
+"S'il n'y a plus rien Ã  indexer, il se peut qu'autre chose ait déjà\n"
+"introduit les mêmes changements ; vous pourriez avoir envie de sauter ce "
+"patch."
 
-#: git-am.sh:829
+#: git-am.sh:848
 msgid ""
 "You still have unmerged paths in your index\n"
 "did you forget to use 'git add'?"
@@ -9078,16 +9797,16 @@ msgstr ""
 "Vous avez toujours des chemins non fusionnés dans votre index\n"
 "auriez-vous oublié de faire 'git add' ?"
 
-#: git-am.sh:845
+#: git-am.sh:864
 msgid "No changes -- Patch already applied."
 msgstr "Pas de changement -- Patch déjà appliqué."
 
-#: git-am.sh:855
+#: git-am.sh:874
 #, sh-format
 msgid "Patch failed at $msgnum $FIRSTLINE"
 msgstr "Le patch a Ã©choué Ã  $msgnum $FIRSTLINE"
 
-#: git-am.sh:858
+#: git-am.sh:877
 #, sh-format
 msgid ""
 "The copy of the patch that failed is found in:\n"
@@ -9096,7 +9815,7 @@ msgstr ""
 "La copie du patch qui a Ã©choué se trouve dans :\n"
 "   $dotest/patch"
 
-#: git-am.sh:876
+#: git-am.sh:895
 msgid "applying to an empty history"
 msgstr "application Ã  un historique vide"
 
@@ -9129,11 +9848,13 @@ msgstr "Mauvaise HEAD - j'ai besoin d'une HEAD"
 #, sh-format
 msgid ""
 "Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'."
-msgstr "L'extraction de '$start_head' a Ã©choué. Essayez 'git bisect reset <branchevalide>'."
+msgstr ""
+"L'extraction de '$start_head' a Ã©choué. Essayez 'git bisect reset "
+"<branchevalide>'."
 
 #: git-bisect.sh:140
 msgid "won't bisect on seeked tree"
-msgstr ""
+msgstr "refus de bissecter sur un arbre 'seeked'"
 
 #: git-bisect.sh:144
 msgid "Bad HEAD - strange symbolic ref"
@@ -9151,7 +9872,7 @@ msgstr "Mauvaise révision en entrée : $arg"
 
 #: git-bisect.sh:232
 msgid "Please call 'bisect_state' with at least one argument."
-msgstr "Merci d'appeler 'bisect_state' avec au moins un argument."
+msgstr "Veuillez appeler 'bisect_state' avec au moins un argument."
 
 #: git-bisect.sh:244
 #, sh-format
@@ -9262,7 +9983,8 @@ msgid ""
 "as appropriate to mark resolution, or use 'git commit -a'."
 msgstr ""
 "Le pull n'est pas possible car vous avez des fichiers non fusionnés.\n"
-"Merci de corriger dans votre copie de travail, et utilisez alors 'git add/rm <file>'\n"
+"Veuillez les corriger dans votre copie de travail, et utilisez alors 'git "
+"add/rm <file>'\n"
 "si nécessaire pour marquer comme résolu, ou utilisez 'git commit -a'."
 
 #: git-pull.sh:25
@@ -9271,7 +9993,9 @@ msgstr "Le pull n'est pas possible car vous avez des fichiers non fusionnés."
 
 #: git-pull.sh:203
 msgid "updating an unborn branch with changes added to the index"
-msgstr "mise Ã  jour d'une branche non encore créée avec les changements ajoutés dans l'index"
+msgstr ""
+"mise Ã  jour d'une branche non encore créée avec les changements ajoutés dans "
+"l'index"
 
 #. The fetch involved updating the current branch.
 #. The working tree and the index file is still based on the
@@ -9296,7 +10020,7 @@ msgstr "Impossible de fusionner de multiples branches sur une tête vide"
 msgid "Cannot rebase onto multiple branches"
 msgstr "Impossible de rebaser sur de multiples branches"
 
-#: git-rebase.sh:53
+#: git-rebase.sh:54
 msgid ""
 "When you have resolved this problem, run \"git rebase --continue\".\n"
 "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n"
@@ -9305,33 +10029,55 @@ msgid ""
 msgstr ""
 "Lorsque vous aurez résolu ce problème, lancez \"git rebase --continue\".\n"
 "Si vous préférez sauter ce patch, lancez \"git rebase --skip\" Ã  la place.\n"
-"Pour extraire la branche d'origine et stopper le rebasage, lancez \"git rebase --abort\"."
+"Pour extraire la branche d'origine et stopper le rebasage, lancez \"git "
+"rebase --abort\"."
+
+#: git-rebase.sh:156
+msgid "Applied autostash."
+msgstr "Autoremisage appliqué."
+
+#: git-rebase.sh:159
+#, sh-format
+msgid "Cannot store $stash_sha1"
+msgstr "Impossible de stocker $stash_sha1"
 
 #: git-rebase.sh:160
+msgid ""
+"Applying autostash resulted in conflicts.\n"
+"Your changes are safe in the stash.\n"
+"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
+msgstr ""
+"L'application de l'autoremisage a provoqué des conflits\n"
+"Vos  modifications sont Ã  l'abri dans la remise.\n"
+"Vous pouvez lancer \"git stash pop\" ou \"git stash drop\" Ã  tout moment.\n"
+
+#: git-rebase.sh:190
 msgid "The pre-rebase hook refused to rebase."
-msgstr "Le hook pre-rebase a refusé de rebaser."
+msgstr "Le crochet pre-rebase a refusé de rebaser."
 
-#: git-rebase.sh:165
+#: git-rebase.sh:195
 msgid "It looks like git-am is in progress. Cannot rebase."
 msgstr "Il semble que git-am soit en cours. Impossible de rebaser."
 
-#: git-rebase.sh:296
+#: git-rebase.sh:329
 msgid "The --exec option must be used with the --interactive option"
 msgstr "L'option --exec doit Ãªtre utilisée avec l'option --interactive"
 
-#: git-rebase.sh:301
+#: git-rebase.sh:334
 msgid "No rebase in progress?"
 msgstr "Pas de rebasage en cours ?"
 
-#: git-rebase.sh:312
+#: git-rebase.sh:345
 msgid "The --edit-todo action can only be used during interactive rebase."
-msgstr "L'action --edit-todo peut seulement Ãªtre utilisée lors d'un rebasage interactif."
+msgstr ""
+"L'action --edit-todo peut seulement Ãªtre utilisée lors d'un rebasage "
+"interactif."
 
-#: git-rebase.sh:319
+#: git-rebase.sh:352
 msgid "Cannot read HEAD"
 msgstr "Impossible de lire HEAD"
 
-#: git-rebase.sh:322
+#: git-rebase.sh:355
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -9339,12 +10085,12 @@ msgstr ""
 "Vous devez Ã©diter tous les conflits de fusion et\n"
 "les marquer comme résolus avec git add"
 
-#: git-rebase.sh:340
+#: git-rebase.sh:373
 #, sh-format
 msgid "Could not move back to $head_name"
 msgstr "Impossible de revenir Ã  $head_name"
 
-#: git-rebase.sh:359
+#: git-rebase.sh:392
 #, sh-format
 msgid ""
 "It seems that there is already a $state_dir_base directory, and\n"
@@ -9362,59 +10108,69 @@ msgstr ""
 "\t$cmd_live_rebase\n"
 "Si Ã§a n'est pas le cas, merci de\n"
 "\t$cmd_clear_stale_rebase\n"
-"et relancer Ã  nouveau.  Je m'arrête au cas où vous auriez quelque chose\n"
+"puis relancez-moi Ã  nouveau.  Je m'arrête au cas où vous auriez quelque "
+"chose\n"
 "d'important ici."
 
-#: git-rebase.sh:404
+#: git-rebase.sh:437
 #, sh-format
 msgid "invalid upstream $upstream_name"
 msgstr "invalide $upstream_name en amont"
 
-#: git-rebase.sh:428
+#: git-rebase.sh:461
 #, sh-format
 msgid "$onto_name: there are more than one merge bases"
 msgstr "$onto_name : il y a plus d'une base de fusion"
 
-#: git-rebase.sh:431 git-rebase.sh:435
+#: git-rebase.sh:464 git-rebase.sh:468
 #, sh-format
 msgid "$onto_name: there is no merge base"
 msgstr "$onto_name : il n'y a pas de base de fusion"
 
-#: git-rebase.sh:440
+#: git-rebase.sh:473
 #, sh-format
 msgid "Does not point to a valid commit: $onto_name"
 msgstr "Ne pointe pas sur une validation valide : $onto_name"
 
-#: git-rebase.sh:463
+#: git-rebase.sh:496
 #, sh-format
 msgid "fatal: no such branch: $branch_name"
 msgstr "fatal : pas de branche : $branch_name"
 
-#: git-rebase.sh:483
+#: git-rebase.sh:519
+msgid "Cannot autostash"
+msgstr "Autoremisage impossible"
+
+#: git-rebase.sh:524
+#, sh-format
+msgid "Created autostash: $stash_abbrev"
+msgstr "Autoremisage créé : $stash_abbrev"
+
+#: git-rebase.sh:528
 msgid "Please commit or stash them."
-msgstr "Merci de les valider ou de les remiser."
+msgstr "Veuillez les valider ou les remiser."
 
-#: git-rebase.sh:501
+#: git-rebase.sh:548
 #, sh-format
 msgid "Current branch $branch_name is up to date."
 msgstr "La branche courante $branch_name est Ã  jour."
 
-#: git-rebase.sh:504
+#: git-rebase.sh:552
 #, sh-format
 msgid "Current branch $branch_name is up to date, rebase forced."
 msgstr "La branche courante $branch_name est Ã  jour, rebasage forcé."
 
-#: git-rebase.sh:515
+#: git-rebase.sh:563
 #, sh-format
 msgid "Changes from $mb to $onto:"
 msgstr "Changements de $mb sur $onto :"
 
 #. Detach HEAD and reset the tree
-#: git-rebase.sh:524
+#: git-rebase.sh:572
 msgid "First, rewinding head to replay your work on top of it..."
 msgstr "Premièrement, retour de head pour rejouer votre travail par-dessus..."
 
-#: git-rebase.sh:532
+#: git-rebase.sh:582
 #, sh-format
 msgid "Fast-forwarded $branch_name to $onto_name."
 msgstr "$branch_name mise Ã  jour en avance rapide sur $onto_name."
@@ -9447,6 +10203,11 @@ msgstr "Impossible de supprimer l'index temporaire (ne peut pas se produire)"
 msgid "Cannot record working tree state"
 msgstr "Impossible d'enregistrer l'état de la copie de travail"
 
+#: git-stash.sh:190
+#, sh-format
+msgid "Cannot update $ref_stash with $w_commit"
+msgstr "Impossible de mettre Ã  jour $ref_stash avec $w_commit"
+
 #. TRANSLATORS: $option is an invalid option, like
 #. `--blah-blah'. The 7 spaces at the beginning of the
 #. second line correspond to "error: ". So you should line
@@ -9457,7 +10218,7 @@ msgstr "Impossible d'enregistrer l'état de la copie de travail"
 #. $ git stash save --blah-blah 2>&1 | head -n 2
 #. error: unknown option for 'stash save': --blah-blah
 #. To provide a message, use git stash save -- '--blah-blah'
-#: git-stash.sh:202
+#: git-stash.sh:241
 #, sh-format
 msgid ""
 "error: unknown option for 'stash save': $option\n"
@@ -9466,119 +10227,142 @@ msgstr ""
 "erreur: option inconnue pour 'stash save': $option\n"
 "        Pour fournir un message, utilisez git stash save -- '$option'"
 
-#: git-stash.sh:223
+#: git-stash.sh:262
 msgid "No local changes to save"
 msgstr "Pas de changements en local Ã  sauver"
 
-#: git-stash.sh:227
+#: git-stash.sh:268
+msgid ""
+"The following untracked files would NOT be saved but need to be removed by "
+"stash save:"
+msgstr ""
+"Les fichiers suivants non suivis ne seront PAS sauvés mais doivent Ãªtre "
+"supprimés par l'état du remisage :"
+
+#: git-stash.sh:270
+msgid ""
+"Aborting. Consider using either the --force or --include-untracked option."
+msgstr "Abandon. Utilisez l'option --force ou --include-untracked."
+
+#: git-stash.sh:274
 msgid "Cannot initialize stash"
 msgstr "Impossible d'initialiser le remisage"
 
-#: git-stash.sh:235
+#: git-stash.sh:278
 msgid "Cannot save the current status"
 msgstr "Impossible de sauver le statut courant"
 
-#: git-stash.sh:253
+#: git-stash.sh:296
 msgid "Cannot remove worktree changes"
 msgstr "Impossible de supprimer les changements de la copie de travail"
 
-#: git-stash.sh:352
+#: git-stash.sh:395
 msgid "No stash found."
 msgstr "Pas de remisage trouvé."
 
-#: git-stash.sh:359
+#: git-stash.sh:402
 #, sh-format
 msgid "Too many revisions specified: $REV"
 msgstr "Trop de révisions spécifiées : $REV"
 
-#: git-stash.sh:365
+#: git-stash.sh:408
 #, sh-format
 msgid "$reference is not valid reference"
 msgstr "$reference n'est pas une référence valide"
 
-#: git-stash.sh:393
+#: git-stash.sh:436
 #, sh-format
 msgid "'$args' is not a stash-like commit"
 msgstr "'$args' n'est pas une validation de type remisage"
 
-#: git-stash.sh:404
+#: git-stash.sh:447
 #, sh-format
 msgid "'$args' is not a stash reference"
 msgstr "'$args' n'est pas une référence de remisage"
 
-#: git-stash.sh:412
+#: git-stash.sh:455
 msgid "unable to refresh index"
 msgstr "impossible de rafraîchir l'index"
 
-#: git-stash.sh:416
+#: git-stash.sh:459
 msgid "Cannot apply a stash in the middle of a merge"
 msgstr "Impossible d'appliquer un remisage au milieu d'une fusion"
 
-#: git-stash.sh:424
+#: git-stash.sh:467
 msgid "Conflicts in index. Try without --index."
 msgstr "Conflits dans l'index. Essayez sans --index."
 
-#: git-stash.sh:426
+#: git-stash.sh:469
 msgid "Could not save index tree"
 msgstr "Impossible de sauver l'arbre d'index"
 
-#: git-stash.sh:460
+#: git-stash.sh:503
 msgid "Cannot unstage modified files"
 msgstr "Impossible de désindexer les fichiers modifiés"
 
-#: git-stash.sh:475
+#: git-stash.sh:518
 msgid "Index was not unstashed."
-msgstr ""
+msgstr "L'index n'a pas Ã©té sorti de remise"
 
-#: git-stash.sh:492
+#: git-stash.sh:535
 #, sh-format
 msgid "Dropped ${REV} ($s)"
 msgstr "${REV} supprimé ($s)"
 
-#: git-stash.sh:493
+#: git-stash.sh:536
 #, sh-format
 msgid "${REV}: Could not drop stash entry"
-msgstr "${REV}: Impossible de supprimer l'entrée de stash"
+msgstr "${REV}: Impossible de supprimer l'élément de stash"
 
-#: git-stash.sh:500
+#: git-stash.sh:543
 msgid "No branch name specified"
 msgstr "Aucune branche spécifiée"
 
-#: git-stash.sh:571
+#: git-stash.sh:615
 msgid "(To restore them type \"git stash apply\")"
 msgstr "(Pour les restaurer tapez \"git stash apply\")"
 
-#: git-submodule.sh:91
+#: git-submodule.sh:95
 #, sh-format
 msgid "cannot strip one component off url '$remoteurl'"
 msgstr "impossible de supprimer un composant de l'URL '$remoteurl'"
 
-#: git-submodule.sh:196
+#: git-submodule.sh:237
 #, sh-format
 msgid "No submodule mapping found in .gitmodules for path '$sm_path'"
-msgstr "Pas de mappage du sous-module trouvé dans .gitmodules pour le chemin '$sm_path'"
+msgstr ""
+"Pas de mise en correspondance du sous-module trouvé dans .gitmodules pour le "
+"chemin '$sm_path'"
 
-#: git-submodule.sh:239
+#: git-submodule.sh:281
 #, sh-format
 msgid "Clone of '$url' into submodule path '$sm_path' failed"
 msgstr "Le clonage de '$url' dans le chemin de sous-module '$sm_path' a Ã©choué"
 
-#: git-submodule.sh:251
+#: git-submodule.sh:293
 #, sh-format
 msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa"
-msgstr "Le répertoire Git '$a' fait partie du chemin de sous-module '$b' ou vice-versa"
+msgstr ""
+"Le répertoire Git '$a' fait partie du chemin de sous-module '$b' ou vice-"
+"versa"
+
+#: git-submodule.sh:403
+msgid "Relative path can only be used from the toplevel of the working tree"
+msgstr ""
+"Un chemin relatif ne peut Ãªtre utilisé que depuis la racine de la copie de "
+"travail"
 
-#: git-submodule.sh:349
+#: git-submodule.sh:413
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
 msgstr "L'URL de dépôt '$repo' doit Ãªtre absolu ou commencer par ./|../"
 
-#: git-submodule.sh:366
+#: git-submodule.sh:430
 #, sh-format
 msgid "'$sm_path' already exists in the index"
 msgstr "'$sm_path' existe déjà dans l'index"
 
-#: git-submodule.sh:370
+#: git-submodule.sh:434
 #, sh-format
 msgid ""
 "The following path is ignored by one of your .gitignore files:\n"
@@ -9589,235 +10373,277 @@ msgstr ""
 "$sm_path\n"
 "Utilisez -f si vous voulez vraiment l'ajouter."
 
-#: git-submodule.sh:388
+#: git-submodule.sh:452
 #, sh-format
 msgid "Adding existing repo at '$sm_path' to the index"
 msgstr "Ajout du dépôt existant Ã  '$sm_path' dans l'index"
 
-#: git-submodule.sh:390
+#: git-submodule.sh:454
 #, sh-format
 msgid "'$sm_path' already exists and is not a valid git repo"
 msgstr "'$sm_path' existe déjà et n'est pas un dépôt git valide"
 
-#: git-submodule.sh:398
+#: git-submodule.sh:462
 #, sh-format
 msgid "A git directory for '$sm_name' is found locally with remote(s):"
-msgstr "Un répertoire git pour '$sm_name' est trouvé en local avec le(s) serveur(s) distant(s) :"
+msgstr ""
+"Un répertoire git pour '$sm_name' est trouvé en local avec le(s) serveur(s) "
+"distant(s) :"
 
-#: git-submodule.sh:400
+#: git-submodule.sh:464
 #, sh-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from"
-msgstr "Si vous voulez réutiliser ce répertoire git local au lieu de cloner Ã  nouveau depuis"
+msgstr ""
+"Si vous voulez réutiliser ce répertoire git local au lieu de cloner Ã  "
+"nouveau depuis"
 
-#: git-submodule.sh:402
+#: git-submodule.sh:466
 #, sh-format
 msgid ""
 "use the '--force' option. If the local git directory is not the correct repo"
-msgstr "utilisez l'option '--force'. Si le répertoire local git n'est pas le dépôt correct"
+msgstr ""
+"utilisez l'option '--force'. Si le répertoire local git n'est pas le dépôt "
+"correct"
 
-#: git-submodule.sh:403
+#: git-submodule.sh:467
 #, sh-format
 msgid ""
 "or you are unsure what this means choose another name with the '--name' "
 "option."
-msgstr "ou vous ne savez pas ce que cela signifie de choisir un autre nom avec l'option '--name'."
+msgstr ""
+"ou vous ne savez pas ce que cela signifie de choisir un autre nom avec "
+"l'option '--name'."
 
-#: git-submodule.sh:405
+#: git-submodule.sh:469
 #, sh-format
 msgid "Reactivating local git directory for submodule '$sm_name'."
 msgstr "Réactivation du répertoire git local pour le sous-module '$sm_name'."
 
-#: git-submodule.sh:417
+#: git-submodule.sh:481
 #, sh-format
 msgid "Unable to checkout submodule '$sm_path'"
 msgstr "Impossible d'extraire le sous-module '$sm_path'"
 
-#: git-submodule.sh:422
+#: git-submodule.sh:486
 #, sh-format
 msgid "Failed to add submodule '$sm_path'"
 msgstr "Échec d'ajout du sous-module '$sm_path'"
 
-#: git-submodule.sh:431
+#: git-submodule.sh:495
 #, sh-format
 msgid "Failed to register submodule '$sm_path'"
 msgstr "Échec d'enregistrement du sous-module '$sm_path'"
 
-#: git-submodule.sh:474
+#: git-submodule.sh:539
 #, sh-format
-msgid "Entering '$prefix$sm_path'"
-msgstr "Entrée dans '$prefix$sm_path'"
+msgid "Entering '$prefix$displaypath'"
+msgstr "Entrée dans '$prefix$displaypath'"
 
-#: git-submodule.sh:488
+#: git-submodule.sh:554
 #, sh-format
-msgid "Stopping at '$sm_path'; script returned non-zero status."
-msgstr "Arrêt sur '$sm_path' ; le script a retourné un statut non nul."
+msgid "Stopping at '$prefix$displaypath'; script returned non-zero status."
+msgstr ""
+"Arrêt sur '$prefix$displaypath' ; le script a retourné un statut non nul."
 
-#: git-submodule.sh:532
+#: git-submodule.sh:600
 #, sh-format
-msgid "No url found for submodule path '$sm_path' in .gitmodules"
-msgstr "URL non trouvé pour le chemin de sous-module '$sm_path' dans .gitmodules"
+msgid "No url found for submodule path '$displaypath' in .gitmodules"
+msgstr ""
+"URL non trouvé pour le chemin de sous-module '$displaypath' dans .gitmodules"
 
-#: git-submodule.sh:541
+#: git-submodule.sh:609
 #, sh-format
-msgid "Failed to register url for submodule path '$sm_path'"
-msgstr "Échec d'enregistrement de l'URL pour le chemin de sous-module '$sm_path'"
+msgid "Failed to register url for submodule path '$displaypath'"
+msgstr ""
+"Échec d'enregistrement de l'URL pour le chemin de sous-module '$displaypath'"
 
-#: git-submodule.sh:543
+#: git-submodule.sh:611
 #, sh-format
-msgid "Submodule '$name' ($url) registered for path '$sm_path'"
-msgstr "Sous-module '$name' ($url) enregistré pour le chemin '$sm_path'"
+msgid "Submodule '$name' ($url) registered for path '$displaypath'"
+msgstr "Sous-module '$name' ($url) enregistré pour le chemin '$displaypath'"
 
-#: git-submodule.sh:551
+#: git-submodule.sh:619
 #, sh-format
-msgid "Failed to register update mode for submodule path '$sm_path'"
-msgstr "Échec d'enregistrement du mode de mise Ã  jour pour le chemin de sous-module '$sm_path'"
+msgid "Failed to register update mode for submodule path '$displaypath'"
+msgstr ""
+"Échec d'enregistrement du mode de mise Ã  jour pour le chemin de sous-module "
+"'$displaypath'"
 
-#: git-submodule.sh:588
+#: git-submodule.sh:656
 #, sh-format
 msgid "Use '.' if you really want to deinitialize all submodules"
-msgstr "Utilisez '.' si vous voulez vraiment réinitialiser tous les sous-modules"
+msgstr ""
+"Utilisez '.' si vous voulez vraiment réinitialiser tous les sous-modules"
 
-#: git-submodule.sh:603
+#: git-submodule.sh:673
 #, sh-format
-msgid "Submodule work tree '$sm_path' contains a .git directory"
-msgstr "La copie de travail du sous-module '$sm_path' contient un répertoire .git"
+msgid "Submodule work tree '$displaypath' contains a .git directory"
+msgstr ""
+"La copie de travail du sous-module '$displaypath' contient un répertoire .git"
 
-#: git-submodule.sh:604
+#: git-submodule.sh:674
 #, sh-format
 msgid ""
 "(use 'rm -rf' if you really want to remove it including all of its history)"
-msgstr "(utilisez 'rm -rf' si vous voulez vraiment le supprimer en incluant tout son historique)"
+msgstr ""
+"(utilisez 'rm -rf' si vous voulez vraiment le supprimer en incluant tout son "
+"historique)"
 
-#: git-submodule.sh:610
+#: git-submodule.sh:680
 #, sh-format
 msgid ""
-"Submodule work tree '$sm_path' contains local modifications; use '-f' to "
+"Submodule work tree '$displaypath' contains local modifications; use '-f' to "
 "discard them"
-msgstr "La copie de travail du sous-module '$sm_path' contient des modifications locales; utilisez '-f' pour les annuler"
+msgstr ""
+"La copie de travail du sous-module '$displaypath' contient des modifications "
+"locales ; utilisez '-f' pour les annuler"
 
-#: git-submodule.sh:613
+#: git-submodule.sh:683
 #, sh-format
-msgid "Cleared directory '$sm_path'"
-msgstr "Répertoire '$sm_path' nettoyé"
+msgid "Cleared directory '$displaypath'"
+msgstr "Répertoire '$displaypath' nettoyé"
 
-#: git-submodule.sh:614
+#: git-submodule.sh:684
 #, sh-format
-msgid "Could not remove submodule work tree '$sm_path'"
-msgstr "Impossible de supprimer la copie de travail du sous-module '$sm_path'"
+msgid "Could not remove submodule work tree '$displaypath'"
+msgstr ""
+"Impossible de supprimer la copie de travail du sous-module '$displaypath'"
 
-#: git-submodule.sh:617
+#: git-submodule.sh:687
 #, sh-format
-msgid "Could not create empty submodule directory '$sm_path'"
-msgstr "Impossible de créer le répertoire vide du sous-module '$sm_path'"
+msgid "Could not create empty submodule directory '$displaypath'"
+msgstr "Impossible de créer le répertoire vide du sous-module '$displaypath'"
 
-#: git-submodule.sh:626
+#: git-submodule.sh:696
 #, sh-format
-msgid "Submodule '$name' ($url) unregistered for path '$sm_path'"
-msgstr "Le sous-module '$name' ($url) n'est pas enregistré pour le chemin '$sm_path'"
+msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
+msgstr ""
+"Le sous-module '$name' ($url) n'est pas enregistré pour le chemin "
+"'$displaypath'"
 
-#: git-submodule.sh:731
+#: git-submodule.sh:811
 #, sh-format
 msgid ""
-"Submodule path '$prefix$sm_path' not initialized\n"
+"Submodule path '$displaypath' not initialized\n"
 "Maybe you want to use 'update --init'?"
 msgstr ""
-"Chemin de sous-module '$prefix$sm_path' non initialisé\n"
+"Chemin de sous-module '$displaypath' non initialisé\n"
 "Peut-être souhaitez-vous utiliser 'update --init' ?"
 
-#: git-submodule.sh:744
+#: git-submodule.sh:824
 #, sh-format
-msgid "Unable to find current revision in submodule path '$prefix$sm_path'"
-msgstr "Impossible de trouver la révision courante dans le chemin de sous-module '$prefix$sm_path'"
+msgid "Unable to find current revision in submodule path '$displaypath'"
+msgstr ""
+"Impossible de trouver la révision courante dans le chemin de sous-module "
+"'$displaypath'"
 
-#: git-submodule.sh:753
+#: git-submodule.sh:833
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
 msgstr "Impossible de rapatrier dans le chemin de sous-module '$sm_path'"
 
-#: git-submodule.sh:777
+#: git-submodule.sh:857
+#, sh-format
+msgid "Unable to fetch in submodule path '$displaypath'"
+msgstr "Impossible de rapatrier dans le chemin de sous-module '$displaypath'"
+
+#: git-submodule.sh:871
+#, sh-format
+msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
+msgstr ""
+"Impossible de rebaser '$sha1' dans le chemin de sous-module '$displaypath'"
+
+#: git-submodule.sh:872
 #, sh-format
-msgid "Unable to fetch in submodule path '$prefix$sm_path'"
-msgstr "Impossible de rapatrier dans le chemin de sous-module '$prefix$sm_path'"
+msgid "Submodule path '$displaypath': rebased into '$sha1'"
+msgstr "Chemin de sous-module '$displaypath' : rebasé dans '$sha1'"
 
-#: git-submodule.sh:791
+#: git-submodule.sh:877
 #, sh-format
-msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'"
-msgstr "Impossible de rebaser '$sha1' dans le chemin de sous-module '$prefix$sm_path'"
+msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
+msgstr ""
+"Impossible de fusionner '$sha1' dans le chemin de sous-module '$displaypath'"
 
-#: git-submodule.sh:792
+#: git-submodule.sh:878
 #, sh-format
-msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'"
-msgstr "Chemin de sous-module '$prefix$sm_path' : rebasé dans '$sha1'"
+msgid "Submodule path '$displaypath': merged in '$sha1'"
+msgstr "Chemin de sous-module '$displaypath' : fusionné dans '$sha1'"
 
-#: git-submodule.sh:797
+#: git-submodule.sh:883
 #, sh-format
-msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'"
-msgstr "Impossible de fusionner '$sha1' dans le chemin de sous-module '$prefix$sm_path'"
+msgid ""
+"Execution of '$command $sha1' failed in submodule  path '$prefix$sm_path'"
+msgstr ""
+"L'exécution de '$command $sha1' a Ã©choué dans le chemin de sous-module "
+"'$prefix$sm_path'"
 
-#: git-submodule.sh:798
+#: git-submodule.sh:884
 #, sh-format
-msgid "Submodule path '$prefix$sm_path': merged in '$sha1'"
-msgstr "Chemin de sous-module '$prefix$sm_path' : fusionné dans '$sha1'"
+msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
+msgstr "Chemin de sous-module '$prefix$sm_path' : '$command $sha1'"
 
-#: git-submodule.sh:803
+#: git-submodule.sh:889
 #, sh-format
-msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'"
-msgstr "Impossible d'extraire '$sha1' dans le chemin de sous-module '$prefix$sm_path'"
+msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
+msgstr ""
+"Impossible d'extraire '$sha1' dans le chemin de sous-module '$displaypath'"
 
-#: git-submodule.sh:804
+#: git-submodule.sh:890
 #, sh-format
-msgid "Submodule path '$prefix$sm_path': checked out '$sha1'"
-msgstr "Chemin de sous-module '$prefix$sm_path' : '$sha1' extrait"
+msgid "Submodule path '$displaypath': checked out '$sha1'"
+msgstr "Chemin de sous-module '$displaypath' : '$sha1' extrait"
 
-#: git-submodule.sh:831
+#: git-submodule.sh:917
 #, sh-format
-msgid "Failed to recurse into submodule path '$prefix$sm_path'"
-msgstr "Échec de parcours dans le chemin du sous-module '$prefix$sm_path'"
+msgid "Failed to recurse into submodule path '$displaypath'"
+msgstr "Échec de parcours dans le chemin du sous-module '$displaypath'"
 
-#: git-submodule.sh:939
+#: git-submodule.sh:1025
 msgid "The --cached option cannot be used with the --files option"
 msgstr "L'option --cached ne peut pas Ãªtre utilisée avec l'option --files"
 
 #. unexpected type
-#: git-submodule.sh:979
+#: git-submodule.sh:1066
 #, sh-format
 msgid "unexpected mode $mod_dst"
 msgstr "mode $mod_dst inattendu"
 
-#: git-submodule.sh:997
+#: git-submodule.sh:1086
 #, sh-format
-msgid "  Warn: $name doesn't contain commit $sha1_src"
-msgstr "  Attention : $name ne contient pas la validation $sha1_src"
+msgid "  Warn: $display_name doesn't contain commit $sha1_src"
+msgstr "  Attention : $display_name ne contient pas la validation $sha1_src"
 
-#: git-submodule.sh:1000
+#: git-submodule.sh:1089
 #, sh-format
-msgid "  Warn: $name doesn't contain commit $sha1_dst"
-msgstr "  Attention : $name ne contient pas la validation $sha1_dst"
+msgid "  Warn: $display_name doesn't contain commit $sha1_dst"
+msgstr "  Attention : $display_name ne contient pas la validation $sha1_dst"
 
-#: git-submodule.sh:1003
+#: git-submodule.sh:1092
 #, sh-format
-msgid "  Warn: $name doesn't contain commits $sha1_src and $sha1_dst"
-msgstr "  Attention : $name ne contient pas les validations $sha1_src et $sha1_dst"
+msgid "  Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
+msgstr ""
+"  Attention : $display_name ne contient pas les validations $sha1_src et "
+"$sha1_dst"
 
-#: git-submodule.sh:1028
+#: git-submodule.sh:1117
 msgid "blob"
 msgstr "blob"
 
-#: git-submodule.sh:1066
+#: git-submodule.sh:1155
 msgid "Submodules changed but not updated:"
 msgstr "Sous-modules modifiés mais non mis Ã  jour :"
 
-#: git-submodule.sh:1068
+#: git-submodule.sh:1157
 msgid "Submodule changes to be committed:"
 msgstr "Changements du sous-module Ã  valider :"
 
-#: git-submodule.sh:1153
+#: git-submodule.sh:1242
 #, sh-format
 msgid "Failed to recurse into submodule path '$sm_path'"
 msgstr "Échec de parcours dans le chemin du sous-module '$sm_path'"
 
-#: git-submodule.sh:1216
+#: git-submodule.sh:1306
 #, sh-format
-msgid "Synchronizing submodule url for '$prefix$sm_path'"
-msgstr "Synchronisation de l'URL sous-module pour '$prefix$sm_path'"
+msgid "Synchronizing submodule url for '$displaypath'"
+msgstr "Synchronisation de l'URL sous-module pour '$displaypath'"
index 74563c92b4cdce8e947a2816a8b56355b11439e6..b4e32b74d3622f92b2c5d3b9881e5cdf49d7f375 100644 (file)
--- a/pretty.c
+++ b/pretty.c
@@ -432,7 +432,7 @@ void pp_user_info(struct pretty_print_context *pp,
                map_user(pp->mailmap, &mailbuf, &maillen, &namebuf, &namelen);
 
        if (pp->fmt == CMIT_FMT_EMAIL) {
-               if (pp->from_ident) {
+               if (pp->from_ident && ident_cmp(pp->from_ident, &ident)) {
                        struct strbuf buf = STRBUF_INIT;
 
                        strbuf_addstr(&buf, "From: ");
index 6bbe1b1fb3435247e1114cbf496cd9d7640f3def..33dd676ccbbd24e0bace49347f1f5d81b5099bcc 100644 (file)
@@ -643,7 +643,7 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
                        if (*ptr == '/') {
                                struct cache_entry *foundce;
                                ++ptr;
-                               foundce = index_name_exists(istate, ce->name, ptr - ce->name, ignore_case);
+                               foundce = index_dir_exists(istate, ce->name, ptr - ce->name - 1);
                                if (foundce) {
                                        memcpy((void *)startPtr, foundce->name + (startPtr - ce->name), ptr - startPtr);
                                        startPtr = ptr;
@@ -652,7 +652,7 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
                }
        }
 
-       alias = index_name_exists(istate, ce->name, ce_namelen(ce), ignore_case);
+       alias = index_file_exists(istate, ce->name, ce_namelen(ce), ignore_case);
        if (alias && !ce_stage(alias) && !ie_match_stat(istate, alias, st, ce_option)) {
                /* Nothing changed, really */
                free(ce);
diff --git a/refs.c b/refs.c
index ad5d66c8c95ca7e10b020da05b1d11157cee7af2..3710748ab88d8fa4639c3a0a436ca0e2b0c25552 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -3235,7 +3235,7 @@ int update_ref(const char *action, const char *refname,
               int flags, enum action_on_err onerr)
 {
        struct ref_lock *lock;
-       lock = update_ref_lock(refname, oldval, flags, 0, onerr);
+       lock = update_ref_lock(refname, oldval, flags, NULL, onerr);
        if (!lock)
                return 1;
        return update_ref_write(action, refname, sha1, lock, onerr);
index f1b649742f0d363c252c47f66f6c7083647f48e6..f80bbe467437a4ffc161a4cdd09f97cf5436d4f9 100644 (file)
@@ -2126,6 +2126,16 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
                int i;
                struct delta_base_cache_entry *ent;
 
+               ent = get_delta_base_cache_entry(p, curpos);
+               if (eq_delta_base_cache_entry(ent, p, curpos)) {
+                       type = ent->type;
+                       data = ent->data;
+                       size = ent->size;
+                       clear_delta_base_cache_entry(ent);
+                       base_from_cache = 1;
+                       break;
+               }
+
                if (do_check_packed_object_crc && p->index_version > 1) {
                        struct revindex_entry *revidx = find_pack_revindex(p, obj_offset);
                        unsigned long len = revidx[1].offset - obj_offset;
@@ -2140,16 +2150,6 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
                        }
                }
 
-               ent = get_delta_base_cache_entry(p, curpos);
-               if (eq_delta_base_cache_entry(ent, p, curpos)) {
-                       type = ent->type;
-                       data = ent->data;
-                       size = ent->size;
-                       clear_delta_base_cache_entry(ent);
-                       base_from_cache = 1;
-                       break;
-               }
-
                type = unpack_object_header(p, &w_curs, &curpos, &size);
                if (type != OBJ_OFS_DELTA && type != OBJ_REF_DELTA)
                        break;
index dab405d57479fe95dcb71b16a7a059410d2ae005..54dbbfe5ceeb9bf91cdad3393c2fdfe95c06fd18 100644 (file)
@@ -169,7 +169,7 @@ test_http_push_nonff () {
                test_i18ngrep "Updates were rejected because" output
        '
 
-       test_expect_failure 'force with lease aka cas' '
+       test_expect_${EXPECT_CAS_RESULT} 'force with lease aka cas' '
                HEAD=$( cd "$REMOTE_REPO" && git rev-parse --verify HEAD ) &&
                test_when_finished '\''
                        (cd "$REMOTE_REPO" && git update-ref HEAD "$HEAD")
index 3a48de20d8e0d63a6901cb8df037805e97c5c3f3..2bd5e3274549c7a50375e90e58fa5a4dc393491d 100755 (executable)
@@ -8,13 +8,13 @@ test_description='Test various path utilities'
 . ./test-lib.sh
 
 norm_path() {
-       expected=$(test-path-utils mingw_path "$2")
+       expected=$(test-path-utils print_path "$2")
        test_expect_success $3 "normalize path: $1 => $2" \
        "test \"\$(test-path-utils normalize_path_copy '$1')\" = '$expected'"
 }
 
 relative_path() {
-       expected=$(test-path-utils mingw_path "$3")
+       expected=$(test-path-utils print_path "$3")
        test_expect_success $4 "relative path: $1 $2 => $3" \
        "test \"\$(test-path-utils relative_path '$1' '$2')\" = '$expected'"
 }
index 3e098ab31e1944abe8e5815c0f219947620b6618..eadb9434ae764cc0ca57085a6ce28dd5bee4bb77 100755 (executable)
@@ -58,13 +58,13 @@ test_expect_success 'checkout with simple prefix' '
 
 '
 
-# This is not expected to work as ls-files was not designed
-# to deal with such.  Enable it when ls-files is updated.
-: test_expect_success 'checkout with complex relative path' '
-
-       rm file1 &&
-       git checkout HEAD -- ../dir1/../dir1/file1 && test -f ./file1
-
+test_expect_success 'checkout with complex relative path' '
+       (
+               cd dir1 &&
+               rm file1 &&
+               git checkout HEAD -- ../dir1/../dir1/file1 &&
+               test "hello" = "$(cat file1)"
+       )
 '
 
 test_expect_success 'relative path outside tree should fail' \
index bff6ffe08817ed0c057909aa1d3f93140cf6a3e0..51f3bbb8af446dd24a835a8593475b59a73f6d1f 100755 (executable)
@@ -129,4 +129,16 @@ test_expect_success 'cherry-pick "-" is meaningless without checkout' '
        )
 '
 
+test_expect_success 'cherry-pick "-" works with arguments' '
+       git checkout -b side-branch &&
+       test_commit change actual change &&
+       git checkout master &&
+       git cherry-pick -s - &&
+       echo "Signed-off-by: C O Mitter <committer@example.com>" >expect &&
+       git cat-file commit HEAD | grep ^Signed-off-by: >signoff &&
+       test_cmp expect signoff &&
+       echo change >expect &&
+       test_cmp expect actual
+'
+
 test_done
index 668933bfb2c906ce9f8c74ab498f1986b56aced0..8f272bce84ba605da82dacb04561649f10878df0 100755 (executable)
@@ -1000,6 +1000,16 @@ test_expect_success '--from uses committer ident' '
        test_cmp expect patch.head
 '
 
+test_expect_success '--from omits redundant in-body header' '
+       git format-patch -1 --stdout --from="A U Thor <author@example.com>" >patch &&
+       cat >expect <<-\EOF &&
+       From: A U Thor <author@example.com>
+
+       EOF
+       sed -ne "/^From:/p; /^$/p; /^---$/q" <patch >patch.head &&
+       test_cmp expect patch.head
+'
+
 test_expect_success 'in-body headers trigger content encoding' '
        GIT_AUTHOR_NAME="éxötìc" test_commit exotic &&
        test_when_finished "git reset --hard HEAD^" &&
index f75f46f92d22451522d4676ff4ed709b49419481..aad6c7f78db34703b2f9b1ed72239cd3b4005016 100755 (executable)
@@ -58,6 +58,12 @@ test_expect_success 'diff produces text' '
        test_cmp expect.text actual
 '
 
+test_expect_success 'show commit produces text' '
+       git show HEAD >diff &&
+       find_diff <diff >actual &&
+       test_cmp expect.text actual
+'
+
 test_expect_success 'diff-tree produces binary' '
        git diff-tree -p HEAD^ HEAD >diff &&
        find_diff <diff >actual &&
@@ -84,6 +90,24 @@ test_expect_success 'status -v produces text' '
        git reset --soft HEAD@{1}
 '
 
+test_expect_success 'show blob produces binary' '
+       git show HEAD:file >actual &&
+       printf "\\0\\n\\01\\n" >expect &&
+       test_cmp expect actual
+'
+
+test_expect_success 'show --textconv blob produces text' '
+       git show --textconv HEAD:file >actual &&
+       printf "0\\n1\\n" >expect &&
+       test_cmp expect actual
+'
+
+test_expect_success 'show --no-textconv blob produces binary' '
+       git show --no-textconv HEAD:file >actual &&
+       printf "\\0\\n\\01\\n" >expect &&
+       test_cmp expect actual
+'
+
 test_expect_success 'grep-diff (-G) operates on textconv data (add)' '
        echo one >expect &&
        git log --root --format=%s -G0 >actual &&
index 5493500ef15d2f561bd14ca0bdf5f519ec6f49be..42866992cfe65657019dced508d3490b3851a6c7 100755 (executable)
@@ -172,4 +172,20 @@ test_expect_success 'shortlog encoding' '
        git shortlog HEAD~2.. > out &&
 test_cmp expect out'
 
+test_expect_success 'shortlog ignores commits with missing authors' '
+       git commit --allow-empty -m normal &&
+       git commit --allow-empty -m soon-to-be-broken &&
+       git cat-file commit HEAD >commit.tmp &&
+       sed "/^author/d" commit.tmp >broken.tmp &&
+       commit=$(git hash-object -w -t commit --stdin <broken.tmp) &&
+       git update-ref HEAD $commit &&
+       cat >expect <<-\EOF &&
+       A U Thor (1):
+             normal
+
+       EOF
+       git shortlog HEAD~2.. >actual &&
+       test_cmp expect actual
+'
+
 test_done
index b7da95fac578b58b7405386eb16f4288a253b95f..85716dd6ec566f34f7c4e0b30477bb1531c6030e 100755 (executable)
@@ -3,20 +3,19 @@
 test_description='git am with corrupt input'
 . ./test-lib.sh
 
-# Note the missing "+++" line:
-cat > bad-patch.diff <<'EOF'
-From: A U Thor <au.thor@example.com>
-diff --git a/f b/f
-index 7898192..6178079 100644
---- a/f
-@@ -1 +1 @@
--a
-+b
-EOF
-
 test_expect_success setup '
-       test $? = 0 &&
-       echo a > f &&
+       # Note the missing "+++" line:
+       cat >bad-patch.diff <<-\EOF &&
+       From: A U Thor <au.thor@example.com>
+       diff --git a/f b/f
+       index 7898192..6178079 100644
+       --- a/f
+       @@ -1 +1 @@
+       -a
+       +b
+       EOF
+
+       echo a >f &&
        git add f &&
        test_tick &&
        git commit -m initial
@@ -26,17 +25,12 @@ test_expect_success setup '
 #   fatal: unable to write file '(null)' mode 100644: Bad address
 # Also, it had the unwanted side-effect of deleting f.
 test_expect_success 'try to apply corrupted patch' '
-       git am bad-patch.diff 2> actual
-       test $? = 1
+       test_must_fail git am bad-patch.diff 2>actual
 '
 
-cat > expected <<EOF
-fatal: git diff header lacks filename information (line 4)
-EOF
-
 test_expect_success 'compare diagnostic; ensure file is still here' '
-       test $? = 0 &&
-       test -f f &&
+       echo "fatal: git diff header lacks filename information (line 4)" >expected &&
+       test_path_is_file f &&
        test_cmp expected actual
 '
 
index 0629149eddcff4e6e724ab82479504deda141141..8f3cd44d514f3996b62da28f6f83be7b1d786f01 100755 (executable)
@@ -36,7 +36,7 @@ test_expect_success 'clone with excess parameters (2)' '
 
 test_expect_success C_LOCALE_OUTPUT 'output from clone' '
        rm -fr dst &&
-       git clone -n "file://$(pwd)/src" dst >output &&
+       git clone -n "file://$(pwd)/src" dst >output 2>&1 &&
        test $(grep Clon output | wc -l) = 1
 '
 
@@ -280,9 +280,53 @@ test_expect_success 'clone checking out a tag' '
        test_cmp fetch.expected fetch.actual
 '
 
+test_expect_success 'setup ssh wrapper' '
+       write_script "$TRASH_DIRECTORY/ssh-wrapper" <<-\EOF &&
+       echo >>"$TRASH_DIRECTORY/ssh-output" "ssh: $*" &&
+       # throw away all but the last argument, which should be the
+       # command
+       while test $# -gt 1; do shift; done
+       eval "$1"
+       EOF
+
+       GIT_SSH="$TRASH_DIRECTORY/ssh-wrapper" &&
+       export GIT_SSH &&
+       export TRASH_DIRECTORY
+'
+
+clear_ssh () {
+       >"$TRASH_DIRECTORY/ssh-output"
+}
+
+expect_ssh () {
+       {
+               case "$1" in
+               none)
+                       ;;
+               *)
+                       echo "ssh: $1 git-upload-pack '$2'"
+               esac
+       } >"$TRASH_DIRECTORY/ssh-expect" &&
+       (cd "$TRASH_DIRECTORY" && test_cmp ssh-expect ssh-output)
+}
+
+test_expect_success 'cloning myhost:src uses ssh' '
+       clear_ssh &&
+       git clone myhost:src ssh-clone &&
+       expect_ssh myhost src
+'
+
 test_expect_success NOT_MINGW,NOT_CYGWIN 'clone local path foo:bar' '
+       clear_ssh &&
        cp -R src "foo:bar" &&
-       git clone "./foo:bar" foobar
+       git clone "./foo:bar" foobar &&
+       expect_ssh none
+'
+
+test_expect_success 'bracketed hostnames are still ssh' '
+       clear_ssh &&
+       git clone "[myhost:123]:src" ssh-bracket-clone &&
+       expect_ssh myhost:123 src
 '
 
 test_done
index 7ff6e0e16cbeb014c1ea551392a63beca2dbc386..c4903687fbc801ffd1db9e619065996f97986ccb 100755 (executable)
@@ -134,4 +134,8 @@ test_expect_success 'cloning a local path with --no-local does not hardlink' '
        ! repo_is_hardlinked force-nonlocal
 '
 
+test_expect_success 'cloning locally respects "-u" for fetching refs' '
+       test_must_fail git clone --bare -u false a should_not_work.git
+'
+
 test_done
index 85cadfad6d8aeee79e0f05530376ca7dc6f085f0..9e24ec88e67f0db8be401f2a60f69c408f39fc02 100755 (executable)
@@ -19,17 +19,19 @@ test_expect_success 'clone -o' '
 
 '
 
-test_expect_success 'redirected clone' '
+test_expect_success 'redirected clone does not show progress' '
 
        git clone "file://$(pwd)/parent" clone-redirected >out 2>err &&
-       test_must_be_empty err
+       ! grep % err &&
+       test_i18ngrep ! "Checking connectivity" err
 
 '
-test_expect_success 'redirected clone -v' '
+
+test_expect_success 'redirected clone -v does show progress' '
 
        git clone --progress "file://$(pwd)/parent" clone-redirected-progress \
                >out 2>err &&
-       test -s err
+       grep % err
 
 '
 
index 56be67e07e3c20f029a0bdeb2179e219ebc0bda1..6e7a7be052276613bf5f83551d93b4d90536ea4e 100755 (executable)
@@ -20,7 +20,9 @@ test_expect_success 'setup' '
         echo one >file && git add file && git commit -m one &&
         git checkout -b two &&
         echo two >file && git add file && git commit -m two &&
-        git checkout master)
+        git checkout master) &&
+       mkdir empty &&
+       (cd empty && git init)
 '
 
 test_expect_success 'vanilla clone chooses HEAD' '
@@ -61,4 +63,8 @@ test_expect_success 'clone -b with bogus branch' '
        test_must_fail git clone -b bogus parent clone-bogus
 '
 
+test_expect_success 'clone -b not allowed with empty repos' '
+       test_must_fail git clone -b branch empty clone-branch-empty
+'
+
 test_done
index decdc33c522568e98346d085acdf873c995eb762..7d479843522e3b183fdb4d72d86909b53e0edbda 100755 (executable)
@@ -122,9 +122,9 @@ test_expect_success '"git replace" listing and deleting' '
      test "$HASH2" = "$(git replace -l)" &&
      test "$HASH2" = "$(git replace)" &&
      aa=${HASH2%??????????????????????????????????????} &&
-     test "$HASH2" = "$(git replace -l "$aa*")" &&
+     test "$HASH2" = "$(git replace --list "$aa*")" &&
      test_must_fail git replace -d $R &&
-     test_must_fail git replace -d &&
+     test_must_fail git replace --delete &&
      test_must_fail git replace -l -d $HASH2 &&
      git replace -d $HASH2 &&
      git show $HASH2 | grep "A U Thor" &&
@@ -147,7 +147,7 @@ test_expect_success '"git replace" resolves sha1' '
      git show $HASH2 | grep "O Thor" &&
      test_must_fail git replace $HASH2 $R &&
      git replace -f $HASH2 $R &&
-     test_must_fail git replace -f &&
+     test_must_fail git replace --force &&
      test "$HASH2" = "$(git replace)"
 '
 
@@ -263,4 +263,23 @@ test_expect_success 'not just commits' '
        test_cmp file.replaced file
 '
 
+test_expect_success 'replaced and replacement objects must be of the same type' '
+       test_must_fail git replace mytag $HASH1 &&
+       test_must_fail git replace HEAD^{tree} HEAD~1 &&
+       BLOB=$(git rev-parse :file) &&
+       test_must_fail git replace HEAD^ $BLOB
+'
+
+test_expect_success '-f option bypasses the type check' '
+       git replace -f mytag $HASH1 &&
+       git replace --force HEAD^{tree} HEAD~1 &&
+       git replace -f HEAD^ $BLOB
+'
+
+test_expect_success 'replace ref cleanup' '
+       test -n "$(git replace)" &&
+       git replace -d $(git replace) &&
+       test -z "$(git replace)"
+'
+
 test_done
index 26f831984d603a959e2141641269268a2f0d78c8..b146406e9c0912cdeb1a9c5bc93d41b981e971ca 100755 (executable)
@@ -145,4 +145,35 @@ test_expect_success 'grep respects not-binary diff attribute' '
        test_cmp expect actual
 '
 
+cat >nul_to_q_textconv <<'EOF'
+#!/bin/sh
+"$PERL_PATH" -pe 'y/\000/Q/' < "$1"
+EOF
+chmod +x nul_to_q_textconv
+
+test_expect_success 'setup textconv filters' '
+       echo a diff=foo >.gitattributes &&
+       git config diff.foo.textconv "\"$(pwd)\""/nul_to_q_textconv
+'
+
+test_expect_success 'grep does not honor textconv' '
+       test_must_fail git grep Qfile
+'
+
+test_expect_success 'grep --textconv honors textconv' '
+       echo "a:binaryQfile" >expect &&
+       git grep --textconv Qfile >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'grep --no-textconv does not honor textconv' '
+       test_must_fail git grep --no-textconv Qfile
+'
+
+test_expect_success 'grep --textconv blob honors textconv' '
+       echo "HEAD:a:binaryQfile" >expect &&
+       git grep --textconv Qfile HEAD:a >actual &&
+       test_cmp expect actual
+'
+
 test_done
index 10f89bd0ce3656a1dee841d19582e5d1bfc9736a..c28e8d8ada68f37bc0090e07f7baf21c17c2de0b 100755 (executable)
@@ -481,7 +481,7 @@ test_expect_success 'do not add files from a submodule' '
 
 '
 
-test_expect_success 'gracefully add submodule with a trailing slash' '
+test_expect_success 'gracefully add/reset submodule with a trailing slash' '
 
        git reset --hard &&
        git commit -m "commit subproject" init &&
@@ -495,7 +495,9 @@ test_expect_success 'gracefully add submodule with a trailing slash' '
        git add init/ &&
        test_must_fail git diff --exit-code --cached init &&
        test $commit = $(git ls-files --stage |
-               sed -n "s/^160000 \([^ ]*\).*/\1/p")
+               sed -n "s/^160000 \([^ ]*\).*/\1/p") &&
+       git reset init/ &&
+       git diff --exit-code --cached init
 
 '
 
index 5a6d6d62ebcb0e506fcb0bd16dbd4a451ef3fbd1..366746f0d41342b38126eccc0f58c4ece64cb210 100755 (executable)
@@ -104,6 +104,24 @@ EOF
        test_cmp expected actual
 "
 
+test_expect_success 'no ignore=all setting has any effect' "
+       git config -f .gitmodules submodule.sm1.path sm1 &&
+       git config -f .gitmodules submodule.sm1.ignore all &&
+       git config submodule.sm1.ignore all &&
+       git config diff.ignoreSubmodules all &&
+       git submodule summary >actual &&
+       cat >expected <<-EOF &&
+* sm1 $head1...$head2 (1):
+  > Add foo3
+
+EOF
+       test_cmp expected actual &&
+       git config --unset diff.ignoreSubmodules &&
+       git config --remove-section submodule.sm1 &&
+       git config -f .gitmodules --remove-section submodule.sm1
+"
+
+
 commit_file sm1 &&
 head3=$(
        cd sm1 &&
index d8c531da765009b3b2261f1263a399b1d4c2a8b5..6fb59f32937102b4b5cdb014774bee5dbfe5a1f0 100755 (executable)
@@ -1380,7 +1380,7 @@ EOF
        test_i18ncmp expect output
 '
 
-test_expect_failure '.gitmodules ignore=all suppresses submodule summary' '
+test_expect_success '.gitmodules ignore=all suppresses submodule summary' '
        git config --add -f .gitmodules submodule.subname.ignore all &&
        git config --add -f .gitmodules submodule.subname.path sm &&
        git status > output &&
@@ -1388,7 +1388,7 @@ test_expect_failure '.gitmodules ignore=all suppresses submodule summary' '
        git config -f .gitmodules  --remove-section submodule.subname
 '
 
-test_expect_failure '.git/config ignore=all suppresses submodule summary' '
+test_expect_success '.git/config ignore=all suppresses submodule summary' '
        git config --add -f .gitmodules submodule.subname.ignore none &&
        git config --add -f .gitmodules submodule.subname.path sm &&
        git config --add submodule.subname.ignore all &&
index 0688d58884962c4e0bcfb89191602a36131ebf92..3cec57af1ee0ca8ccbbbdc47871cd4ff07e0d034 100755 (executable)
@@ -626,9 +626,10 @@ test_expect_success 'prepare for cherry-pick conflicts' '
 test_expect_success 'status when cherry-picking before resolving conflicts' '
        test_when_finished "git cherry-pick --abort" &&
        test_must_fail git cherry-pick cherry_branch_second &&
-       cat >expected <<\EOF &&
+       TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
+       cat >expected <<EOF &&
 On branch cherry_branch
-You are currently cherry-picking.
+You are currently cherry-picking commit $TO_CHERRY_PICK.
   (fix conflicts and run "git cherry-pick --continue")
   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
 
@@ -648,11 +649,12 @@ test_expect_success 'status when cherry-picking after resolving conflicts' '
        git reset --hard cherry_branch &&
        test_when_finished "git cherry-pick --abort" &&
        test_must_fail git cherry-pick cherry_branch_second &&
+       TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
        echo end >main.txt &&
        git add main.txt &&
-       cat >expected <<\EOF &&
+       cat >expected <<EOF &&
 On branch cherry_branch
-You are currently cherry-picking.
+You are currently cherry-picking commit $TO_CHERRY_PICK.
   (all conflicts fixed: run "git cherry-pick --continue")
   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
 
@@ -669,7 +671,7 @@ EOF
 test_expect_success 'status showing detached at and from a tag' '
        test_commit atag tagging &&
        git checkout atag &&
-       cat >expected <<\EOF
+       cat >expected <<\EOF &&
 HEAD detached at atag
 nothing to commit (use -u to show untracked files)
 EOF
@@ -677,7 +679,7 @@ EOF
        test_i18ncmp expected actual &&
 
        git reset --hard HEAD^ &&
-       cat >expected <<\EOF
+       cat >expected <<\EOF &&
 HEAD detached from atag
 nothing to commit (use -u to show untracked files)
 EOF
@@ -695,7 +697,7 @@ test_expect_success 'status while reverting commit (conflicts)' '
        test_commit new to-revert.txt &&
        TO_REVERT=$(git rev-parse --short HEAD^) &&
        test_must_fail git revert $TO_REVERT &&
-       cat >expected <<EOF
+       cat >expected <<EOF &&
 On branch master
 You are currently reverting commit $TO_REVERT.
   (fix conflicts and run "git revert --continue")
@@ -716,7 +718,7 @@ EOF
 test_expect_success 'status while reverting commit (conflicts resolved)' '
        echo reverted >to-revert.txt &&
        git add to-revert.txt &&
-       cat >expected <<EOF
+       cat >expected <<EOF &&
 On branch master
 You are currently reverting commit $TO_REVERT.
   (all conflicts fixed: run "git revert --continue")
@@ -735,7 +737,7 @@ EOF
 
 test_expect_success 'status after reverting commit' '
        git revert --continue &&
-       cat >expected <<\EOF
+       cat >expected <<\EOF &&
 On branch master
 nothing to commit (use -u to show untracked files)
 EOF
index b95e102891db65c184a2ee3137f1b3e20cdab2db..eacd49ade636f5be6166e05d4e200b9a324073be 100755 (executable)
@@ -20,11 +20,11 @@ test_expect_success 'setup ' '
 '
 
 cat >expected <<EOF
-fatal: git cat-file --textconv: unable to run textconv on :one.bin
+bin: test version 2
 EOF
 
 test_expect_success 'no filter specified' '
-       git cat-file --textconv :one.bin 2>result
+       git cat-file --textconv :one.bin >result &&
        test_cmp expected result
 '
 
@@ -34,10 +34,6 @@ test_expect_success 'setup textconv filters' '
        git config diff.test.cachetextconv false
 '
 
-cat >expected <<EOF
-bin: test version 2
-EOF
-
 test_expect_success 'cat-file without --textconv' '
        git cat-file blob :one.bin >result &&
        test_cmp expected result
@@ -71,25 +67,19 @@ test_expect_success 'cat-file --textconv on previous commit' '
 '
 
 test_expect_success 'cat-file without --textconv (symlink)' '
+       printf "%s" "one.bin" >expected &&
        git cat-file blob :symlink.bin >result &&
-       printf "%s" "one.bin" >expected
        test_cmp expected result
 '
 
 
 test_expect_success 'cat-file --textconv on index (symlink)' '
-       ! git cat-file --textconv :symlink.bin 2>result &&
-       cat >expected <<\EOF &&
-fatal: git cat-file --textconv: unable to run textconv on :symlink.bin
-EOF
+       git cat-file --textconv :symlink.bin >result &&
        test_cmp expected result
 '
 
 test_expect_success 'cat-file --textconv on HEAD (symlink)' '
-       ! git cat-file --textconv HEAD:symlink.bin 2>result &&
-       cat >expected <<EOF &&
-fatal: git cat-file --textconv: unable to run textconv on HEAD:symlink.bin
-EOF
+       git cat-file --textconv HEAD:symlink.bin >result &&
        test_cmp expected result
 '
 
index b7ef9e25895550e8749952e2ed54d7827737242e..69e9c0db5d79c3c4c15db35970d61a91419c4fd7 100755 (executable)
@@ -52,4 +52,71 @@ test_expect_success 'clone to target directory with --stdlayout' '
        rm -rf target
        '
 
+test_expect_success 'init without -s/-T/-b/-t does not warn' '
+       test ! -d trunk &&
+       git svn init "$svnrepo"/project/trunk trunk 2>warning &&
+       test_must_fail grep -q prefix warning &&
+       rm -rf trunk &&
+       rm -f warning
+       '
+
+test_expect_success 'clone without -s/-T/-b/-t does not warn' '
+       test ! -d trunk &&
+       git svn clone "$svnrepo"/project/trunk 2>warning &&
+       test_must_fail grep -q prefix warning &&
+       rm -rf trunk &&
+       rm -f warning
+       '
+
+test_svn_configured_prefix () {
+       prefix=$1 &&
+       cat >expect <<EOF &&
+project/trunk:refs/remotes/${prefix}trunk
+project/branches/*:refs/remotes/${prefix}*
+project/tags/*:refs/remotes/${prefix}tags/*
+EOF
+       test ! -f actual &&
+       git --git-dir=project/.git config svn-remote.svn.fetch >>actual &&
+       git --git-dir=project/.git config svn-remote.svn.branches >>actual &&
+       git --git-dir=project/.git config svn-remote.svn.tags >>actual &&
+       test_cmp expect actual &&
+       rm -f expect actual
+}
+
+test_expect_success 'init with -s/-T/-b/-t without --prefix warns' '
+       test ! -d project &&
+       git svn init -s "$svnrepo"/project project 2>warning &&
+       grep -q prefix warning &&
+       test_svn_configured_prefix "" &&
+       rm -rf project &&
+       rm -f warning
+       '
+
+test_expect_success 'clone with -s/-T/-b/-t without --prefix warns' '
+       test ! -d project &&
+       git svn clone -s "$svnrepo"/project 2>warning &&
+       grep -q prefix warning &&
+       test_svn_configured_prefix "" &&
+       rm -rf project &&
+       rm -f warning
+       '
+
+test_expect_success 'init with -s/-T/-b/-t and --prefix does not warn' '
+       test ! -d project &&
+       git svn init -s "$svnrepo"/project project --prefix="" 2>warning &&
+       test_must_fail grep -q prefix warning &&
+       test_svn_configured_prefix "" &&
+       rm -rf project &&
+       rm -f warning
+       '
+
+test_expect_success 'clone with -s/-T/-b/-t and --prefix does not warn' '
+       test ! -d project &&
+       git svn clone -s "$svnrepo"/project --prefix="" 2>warning &&
+       test_must_fail grep -q prefix warning &&
+       test_svn_configured_prefix "" &&
+       rm -rf project &&
+       rm -f warning
+       '
+
 test_done
index 6fca19353d7308f88e63806f7187d9d379412d18..718014d5dead8f36b2dde6ce38de63316ec57fdb 100755 (executable)
@@ -683,9 +683,11 @@ test_expect_success \
 # syntax highlighting
 
 
-highlight --version >/dev/null 2>&1
+highlight_version=$(highlight --version </dev/null 2>/dev/null)
 if [ $? -eq 127 ]; then
-       say "Skipping syntax highlighting test, because 'highlight' was not found"
+       say "Skipping syntax highlighting tests: 'highlight' not found"
+elif test -z "$highlight_version"; then
+       say "Skipping syntax highlighting tests: incorrect 'highlight' found"
 else
        test_set_prereq HIGHLIGHT
        cat >>gitweb_config.perl <<-\EOF
index 586e3bf94da1a2d69a061fe98aa1604f9223280b..68d62d5446d963dc69006ad9a83907c6690f92c1 100755 (executable)
@@ -16,7 +16,7 @@ else
 fi
 
 # If you want to allow non-ASCII filenames set this variable to true.
-allownonascii=$(git config hooks.allownonascii)
+allownonascii=$(git config --bool hooks.allownonascii)
 
 # Redirect output to stderr.
 exec 1>&2
index bb975e4d3eaf54bb162ecdad8b4b8995c84fb035..3dd3744a57cffd2a98be5cd551cda475c746e646 100644 (file)
@@ -116,7 +116,7 @@ int main(int argc, char **argv)
                return 0;
        }
 
-       if (argc == 3 && !strcmp(argv[1], "mingw_path")) {
+       if (argc == 3 && !strcmp(argv[1], "print_path")) {
                puts(argv[2]);
                return 0;
        }
index 1a61e6f363d6a03b262ad5e5a28c58c2caf722d5..35cb05e92bed9fb273747adc4718458b9f500898 100644 (file)
@@ -1357,7 +1357,7 @@ static int icase_exists(struct unpack_trees_options *o, const char *name, int le
 {
        const struct cache_entry *src;
 
-       src = index_name_exists(o->src_index, name, len, 1);
+       src = index_file_exists(o->src_index, name, len, 1);
        return src && !ie_match_stat(o->src_index, src, st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
 }
 
@@ -1403,7 +1403,7 @@ static int check_ok_to_remove(const char *name, int len, int dtype,
         * delete this path, which is in a subdirectory that
         * is being replaced with a blob.
         */
-       result = index_name_exists(&o->result, name, len, 0);
+       result = index_file_exists(&o->result, name, len, 0);
        if (result) {
                if (result->ce_flags & CE_REMOVE)
                        return 0;
index f92b14759833b1ae77070b4188d8ad8ea8d3799e..9a6aaafaf35bbd6d2a7a97589edfd9b0b12102c7 100644 (file)
--- a/wrapper.c
+++ b/wrapper.c
@@ -360,10 +360,12 @@ int git_mkstemp_mode(char *pattern, int mode)
        return git_mkstemps_mode(pattern, 0, mode);
 }
 
+#ifdef NO_MKSTEMPS
 int gitmkstemps(char *pattern, int suffix_len)
 {
        return git_mkstemps_mode(pattern, suffix_len, 0600);
 }
+#endif
 
 int xmkstemp_mode(char *template, int mode)
 {
index cbdce726512f3daa5ad574c3aae07ed25b80c502..b4e44baa2917dfcf33824c3d6fc08756886b9ae1 100644 (file)
@@ -996,7 +996,8 @@ static void show_cherry_pick_in_progress(struct wt_status *s,
                                        struct wt_status_state *state,
                                        const char *color)
 {
-       status_printf_ln(s, color, _("You are currently cherry-picking."));
+       status_printf_ln(s, color, _("You are currently cherry-picking commit %s."),
+                       find_unique_abbrev(state->cherry_pick_head_sha1, DEFAULT_ABBREV));
        if (s->hints) {
                if (has_unmerged(s))
                        status_printf_ln(s, color,
@@ -1169,8 +1170,10 @@ void wt_status_get_state(struct wt_status_state *state,
                        state->rebase_in_progress = 1;
                state->branch = read_and_strip_branch("rebase-merge/head-name");
                state->onto = read_and_strip_branch("rebase-merge/onto");
-       } else if (!stat(git_path("CHERRY_PICK_HEAD"), &st)) {
+       } else if (!stat(git_path("CHERRY_PICK_HEAD"), &st) &&
+                       !get_sha1("CHERRY_PICK_HEAD", sha1)) {
                state->cherry_pick_in_progress = 1;
+               hashcpy(state->cherry_pick_head_sha1, sha1);
        }
        if (!stat(git_path("BISECT_LOG"), &st)) {
                state->bisect_in_progress = 1;
index 9341c569a52e53cc939fa3bd94e013bbc2c8444d..6c29e6f5e57f84eb7acdc3cf1ee621cc717fd5a9 100644 (file)
@@ -88,6 +88,7 @@ struct wt_status_state {
        char *detached_from;
        unsigned char detached_sha1[20];
        unsigned char revert_head_sha1[20];
+       unsigned char cherry_pick_head_sha1[20];
 };
 
 void wt_status_prepare(struct wt_status *s);