Browse Source

Merge branch 'dw/diff-no-index-doc'

When the user types "git diff" outside a working tree, thinking he
is inside one, the current error message that is a single-liner
"usage: git diff --no-index <path> <path>" may not be sufficient to
make him realize the mistake. Add "Not a git repository" to the
error message when we fell into the "--no-index" mode without an
explicit command line option to instruct us to do so.

* dw/diff-no-index-doc:
  diff --no-index: describe in a separate paragraph
  diff --no-index: clarify operation when not inside a repository
maint
Junio C Hamano 11 years ago
parent
commit
cd8c891b74
  1. 13
      Documentation/git-diff.txt
  2. 14
      diff-no-index.c

13
Documentation/git-diff.txt

@ -28,10 +28,15 @@ two blob objects, or changes between two files on disk. @@ -28,10 +28,15 @@ two blob objects, or changes between two files on disk.
words, the differences are what you _could_ tell Git to
further add to the index but you still haven't. You can
stage these changes by using linkgit:git-add[1].
+
If exactly two paths are given and at least one points outside
the current repository, 'git diff' will compare the two files /
directories. This behavior can be forced by --no-index.

'git diff' --no-index [--options] [--] [<path>...]::

This form is to compare the given two paths on the
filesystem. You can omit the `--no-index` option when
running the command in a working tree controlled by Git and
at least one of the paths points outside the working tree,
or when running the command outside a working tree
controlled by Git.

'git diff' [--options] --cached [<commit>] [--] [<path>...]::


14
diff-no-index.c

@ -215,9 +215,21 @@ void diff_no_index(struct rev_info *revs, @@ -215,9 +215,21 @@ void diff_no_index(struct rev_info *revs,
path_inside_repo(prefix, argv[i+1])))
return;
}
if (argc != i + 2)
if (argc != i + 2) {
if (!no_index) {
/*
* There was no --no-index and there were not two
* paths. It is possible that the user intended
* to do an inside-repository operation.
*/
fprintf(stderr, "Not a git repository\n");
fprintf(stderr,
"To compare two paths outside a working tree:\n");
}
/* Give the usage message for non-repository usage and exit. */
usagef("git diff %s <path> <path>",
no_index ? "--no-index" : "[--no-index]");
}

diff_setup(&revs->diffopt);
for (i = 1; i < argc - 2; ) {

Loading…
Cancel
Save