git diff doesn't quite work as documented?
oklischat@oklischat:/tmp$ mkdir gittest oklischat@oklischat:/tmp$ cd gittest/ oklischat@oklischat:/tmp/gittest$ git init Initialized empty Git repository in /private/tmp/gittest/.git/ oklischat@oklischat:/tmp/gittest$ echo foo > foo.txt oklischat@oklischat:/tmp/gittest$ git add foo.txt oklischat@oklischat:/tmp/gittest$ git commit -m foo [master (root-commit) 54d55f2] foo 1 file changed, 1 insertion(+) create mode 100644 foo.txt oklischat@oklischat:/tmp/gittest$ echo bar > bar.txt oklischat@oklischat:/tmp/gittest$ git add bar.txt oklischat@oklischat:/tmp/gittest$ git commit -m bar [master 83b2e74] bar 1 file changed, 1 insertion(+) create mode 100644 bar.txt oklischat@oklischat:/tmp/gittest$ git tag bar-added oklischat@oklischat:/tmp/gittest$ git rm bar.txt rm 'bar.txt' oklischat@oklischat:/tmp/gittest$ git commit -m 'rm bar' [master 3ca4ff9] rm bar 1 file changed, 1 deletion(-) delete mode 100644 bar.txt oklischat@oklischat:/tmp/gittest$ oklischat@oklischat:/tmp/gittest$ git checkout bar-added -- bar.txt oklischat@oklischat:/tmp/gittest$ git reset HEAD oklischat@oklischat:/tmp/gittest$ git status On branch master Untracked files: (use "git add ..." to include in what will be committed) bar.txt nothing added to commit but untracked files present (use "git add" to track) oklischat@oklischat:/tmp/gittest$ git diff bar-added # would expect this to show no differences diff --git a/bar.txt b/bar.txt deleted file mode 100644 index 5716ca5..000 --- a/bar.txt +++ /dev/null @@ -1 +0,0 @@ -bar oklischat@oklischat:/tmp/gittest$ oklischat@oklischat:/tmp/gittest$ git diff bar-added -- bar.txt # dito diff --git a/bar.txt b/bar.txt deleted file mode 100644 index 5716ca5..000 --- a/bar.txt +++ /dev/null @@ -1 +0,0 @@ -bar oklischat@oklischat:/tmp/gittest$ `git diff --help' says: git diff [--options] [--] [...] This form is to view the changes you have in your working tree relative to the named . If that were entirely true, the last two commands shouldn't have shown any differences, right? On closer inspection, it seems that what `git diff ' really does is take only those paths in the working directory that are also in and compare the resulting tree against . We should add some option to that git diff form to make it really do what the docs claim it does. Or am I missing something?
[PATCH 0/2] git-add: -s flag (silently ignore files)
This adds an -s|--silent-ignore option to git-add, which causes ignored files that were specified explicitly on the command line to be silently ignored, rather than abandoning the command. I found this useful for scenarios where you want to feed the file list into git add via find or other external commands (`find | xargs git add'), which you wouldn't want to carefully tune so they don't output any ignored files. git ls-files doesn't have find's filtering capabilities, and using it in place of find would kind of violate one job one tool anyway. I'm not really a git guru, so maybe I'm missing something, and I'm unsure how useful this new option is for a general audience. OTOH the patch is trivial. Check it out. The update applies on top of master (261b5119). Olaf Klischat (2): git-add: -s flag added (silently ignore files) git-add: -s flag: documentation added Documentation/git-add.txt | 15 +++ builtin/add.c | 14 +++--- t/t3700-add.sh| 17 - 3 files changed, 38 insertions(+), 8 deletions(-) -- 1.7.10.4 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/2] git-add: -s flag: documentation added
Signed-off-by: Olaf Klischat olaf.klisc...@gmail.com --- Documentation/git-add.txt | 15 +++ 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index fd9e36b..a5a1cd1 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -38,10 +38,12 @@ files have changes that are staged for the next commit. The `git add` command will not add ignored files by default. If any ignored files were explicitly specified on the command line, `git add` -will fail with a list of ignored files. Ignored files reached by -directory recursion or filename globbing performed by Git (quote your -globs before the shell) will be silently ignored. The 'git add' command can -be used to add ignored files with the `-f` (force) option. +will fail with a list of ignored files unless the `-s` (silent-ignore) +option was given. Ignored files reached by directory recursion or +filename globbing performed by Git (quote your globs before the shell) +will always be silently ignored. The 'git add' command can be used to +add ignored files with the `-f` (force) option (which is mutually +exclusive with `-s`). Please see linkgit:git-commit[1] for alternative ways to add content to a commit. @@ -69,6 +71,11 @@ OPTIONS --force:: Allow adding otherwise ignored files. +-s:: +--silent-ignore:: + Don't fail if ignored files were specified explicitly; ignore them + silently and continue. + -i:: --interactive:: Add modified contents in the working tree interactively to -- 1.7.10.4 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/2] git-add: -s flag added (silently ignore files)
Signed-off-by: Olaf Klischat olaf.klisc...@gmail.com --- builtin/add.c | 14 +++--- t/t3700-add.sh | 17 - 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/builtin/add.c b/builtin/add.c index e664100..61bb9ce 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -313,7 +313,7 @@ static const char ignore_error[] = N_(The following paths are ignored by one of your .gitignore files:\n); static int verbose = 0, show_only = 0, ignored_too = 0, refresh_only = 0; -static int ignore_add_errors, addremove, intent_to_add, ignore_missing = 0; +static int ignore_add_errors, addremove, intent_to_add, ignore_missing, silent_ignores = 0; static struct option builtin_add_options[] = { OPT__DRY_RUN(show_only, N_(dry run)), @@ -329,6 +329,7 @@ static struct option builtin_add_options[] = { OPT_BOOLEAN( 0 , refresh, refresh_only, N_(don't add, only refresh the index)), OPT_BOOLEAN( 0 , ignore-errors, ignore_add_errors, N_(just skip files which cannot be added because of errors)), OPT_BOOLEAN( 0 , ignore-missing, ignore_missing, N_(check if - even missing - files are ignored in dry run)), + OPT_BOOLEAN('s', silent-ignores, silent_ignores, N_(don't fail when ignored files are specified on the command line (ignore them silently))), OPT_END(), }; @@ -339,6 +340,11 @@ static int add_config(const char *var, const char *value, void *cb) ignore_add_errors = git_config_bool(var, value); return 0; } + if (!strcmp(var, add.silentignores) || + !strcmp(var, add.silent-ignores)) { + silent_ignores = git_config_bool(var, value); + return 0; + } return git_default_config(var, value, cb); } @@ -346,11 +352,11 @@ static int add_files(struct dir_struct *dir, int flags) { int i, exit_status = 0; - if (dir-ignored_nr) { + if (dir-ignored_nr !silent_ignores) { fprintf(stderr, _(ignore_error)); for (i = 0; i dir-ignored_nr; i++) fprintf(stderr, %s\n, dir-ignored[i]-name); - fprintf(stderr, _(Use -f if you really want to add them.\n)); + fprintf(stderr, _(Use -f if you really want to add them, or -s to ignore them silently.\n)); die(_(no files added)); } @@ -390,6 +396,8 @@ int cmd_add(int argc, const char **argv, const char *prefix) if (addremove take_worktree_changes) die(_(-A and -u are mutually incompatible)); + if (ignored_too silent_ignores) + die(_(-f and -s are mutually incompatible)); if (!show_only ignore_missing) die(_(Option --ignore-missing can only be used together with --dry-run)); if ((addremove || take_worktree_changes) !argc) { diff --git a/t/t3700-add.sh b/t/t3700-add.sh index 874b3a6..1e17ae2 100755 --- a/t/t3700-add.sh +++ b/t/t3700-add.sh @@ -294,7 +294,7 @@ test_expect_success 'git add --dry-run of an existing file output' cat expect.err \EOF The following paths are ignored by one of your .gitignore files: ignored-file -Use -f if you really want to add them. +Use -f if you really want to add them, or -s to ignore them silently. fatal: no files added EOF cat expect.out \EOF @@ -310,4 +310,19 @@ test_expect_success 'git add --dry-run --ignore-missing of non-existing file out test_i18ncmp expect.err actual.err ' +cat expect.err \EOF +EOF +cat expect.out \EOF +add 'track-this' +EOF + +test_expect_success 'git add --dry-run --silent-ignore --ignore-missing of non-existing file' ' + git add --dry-run --silent-ignore --ignore-missing track-this ignored-file actual.out 2actual.err +' + +test_expect_success 'git add --dry-run --silent-ignore --ignore-missing of non-existing file output' ' + test_i18ncmp expect.out actual.out + test_i18ncmp expect.err actual.err +' + test_done -- 1.7.10.4 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html