git-cli.txt: clarify "options first and then args"
There are some commands permit the user whether to provide options
first before args, or the reverse order. For example:
    git push --dry-run <remote> <ref>
And:
    git push <remote> <ref> --dry-run
Both of them is supported, but some commands do not, for instance:
     git ls-remote --heads <remote>
And:
     git ls-remote <remote> --heads
If <remote> only has one ref and it's name is "refs/heads/--heads", you
will get the same result, otherwise will not.This is because the former
in the second example will parse "--heads" as an "option" which means
to limit to only "refs/heads" when listing the remote references, the
latter treat "--heads" as an argument which means to filter the result
list with the given pattern.
Therefore, we want to specify a bit more in "gitcli.txt" about the way
we recommend and help to resolve the ambiguity around some git command
usage. The related disscussions locate at [1].
By the way, there are some issues with lowercase letters in the document,
which have been modified together.
[1] https://public-inbox.org/git/cover.1642129840.git.dyroneteng@gmail.com/
Signed-off-by: Teng Long <dyroneteng@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									e9d7761bb9
								
							
						
					
					
						commit
						c11f95010c
					
				|  | @ -19,6 +19,15 @@ Many commands take revisions (most often "commits", but sometimes | ||||||
| "tree-ish", depending on the context and command) and paths as their | "tree-ish", depending on the context and command) and paths as their | ||||||
| arguments.  Here are the rules: | arguments.  Here are the rules: | ||||||
|  |  | ||||||
|  |  * Options come first and then args. | ||||||
|  |     A subcommand may take dashed options (which may take their own | ||||||
|  |     arguments, e.g. "--max-parents 2") and arguments.  You SHOULD | ||||||
|  |     give dashed options first and then arguments.  Some commands may | ||||||
|  |     accept dashed options after you have already gave non-option | ||||||
|  |     arguments (which may make the command ambiguous), but you should | ||||||
|  |     not rely on it (because eventually we may find a way to fix | ||||||
|  |     these ambiguity by enforcing the "options then args" rule). | ||||||
|  |  | ||||||
|  * Revisions come first and then paths. |  * Revisions come first and then paths. | ||||||
|    E.g. in `git diff v1.0 v2.0 arch/x86 include/asm-x86`, |    E.g. in `git diff v1.0 v2.0 arch/x86 include/asm-x86`, | ||||||
|    `v1.0` and `v2.0` are revisions and `arch/x86` and `include/asm-x86` |    `v1.0` and `v2.0` are revisions and `arch/x86` and `include/asm-x86` | ||||||
|  | @ -72,24 +81,24 @@ you will. | ||||||
| Here are the rules regarding the "flags" that you should follow when you are | Here are the rules regarding the "flags" that you should follow when you are | ||||||
| scripting Git: | scripting Git: | ||||||
|  |  | ||||||
|  * it's preferred to use the non-dashed form of Git commands, which means that |  * It's preferred to use the non-dashed form of Git commands, which means that | ||||||
|    you should prefer `git foo` to `git-foo`. |    you should prefer `git foo` to `git-foo`. | ||||||
|  |  | ||||||
|  * splitting short options to separate words (prefer `git foo -a -b` |  * Splitting short options to separate words (prefer `git foo -a -b` | ||||||
|    to `git foo -ab`, the latter may not even work). |    to `git foo -ab`, the latter may not even work). | ||||||
|  |  | ||||||
|  * when a command-line option takes an argument, use the 'stuck' form.  In |  * When a command-line option takes an argument, use the 'stuck' form.  In | ||||||
|    other words, write `git foo -oArg` instead of `git foo -o Arg` for short |    other words, write `git foo -oArg` instead of `git foo -o Arg` for short | ||||||
|    options, and `git foo --long-opt=Arg` instead of `git foo --long-opt Arg` |    options, and `git foo --long-opt=Arg` instead of `git foo --long-opt Arg` | ||||||
|    for long options.  An option that takes optional option-argument must be |    for long options.  An option that takes optional option-argument must be | ||||||
|    written in the 'stuck' form. |    written in the 'stuck' form. | ||||||
|  |  | ||||||
|  * when you give a revision parameter to a command, make sure the parameter is |  * 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 |    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 |    `git log -1 HEAD` but write `git log -1 HEAD --`; the former will not work | ||||||
|    if you happen to have a file called `HEAD` in the work tree. |    if you happen to have a file called `HEAD` in the work tree. | ||||||
|  |  | ||||||
|  * many commands allow a long option `--option` to be abbreviated |  * Many commands allow a long option `--option` to be abbreviated | ||||||
|    only to their unique prefix (e.g. if there is no other option |    only to their unique prefix (e.g. if there is no other option | ||||||
|    whose name begins with `opt`, you may be able to spell `--opt` to |    whose name begins with `opt`, you may be able to spell `--opt` to | ||||||
|    invoke the `--option` flag), but you should fully spell them out |    invoke the `--option` flag), but you should fully spell them out | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Teng Long
						Teng Long