Change the behavior of "git -v" to be synonymous with "--version" /
"version", and "git -h" to be synonymous with "--help", but not "help".

These shorthands both display the "unknown option" message. Following
this change, "-v" displays the version, and "-h" displays the help text
of the "git" command.

It should be noted that the "-v" shorthand could be misinterpreted by
the user to mean "verbose" instead of "version", since some sub-commands
make use of it in this context. The top-level "git" command does not
have a "verbose" flag, so it's safe to introduce this shorthand
unambiguously.

Signed-off-by: Garrit Franke <garrit@slashdev.space>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Garrit Franke 2022-03-31 23:27:09 +02:00 коммит произвёл Junio C Hamano
Родитель 4b6846d9dc
Коммит 6b52f48b8f
3 изменённых файлов: 11 добавлений и 6 удалений

Просмотреть файл

@ -9,7 +9,7 @@ git - the stupid content tracker
SYNOPSIS SYNOPSIS
-------- --------
[verse] [verse]
'git' [--version] [--help] [-C <path>] [-c <name>=<value>] 'git' [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare] [-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
@ -39,6 +39,7 @@ or https://git-scm.com/docs.
OPTIONS OPTIONS
------- -------
-v::
--version:: --version::
Prints the Git suite version that the 'git' program came from. Prints the Git suite version that the 'git' program came from.
+ +
@ -46,6 +47,7 @@ This option is internally converted to `git version ...` and accepts
the same options as the linkgit:git-version[1] command. If `--help` is the same options as the linkgit:git-version[1] command. If `--help` is
also given, it takes precedence over `--version`. also given, it takes precedence over `--version`.
-h::
--help:: --help::
Prints the synopsis and a list of the most commonly used Prints the synopsis and a list of the most commonly used
commands. If the option `--all` or `-a` is given then all commands. If the option `--all` or `-a` is given then all

11
git.c
Просмотреть файл

@ -25,7 +25,7 @@ struct cmd_struct {
}; };
const char git_usage_string[] = const char git_usage_string[] =
N_("git [--version] [--help] [-C <path>] [-c <name>=<value>]\n" N_("git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]\n"
" [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n" " [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
" [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n" " [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n"
" [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n" " [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
@ -146,7 +146,8 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
* commands can be written with "--" prepended * commands can be written with "--" prepended
* to make them look like flags. * to make them look like flags.
*/ */
if (!strcmp(cmd, "--help") || !strcmp(cmd, "--version")) if (!strcmp(cmd, "--help") || !strcmp(cmd, "-h") ||
!strcmp(cmd, "--version") || !strcmp(cmd, "-v"))
break; break;
/* /*
@ -892,8 +893,10 @@ int cmd_main(int argc, const char **argv)
argc--; argc--;
handle_options(&argv, &argc, NULL); handle_options(&argv, &argc, NULL);
if (argc > 0) { if (argc > 0) {
/* translate --help and --version into commands */ if (!strcmp("--version", argv[0]) || !strcmp("-v", argv[0]))
skip_prefix(argv[0], "--", &argv[0]); argv[0] = "version";
else if (!strcmp("--help", argv[0]) || !strcmp("-h", argv[0]))
argv[0] = "help";
} else { } else {
/* The user didn't specify a command; give them help */ /* The user didn't specify a command; give them help */
commit_pager_choice(); commit_pager_choice();

Просмотреть файл

@ -181,7 +181,7 @@ for cmd in git "git help"
do do
test_expect_success "'$cmd' section spacing" ' test_expect_success "'$cmd' section spacing" '
test_section_spacing_trailer git help <<-\EOF && test_section_spacing_trailer git help <<-\EOF &&
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
These are common Git commands used in various situations: These are common Git commands used in various situations: