git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC/PATCH 0/5] git-glossary
@ 2014-12-08 15:38 Michael J Gruber
  2014-12-08 15:38 ` [RFC/PATCH 1/5] glossary.h: generate a glossary list from the Makefile Michael J Gruber
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Michael J Gruber @ 2014-12-08 15:38 UTC (permalink / raw)
  To: git

More and more people use Git in localised setups, which usually means
mixed localisation setups - not only, but also because of our English
man pages.

Here's an attempt at leveraging our current infrastructure for helping
those poor mixed localisation folks. The idea is to keep the most
important iterms in the glossary and translate at least these.

1/5: generate glossary term list automatically from gitglossary.txt
2/5: introduce git-glossary command which helps with lookups
3/5: introduce git-glossary.txt, the man page for the command
4/5: git.pot update
5/5: sample de.po update

Without 4/5 and 5/5, a few terms from the glossary can be translated
already by coincidence with localised messages from some git commands.

Michael J Gruber (5):
  glossary.h: generate a glossary list from the Makefile
  glossary: introduce glossary lookup command
  glossary: man page
  l10n: git-glossary
  l10n: de: git-glossary

 .gitignore                     |    2 +
 Documentation/git-glossary.txt |   48 ++
 Makefile                       |    8 +-
 builtin.h                      |    1 +
 builtin/glossary.c             |  104 +++
 command-list.txt               |    1 +
 generate-glossary.sh           |    8 +
 git.c                          |    1 +
 po/de.po                       | 1382 ++++++++++++++++++++++++----------------
 po/git.pot                     | 1362 +++++++++++++++++++++++----------------
 10 files changed, 1839 insertions(+), 1078 deletions(-)
 create mode 100644 Documentation/git-glossary.txt
 create mode 100644 builtin/glossary.c
 create mode 100755 generate-glossary.sh

-- 
2.2.0.345.g7041aac

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC/PATCH 1/5] glossary.h: generate a glossary list from the Makefile
  2014-12-08 15:38 [RFC/PATCH 0/5] git-glossary Michael J Gruber
@ 2014-12-08 15:38 ` Michael J Gruber
  2014-12-08 15:38 ` [RFC/PATCH 2/5] glossary: introduce glossary lookup command Michael J Gruber
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Michael J Gruber @ 2014-12-08 15:38 UTC (permalink / raw)
  To: git

Generate a header file which lists all terms defined in the glossary
in a way suitable for localisation. This will be used by the new
glossary command.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
I also snuck in a change to the clean target, so that we don't have to update
it (its definition) as long as we keep GENERATED_H up to date.

 .gitignore           | 1 +
 Makefile             | 7 +++++--
 generate-glossary.sh | 8 ++++++++
 3 files changed, 14 insertions(+), 2 deletions(-)
 create mode 100755 generate-glossary.sh

diff --git a/.gitignore b/.gitignore
index a052419..fb4ebaa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -208,6 +208,7 @@
 /test-urlmatch-normalization
 /test-wildmatch
 /common-cmds.h
+/glossary.h
 *.tar.gz
 *.dsc
 *.deb
diff --git a/Makefile b/Makefile
index 14d5ac1..ae74fdf 100644
--- a/Makefile
+++ b/Makefile
@@ -627,7 +627,7 @@ LIB_FILE = libgit.a
 XDIFF_LIB = xdiff/lib.a
 VCSSVN_LIB = vcs-svn/lib.a
 
-GENERATED_H += common-cmds.h
+GENERATED_H += common-cmds.h glossary.h
 
 LIB_H = $(shell $(FIND) . \
 	-name .git -prune -o \
@@ -1649,6 +1649,9 @@ common-cmds.h: ./generate-cmdlist.sh command-list.txt
 common-cmds.h: $(wildcard Documentation/git-*.txt)
 	$(QUIET_GEN)./generate-cmdlist.sh > $@+ && mv $@+ $@
 
+glossary.h: ./generate-glossary.sh Documentation/glossary-content.txt
+	$(QUIET_GEN)./generate-glossary.sh > $@+ && mv $@+ $@
+
 SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
 	$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
 	$(gitwebdir_SQ):$(PERL_PATH_SQ)
@@ -2356,7 +2359,7 @@ clean: profile-clean coverage-clean
 	$(RM) $(TEST_PROGRAMS) $(NO_INSTALL)
 	$(RM) -r bin-wrappers $(dep_dirs)
 	$(RM) -r po/build/
-	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h $(ETAGS_TARGET) tags cscope*
+	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(GENERATED_H) $(ETAGS_TARGET) tags cscope*
 	$(RM) -r $(GIT_TARNAME) .doc-tmp-dir
 	$(RM) $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
 	$(RM) $(htmldocs).tar.gz $(manpages).tar.gz
diff --git a/generate-glossary.sh b/generate-glossary.sh
new file mode 100755
index 0000000..41f1eb3
--- /dev/null
+++ b/generate-glossary.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+echo "/* Automatically generated by $0 */
+
+static const char *glossary[] = {"
+
+sed -n -e 's/^.*\]\]\(.*\)::$/\tN_("\1"),/p' Documentation/glossary-content.txt
+echo "};"
-- 
2.2.0.345.g7041aac

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RFC/PATCH 2/5] glossary: introduce glossary lookup command
  2014-12-08 15:38 [RFC/PATCH 0/5] git-glossary Michael J Gruber
  2014-12-08 15:38 ` [RFC/PATCH 1/5] glossary.h: generate a glossary list from the Makefile Michael J Gruber
@ 2014-12-08 15:38 ` Michael J Gruber
  2014-12-10 22:50   ` Junio C Hamano
  2014-12-08 15:38 ` [RFC/PATCH 3/5] glossary: man page Michael J Gruber
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Michael J Gruber @ 2014-12-08 15:38 UTC (permalink / raw)
  To: git

When using a localised git, there are many reasons why a correspondence
between English and localised git terms is needed:
- connect localised messages with English ones (porcelain vs. plumbing)
- connect localised messages with English man pages or online docs
- help out someone in a different locale

Introduce a `git glossary' command that leverages the existing infrastructure
in three possible ways:
- `git glossary' lists all glossary terms along with their translation
- `git glossary foo' matches `foo' in the glossary (both English and
  localisation; partial matches shown)
- `git glossary -a foo' matches `foo' in the git message catalogue
  (English, exact match only).

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
Some bike-shedding expected regarding the interface...
Once I've learned how to test l10n stuff, this will be amended.

 .gitignore         |   1 +
 Makefile           |   1 +
 builtin.h          |   1 +
 builtin/glossary.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 command-list.txt   |   1 +
 git.c              |   1 +
 6 files changed, 109 insertions(+)
 create mode 100644 builtin/glossary.c

diff --git a/.gitignore b/.gitignore
index fb4ebaa..ff627a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,6 +64,7 @@
 /git-fsck-objects
 /git-gc
 /git-get-tar-commit-id
+/git-glossary
 /git-grep
 /git-hash-object
 /git-help
diff --git a/Makefile b/Makefile
index ae74fdf..8fc9de2 100644
--- a/Makefile
+++ b/Makefile
@@ -824,6 +824,7 @@ BUILTIN_OBJS += builtin/for-each-ref.o
 BUILTIN_OBJS += builtin/fsck.o
 BUILTIN_OBJS += builtin/gc.o
 BUILTIN_OBJS += builtin/get-tar-commit-id.o
+BUILTIN_OBJS += builtin/glossary.o
 BUILTIN_OBJS += builtin/grep.o
 BUILTIN_OBJS += builtin/hash-object.o
 BUILTIN_OBJS += builtin/help.o
diff --git a/builtin.h b/builtin.h
index b87df70..dcaf220 100644
--- a/builtin.h
+++ b/builtin.h
@@ -68,6 +68,7 @@ extern int cmd_format_patch(int argc, const char **argv, const char *prefix);
 extern int cmd_fsck(int argc, const char **argv, const char *prefix);
 extern int cmd_gc(int argc, const char **argv, const char *prefix);
 extern int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix);
+extern int cmd_glossary(int argc, const char **argv, const char *prefix);
 extern int cmd_grep(int argc, const char **argv, const char *prefix);
 extern int cmd_hash_object(int argc, const char **argv, const char *prefix);
 extern int cmd_help(int argc, const char **argv, const char *prefix);
diff --git a/builtin/glossary.c b/builtin/glossary.c
new file mode 100644
index 0000000..4ad8c51
--- /dev/null
+++ b/builtin/glossary.c
@@ -0,0 +1,104 @@
+/*
+ * Builtin help command
+ */
+#include "cache.h"
+#include "builtin.h"
+#include "exec_cmd.h"
+#include "parse-options.h"
+#include "run-command.h"
+#include "column.h"
+#include "glossary.h"
+
+
+static int match_all = 0;
+static unsigned int colopts;
+static struct option builtin_glossary_options[] = {
+	OPT_BOOL('a', "all", &match_all, N_("match all English git messages")),
+	OPT_END(),
+};
+
+static const char * const builtin_glossary_usage[] = {
+	N_("git glossary [-a|--all] [term]..."),
+	NULL
+};
+
+
+/*
+static int git_glossary_config(const char *var, const char *value, void *cb)
+{
+	if (starts_with(var, "column."))
+		return git_column_config(var, value, "help", &colopts);
+
+	return git_default_config(var, value, cb);
+}
+*/
+
+static void emit_one(const char *one, const char* two, int pad)
+{
+	printf("   %s   ", one);
+	for (; pad; pad--)
+		putchar(' ');
+	puts(two);
+}
+
+static void lookup_all(int n, const char **terms)
+{
+	int i;
+	for (i = 0; i < n; i++)
+		emit_one(terms[i], _(terms[i]), 0);
+}
+
+static void lookup_glossary(int n, const char **terms)
+{
+	int i, j;
+	for (i = 0; i < ARRAY_SIZE(glossary); i++) {
+		for (j = 0; j < n; j++) {
+			if (strstr(glossary[i], terms[j]) || strstr(_(glossary[i]), terms[j])) {
+				emit_one(glossary[i], _(glossary[i]), 0);
+				break;
+			}
+		}
+	}
+}
+
+static void list_glossary()
+{
+	int i, longest = 0;
+
+	for (i = 0; i < ARRAY_SIZE(glossary); i++) {
+		if (longest < strlen(glossary[i]))
+			longest = strlen(glossary[i]);
+	}
+
+	for (i = 0; i < ARRAY_SIZE(glossary); i++)
+		emit_one(glossary[i], _(glossary[i]), longest - strlen(glossary[i]));
+}
+
+int cmd_glossary(int argc, const char **argv, const char *prefix)
+{
+	int nongit;
+
+	argc = parse_options(argc, argv, prefix, builtin_glossary_options,
+			builtin_glossary_usage, 0);
+
+	if (match_all && !argc) {
+		printf(_("usage: %s%s"), _(builtin_glossary_usage[0]), "\n\n");
+		exit(1);
+	}
+
+
+/*
+	setup_git_directory_gently(&nongit);
+	git_config(git_help_config, NULL);
+*/
+	if (!argc) {
+		list_glossary();
+		exit(0);
+	}
+	if (match_all)
+		lookup_all(argc, argv);
+	else
+		lookup_glossary(argc, argv);
+
+	return 0;
+}
diff --git a/command-list.txt b/command-list.txt
index f1eae08..d26517d 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -51,6 +51,7 @@ git-format-patch                        mainporcelain
 git-fsck	                        ancillaryinterrogators
 git-gc                                  mainporcelain
 git-get-tar-commit-id                   ancillaryinterrogators
+git-glossary				ancillaryinterrogators
 git-grep                                mainporcelain common
 git-gui                                 mainporcelain
 git-hash-object                         plumbingmanipulators
diff --git a/git.c b/git.c
index 82d7a1c..e2adfbe 100644
--- a/git.c
+++ b/git.c
@@ -411,6 +411,7 @@ static struct cmd_struct commands[] = {
 	{ "fsck-objects", cmd_fsck, RUN_SETUP },
 	{ "gc", cmd_gc, RUN_SETUP },
 	{ "get-tar-commit-id", cmd_get_tar_commit_id },
+	{ "glossary", cmd_glossary },
 	{ "grep", cmd_grep, RUN_SETUP_GENTLY },
 	{ "hash-object", cmd_hash_object },
 	{ "help", cmd_help },
-- 
2.2.0.345.g7041aac

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RFC/PATCH 3/5] glossary: man page
  2014-12-08 15:38 [RFC/PATCH 0/5] git-glossary Michael J Gruber
  2014-12-08 15:38 ` [RFC/PATCH 1/5] glossary.h: generate a glossary list from the Makefile Michael J Gruber
  2014-12-08 15:38 ` [RFC/PATCH 2/5] glossary: introduce glossary lookup command Michael J Gruber
@ 2014-12-08 15:38 ` Michael J Gruber
  2014-12-08 15:38 ` [RFC/PATCH 4/5] l10n: git-glossary Michael J Gruber
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Michael J Gruber @ 2014-12-08 15:38 UTC (permalink / raw)
  To: git

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
This also means you have to use "git help gitglossary" if you want to have
the glossary only. But it's included in "git help glossary" for convenience.

 Documentation/git-glossary.txt | 48 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 Documentation/git-glossary.txt

diff --git a/Documentation/git-glossary.txt b/Documentation/git-glossary.txt
new file mode 100644
index 0000000..f2605c5
--- /dev/null
+++ b/Documentation/git-glossary.txt
@@ -0,0 +1,48 @@
+git-glossary(1)
+===============
+
+NAME
+----
+git-glossary - List and translate terms from the glossary
+
+SYNOPSIS
+--------
+[verse]
+'git glossary' [-a | --all] <term>...
+
+DESCRIPTION
+-----------
+Look up each term in the glossary and display it along with its
+translation. This works with localised (translated) versions
+of git only. 
+
+OPTIONS
+-------
+<term>...::
+	Term(s) to look up.
++
+If no term is specified, list all terms from the glossary along with its translation.
+
+-a::
+	Look up terms in the message catalogue of all git commands, instead of the glossary.
+	This matches with complete english messages only.
+
+
+DISCUSSION
+----------
+Unless `-a' is used, partial matches in both english and the translated
+entry are shown.
+
+The list of terms is taken from the linkgit:gitglossary[7].
+Currently they are:
+
+include::glossary-content.txt[]
+
+
+SEE ALSO
+--------
+linkgit:gitglossary[7]
+
+GIT
+---
+Part of the linkgit:git[1] suite
-- 
2.2.0.345.g7041aac

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RFC/PATCH 4/5] l10n: git-glossary
  2014-12-08 15:38 [RFC/PATCH 0/5] git-glossary Michael J Gruber
                   ` (2 preceding siblings ...)
  2014-12-08 15:38 ` [RFC/PATCH 3/5] glossary: man page Michael J Gruber
@ 2014-12-08 15:38 ` Michael J Gruber
  2014-12-08 16:04 ` [RFC/PATCH 0/5] git-glossary Michael J Gruber
  2014-12-08 16:16 ` Christian Couder
  5 siblings, 0 replies; 11+ messages in thread
From: Michael J Gruber @ 2014-12-08 15:38 UTC (permalink / raw)
  To: git

git.pot update for the new glossary command.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
 po/git.pot | 1362 ++++++++++++++++++++++++++++++++++++------------------------
 1 file changed, 829 insertions(+), 533 deletions(-)

diff --git a/po/git.pot b/po/git.pot
index ee91402..d725a5d 100644
--- a/po/git.pot
+++ b/po/git.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2014-11-20 09:42+0800\n"
+"POT-Creation-Date: 2014-12-08 16:02+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -70,8 +70,8 @@ msgstr ""
 #: archive.c:422 builtin/archive.c:88 builtin/blame.c:2517
 #: builtin/blame.c:2518 builtin/config.c:57 builtin/fast-export.c:986
 #: builtin/fast-export.c:988 builtin/grep.c:712 builtin/hash-object.c:101
-#: builtin/ls-files.c:489 builtin/ls-files.c:492 builtin/notes.c:411
-#: builtin/notes.c:568 builtin/read-tree.c:109 parse-options.h:151
+#: builtin/ls-files.c:489 builtin/ls-files.c:492 builtin/notes.c:394
+#: builtin/notes.c:557 builtin/read-tree.c:109 parse-options.h:151
 msgid "file"
 msgstr ""
 
@@ -103,7 +103,7 @@ msgstr ""
 msgid "list supported archive formats"
 msgstr ""
 
-#: archive.c:441 builtin/archive.c:90 builtin/clone.c:85
+#: archive.c:441 builtin/archive.c:90 builtin/clone.c:86
 msgid "repo"
 msgstr ""
 
@@ -111,7 +111,7 @@ msgstr ""
 msgid "retrieve the archive from remote repository <repo>"
 msgstr ""
 
-#: archive.c:443 builtin/archive.c:92 builtin/notes.c:490
+#: archive.c:443 builtin/archive.c:92 builtin/notes.c:478
 msgid "command"
 msgstr ""
 
@@ -236,7 +236,7 @@ msgstr ""
 msgid "unrecognized header: %s%s (%d)"
 msgstr ""
 
-#: bundle.c:87 builtin/commit.c:788
+#: bundle.c:87 builtin/commit.c:834
 #, c-format
 msgid "could not open '%s'"
 msgstr ""
@@ -245,9 +245,9 @@ msgstr ""
 msgid "Repository lacks these prerequisite commits:"
 msgstr ""
 
-#: bundle.c:163 sequencer.c:641 sequencer.c:1096 builtin/blame.c:2706
-#: builtin/branch.c:652 builtin/commit.c:1085 builtin/log.c:330
-#: builtin/log.c:823 builtin/log.c:1432 builtin/log.c:1669 builtin/merge.c:357
+#: bundle.c:163 sequencer.c:645 sequencer.c:1100 builtin/blame.c:2706
+#: builtin/branch.c:652 builtin/commit.c:1107 builtin/log.c:330
+#: builtin/log.c:823 builtin/log.c:1432 builtin/log.c:1669 builtin/merge.c:358
 #: builtin/shortlog.c:158
 msgid "revision walk setup failed"
 msgstr ""
@@ -604,11 +604,11 @@ msgstr[1] ""
 msgid "%s: %s - %s"
 msgstr ""
 
-#: lockfile.c:275
+#: lockfile.c:283
 msgid "BUG: reopen a lockfile that is still open"
 msgstr ""
 
-#: lockfile.c:277
+#: lockfile.c:285
 msgid "BUG: reopen a lockfile that has been committed"
 msgstr ""
 
@@ -616,8 +616,8 @@ msgstr ""
 msgid "failed to read the cache"
 msgstr ""
 
-#: merge.c:94 builtin/checkout.c:356 builtin/checkout.c:562
-#: builtin/clone.c:659
+#: merge.c:94 builtin/checkout.c:374 builtin/checkout.c:580
+#: builtin/clone.c:662
 msgid "unable to write new index file"
 msgstr ""
 
@@ -664,7 +664,7 @@ msgstr ""
 msgid "blob expected for %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:792 builtin/clone.c:318
+#: merge-recursive.c:792 builtin/clone.c:321
 #, c-format
 msgid "failed to open '%s'"
 msgstr ""
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Could not parse object '%s'"
 msgstr ""
 
-#: merge-recursive.c:2019 builtin/merge.c:666
+#: merge-recursive.c:2019 builtin/merge.c:667
 msgid "Unable to write index."
 msgstr ""
 
@@ -1017,32 +1017,32 @@ msgstr ""
 msgid "Internal error"
 msgstr ""
 
-#: remote.c:1968
+#: remote.c:1980
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 
-#: remote.c:1972
+#: remote.c:1984
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr ""
 
-#: remote.c:1975
+#: remote.c:1987
 #, c-format
 msgid "Your branch is up-to-date with '%s'.\n"
 msgstr ""
 
-#: remote.c:1979
+#: remote.c:1991
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:1985
+#: remote.c:1997
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr ""
 
-#: remote.c:1988
+#: remote.c:2000
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -1050,11 +1050,11 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:1996
+#: remote.c:2008
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr ""
 
-#: remote.c:1999
+#: remote.c:2011
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -1065,7 +1065,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2009
+#: remote.c:2021
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 
@@ -1086,14 +1086,14 @@ msgstr ""
 msgid "the receiving end does not support --signed push"
 msgstr ""
 
-#: sequencer.c:172 builtin/merge.c:781 builtin/merge.c:892
-#: builtin/merge.c:1002 builtin/merge.c:1012
+#: sequencer.c:172 builtin/merge.c:782 builtin/merge.c:893 builtin/merge.c:994
+#: builtin/merge.c:1004
 #, c-format
 msgid "Could not open '%s' for writing"
 msgstr ""
 
-#: sequencer.c:174 builtin/merge.c:343 builtin/merge.c:784
-#: builtin/merge.c:1004 builtin/merge.c:1017
+#: sequencer.c:174 builtin/merge.c:344 builtin/merge.c:785 builtin/merge.c:996
+#: builtin/merge.c:1009
 #, c-format
 msgid "Could not write to '%s'"
 msgstr ""
@@ -1111,7 +1111,7 @@ msgid ""
 "and commit the result with 'git commit'"
 msgstr ""
 
-#: sequencer.c:211 sequencer.c:852 sequencer.c:935
+#: sequencer.c:211 sequencer.c:856 sequencer.c:939
 #, c-format
 msgid "Could not write to %s"
 msgstr ""
@@ -1134,197 +1134,197 @@ msgid "Commit your changes or stash them to proceed."
 msgstr ""
 
 #. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:304
+#: sequencer.c:321
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr ""
 
-#: sequencer.c:335
+#: sequencer.c:339
 msgid "Could not resolve HEAD commit\n"
 msgstr ""
 
-#: sequencer.c:355
+#: sequencer.c:359
 msgid "Unable to update cache tree\n"
 msgstr ""
 
-#: sequencer.c:402
+#: sequencer.c:406
 #, c-format
 msgid "Could not parse commit %s\n"
 msgstr ""
 
-#: sequencer.c:407
+#: sequencer.c:411
 #, c-format
 msgid "Could not parse parent commit %s\n"
 msgstr ""
 
-#: sequencer.c:473
+#: sequencer.c:477
 msgid "Your index file is unmerged."
 msgstr ""
 
-#: sequencer.c:492
+#: sequencer.c:496
 #, c-format
 msgid "Commit %s is a merge but no -m option was given."
 msgstr ""
 
-#: sequencer.c:500
+#: sequencer.c:504
 #, c-format
 msgid "Commit %s does not have parent %d"
 msgstr ""
 
-#: sequencer.c:504
+#: sequencer.c:508
 #, c-format
 msgid "Mainline was specified but commit %s is not a merge."
 msgstr ""
 
 #. TRANSLATORS: The first %s will be "revert" or
 #. "cherry-pick", the second %s a SHA1
-#: sequencer.c:517
+#: sequencer.c:521
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr ""
 
-#: sequencer.c:521
+#: sequencer.c:525
 #, c-format
 msgid "Cannot get commit message for %s"
 msgstr ""
 
-#: sequencer.c:607
+#: sequencer.c:611
 #, c-format
 msgid "could not revert %s... %s"
 msgstr ""
 
-#: sequencer.c:608
+#: sequencer.c:612
 #, c-format
 msgid "could not apply %s... %s"
 msgstr ""
 
-#: sequencer.c:644
+#: sequencer.c:648
 msgid "empty commit set passed"
 msgstr ""
 
-#: sequencer.c:652
+#: sequencer.c:656
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr ""
 
-#: sequencer.c:656
+#: sequencer.c:660
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr ""
 
-#: sequencer.c:716
+#: sequencer.c:720
 #, c-format
 msgid "Cannot %s during a %s"
 msgstr ""
 
-#: sequencer.c:738
+#: sequencer.c:742
 #, c-format
 msgid "Could not parse line %d."
 msgstr ""
 
-#: sequencer.c:743
+#: sequencer.c:747
 msgid "No commits parsed."
 msgstr ""
 
-#: sequencer.c:756
+#: sequencer.c:760
 #, c-format
 msgid "Could not open %s"
 msgstr ""
 
-#: sequencer.c:760
+#: sequencer.c:764
 #, c-format
 msgid "Could not read %s."
 msgstr ""
 
-#: sequencer.c:767
+#: sequencer.c:771
 #, c-format
 msgid "Unusable instruction sheet: %s"
 msgstr ""
 
-#: sequencer.c:797
+#: sequencer.c:801
 #, c-format
 msgid "Invalid key: %s"
 msgstr ""
 
-#: sequencer.c:800
+#: sequencer.c:804
 #, c-format
 msgid "Invalid value for %s: %s"
 msgstr ""
 
-#: sequencer.c:812
+#: sequencer.c:816
 #, c-format
 msgid "Malformed options sheet: %s"
 msgstr ""
 
-#: sequencer.c:833
+#: sequencer.c:837
 msgid "a cherry-pick or revert is already in progress"
 msgstr ""
 
-#: sequencer.c:834
+#: sequencer.c:838
 msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
 msgstr ""
 
-#: sequencer.c:838
+#: sequencer.c:842
 #, c-format
 msgid "Could not create sequencer directory %s"
 msgstr ""
 
-#: sequencer.c:854 sequencer.c:939
+#: sequencer.c:858 sequencer.c:943
 #, c-format
 msgid "Error wrapping up %s."
 msgstr ""
 
-#: sequencer.c:873 sequencer.c:1009
+#: sequencer.c:877 sequencer.c:1013
 msgid "no cherry-pick or revert in progress"
 msgstr ""
 
-#: sequencer.c:875
+#: sequencer.c:879
 msgid "cannot resolve HEAD"
 msgstr ""
 
-#: sequencer.c:877
+#: sequencer.c:881
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 
-#: sequencer.c:899 builtin/apply.c:4128
+#: sequencer.c:903 builtin/apply.c:4128
 #, c-format
 msgid "cannot open %s: %s"
 msgstr ""
 
-#: sequencer.c:902
+#: sequencer.c:906
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: sequencer.c:903
+#: sequencer.c:907
 msgid "unexpected end of file"
 msgstr ""
 
-#: sequencer.c:909
+#: sequencer.c:913
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 
-#: sequencer.c:932
+#: sequencer.c:936
 #, c-format
 msgid "Could not format %s."
 msgstr ""
 
-#: sequencer.c:1077
+#: sequencer.c:1081
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr ""
 
-#: sequencer.c:1080
+#: sequencer.c:1084
 #, c-format
 msgid "%s: bad revision"
 msgstr ""
 
-#: sequencer.c:1114
+#: sequencer.c:1118
 msgid "Can't revert as initial commit"
 msgstr ""
 
-#: sequencer.c:1115
+#: sequencer.c:1119
 msgid "Can't cherry-pick into empty head"
 msgstr ""
 
@@ -1383,7 +1383,7 @@ msgstr ""
 msgid "staging updated .gitmodules failed"
 msgstr ""
 
-#: submodule.c:1111 builtin/init-db.c:363
+#: submodule.c:1111 builtin/init-db.c:364
 #, c-format
 msgid "Could not create git link %s"
 msgstr ""
@@ -1611,193 +1611,193 @@ msgstr ""
 msgid "bug: unhandled diff status %c"
 msgstr ""
 
-#: wt-status.c:761
+#: wt-status.c:758
 msgid "Submodules changed but not updated:"
 msgstr ""
 
-#: wt-status.c:763
+#: wt-status.c:760
 msgid "Submodule changes to be committed:"
 msgstr ""
 
-#: wt-status.c:842
+#: wt-status.c:839
 msgid ""
 "Do not touch the line above.\n"
 "Everything below will be removed."
 msgstr ""
 
-#: wt-status.c:933
+#: wt-status.c:930
 msgid "You have unmerged paths."
 msgstr ""
 
-#: wt-status.c:936
+#: wt-status.c:933
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr ""
 
-#: wt-status.c:939
+#: wt-status.c:936
 msgid "All conflicts fixed but you are still merging."
 msgstr ""
 
-#: wt-status.c:942
+#: wt-status.c:939
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr ""
 
-#: wt-status.c:952
+#: wt-status.c:949
 msgid "You are in the middle of an am session."
 msgstr ""
 
-#: wt-status.c:955
+#: wt-status.c:952
 msgid "The current patch is empty."
 msgstr ""
 
-#: wt-status.c:959
+#: wt-status.c:956
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr ""
 
-#: wt-status.c:961
+#: wt-status.c:958
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:963
+#: wt-status.c:960
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr ""
 
-#: wt-status.c:1023 wt-status.c:1040
+#: wt-status.c:1020 wt-status.c:1037
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1028 wt-status.c:1045
+#: wt-status.c:1025 wt-status.c:1042
 msgid "You are currently rebasing."
 msgstr ""
 
-#: wt-status.c:1031
+#: wt-status.c:1028
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1033
+#: wt-status.c:1030
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1035
+#: wt-status.c:1032
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 
-#: wt-status.c:1048
+#: wt-status.c:1045
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1052
+#: wt-status.c:1049
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1057
+#: wt-status.c:1054
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 
-#: wt-status.c:1060
+#: wt-status.c:1057
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1064
+#: wt-status.c:1061
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1069
+#: wt-status.c:1066
 msgid "You are currently editing a commit during a rebase."
 msgstr ""
 
-#: wt-status.c:1072
+#: wt-status.c:1069
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 
-#: wt-status.c:1074
+#: wt-status.c:1071
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 
-#: wt-status.c:1084
+#: wt-status.c:1081
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr ""
 
-#: wt-status.c:1089
+#: wt-status.c:1086
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr ""
 
-#: wt-status.c:1092
+#: wt-status.c:1089
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 
-#: wt-status.c:1094
+#: wt-status.c:1091
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 
-#: wt-status.c:1103
+#: wt-status.c:1100
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr ""
 
-#: wt-status.c:1108
+#: wt-status.c:1105
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1111
+#: wt-status.c:1108
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1113
+#: wt-status.c:1110
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 
-#: wt-status.c:1124
+#: wt-status.c:1121
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr ""
 
-#: wt-status.c:1128
+#: wt-status.c:1125
 msgid "You are currently bisecting."
 msgstr ""
 
-#: wt-status.c:1131
+#: wt-status.c:1128
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 
-#: wt-status.c:1306
+#: wt-status.c:1303
 msgid "On branch "
 msgstr ""
 
-#: wt-status.c:1313
+#: wt-status.c:1310
 msgid "rebase in progress; onto "
 msgstr ""
 
-#: wt-status.c:1320
+#: wt-status.c:1317
 msgid "HEAD detached at "
 msgstr ""
 
-#: wt-status.c:1322
+#: wt-status.c:1319
 msgid "HEAD detached from "
 msgstr ""
 
-#: wt-status.c:1325
+#: wt-status.c:1322
 msgid "Not currently on any branch."
 msgstr ""
 
-#: wt-status.c:1342
+#: wt-status.c:1339
 msgid "Initial commit"
 msgstr ""
 
-#: wt-status.c:1356
+#: wt-status.c:1353
 msgid "Untracked files"
 msgstr ""
 
-#: wt-status.c:1358
+#: wt-status.c:1355
 msgid "Ignored files"
 msgstr ""
 
-#: wt-status.c:1362
+#: wt-status.c:1359
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -1805,82 +1805,77 @@ msgid ""
 "new files yourself (see 'git help status')."
 msgstr ""
 
-#: wt-status.c:1368
+#: wt-status.c:1365
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr ""
 
-#: wt-status.c:1370
+#: wt-status.c:1367
 msgid " (use -u option to show untracked files)"
 msgstr ""
 
-#: wt-status.c:1376
+#: wt-status.c:1373
 msgid "No changes"
 msgstr ""
 
-#: wt-status.c:1381
+#: wt-status.c:1378
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 
-#: wt-status.c:1384
+#: wt-status.c:1381
 #, c-format
 msgid "no changes added to commit\n"
 msgstr ""
 
-#: wt-status.c:1387
+#: wt-status.c:1384
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr ""
 
-#: wt-status.c:1390
+#: wt-status.c:1387
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 
-#: wt-status.c:1393
+#: wt-status.c:1390
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 
-#: wt-status.c:1396 wt-status.c:1401
+#: wt-status.c:1393 wt-status.c:1398
 #, c-format
 msgid "nothing to commit\n"
 msgstr ""
 
-#: wt-status.c:1399
+#: wt-status.c:1396
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 
-#: wt-status.c:1403
+#: wt-status.c:1400
 #, c-format
 msgid "nothing to commit, working directory clean\n"
 msgstr ""
 
-#: wt-status.c:1512
+#: wt-status.c:1509
 msgid "HEAD (no branch)"
 msgstr ""
 
-#: wt-status.c:1518
+#: wt-status.c:1515
 msgid "Initial commit on "
 msgstr ""
 
-#: wt-status.c:1550
+#: wt-status.c:1547
 msgid "gone"
 msgstr ""
 
-#: wt-status.c:1552 wt-status.c:1560
+#: wt-status.c:1549 wt-status.c:1557
 msgid "behind "
 msgstr ""
 
-#: compat/precompose_utf8.c:55 builtin/clone.c:357
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr ""
-
 #: builtin/add.c:22
 msgid "git add [options] [--] <pathspec>..."
 msgstr ""
@@ -1941,7 +1936,7 @@ msgid "dry run"
 msgstr ""
 
 #: builtin/add.c:249 builtin/apply.c:4415 builtin/check-ignore.c:19
-#: builtin/commit.c:1362 builtin/count-objects.c:63 builtin/fsck.c:608
+#: builtin/commit.c:1384 builtin/count-objects.c:63 builtin/fsck.c:608
 #: builtin/log.c:1617 builtin/mv.c:109 builtin/read-tree.c:114
 msgid "be verbose"
 msgstr ""
@@ -1950,7 +1945,7 @@ msgstr ""
 msgid "interactive picking"
 msgstr ""
 
-#: builtin/add.c:252 builtin/checkout.c:1108 builtin/reset.c:286
+#: builtin/add.c:252 builtin/checkout.c:1126 builtin/reset.c:286
 msgid "select hunks interactively"
 msgstr ""
 
@@ -2271,7 +2266,7 @@ msgstr ""
 msgid "Checking patch %s..."
 msgstr ""
 
-#: builtin/apply.c:3746 builtin/checkout.c:213 builtin/reset.c:135
+#: builtin/apply.c:3746 builtin/checkout.c:231 builtin/reset.c:135
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr ""
@@ -2350,7 +2345,7 @@ msgstr ""
 msgid "unable to read index file"
 msgstr ""
 
-#: builtin/apply.c:4362 builtin/apply.c:4365 builtin/clone.c:91
+#: builtin/apply.c:4362 builtin/apply.c:4365 builtin/clone.c:92
 #: builtin/fetch.c:93
 msgid "path"
 msgstr ""
@@ -2883,9 +2878,9 @@ msgid "act on remote-tracking branches"
 msgstr ""
 
 #: builtin/branch.c:827 builtin/branch.c:833 builtin/branch.c:854
-#: builtin/branch.c:860 builtin/commit.c:1622 builtin/commit.c:1623
-#: builtin/commit.c:1624 builtin/commit.c:1625 builtin/tag.c:616
-#: builtin/tag.c:622
+#: builtin/branch.c:860 builtin/commit.c:1644 builtin/commit.c:1645
+#: builtin/commit.c:1646 builtin/commit.c:1647 builtin/tag.c:616
+#: builtin/tag.c:622 glossary.h:14
 msgid "commit"
 msgstr ""
 
@@ -2949,7 +2944,7 @@ msgstr ""
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr ""
 
-#: builtin/branch.c:881 builtin/clone.c:634
+#: builtin/branch.c:881 builtin/clone.c:637
 msgid "HEAD not found below refs/heads!"
 msgstr ""
 
@@ -3126,7 +3121,7 @@ msgstr ""
 msgid "terminate input and output records by a NUL character"
 msgstr ""
 
-#: builtin/check-ignore.c:18 builtin/checkout.c:1089 builtin/gc.c:274
+#: builtin/check-ignore.c:18 builtin/checkout.c:1107 builtin/gc.c:274
 msgid "suppress progress reporting"
 msgstr ""
 
@@ -3231,105 +3226,105 @@ msgstr ""
 msgid "git checkout [options] [<branch>] -- <file>..."
 msgstr ""
 
-#: builtin/checkout.c:114 builtin/checkout.c:147
+#: builtin/checkout.c:132 builtin/checkout.c:165
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr ""
 
-#: builtin/checkout.c:116 builtin/checkout.c:149
+#: builtin/checkout.c:134 builtin/checkout.c:167
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr ""
 
-#: builtin/checkout.c:132
+#: builtin/checkout.c:150
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:176
+#: builtin/checkout.c:194
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:193
+#: builtin/checkout.c:211
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr ""
 
-#: builtin/checkout.c:210
+#: builtin/checkout.c:228
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr ""
 
-#: builtin/checkout.c:231 builtin/checkout.c:234 builtin/checkout.c:237
-#: builtin/checkout.c:240
+#: builtin/checkout.c:249 builtin/checkout.c:252 builtin/checkout.c:255
+#: builtin/checkout.c:258
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr ""
 
-#: builtin/checkout.c:243 builtin/checkout.c:246
+#: builtin/checkout.c:261 builtin/checkout.c:264
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr ""
 
-#: builtin/checkout.c:249
+#: builtin/checkout.c:267
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 
-#: builtin/checkout.c:260 builtin/checkout.c:449
+#: builtin/checkout.c:278 builtin/checkout.c:467
 msgid "corrupt index file"
 msgstr ""
 
-#: builtin/checkout.c:320 builtin/checkout.c:327
+#: builtin/checkout.c:338 builtin/checkout.c:345
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr ""
 
-#: builtin/checkout.c:471
+#: builtin/checkout.c:489
 msgid "you need to resolve your current index first"
 msgstr ""
 
-#: builtin/checkout.c:597
+#: builtin/checkout.c:615
 #, c-format
 msgid "Can not do reflog for '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:635
+#: builtin/checkout.c:653
 msgid "HEAD is now at"
 msgstr ""
 
-#: builtin/checkout.c:642
+#: builtin/checkout.c:660
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:645
+#: builtin/checkout.c:663
 #, c-format
 msgid "Already on '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:649
+#: builtin/checkout.c:667
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:651 builtin/checkout.c:1032
+#: builtin/checkout.c:669 builtin/checkout.c:1050
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:653
+#: builtin/checkout.c:671
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:705
+#: builtin/checkout.c:723
 #, c-format
 msgid " ... and %d more.\n"
 msgstr ""
 
-#: builtin/checkout.c:711
+#: builtin/checkout.c:729
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -3344,7 +3339,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:729
+#: builtin/checkout.c:747
 #, c-format
 msgid ""
 "If you want to keep them by creating a new branch, this may be a good time\n"
@@ -3354,151 +3349,151 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtin/checkout.c:759
+#: builtin/checkout.c:777
 msgid "internal error in revision walk"
 msgstr ""
 
-#: builtin/checkout.c:763
+#: builtin/checkout.c:781
 msgid "Previous HEAD position was"
 msgstr ""
 
-#: builtin/checkout.c:790 builtin/checkout.c:1027
+#: builtin/checkout.c:808 builtin/checkout.c:1045
 msgid "You are on a branch yet to be born"
 msgstr ""
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:952
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr ""
 
-#: builtin/checkout.c:973
+#: builtin/checkout.c:991
 #, c-format
 msgid "invalid reference: %s"
 msgstr ""
 
-#: builtin/checkout.c:1002
+#: builtin/checkout.c:1020
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr ""
 
-#: builtin/checkout.c:1041
+#: builtin/checkout.c:1059
 msgid "paths cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:1044 builtin/checkout.c:1048
+#: builtin/checkout.c:1062 builtin/checkout.c:1066
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:1052 builtin/checkout.c:1055 builtin/checkout.c:1060
-#: builtin/checkout.c:1063
+#: builtin/checkout.c:1070 builtin/checkout.c:1073 builtin/checkout.c:1078
+#: builtin/checkout.c:1081
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1086
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1090 builtin/checkout.c:1092 builtin/clone.c:89
-#: builtin/remote.c:159 builtin/remote.c:161
+#: builtin/checkout.c:1108 builtin/checkout.c:1110 builtin/clone.c:90
+#: builtin/remote.c:159 builtin/remote.c:161 glossary.h:7
 msgid "branch"
 msgstr ""
 
-#: builtin/checkout.c:1091
+#: builtin/checkout.c:1109
 msgid "create and checkout a new branch"
 msgstr ""
 
-#: builtin/checkout.c:1093
+#: builtin/checkout.c:1111
 msgid "create/reset and checkout a branch"
 msgstr ""
 
-#: builtin/checkout.c:1094
+#: builtin/checkout.c:1112
 msgid "create reflog for new branch"
 msgstr ""
 
-#: builtin/checkout.c:1095
+#: builtin/checkout.c:1113
 msgid "detach the HEAD at named commit"
 msgstr ""
 
-#: builtin/checkout.c:1096
+#: builtin/checkout.c:1114
 msgid "set upstream info for new branch"
 msgstr ""
 
-#: builtin/checkout.c:1098
+#: builtin/checkout.c:1116
 msgid "new-branch"
 msgstr ""
 
-#: builtin/checkout.c:1098
+#: builtin/checkout.c:1116
 msgid "new unparented branch"
 msgstr ""
 
-#: builtin/checkout.c:1099
+#: builtin/checkout.c:1117
 msgid "checkout our version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1101
+#: builtin/checkout.c:1119
 msgid "checkout their version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1103
+#: builtin/checkout.c:1121
 msgid "force checkout (throw away local modifications)"
 msgstr ""
 
-#: builtin/checkout.c:1104
+#: builtin/checkout.c:1122
 msgid "perform a 3-way merge with the new branch"
 msgstr ""
 
-#: builtin/checkout.c:1105 builtin/merge.c:226
+#: builtin/checkout.c:1123 builtin/merge.c:227
 msgid "update ignored files (default)"
 msgstr ""
 
-#: builtin/checkout.c:1106 builtin/log.c:1239 parse-options.h:245
+#: builtin/checkout.c:1124 builtin/log.c:1239 parse-options.h:245
 msgid "style"
 msgstr ""
 
-#: builtin/checkout.c:1107
+#: builtin/checkout.c:1125
 msgid "conflict style (merge or diff3)"
 msgstr ""
 
-#: builtin/checkout.c:1110
+#: builtin/checkout.c:1128
 msgid "do not limit pathspecs to sparse entries only"
 msgstr ""
 
-#: builtin/checkout.c:1112
+#: builtin/checkout.c:1130
 msgid "second guess 'git checkout no-such-branch'"
 msgstr ""
 
-#: builtin/checkout.c:1135
+#: builtin/checkout.c:1153
 msgid "-b, -B and --orphan are mutually exclusive"
 msgstr ""
 
-#: builtin/checkout.c:1152
+#: builtin/checkout.c:1170
 msgid "--track needs a branch name"
 msgstr ""
 
-#: builtin/checkout.c:1157
+#: builtin/checkout.c:1175
 msgid "Missing branch name; try -b"
 msgstr ""
 
-#: builtin/checkout.c:1194
+#: builtin/checkout.c:1212
 msgid "invalid path specification"
 msgstr ""
 
-#: builtin/checkout.c:1201
+#: builtin/checkout.c:1219
 #, c-format
 msgid ""
 "Cannot update paths and switch to branch '%s' at the same time.\n"
 "Did you intend to checkout '%s' which can not be resolved as commit?"
 msgstr ""
 
-#: builtin/checkout.c:1206
+#: builtin/checkout.c:1224
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1210
+#: builtin/checkout.c:1228
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -3664,254 +3659,275 @@ msgstr ""
 msgid "git clone [options] [--] <repo> [<dir>]"
 msgstr ""
 
-#: builtin/clone.c:65 builtin/fetch.c:112 builtin/merge.c:223
+#: builtin/clone.c:66 builtin/fetch.c:112 builtin/merge.c:224
 #: builtin/push.c:514
 msgid "force progress reporting"
 msgstr ""
 
-#: builtin/clone.c:67
+#: builtin/clone.c:68
 msgid "don't create a checkout"
 msgstr ""
 
-#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488
+#: builtin/clone.c:69 builtin/clone.c:71 builtin/init-db.c:489
 msgid "create a bare repository"
 msgstr ""
 
-#: builtin/clone.c:72
+#: builtin/clone.c:73
 msgid "create a mirror repository (implies bare)"
 msgstr ""
 
-#: builtin/clone.c:74
+#: builtin/clone.c:75
 msgid "to clone from a local repository"
 msgstr ""
 
-#: builtin/clone.c:76
+#: builtin/clone.c:77
 msgid "don't use local hardlinks, always copy"
 msgstr ""
 
-#: builtin/clone.c:78
+#: builtin/clone.c:79
 msgid "setup as shared repository"
 msgstr ""
 
-#: builtin/clone.c:80 builtin/clone.c:82
+#: builtin/clone.c:81 builtin/clone.c:83
 msgid "initialize submodules in the clone"
 msgstr ""
 
-#: builtin/clone.c:83 builtin/init-db.c:485
+#: builtin/clone.c:84 builtin/init-db.c:486
 msgid "template-directory"
 msgstr ""
 
-#: builtin/clone.c:84 builtin/init-db.c:486
+#: builtin/clone.c:85 builtin/init-db.c:487
 msgid "directory from which templates will be used"
 msgstr ""
 
-#: builtin/clone.c:86
+#: builtin/clone.c:87
 msgid "reference repository"
 msgstr ""
 
-#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44
+#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44
 msgid "name"
 msgstr ""
 
-#: builtin/clone.c:88
+#: builtin/clone.c:89
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr ""
 
-#: builtin/clone.c:90
+#: builtin/clone.c:91
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr ""
 
-#: builtin/clone.c:92
+#: builtin/clone.c:93
 msgid "path to git-upload-pack on the remote"
 msgstr ""
 
-#: builtin/clone.c:93 builtin/fetch.c:113 builtin/grep.c:659
+#: builtin/clone.c:94 builtin/fetch.c:113 builtin/grep.c:659
 msgid "depth"
 msgstr ""
 
-#: builtin/clone.c:94
+#: builtin/clone.c:95
 msgid "create a shallow clone of that depth"
 msgstr ""
 
-#: builtin/clone.c:96
+#: builtin/clone.c:97
 msgid "clone only one branch, HEAD or --branch"
 msgstr ""
 
-#: builtin/clone.c:97 builtin/init-db.c:494
+#: builtin/clone.c:99
+msgid "use --reference only while cloning"
+msgstr ""
+
+#: builtin/clone.c:100 builtin/init-db.c:495
 msgid "gitdir"
 msgstr ""
 
-#: builtin/clone.c:98 builtin/init-db.c:495
+#: builtin/clone.c:101 builtin/init-db.c:496
 msgid "separate git dir from working tree"
 msgstr ""
 
-#: builtin/clone.c:99
+#: builtin/clone.c:102
 msgid "key=value"
 msgstr ""
 
-#: builtin/clone.c:100
+#: builtin/clone.c:103
 msgid "set config inside the new repository"
 msgstr ""
 
-#: builtin/clone.c:253
+#: builtin/clone.c:256
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr ""
 
-#: builtin/clone.c:257
+#: builtin/clone.c:260
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr ""
 
-#: builtin/clone.c:260
+#: builtin/clone.c:263
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr ""
 
-#: builtin/clone.c:322
+#: builtin/clone.c:325
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr ""
 
-#: builtin/clone.c:324 builtin/diff.c:84
+#: builtin/clone.c:327 builtin/diff.c:84
 #, c-format
 msgid "failed to stat '%s'"
 msgstr ""
 
-#: builtin/clone.c:326
+#: builtin/clone.c:329
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr ""
 
-#: builtin/clone.c:340
+#: builtin/clone.c:343
 #, c-format
 msgid "failed to stat %s\n"
 msgstr ""
 
-#: builtin/clone.c:362
+#: builtin/clone.c:360
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr ""
+
+#: builtin/clone.c:365
 #, c-format
 msgid "failed to create link '%s'"
 msgstr ""
 
-#: builtin/clone.c:366
+#: builtin/clone.c:369
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr ""
 
-#: builtin/clone.c:389 builtin/clone.c:563
+#: builtin/clone.c:392 builtin/clone.c:566
 #, c-format
 msgid "done.\n"
 msgstr ""
 
-#: builtin/clone.c:401
+#: builtin/clone.c:404
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
 "and retry the checkout with 'git checkout -f HEAD'\n"
 msgstr ""
 
-#: builtin/clone.c:478
+#: builtin/clone.c:481
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr ""
 
-#: builtin/clone.c:558
+#: builtin/clone.c:561
 #, c-format
 msgid "Checking connectivity... "
 msgstr ""
 
-#: builtin/clone.c:561
+#: builtin/clone.c:564
 msgid "remote did not send all necessary objects"
 msgstr ""
 
-#: builtin/clone.c:625
+#: builtin/clone.c:628
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 
-#: builtin/clone.c:656
+#: builtin/clone.c:659
 msgid "unable to checkout working tree"
 msgstr ""
 
-#: builtin/clone.c:765
+#: builtin/clone.c:746
+msgid "cannot repack to clean up"
+msgstr ""
+
+#: builtin/clone.c:748
+msgid "cannot unlink temporary alternates file"
+msgstr ""
+
+#: builtin/clone.c:778
 msgid "Too many arguments."
 msgstr ""
 
-#: builtin/clone.c:769
+#: builtin/clone.c:782
 msgid "You must specify a repository to clone."
 msgstr ""
 
-#: builtin/clone.c:780
+#: builtin/clone.c:793
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr ""
 
-#: builtin/clone.c:783
+#: builtin/clone.c:796
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr ""
 
-#: builtin/clone.c:796
+#: builtin/clone.c:809
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr ""
 
-#: builtin/clone.c:802 builtin/fetch.c:1155
+#: builtin/clone.c:815 builtin/fetch.c:1155
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr ""
 
-#: builtin/clone.c:812
+#: builtin/clone.c:825
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr ""
 
-#: builtin/clone.c:822
+#: builtin/clone.c:835
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr ""
 
-#: builtin/clone.c:835 builtin/clone.c:847
+#: builtin/clone.c:848 builtin/clone.c:860
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr ""
 
-#: builtin/clone.c:838
+#: builtin/clone.c:851
 #, c-format
 msgid "could not create work tree dir '%s'."
 msgstr ""
 
-#: builtin/clone.c:857
+#: builtin/clone.c:870
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:859
+#: builtin/clone.c:872
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:895
+#: builtin/clone.c:897
+msgid "--dissociate given, but there is no --reference"
+msgstr ""
+
+#: builtin/clone.c:912
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:898
+#: builtin/clone.c:915
 msgid "source repository is shallow, ignoring --local"
 msgstr ""
 
-#: builtin/clone.c:903
+#: builtin/clone.c:920
 msgid "--local is ignored"
 msgstr ""
 
-#: builtin/clone.c:907
+#: builtin/clone.c:924
 #, c-format
 msgid "Don't know how to clone %s"
 msgstr ""
 
-#: builtin/clone.c:958 builtin/clone.c:966
+#: builtin/clone.c:975 builtin/clone.c:983
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr ""
 
-#: builtin/clone.c:969
+#: builtin/clone.c:986
 msgid "You appear to have cloned an empty repository."
 msgstr ""
 
@@ -4088,43 +4104,43 @@ msgid ""
 "in the current commit message"
 msgstr ""
 
-#: builtin/commit.c:712 builtin/commit.c:745 builtin/commit.c:1120
+#: builtin/commit.c:758 builtin/commit.c:791 builtin/commit.c:1142
 #, c-format
 msgid "could not lookup commit %s"
 msgstr ""
 
-#: builtin/commit.c:724 builtin/shortlog.c:273
+#: builtin/commit.c:770 builtin/shortlog.c:273
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr ""
 
-#: builtin/commit.c:726
+#: builtin/commit.c:772
 msgid "could not read log from standard input"
 msgstr ""
 
-#: builtin/commit.c:730
+#: builtin/commit.c:776
 #, c-format
 msgid "could not read log file '%s'"
 msgstr ""
 
-#: builtin/commit.c:752
+#: builtin/commit.c:798
 msgid "could not read MERGE_MSG"
 msgstr ""
 
-#: builtin/commit.c:756
+#: builtin/commit.c:802
 msgid "could not read SQUASH_MSG"
 msgstr ""
 
-#: builtin/commit.c:760
+#: builtin/commit.c:806
 #, c-format
 msgid "could not read '%s'"
 msgstr ""
 
-#: builtin/commit.c:831
+#: builtin/commit.c:853
 msgid "could not write commit template"
 msgstr ""
 
-#: builtin/commit.c:849
+#: builtin/commit.c:871
 #, c-format
 msgid ""
 "\n"
@@ -4134,7 +4150,7 @@ msgid ""
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:854
+#: builtin/commit.c:876
 #, c-format
 msgid ""
 "\n"
@@ -4144,14 +4160,14 @@ msgid ""
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:867
+#: builtin/commit.c:889
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored, and an empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/commit.c:874
+#: builtin/commit.c:896
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -4159,348 +4175,348 @@ msgid ""
 "An empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/commit.c:888
+#: builtin/commit.c:910
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr ""
 
-#: builtin/commit.c:896
+#: builtin/commit.c:918
 #, c-format
 msgid "%sDate:      %s"
 msgstr ""
 
-#: builtin/commit.c:903
+#: builtin/commit.c:925
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr ""
 
-#: builtin/commit.c:921
+#: builtin/commit.c:943
 msgid "Cannot read index"
 msgstr ""
 
-#: builtin/commit.c:978
+#: builtin/commit.c:1000
 msgid "Error building trees"
 msgstr ""
 
-#: builtin/commit.c:993 builtin/tag.c:495
+#: builtin/commit.c:1015 builtin/tag.c:495
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr ""
 
-#: builtin/commit.c:1095
+#: builtin/commit.c:1117
 #, c-format
 msgid "No existing author found with '%s'"
 msgstr ""
 
-#: builtin/commit.c:1110 builtin/commit.c:1350
+#: builtin/commit.c:1132 builtin/commit.c:1372
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr ""
 
-#: builtin/commit.c:1147
+#: builtin/commit.c:1169
 msgid "--long and -z are incompatible"
 msgstr ""
 
-#: builtin/commit.c:1177
+#: builtin/commit.c:1199
 msgid "Using both --reset-author and --author does not make sense"
 msgstr ""
 
-#: builtin/commit.c:1186
+#: builtin/commit.c:1208
 msgid "You have nothing to amend."
 msgstr ""
 
-#: builtin/commit.c:1189
+#: builtin/commit.c:1211
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1191
+#: builtin/commit.c:1213
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1194
+#: builtin/commit.c:1216
 msgid "Options --squash and --fixup cannot be used together"
 msgstr ""
 
-#: builtin/commit.c:1204
+#: builtin/commit.c:1226
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr ""
 
-#: builtin/commit.c:1206
+#: builtin/commit.c:1228
 msgid "Option -m cannot be combined with -c/-C/-F/--fixup."
 msgstr ""
 
-#: builtin/commit.c:1214
+#: builtin/commit.c:1236
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 
-#: builtin/commit.c:1231
+#: builtin/commit.c:1253
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 
-#: builtin/commit.c:1233
+#: builtin/commit.c:1255
 msgid "No paths with --include/--only does not make sense."
 msgstr ""
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1257
 msgid "Clever... amending the last one with dirty index."
 msgstr ""
 
-#: builtin/commit.c:1237
+#: builtin/commit.c:1259
 msgid "Explicit paths specified without -i or -o; assuming --only paths..."
 msgstr ""
 
-#: builtin/commit.c:1249 builtin/tag.c:728
+#: builtin/commit.c:1271 builtin/tag.c:728
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr ""
 
-#: builtin/commit.c:1254
+#: builtin/commit.c:1276
 msgid "Paths with -a does not make sense."
 msgstr ""
 
-#: builtin/commit.c:1364 builtin/commit.c:1644
+#: builtin/commit.c:1386 builtin/commit.c:1666
 msgid "show status concisely"
 msgstr ""
 
-#: builtin/commit.c:1366 builtin/commit.c:1646
+#: builtin/commit.c:1388 builtin/commit.c:1668
 msgid "show branch information"
 msgstr ""
 
-#: builtin/commit.c:1368 builtin/commit.c:1648 builtin/push.c:500
+#: builtin/commit.c:1390 builtin/commit.c:1670 builtin/push.c:500
 msgid "machine-readable output"
 msgstr ""
 
-#: builtin/commit.c:1371 builtin/commit.c:1650
+#: builtin/commit.c:1393 builtin/commit.c:1672
 msgid "show status in long format (default)"
 msgstr ""
 
-#: builtin/commit.c:1374 builtin/commit.c:1653
+#: builtin/commit.c:1396 builtin/commit.c:1675
 msgid "terminate entries with NUL"
 msgstr ""
 
-#: builtin/commit.c:1376 builtin/commit.c:1656 builtin/fast-export.c:980
+#: builtin/commit.c:1398 builtin/commit.c:1678 builtin/fast-export.c:980
 #: builtin/fast-export.c:983 builtin/tag.c:603
 msgid "mode"
 msgstr ""
 
-#: builtin/commit.c:1377 builtin/commit.c:1656
+#: builtin/commit.c:1399 builtin/commit.c:1678
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1380
+#: builtin/commit.c:1402
 msgid "show ignored files"
 msgstr ""
 
-#: builtin/commit.c:1381 parse-options.h:153
+#: builtin/commit.c:1403 parse-options.h:153
 msgid "when"
 msgstr ""
 
-#: builtin/commit.c:1382
+#: builtin/commit.c:1404
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1384
+#: builtin/commit.c:1406
 msgid "list untracked files in columns"
 msgstr ""
 
-#: builtin/commit.c:1471
+#: builtin/commit.c:1493
 msgid "couldn't look up newly created commit"
 msgstr ""
 
-#: builtin/commit.c:1473
+#: builtin/commit.c:1495
 msgid "could not parse newly created commit"
 msgstr ""
 
-#: builtin/commit.c:1518
+#: builtin/commit.c:1540 glossary.h:20
 msgid "detached HEAD"
 msgstr ""
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1543
 msgid " (root-commit)"
 msgstr ""
 
-#: builtin/commit.c:1614
+#: builtin/commit.c:1636
 msgid "suppress summary after successful commit"
 msgstr ""
 
-#: builtin/commit.c:1615
+#: builtin/commit.c:1637
 msgid "show diff in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1617
+#: builtin/commit.c:1639
 msgid "Commit message options"
 msgstr ""
 
-#: builtin/commit.c:1618 builtin/tag.c:601
+#: builtin/commit.c:1640 builtin/tag.c:601
 msgid "read message from file"
 msgstr ""
 
-#: builtin/commit.c:1619
+#: builtin/commit.c:1641
 msgid "author"
 msgstr ""
 
-#: builtin/commit.c:1619
+#: builtin/commit.c:1641
 msgid "override author for commit"
 msgstr ""
 
-#: builtin/commit.c:1620 builtin/gc.c:275
+#: builtin/commit.c:1642 builtin/gc.c:275
 msgid "date"
 msgstr ""
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1642
 msgid "override date for commit"
 msgstr ""
 
-#: builtin/commit.c:1621 builtin/merge.c:217 builtin/notes.c:408
-#: builtin/notes.c:565 builtin/tag.c:599
+#: builtin/commit.c:1643 builtin/merge.c:218 builtin/notes.c:391
+#: builtin/notes.c:554 builtin/tag.c:599
 msgid "message"
 msgstr ""
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1643
 msgid "commit message"
 msgstr ""
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1644
 msgid "reuse and edit message from specified commit"
 msgstr ""
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1645
 msgid "reuse message from specified commit"
 msgstr ""
 
-#: builtin/commit.c:1624
+#: builtin/commit.c:1646
 msgid "use autosquash formatted message to fixup specified commit"
 msgstr ""
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1647
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1648
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 
-#: builtin/commit.c:1627 builtin/log.c:1191 builtin/revert.c:86
+#: builtin/commit.c:1649 builtin/log.c:1191 builtin/revert.c:86
 msgid "add Signed-off-by:"
 msgstr ""
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1650
 msgid "use specified template file"
 msgstr ""
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1651
 msgid "force edit of commit"
 msgstr ""
 
-#: builtin/commit.c:1630
+#: builtin/commit.c:1652
 msgid "default"
 msgstr ""
 
-#: builtin/commit.c:1630 builtin/tag.c:604
+#: builtin/commit.c:1652 builtin/tag.c:604
 msgid "how to strip spaces and #comments from message"
 msgstr ""
 
-#: builtin/commit.c:1631
+#: builtin/commit.c:1653
 msgid "include status in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1632 builtin/merge.c:224 builtin/revert.c:92
+#: builtin/commit.c:1654 builtin/merge.c:225 builtin/revert.c:92
 #: builtin/tag.c:605
 msgid "key-id"
 msgstr ""
 
-#: builtin/commit.c:1633 builtin/merge.c:225 builtin/revert.c:93
+#: builtin/commit.c:1655 builtin/merge.c:226 builtin/revert.c:93
 msgid "GPG sign commit"
 msgstr ""
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1658
 msgid "Commit contents options"
 msgstr ""
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1659
 msgid "commit all changed files"
 msgstr ""
 
-#: builtin/commit.c:1638
+#: builtin/commit.c:1660
 msgid "add specified files to index for commit"
 msgstr ""
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1661
 msgid "interactively add files"
 msgstr ""
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1662
 msgid "interactively add changes"
 msgstr ""
 
-#: builtin/commit.c:1641
+#: builtin/commit.c:1663
 msgid "commit only specified files"
 msgstr ""
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1664
 msgid "bypass pre-commit hook"
 msgstr ""
 
-#: builtin/commit.c:1643
+#: builtin/commit.c:1665
 msgid "show what would be committed"
 msgstr ""
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1676
 msgid "amend previous commit"
 msgstr ""
 
-#: builtin/commit.c:1655
+#: builtin/commit.c:1677
 msgid "bypass post-rewrite hook"
 msgstr ""
 
-#: builtin/commit.c:1660
+#: builtin/commit.c:1682
 msgid "ok to record an empty change"
 msgstr ""
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1684
 msgid "ok to record a change with an empty message"
 msgstr ""
 
-#: builtin/commit.c:1691
+#: builtin/commit.c:1713
 msgid "could not parse HEAD commit"
 msgstr ""
 
-#: builtin/commit.c:1730 builtin/merge.c:518
+#: builtin/commit.c:1752 builtin/merge.c:519
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr ""
 
-#: builtin/commit.c:1737
+#: builtin/commit.c:1759
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr ""
 
-#: builtin/commit.c:1744
+#: builtin/commit.c:1766
 msgid "could not read MERGE_MODE"
 msgstr ""
 
-#: builtin/commit.c:1763
+#: builtin/commit.c:1785
 #, c-format
 msgid "could not read commit message: %s"
 msgstr ""
 
-#: builtin/commit.c:1774
+#: builtin/commit.c:1796
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr ""
 
-#: builtin/commit.c:1779
+#: builtin/commit.c:1801
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr ""
 
-#: builtin/commit.c:1794 builtin/merge.c:850 builtin/merge.c:875
+#: builtin/commit.c:1816 builtin/merge.c:851 builtin/merge.c:876
 msgid "failed to write commit object"
 msgstr ""
 
-#: builtin/commit.c:1827
+#: builtin/commit.c:1849
 msgid ""
 "Repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -4865,7 +4881,7 @@ msgstr ""
 msgid "Skip output of blob data"
 msgstr ""
 
-#: builtin/fast-export.c:997
+#: builtin/fast-export.c:997 glossary.h:59
 msgid "refspec"
 msgstr ""
 
@@ -5142,7 +5158,7 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"
 msgstr ""
 
 #: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:698
-#: builtin/merge.c:197 builtin/repack.c:179 builtin/repack.c:183
+#: builtin/merge.c:198 builtin/repack.c:178 builtin/repack.c:182
 #: builtin/show-branch.c:654 builtin/show-ref.c:178 builtin/tag.c:590
 #: parse-options.h:132 parse-options.h:239
 msgid "n"
@@ -5324,6 +5340,19 @@ msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 
+#: builtin/glossary.c:16
+msgid "match all English git messages"
+msgstr ""
+
+#: builtin/glossary.c:21
+msgid "git glossary [-a|--all] [term]..."
+msgstr ""
+
+#: builtin/glossary.c:85 builtin/help.c:463 builtin/help.c:480
+#, c-format
+msgid "usage: %s%s"
+msgstr ""
+
 #: builtin/grep.c:23
 msgid "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr ""
@@ -5563,7 +5592,7 @@ msgstr ""
 msgid "type"
 msgstr ""
 
-#: builtin/hash-object.c:94
+#: builtin/hash-object.c:94 glossary.h:43
 msgid "object type"
 msgstr ""
 
@@ -5698,11 +5727,6 @@ msgstr ""
 msgid "The common Git guides are:\n"
 msgstr ""
 
-#: builtin/help.c:463 builtin/help.c:480
-#, c-format
-msgid "usage: %s%s"
-msgstr ""
-
 #: builtin/help.c:496
 #, c-format
 msgid "`git %s' is aliased to `%s'"
@@ -6066,17 +6090,17 @@ msgstr ""
 msgid "insane git directory %s"
 msgstr ""
 
-#: builtin/init-db.c:323 builtin/init-db.c:326
+#: builtin/init-db.c:324 builtin/init-db.c:327
 #, c-format
 msgid "%s already exists"
 msgstr ""
 
-#: builtin/init-db.c:355
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to handle file type %d"
 msgstr ""
 
-#: builtin/init-db.c:358
+#: builtin/init-db.c:359
 #, c-format
 msgid "unable to move %s to %s"
 msgstr ""
@@ -6084,59 +6108,59 @@ msgstr ""
 #. TRANSLATORS: The first '%s' is either "Reinitialized
 #. existing" or "Initialized empty", the second " shared" or
 #. "", and the last '%s%s' is the verbatim directory name.
-#: builtin/init-db.c:418
+#: builtin/init-db.c:419
 #, c-format
 msgid "%s%s Git repository in %s%s\n"
 msgstr ""
 
-#: builtin/init-db.c:419
+#: builtin/init-db.c:420
 msgid "Reinitialized existing"
 msgstr ""
 
-#: builtin/init-db.c:419
+#: builtin/init-db.c:420
 msgid "Initialized empty"
 msgstr ""
 
-#: builtin/init-db.c:420
+#: builtin/init-db.c:421
 msgid " shared"
 msgstr ""
 
-#: builtin/init-db.c:467
+#: builtin/init-db.c:468
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [directory]"
 msgstr ""
 
-#: builtin/init-db.c:490
+#: builtin/init-db.c:491
 msgid "permissions"
 msgstr ""
 
-#: builtin/init-db.c:491
+#: builtin/init-db.c:492
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr ""
 
-#: builtin/init-db.c:493 builtin/prune-packed.c:57 builtin/repack.c:172
+#: builtin/init-db.c:494 builtin/prune-packed.c:57 builtin/repack.c:171
 msgid "be quiet"
 msgstr ""
 
-#: builtin/init-db.c:525 builtin/init-db.c:530
+#: builtin/init-db.c:526 builtin/init-db.c:531
 #, c-format
 msgid "cannot mkdir %s"
 msgstr ""
 
-#: builtin/init-db.c:534
+#: builtin/init-db.c:535
 #, c-format
 msgid "cannot chdir to %s"
 msgstr ""
 
-#: builtin/init-db.c:555
+#: builtin/init-db.c:556
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
 "dir=<directory>)"
 msgstr ""
 
-#: builtin/init-db.c:583
+#: builtin/init-db.c:584
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr ""
@@ -6568,179 +6592,179 @@ msgstr ""
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
 
-#: builtin/merge.c:44
+#: builtin/merge.c:45
 msgid "git merge [options] [<commit>...]"
 msgstr ""
 
-#: builtin/merge.c:45
+#: builtin/merge.c:46
 msgid "git merge [options] <msg> HEAD <commit>"
 msgstr ""
 
-#: builtin/merge.c:46
+#: builtin/merge.c:47
 msgid "git merge --abort"
 msgstr ""
 
-#: builtin/merge.c:99
+#: builtin/merge.c:100
 msgid "switch `m' requires a value"
 msgstr ""
 
-#: builtin/merge.c:136
+#: builtin/merge.c:137
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr ""
 
-#: builtin/merge.c:137
+#: builtin/merge.c:138
 #, c-format
 msgid "Available strategies are:"
 msgstr ""
 
-#: builtin/merge.c:142
+#: builtin/merge.c:143
 #, c-format
 msgid "Available custom strategies are:"
 msgstr ""
 
-#: builtin/merge.c:192
+#: builtin/merge.c:193
 msgid "do not show a diffstat at the end of the merge"
 msgstr ""
 
-#: builtin/merge.c:195
+#: builtin/merge.c:196
 msgid "show a diffstat at the end of the merge"
 msgstr ""
 
-#: builtin/merge.c:196
+#: builtin/merge.c:197
 msgid "(synonym to --stat)"
 msgstr ""
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 
-#: builtin/merge.c:201
+#: builtin/merge.c:202
 msgid "create a single commit instead of doing a merge"
 msgstr ""
 
-#: builtin/merge.c:203
+#: builtin/merge.c:204
 msgid "perform a commit if the merge succeeds (default)"
 msgstr ""
 
-#: builtin/merge.c:205
+#: builtin/merge.c:206
 msgid "edit message before committing"
 msgstr ""
 
-#: builtin/merge.c:206
+#: builtin/merge.c:207
 msgid "allow fast-forward (default)"
 msgstr ""
 
-#: builtin/merge.c:208
+#: builtin/merge.c:209
 msgid "abort if fast-forward is not possible"
 msgstr ""
 
-#: builtin/merge.c:212
+#: builtin/merge.c:213
 msgid "Verify that the named commit has a valid GPG signature"
 msgstr ""
 
-#: builtin/merge.c:213 builtin/notes.c:741 builtin/revert.c:89
+#: builtin/merge.c:214 builtin/notes.c:753 builtin/revert.c:89
 msgid "strategy"
 msgstr ""
 
-#: builtin/merge.c:214
+#: builtin/merge.c:215
 msgid "merge strategy to use"
 msgstr ""
 
-#: builtin/merge.c:215
+#: builtin/merge.c:216
 msgid "option=value"
 msgstr ""
 
-#: builtin/merge.c:216
+#: builtin/merge.c:217
 msgid "option for selected merge strategy"
 msgstr ""
 
-#: builtin/merge.c:218
+#: builtin/merge.c:219
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr ""
 
-#: builtin/merge.c:222
+#: builtin/merge.c:223
 msgid "abort the current in-progress merge"
 msgstr ""
 
-#: builtin/merge.c:250
+#: builtin/merge.c:251
 msgid "could not run stash."
 msgstr ""
 
-#: builtin/merge.c:255
+#: builtin/merge.c:256
 msgid "stash failed"
 msgstr ""
 
-#: builtin/merge.c:260
+#: builtin/merge.c:261
 #, c-format
 msgid "not a valid object: %s"
 msgstr ""
 
-#: builtin/merge.c:279 builtin/merge.c:296
+#: builtin/merge.c:280 builtin/merge.c:297
 msgid "read-tree failed"
 msgstr ""
 
-#: builtin/merge.c:326
+#: builtin/merge.c:327
 msgid " (nothing to squash)"
 msgstr ""
 
-#: builtin/merge.c:339
+#: builtin/merge.c:340
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr ""
 
-#: builtin/merge.c:371
+#: builtin/merge.c:372
 msgid "Writing SQUASH_MSG"
 msgstr ""
 
-#: builtin/merge.c:373
+#: builtin/merge.c:374
 msgid "Finishing SQUASH_MSG"
 msgstr ""
 
-#: builtin/merge.c:396
+#: builtin/merge.c:397
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr ""
 
-#: builtin/merge.c:446
+#: builtin/merge.c:447
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr ""
 
-#: builtin/merge.c:558
+#: builtin/merge.c:559
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr ""
 
-#: builtin/merge.c:653
+#: builtin/merge.c:654
 msgid "git write-tree failed to write a tree"
 msgstr ""
 
-#: builtin/merge.c:677
+#: builtin/merge.c:678
 msgid "Not handling anything other than two heads merge."
 msgstr ""
 
-#: builtin/merge.c:691
+#: builtin/merge.c:692
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr ""
 
-#: builtin/merge.c:704
+#: builtin/merge.c:705
 #, c-format
 msgid "unable to write %s"
 msgstr ""
 
-#: builtin/merge.c:793
+#: builtin/merge.c:794
 #, c-format
 msgid "Could not read from '%s'"
 msgstr ""
 
-#: builtin/merge.c:802
+#: builtin/merge.c:803
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:808
+#: builtin/merge.c:809
 #, c-format
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
@@ -6750,156 +6774,156 @@ msgid ""
 "the commit.\n"
 msgstr ""
 
-#: builtin/merge.c:832
+#: builtin/merge.c:833
 msgid "Empty commit message."
 msgstr ""
 
-#: builtin/merge.c:844
+#: builtin/merge.c:845
 #, c-format
 msgid "Wonderful.\n"
 msgstr ""
 
-#: builtin/merge.c:907
+#: builtin/merge.c:899
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 
-#: builtin/merge.c:923
+#: builtin/merge.c:915
 #, c-format
 msgid "'%s' is not a commit"
 msgstr ""
 
-#: builtin/merge.c:964
+#: builtin/merge.c:956
 msgid "No current branch."
 msgstr ""
 
-#: builtin/merge.c:966
+#: builtin/merge.c:958
 msgid "No remote for the current branch."
 msgstr ""
 
-#: builtin/merge.c:968
+#: builtin/merge.c:960
 msgid "No default upstream defined for the current branch."
 msgstr ""
 
-#: builtin/merge.c:973
+#: builtin/merge.c:965
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr ""
 
-#: builtin/merge.c:1129
+#: builtin/merge.c:1121
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1145
+#: builtin/merge.c:1137
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1148 git-pull.sh:34
+#: builtin/merge.c:1140 git-pull.sh:34
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr ""
 
-#: builtin/merge.c:1152
+#: builtin/merge.c:1144
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1155
+#: builtin/merge.c:1147
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 
-#: builtin/merge.c:1164
+#: builtin/merge.c:1156
 msgid "You cannot combine --squash with --no-ff."
 msgstr ""
 
-#: builtin/merge.c:1173
+#: builtin/merge.c:1165
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 
-#: builtin/merge.c:1205
+#: builtin/merge.c:1197
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 
-#: builtin/merge.c:1208
+#: builtin/merge.c:1200
 msgid "Squash commit into empty head not supported yet"
 msgstr ""
 
-#: builtin/merge.c:1210
+#: builtin/merge.c:1202
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 
-#: builtin/merge.c:1215
+#: builtin/merge.c:1207
 #, c-format
 msgid "%s - not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1266
+#: builtin/merge.c:1258
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 
-#: builtin/merge.c:1269
+#: builtin/merge.c:1261
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 
-#: builtin/merge.c:1272
+#: builtin/merge.c:1264
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr ""
 
-#: builtin/merge.c:1275
+#: builtin/merge.c:1267
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr ""
 
-#: builtin/merge.c:1356
+#: builtin/merge.c:1348
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr ""
 
-#: builtin/merge.c:1395
+#: builtin/merge.c:1387
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr ""
 
-#: builtin/merge.c:1402
+#: builtin/merge.c:1394
 #, c-format
 msgid "Nope.\n"
 msgstr ""
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1426
 msgid "Not possible to fast-forward, aborting."
 msgstr ""
 
-#: builtin/merge.c:1457 builtin/merge.c:1536
+#: builtin/merge.c:1449 builtin/merge.c:1528
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr ""
 
-#: builtin/merge.c:1461
+#: builtin/merge.c:1453
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr ""
 
-#: builtin/merge.c:1527
+#: builtin/merge.c:1519
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:1529
+#: builtin/merge.c:1521
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr ""
 
-#: builtin/merge.c:1538
+#: builtin/merge.c:1530
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr ""
 
-#: builtin/merge.c:1550
+#: builtin/merge.c:1542
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
@@ -7085,7 +7109,7 @@ msgstr ""
 msgid "Renaming %s to %s\n"
 msgstr ""
 
-#: builtin/mv.c:256 builtin/remote.c:726 builtin/repack.c:358
+#: builtin/mv.c:256 builtin/remote.c:726 builtin/repack.c:355
 #, c-format
 msgid "renaming '%s' failed"
 msgstr ""
@@ -7136,8 +7160,8 @@ msgstr ""
 
 #: builtin/notes.c:25
 msgid ""
-"git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) "
-"<object>] [<object>]"
+"git notes [--ref <notes_ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> "
+"| (-c | -C) <object>] [<object>]"
 msgstr ""
 
 #: builtin/notes.c:26
@@ -7146,12 +7170,12 @@ msgstr ""
 
 #: builtin/notes.c:27
 msgid ""
-"git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) "
-"<object>] [<object>]"
+"git notes [--ref <notes_ref>] append [--allow-empty] [-m <msg> | -F <file> | "
+"(-c | -C) <object>] [<object>]"
 msgstr ""
 
 #: builtin/notes.c:28
-msgid "git notes [--ref <notes_ref>] edit [<object>]"
+msgid "git notes [--ref <notes_ref>] edit [--allow-empty] [<object>]"
 msgstr ""
 
 #: builtin/notes.c:29
@@ -7235,212 +7259,216 @@ msgstr ""
 msgid "git notes get-ref"
 msgstr ""
 
-#: builtin/notes.c:136
+#: builtin/notes.c:146
 #, c-format
 msgid "unable to start 'show' for object '%s'"
 msgstr ""
 
-#: builtin/notes.c:140
+#: builtin/notes.c:150
 msgid "could not read 'show' output"
 msgstr ""
 
-#: builtin/notes.c:148
+#: builtin/notes.c:158
 #, c-format
 msgid "failed to finish 'show' for object '%s'"
 msgstr ""
 
-#: builtin/notes.c:166 builtin/tag.c:477
+#: builtin/notes.c:173 builtin/tag.c:477
 #, c-format
 msgid "could not create file '%s'"
 msgstr ""
 
-#: builtin/notes.c:185
+#: builtin/notes.c:192
 msgid "Please supply the note contents using either -m or -F option"
 msgstr ""
 
-#: builtin/notes.c:206 builtin/notes.c:847
-#, c-format
-msgid "Removing note for object %s\n"
-msgstr ""
-
-#: builtin/notes.c:211
+#: builtin/notes.c:201
 msgid "unable to write note object"
 msgstr ""
 
-#: builtin/notes.c:213
+#: builtin/notes.c:203
 #, c-format
 msgid "The note contents have been left in %s"
 msgstr ""
 
-#: builtin/notes.c:247 builtin/tag.c:693
+#: builtin/notes.c:231 builtin/tag.c:693
 #, c-format
 msgid "cannot read '%s'"
 msgstr ""
 
-#: builtin/notes.c:249 builtin/tag.c:696
+#: builtin/notes.c:233 builtin/tag.c:696
 #, c-format
 msgid "could not open or read '%s'"
 msgstr ""
 
-#: builtin/notes.c:268 builtin/notes.c:319 builtin/notes.c:321
-#: builtin/notes.c:381 builtin/notes.c:435 builtin/notes.c:518
-#: builtin/notes.c:523 builtin/notes.c:598 builtin/notes.c:640
-#: builtin/notes.c:842 builtin/tag.c:709
+#: builtin/notes.c:252 builtin/notes.c:303 builtin/notes.c:305
+#: builtin/notes.c:365 builtin/notes.c:420 builtin/notes.c:506
+#: builtin/notes.c:511 builtin/notes.c:589 builtin/notes.c:652
+#: builtin/notes.c:854 builtin/tag.c:709
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr ""
 
-#: builtin/notes.c:271
+#: builtin/notes.c:255
 #, c-format
 msgid "Failed to read object '%s'."
 msgstr ""
 
-#: builtin/notes.c:275
+#: builtin/notes.c:259
 #, c-format
 msgid "Cannot read note data from non-blob object '%s'."
 msgstr ""
 
-#: builtin/notes.c:315
+#: builtin/notes.c:299
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr ""
 
-#: builtin/notes.c:330
+#: builtin/notes.c:314
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr ""
 
-#: builtin/notes.c:374 builtin/notes.c:428 builtin/notes.c:501
-#: builtin/notes.c:513 builtin/notes.c:586 builtin/notes.c:633
-#: builtin/notes.c:907
+#: builtin/notes.c:358 builtin/notes.c:413 builtin/notes.c:489
+#: builtin/notes.c:501 builtin/notes.c:577 builtin/notes.c:645
+#: builtin/notes.c:919
 msgid "too many parameters"
 msgstr ""
 
-#: builtin/notes.c:387 builtin/notes.c:646
+#: builtin/notes.c:371 builtin/notes.c:658
 #, c-format
 msgid "No note found for object %s."
 msgstr ""
 
-#: builtin/notes.c:409 builtin/notes.c:566
+#: builtin/notes.c:392 builtin/notes.c:555
 msgid "note contents as a string"
 msgstr ""
 
-#: builtin/notes.c:412 builtin/notes.c:569
+#: builtin/notes.c:395 builtin/notes.c:558
 msgid "note contents in a file"
 msgstr ""
 
-#: builtin/notes.c:414 builtin/notes.c:417 builtin/notes.c:571
-#: builtin/notes.c:574 builtin/tag.c:628
+#: builtin/notes.c:397 builtin/notes.c:400 builtin/notes.c:560
+#: builtin/notes.c:563 builtin/tag.c:628 glossary.h:39
 msgid "object"
 msgstr ""
 
-#: builtin/notes.c:415 builtin/notes.c:572
+#: builtin/notes.c:398 builtin/notes.c:561
 msgid "reuse and edit specified note object"
 msgstr ""
 
-#: builtin/notes.c:418 builtin/notes.c:575
+#: builtin/notes.c:401 builtin/notes.c:564
 msgid "reuse specified note object"
 msgstr ""
 
-#: builtin/notes.c:420 builtin/notes.c:488
+#: builtin/notes.c:404 builtin/notes.c:567
+msgid "allow storing empty note"
+msgstr ""
+
+#: builtin/notes.c:405 builtin/notes.c:476
 msgid "replace existing notes"
 msgstr ""
 
-#: builtin/notes.c:454
+#: builtin/notes.c:430
 #, c-format
 msgid ""
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
 
-#: builtin/notes.c:459 builtin/notes.c:536
+#: builtin/notes.c:445 builtin/notes.c:524
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
 msgstr ""
 
-#: builtin/notes.c:489
+#: builtin/notes.c:456 builtin/notes.c:617 builtin/notes.c:859
+#, c-format
+msgid "Removing note for object %s\n"
+msgstr ""
+
+#: builtin/notes.c:477
 msgid "read objects from stdin"
 msgstr ""
 
-#: builtin/notes.c:491
+#: builtin/notes.c:479
 msgid "load rewriting config for <command> (implies --stdin)"
 msgstr ""
 
-#: builtin/notes.c:509
+#: builtin/notes.c:497
 msgid "too few parameters"
 msgstr ""
 
-#: builtin/notes.c:530
+#: builtin/notes.c:518
 #, c-format
 msgid ""
 "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
 
-#: builtin/notes.c:542
+#: builtin/notes.c:530
 #, c-format
 msgid "Missing notes on source object %s. Cannot copy."
 msgstr ""
 
-#: builtin/notes.c:591
+#: builtin/notes.c:582
 #, c-format
 msgid ""
 "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
 "Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
 msgstr ""
 
-#: builtin/notes.c:738
+#: builtin/notes.c:750
 msgid "General options"
 msgstr ""
 
-#: builtin/notes.c:740
+#: builtin/notes.c:752
 msgid "Merge options"
 msgstr ""
 
-#: builtin/notes.c:742
+#: builtin/notes.c:754
 msgid ""
 "resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
 "cat_sort_uniq)"
 msgstr ""
 
-#: builtin/notes.c:744
+#: builtin/notes.c:756
 msgid "Committing unmerged notes"
 msgstr ""
 
-#: builtin/notes.c:746
+#: builtin/notes.c:758
 msgid "finalize notes merge by committing unmerged notes"
 msgstr ""
 
-#: builtin/notes.c:748
+#: builtin/notes.c:760
 msgid "Aborting notes merge resolution"
 msgstr ""
 
-#: builtin/notes.c:750
+#: builtin/notes.c:762
 msgid "abort notes merge"
 msgstr ""
 
-#: builtin/notes.c:845
+#: builtin/notes.c:857
 #, c-format
 msgid "Object %s has no note\n"
 msgstr ""
 
-#: builtin/notes.c:857
+#: builtin/notes.c:869
 msgid "attempt to remove non-existent note is not an error"
 msgstr ""
 
-#: builtin/notes.c:860
+#: builtin/notes.c:872
 msgid "read object names from the standard input"
 msgstr ""
 
-#: builtin/notes.c:941
+#: builtin/notes.c:953
 msgid "notes-ref"
 msgstr ""
 
-#: builtin/notes.c:942
+#: builtin/notes.c:954
 msgid "use notes from <notes_ref>"
 msgstr ""
 
-#: builtin/notes.c:977 builtin/remote.c:1624
+#: builtin/notes.c:989 builtin/remote.c:1624
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr ""
@@ -7841,7 +7869,7 @@ msgstr ""
 msgid "--all and --mirror are incompatible"
 msgstr ""
 
-#: builtin/push.c:493
+#: builtin/push.c:493 glossary.h:61
 msgid "repository"
 msgstr ""
 
@@ -8483,71 +8511,71 @@ msgstr ""
 msgid "git repack [options]"
 msgstr ""
 
-#: builtin/repack.c:160
+#: builtin/repack.c:159
 msgid "pack everything in a single pack"
 msgstr ""
 
-#: builtin/repack.c:162
+#: builtin/repack.c:161
 msgid "same as -a, and turn unreachable objects loose"
 msgstr ""
 
-#: builtin/repack.c:165
+#: builtin/repack.c:164
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr ""
 
-#: builtin/repack.c:167
+#: builtin/repack.c:166
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:169
+#: builtin/repack.c:168
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:171
+#: builtin/repack.c:170
 msgid "do not run git-update-server-info"
 msgstr ""
 
-#: builtin/repack.c:174
+#: builtin/repack.c:173
 msgid "pass --local to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:176
+#: builtin/repack.c:175
 msgid "write bitmap index"
 msgstr ""
 
-#: builtin/repack.c:177
+#: builtin/repack.c:176
 msgid "approxidate"
 msgstr ""
 
-#: builtin/repack.c:178
+#: builtin/repack.c:177
 msgid "with -A, do not loosen objects older than this"
 msgstr ""
 
-#: builtin/repack.c:180
+#: builtin/repack.c:179
 msgid "size of the window used for delta compression"
 msgstr ""
 
-#: builtin/repack.c:181 builtin/repack.c:185
+#: builtin/repack.c:180 builtin/repack.c:184
 msgid "bytes"
 msgstr ""
 
-#: builtin/repack.c:182
+#: builtin/repack.c:181
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 
-#: builtin/repack.c:184
+#: builtin/repack.c:183
 msgid "limits the maximum delta depth"
 msgstr ""
 
-#: builtin/repack.c:186
+#: builtin/repack.c:185
 msgid "maximum size of each packfile"
 msgstr ""
 
-#: builtin/repack.c:188
+#: builtin/repack.c:187
 msgid "repack objects in packs marked with .keep"
 msgstr ""
 
-#: builtin/repack.c:374
+#: builtin/repack.c:371
 #, c-format
 msgid "removing '%s' failed"
 msgstr ""
@@ -8669,7 +8697,7 @@ msgstr ""
 msgid "hard"
 msgstr ""
 
-#: builtin/reset.c:34
+#: builtin/reset.c:34 glossary.h:38
 msgid "merge"
 msgstr ""
 
@@ -9656,6 +9684,10 @@ msgstr ""
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr ""
 
+#: rerere.h:27
+msgid "update the index with reused conflict resolution if possible"
+msgstr ""
+
 #: parse-options.h:143
 msgid "expiry-date"
 msgstr ""
@@ -9676,8 +9708,272 @@ msgstr ""
 msgid "use <n> digits to display SHA-1s"
 msgstr ""
 
-#: rerere.h:27
-msgid "update the index with reused conflict resolution if possible"
+#: glossary.h:4
+msgid "alternate object database"
+msgstr ""
+
+#: glossary.h:5
+msgid "bare repository"
+msgstr ""
+
+#: glossary.h:6
+msgid "blob object"
+msgstr ""
+
+#: glossary.h:8
+msgid "cache"
+msgstr ""
+
+#: glossary.h:9
+msgid "chain"
+msgstr ""
+
+#: glossary.h:10
+msgid "changeset"
+msgstr ""
+
+#: glossary.h:11
+msgid "checkout"
+msgstr ""
+
+#: glossary.h:12
+msgid "cherry-picking"
+msgstr ""
+
+#: glossary.h:13
+msgid "clean"
+msgstr ""
+
+#: glossary.h:15
+msgid "commit object"
+msgstr ""
+
+#: glossary.h:16
+msgid "commit-ish (also committish)"
+msgstr ""
+
+#: glossary.h:17
+msgid "core Git"
+msgstr ""
+
+#: glossary.h:18
+msgid "DAG"
+msgstr ""
+
+#: glossary.h:19
+msgid "dangling object"
+msgstr ""
+
+#: glossary.h:21
+msgid "directory"
+msgstr ""
+
+#: glossary.h:22
+msgid "dirty"
+msgstr ""
+
+#: glossary.h:23
+msgid "evil merge"
+msgstr ""
+
+#: glossary.h:24
+msgid "fast-forward"
+msgstr ""
+
+#: glossary.h:25
+msgid "fetch"
+msgstr ""
+
+#: glossary.h:26
+msgid "file system"
+msgstr ""
+
+#: glossary.h:27
+msgid "Git archive"
+msgstr ""
+
+#: glossary.h:28
+msgid "gitfile"
+msgstr ""
+
+#: glossary.h:29
+msgid "grafts"
+msgstr ""
+
+#: glossary.h:30
+msgid "hash"
+msgstr ""
+
+#: glossary.h:31
+msgid "head"
+msgstr ""
+
+#: glossary.h:32
+msgid "HEAD"
+msgstr ""
+
+#: glossary.h:33
+msgid "head ref"
+msgstr ""
+
+#: glossary.h:34
+msgid "hook"
+msgstr ""
+
+#: glossary.h:35
+msgid "index"
+msgstr ""
+
+#: glossary.h:36
+msgid "index entry"
+msgstr ""
+
+#: glossary.h:37
+msgid "master"
+msgstr ""
+
+#: glossary.h:40
+msgid "object database"
+msgstr ""
+
+#: glossary.h:41
+msgid "object identifier"
+msgstr ""
+
+#: glossary.h:42
+msgid "object name"
+msgstr ""
+
+#: glossary.h:44
+msgid "octopus"
+msgstr ""
+
+#: glossary.h:45
+msgid "origin"
+msgstr ""
+
+#: glossary.h:46
+msgid "pack"
+msgstr ""
+
+#: glossary.h:47
+msgid "pack index"
+msgstr ""
+
+#: glossary.h:48
+msgid "pathspec"
+msgstr ""
+
+#: glossary.h:49
+msgid "parent"
+msgstr ""
+
+#: glossary.h:50
+msgid "pickaxe"
+msgstr ""
+
+#: glossary.h:51
+msgid "plumbing"
+msgstr ""
+
+#: glossary.h:52
+msgid "porcelain"
+msgstr ""
+
+#: glossary.h:53
+msgid "pull"
+msgstr ""
+
+#: glossary.h:54
+msgid "push"
+msgstr ""
+
+#: glossary.h:55
+msgid "reachable"
+msgstr ""
+
+#: glossary.h:56
+msgid "rebase"
+msgstr ""
+
+#: glossary.h:57
+msgid "ref"
+msgstr ""
+
+#: glossary.h:58
+msgid "reflog"
+msgstr ""
+
+#: glossary.h:60
+msgid "remote-tracking branch"
+msgstr ""
+
+#: glossary.h:62
+msgid "resolve"
+msgstr ""
+
+#: glossary.h:63
+msgid "revision"
+msgstr ""
+
+#: glossary.h:64
+msgid "rewind"
+msgstr ""
+
+#: glossary.h:65
+msgid "SCM"
+msgstr ""
+
+#: glossary.h:66
+msgid "SHA-1"
+msgstr ""
+
+#: glossary.h:67
+msgid "shallow repository"
+msgstr ""
+
+#: glossary.h:68
+msgid "symref"
+msgstr ""
+
+#: glossary.h:69
+msgid "tag"
+msgstr ""
+
+#: glossary.h:70
+msgid "tag object"
+msgstr ""
+
+#: glossary.h:71
+msgid "topic branch"
+msgstr ""
+
+#: glossary.h:72
+msgid "tree"
+msgstr ""
+
+#: glossary.h:73
+msgid "tree object"
+msgstr ""
+
+#: glossary.h:74
+msgid "tree-ish (also treeish)"
+msgstr ""
+
+#: glossary.h:75
+msgid "unmerged index"
+msgstr ""
+
+#: glossary.h:76
+msgid "unreachable object"
+msgstr ""
+
+#: glossary.h:77
+msgid "upstream branch"
+msgstr ""
+
+#: glossary.h:78
+msgid "working tree"
 msgstr ""
 
 #: git-am.sh:52
-- 
2.2.0.345.g7041aac

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [RFC/PATCH 0/5] git-glossary
  2014-12-08 15:38 [RFC/PATCH 0/5] git-glossary Michael J Gruber
                   ` (3 preceding siblings ...)
  2014-12-08 15:38 ` [RFC/PATCH 4/5] l10n: git-glossary Michael J Gruber
@ 2014-12-08 16:04 ` Michael J Gruber
  2014-12-08 16:16 ` Christian Couder
  5 siblings, 0 replies; 11+ messages in thread
From: Michael J Gruber @ 2014-12-08 16:04 UTC (permalink / raw)
  To: git

Michael J Gruber schrieb am 08.12.2014 um 16:38:
> More and more people use Git in localised setups, which usually means
> mixed localisation setups - not only, but also because of our English
> man pages.
> 
> Here's an attempt at leveraging our current infrastructure for helping
> those poor mixed localisation folks. The idea is to keep the most
> important iterms in the glossary and translate at least these.
> 
> 1/5: generate glossary term list automatically from gitglossary.txt
> 2/5: introduce git-glossary command which helps with lookups
> 3/5: introduce git-glossary.txt, the man page for the command
> 4/5: git.pot update
> 5/5: sample de.po update
> 
> Without 4/5 and 5/5, a few terms from the glossary can be translated
> already by coincidence with localised messages from some git commands.
> 
> Michael J Gruber (5):
>   glossary.h: generate a glossary list from the Makefile
>   glossary: introduce glossary lookup command
>   glossary: man page
>   l10n: git-glossary
>   l10n: de: git-glossary
> 
>  .gitignore                     |    2 +
>  Documentation/git-glossary.txt |   48 ++
>  Makefile                       |    8 +-
>  builtin.h                      |    1 +
>  builtin/glossary.c             |  104 +++
>  command-list.txt               |    1 +
>  generate-glossary.sh           |    8 +
>  git.c                          |    1 +
>  po/de.po                       | 1382 ++++++++++++++++++++++++----------------
>  po/git.pot                     | 1362 +++++++++++++++++++++++----------------
>  10 files changed, 1839 insertions(+), 1078 deletions(-)
>  create mode 100644 Documentation/git-glossary.txt
>  create mode 100644 builtin/glossary.c
>  create mode 100755 generate-glossary.sh

While I did send 5/5 with UTF-8 encoding (or rather: git-sendemail
helpfully did so) it seems it doesn't get through. Anyways, this stuff
is here also:

https://github.com/mjg/git/tree/glossary-cmd

Or rather:

The following changes since commit a0de725a8ff02c1f2a9452c2234bee819242395c:

  Sync with Git 2.2 (2014-11-26 13:20:21 -0800)

are available in the git repository at:

  git://github.com/mjg/git glossary-cmd

for you to fetch changes up to 1265605787662a72c2457be0623a76d4d2a74bc1:

  l10n: de: git-glossary (2014-12-08 16:26:31 +0100)

----------------------------------------------------------------
Michael J Gruber (5):
      glossary.h: generate a glossary list from the Makefile
      glossary: introduce glossary lookup command
      glossary: man page
      l10n: git-glossary
      l10n: de: git-glossary

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC/PATCH 0/5] git-glossary
  2014-12-08 15:38 [RFC/PATCH 0/5] git-glossary Michael J Gruber
                   ` (4 preceding siblings ...)
  2014-12-08 16:04 ` [RFC/PATCH 0/5] git-glossary Michael J Gruber
@ 2014-12-08 16:16 ` Christian Couder
  2014-12-08 16:41   ` Michael J Gruber
  5 siblings, 1 reply; 11+ messages in thread
From: Christian Couder @ 2014-12-08 16:16 UTC (permalink / raw)
  To: Michael J Gruber; +Cc: git

On Mon, Dec 8, 2014 at 4:38 PM, Michael J Gruber
<git@drmicha.warpmail.net> wrote:
> More and more people use Git in localised setups, which usually means
> mixed localisation setups - not only, but also because of our English
> man pages.
>
> Here's an attempt at leveraging our current infrastructure for helping
> those poor mixed localisation folks. The idea is to keep the most
> important iterms in the glossary and translate at least these.

If the problem is related to all the man pages, shouldn't the solution
apply to all the man pages?

> 1/5: generate glossary term list automatically from gitglossary.txt
> 2/5: introduce git-glossary command which helps with lookups

Couldn't you improve git-help ?

Thanks,
Christian.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC/PATCH 0/5] git-glossary
  2014-12-08 16:16 ` Christian Couder
@ 2014-12-08 16:41   ` Michael J Gruber
  0 siblings, 0 replies; 11+ messages in thread
From: Michael J Gruber @ 2014-12-08 16:41 UTC (permalink / raw)
  To: Christian Couder; +Cc: git

Christian Couder schrieb am 08.12.2014 um 17:16:
> On Mon, Dec 8, 2014 at 4:38 PM, Michael J Gruber
> <git@drmicha.warpmail.net> wrote:
>> More and more people use Git in localised setups, which usually means
>> mixed localisation setups - not only, but also because of our English
>> man pages.
>>
>> Here's an attempt at leveraging our current infrastructure for helping
>> those poor mixed localisation folks. The idea is to keep the most
>> important iterms in the glossary and translate at least these.
> 
> If the problem is related to all the man pages, shouldn't the solution
> apply to all the man pages?

Huh? I'm not going to translate the man pages.

This is about providing a localised glossary. It just so happens that we
have a glossary as a man page already, so I'm leveraging it.

>> 1/5: generate glossary term list automatically from gitglossary.txt
>> 2/5: introduce git-glossary command which helps with lookups
> 
> Couldn't you improve git-help ?

I think git help is good as is.

Or do you suggest integrating the glossary lookup command in "git help"?
For my taste, "git help" does a lot of magic already (in terms of
revolving "foo" in "git help foo"). What it does not do is translating.
Integrating "glossary" in "help" would require the use of mode changing
options to get the same functionality as "git glossary" and "git
glossary foo". So, git help is really for help about commands, and git
younameit for localised help about terms.

Michael

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC/PATCH 2/5] glossary: introduce glossary lookup command
  2014-12-08 15:38 ` [RFC/PATCH 2/5] glossary: introduce glossary lookup command Michael J Gruber
@ 2014-12-10 22:50   ` Junio C Hamano
  2014-12-11 15:23     ` Michael J Gruber
  0 siblings, 1 reply; 11+ messages in thread
From: Junio C Hamano @ 2014-12-10 22:50 UTC (permalink / raw)
  To: Michael J Gruber; +Cc: git

Michael J Gruber <git@drmicha.warpmail.net> writes:

> When using a localised git, there are many reasons why a correspondence
> between English and localised git terms is needed:
> - connect localised messages with English ones (porcelain vs. plumbing)
> - connect localised messages with English man pages or online docs
> - help out someone in a different locale
>
> Introduce a `git glossary' command that leverages the existing infrastructure
> in three possible ways:
> - `git glossary' lists all glossary terms along with their translation
> - `git glossary foo' matches `foo' in the glossary (both English and
>   localisation; partial matches shown)
> - `git glossary -a foo' matches `foo' in the git message catalogue
>   (English, exact match only).
>
> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
> ---
> Some bike-shedding expected regarding the interface...
> Once I've learned how to test l10n stuff, this will be amended.

This is interesting.

I wondered if we want to also have the associated documentation in
response to a query, but I am not sure how well that would go
without having a translated glossary at least.  I.e. pulling the
original from glossary-content.txt would produce something like
this:

	$ LANG=de git glossary -l blob object
        Blob-Objekten
	Untyped <<def_object,object>>, e.g. the contents of a file.

which is not ideal.

I noticed that you allow querying more than one term from the
command line, so the above example would not work quite well, as we
would end up querying "blob" and then "object", not a single term
"blob object" which does have N_() translation in <glossary.h>.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC/PATCH 2/5] glossary: introduce glossary lookup command
  2014-12-10 22:50   ` Junio C Hamano
@ 2014-12-11 15:23     ` Michael J Gruber
  2014-12-11 20:06       ` Junio C Hamano
  0 siblings, 1 reply; 11+ messages in thread
From: Michael J Gruber @ 2014-12-11 15:23 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Junio C Hamano schrieb am 10.12.2014 um 23:50:
> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
>> When using a localised git, there are many reasons why a correspondence
>> between English and localised git terms is needed:
>> - connect localised messages with English ones (porcelain vs. plumbing)
>> - connect localised messages with English man pages or online docs
>> - help out someone in a different locale
>>
>> Introduce a `git glossary' command that leverages the existing infrastructure
>> in three possible ways:
>> - `git glossary' lists all glossary terms along with their translation
>> - `git glossary foo' matches `foo' in the glossary (both English and
>>   localisation; partial matches shown)
>> - `git glossary -a foo' matches `foo' in the git message catalogue
>>   (English, exact match only).
>>
>> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
>> ---
>> Some bike-shedding expected regarding the interface...
>> Once I've learned how to test l10n stuff, this will be amended.
> 
> This is interesting.
> 
> I wondered if we want to also have the associated documentation in
> response to a query, but I am not sure how well that would go
> without having a translated glossary at least.  I.e. pulling the

Yes, I think we would need something different then. The glossary
entries are asciidoc which we can't format easily from the glossary
command. I really think of the glossary command as being orthogonal to
the definitory glossary. I guess I should name it "translate" instead.

It's just that I don't know how to do the translation from the locale
back to English for stuff in the message catalogue (i.e. how to search
the translations), unless I list the msgids the way I do for the
glossary terms. It could be any list of terms. The glossary seemed to be
a good place for that list of most important terms which users may want
to translate both ways.

> original from glossary-content.txt would produce something like
> this:
> 
> 	$ LANG=de git glossary -l blob object
>         Blob-Objekten
> 	Untyped <<def_object,object>>, e.g. the contents of a file.
> 
> which is not ideal.
> 
> I noticed that you allow querying more than one term from the
> command line, so the above example would not work quite well, as we
> would end up querying "blob" and then "object", not a single term
> "blob object" which does have N_() translation in <glossary.h>.

Exactly, one would need to query for "blob object". Or we concatenate
arguments automatically, but I think being able to query multiple terms
(also) is more useful.

Michael

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC/PATCH 2/5] glossary: introduce glossary lookup command
  2014-12-11 15:23     ` Michael J Gruber
@ 2014-12-11 20:06       ` Junio C Hamano
  0 siblings, 0 replies; 11+ messages in thread
From: Junio C Hamano @ 2014-12-11 20:06 UTC (permalink / raw)
  To: Michael J Gruber; +Cc: git

Michael J Gruber <git@drmicha.warpmail.net> writes:

>> I wondered if we want to also have the associated documentation in
>> response to a query, but I am not sure how well that would go
>> without having a translated glossary at least.  I.e. pulling the
>
> Yes, I think we would need something different then. The glossary
> entries are asciidoc which we can't format easily from the glossary
> command. I really think of the glossary command as being orthogonal to
> the definitory glossary. I guess I should name it "translate" instead.
> ...
>
>> original from glossary-content.txt would produce something like
>> this:
>> 
>> 	$ LANG=de git glossary -l blob object
>>         Blob-Objekten
>> 	Untyped <<def_object,object>>, e.g. the contents of a file.
>> 
>> which is not ideal.

I didn't mean the AsciiDoc part, though.  I meant that the contents
are not in LANG=de, which is not ideal.  So translating "blob object"
to whatever it is called in LANG=de, without the description, is the
best we can do without having a translated documentation set.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2014-12-11 20:07 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-08 15:38 [RFC/PATCH 0/5] git-glossary Michael J Gruber
2014-12-08 15:38 ` [RFC/PATCH 1/5] glossary.h: generate a glossary list from the Makefile Michael J Gruber
2014-12-08 15:38 ` [RFC/PATCH 2/5] glossary: introduce glossary lookup command Michael J Gruber
2014-12-10 22:50   ` Junio C Hamano
2014-12-11 15:23     ` Michael J Gruber
2014-12-11 20:06       ` Junio C Hamano
2014-12-08 15:38 ` [RFC/PATCH 3/5] glossary: man page Michael J Gruber
2014-12-08 15:38 ` [RFC/PATCH 4/5] l10n: git-glossary Michael J Gruber
2014-12-08 16:04 ` [RFC/PATCH 0/5] git-glossary Michael J Gruber
2014-12-08 16:16 ` Christian Couder
2014-12-08 16:41   ` Michael J Gruber

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).