Please forgive me if this seems easy, but I only started learning Unix 2 days ago.
Basically, I have been taught that when typing a command into the terminal it needs to be of the form:
[command name][space][-options][space][arguments]
Now I've just started looking at using git, and I've come across the following:
git config --global core.editor "notepad.exe -wl1"
So in this case is git config
the command? How can that work when there is a space in the middle of it? Wouldn't unix get confused and think that config
would be an option?
Also just to confuse matters even more, very often I see a command called git-config
. Is this the same as git config
?
I find it really confusing that in something where precise syntax is very important, these things aren't clearly explained.
Best Answer
It is a good starting point, but "generally" needs to be emphasized. For utility commands it is always a good idea to read the
man utility
page for what is correct syntax.There is a guideline at The Open Group that can be worth a read. However there is varying level of how conforming implementations are. Some implementations allow one to break this convention, but one should try to heed it as it is both safer and usually more portable (for the day you are on another system with a different implementation.)
When you look at
git
and quite a few other tools that is not part of the standard utility package one has to learn the way it is done. The use of command is not unique togit
but also found in others likepactl
/pacmd
,amixer
etc. As pointed out by @mouviciel this command-based design of git is used by most SCM tools, starting with the oldsccs
.Here often
options
are geared towards theprogram
itself, andarguments
towards thecommand
.It is a nice way to divide an extended a subset for a main program/suite/tool-kit working within a domain.
For some it is also given as a short option and by that adhere to the guidelines like e.g.
fdisk -l <device>
Enter vs.fdisk <device>
Enter,l
Enter.When you execute e.g.
git config ...
it is not the shell, butgit
itself that interpret thatconfig
is the command. The use ofgit-config
is more a short way of specifyingconfig
as a git command. Try e.g.man git-config
. By itself it is usually not recognized as a command.For
git
this is also a bit more complex. As it is a tool-kit -> suite, as in many, many commands belonging togit
– it is natural to use a command based implementation. This is a design chosen by the developers ofgit
itself.Further. As it holds a lot of commands, they have divided the commands in several groups where the two main is classified as Plumbing and Porcelain. Also see: What does the term porcelain mean in Git?. The manual page has a ordered grouping starting from
GIT COMMANDS
.Further one can also customize, trough configuration files, what some of the commands do. As an example. You can view differences between commits by
git diff
. This command can be customized in your.gitconfig
. You can specify which diff program to use and how it should be called.To make help for various commands easily accessible one also has the possibility to say:
so
git help commit
, gives you help forgit
'scommit
command.Guess it could help if you see
git
as a command line suite, or even a menu driven command environment. As with a GUI application where you can clickFile->Open->[Some file]
, a command driven suite could havesuite open <file>
.