gitcli: contrast wildcard given to shell and to git
authorJunio C Hamano <gitster@pobox.com>
Fri, 7 Sep 2012 20:49:15 +0000 (13:49 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 10 Sep 2012 19:59:36 +0000 (12:59 -0700)
People who are not used to working with shell may intellectually
understand how the command line argument is massaged by the shell
but still have a hard time visualizing the difference between
letting the shell expand fileglobs and having Git see the fileglob
to use as a pathspec.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/gitcli.txt

index c4edf042d4814f73ba4bf581f8c63c821ba13bbc..00b8403225de981e7180b93feb508dae75035640 100644 (file)
@@ -42,6 +42,23 @@ When writing a script that is expected to handle random user-input, it is
 a good practice to make it explicit which arguments are which by placing
 disambiguating `--` at appropriate places.
 
+ * Many commands allow wildcards in paths, but you need to protect
+   them from getting globbed by the shell.  These two mean different
+   things:
++
+--------------------------------
+$ git checkout -- *.c
+$ git checkout -- \*.c
+--------------------------------
++
+The former lets your shell expand the fileglob, and you are asking
+the dot-C files in your working tree to be overwritten with the version
+in the index.  The latter passes the `*.c` to Git, and you are asking
+the paths in the index that match the pattern to be checked out to your
+working tree.  After running `git add hello.c; rm hello.c`, you will _not_
+see `hello.c` in your working tree with the former, but with the latter
+you will.
+
 Here are the rules regarding the "flags" that you should follow when you are
 scripting git: