From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org, Eric Sunshine <sunshine@sunshineco.com>
Subject: [PATCH v2] doc: option value may be separate for valid reasons
Date: Mon, 25 Nov 2024 12:14:01 +0900 [thread overview]
Message-ID: <xmqqh67w6m4m.fsf@gitster.g> (raw)
In-Reply-To: <xmqqjzct9db8.fsf@gitster.g> (Junio C. Hamano's message of "Sun, 24 Nov 2024 18:43:55 +0900")
Even though `git help cli` recommends users to prefer using
"--option=value" over "--option value", there can be reasons why
giving them separately is a good idea. One reason is that shells do
not perform tilde expansion for `--option=~/path/name` but they
expand `--options ~/path/name` just fine.
This is not a problem for many options whose option parsing is
properly written using OPT_FILENAME(), because the value given to
OPT_FILENAME() is tilde-expanded internally by us, but some commands
take a pathname as a mere string, which needs this trick to have the
shell help us.
I think the reason we originally decided to recommend the stuck form
was because an option that takes an optional value requires you to
use it in the stuck form, and it is one less thing for users to
worry about if they get into the habit to always use the stuck form.
But we should be discouraging ourselves from adding an option with
an optional value in the first place, and we might want to weaken
the current recommendation.
In any case, let's describe this one case where it is necessary to
use the separate form, with an example.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/gitcli.txt | 9 +++++++++
Documentation/gitcredentials.txt | 6 ++++++
2 files changed, 15 insertions(+)
diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.txt
index 7c709324ba..bd62cbd043 100644
--- a/Documentation/gitcli.txt
+++ b/Documentation/gitcli.txt
@@ -90,6 +90,15 @@ scripting Git:
for long options. An option that takes optional option-argument must be
written in the 'stuck' form.
+ * Despite the above suggestion, when Arg is a path relative to the
+ home directory of a user, e.g. ~/directory/file or ~u/d/f, you
+ may want to use the separate form, e.g. `git foo --file ~/mine`,
+ not `git foo --file=~/mine`. The shell will expand `~/` in the
+ former to your home directory, but most shells keep the tilde in
+ the latter. Some of our commands know how to tilde-expand the
+ option value even when given in the stuck form, but not all of
+ them do.
+
* When you give a revision parameter to a command, make sure the parameter is
not ambiguous with a name of a file in the work tree. E.g. do not write
`git log -1 HEAD` but write `git log -1 HEAD --`; the former will not work
diff --git a/Documentation/gitcredentials.txt b/Documentation/gitcredentials.txt
index 71dd19731a..35a7452c8f 100644
--- a/Documentation/gitcredentials.txt
+++ b/Documentation/gitcredentials.txt
@@ -242,6 +242,12 @@ Here are some example specifications:
[credential]
helper = "foo --bar='whitespace arg'"
+# store helper (discouraged) with custom location for the db file;
+# use `--file ~/.git-secret.txt`, rather than `--file=~/.git-secret.txt`,
+# to allow the shell to expand tilde to the home directory.
+[credential]
+ helper = "store --file ~/.git-secret.txt"
+
# you can also use an absolute path, which will not use the git wrapper
[credential]
helper = "/path/to/my/helper --with-arguments"
Interdiff:
diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.txt
index e484be9a36..bd62cbd043 100644
--- a/Documentation/gitcli.txt
+++ b/Documentation/gitcli.txt
@@ -92,13 +92,12 @@ scripting Git:
* Despite the above suggestion, when Arg is a path relative to the
home directory of a user, e.g. ~/directory/file or ~u/d/f, you
- may want to use the separate form, e.g. `git credential-store
- --file ~/sec/rit`, not `git credential-store --file=~/sec/rit`.
- The shell will expand `~/` in the former to your home directory,
- but most shells keep the tilde in the latter. Some of our
- commands know how to tilde-expand the option value internally,
- but not all. The `--file` option of `credential-store` is an
- example that it needs shell's help to tilde-expand its value.
+ may want to use the separate form, e.g. `git foo --file ~/mine`,
+ not `git foo --file=~/mine`. The shell will expand `~/` in the
+ former to your home directory, but most shells keep the tilde in
+ the latter. Some of our commands know how to tilde-expand the
+ option value even when given in the stuck form, but not all of
+ them do.
* When you give a revision parameter to a command, make sure the parameter is
not ambiguous with a name of a file in the work tree. E.g. do not write
diff --git a/Documentation/gitcredentials.txt b/Documentation/gitcredentials.txt
index f6ce923f25..35a7452c8f 100644
--- a/Documentation/gitcredentials.txt
+++ b/Documentation/gitcredentials.txt
@@ -243,7 +243,8 @@ Here are some example specifications:
helper = "foo --bar='whitespace arg'"
# store helper (discouraged) with custom location for the db file;
-# tilde expansion often requires the filename as a separate argument.
+# use `--file ~/.git-secret.txt`, rather than `--file=~/.git-secret.txt`,
+# to allow the shell to expand tilde to the home directory.
[credential]
helper = "store --file ~/.git-secret.txt"
--
2.47.0-496-g788c9fe963
next prev parent reply other threads:[~2024-11-25 3:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-24 9:43 [PATCH] doc: option value may be separate for valid reasons Junio C Hamano
2024-11-24 23:54 ` Eric Sunshine
2024-11-25 3:04 ` Junio C Hamano
2024-11-25 3:14 ` Junio C Hamano [this message]
2024-11-25 3:35 ` [PATCH v2] " Eric Sunshine
2024-11-25 4:49 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqh67w6m4m.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).